1 | // REQUIRES: system-linux |
2 | |
3 | /* |
4 | * Check that llvm-bolt uses reserved space in a binary for allocating |
5 | * new sections. |
6 | */ |
7 | |
8 | // RUN: %clangxx %s -o %t.exe -Wl,-q |
9 | // RUN: llvm-bolt %t.exe -o %t.bolt.exe 2>&1 | FileCheck %s |
10 | // RUN: %t.bolt.exe |
11 | |
12 | // CHECK: BOLT-INFO: using reserved space |
13 | |
14 | /* |
15 | * Check that llvm-bolt detects a condition when the reserved space is |
16 | * not enough for allocating new sections. |
17 | */ |
18 | |
19 | // RUN: %clangxx %s -o %t.tiny.exe -Wl,--no-eh-frame-hdr -Wl,-q -DTINY |
20 | // RUN: not llvm-bolt %t.tiny.exe -o %t.tiny.bolt.exe 2>&1 | \ |
21 | // RUN: FileCheck %s --check-prefix=CHECK-TINY |
22 | |
23 | // CHECK-TINY: BOLT-ERROR: reserved space (1 byte) is smaller than required |
24 | |
25 | #ifdef TINY |
26 | #define RSIZE "1" |
27 | #else |
28 | #define RSIZE "8192 * 1024" |
29 | #endif |
30 | |
31 | asm(".pushsection .text \n\ |
32 | .globl __bolt_reserved_start \n\ |
33 | .type __bolt_reserved_start, @object \n\ |
34 | __bolt_reserved_start: \n\ |
35 | .space " RSIZE " \n\ |
36 | .globl __bolt_reserved_end \n\ |
37 | __bolt_reserved_end: \n\ |
38 | .popsection" ); |
39 | |
40 | int main() { return 0; } |
41 | |