| # Check that BOLT marks segment containing .bolt_reserved as executable |
| |
| # RUN: split-file %s %t |
| # RUN: %clang %cflags %t/src.c -Wl,--script=%t/ld.script -Wl,-q -o %t.exe |
| |
| # Confirm the segment is not executable |
| # RUN: llvm-readelf -We %t.exe | FileCheck %s --check-prefix=CHECK-SEG-BEFORE |
| |
| # Capture section VMA and offset |
| # CHECK-SEG-BEFORE: Section Headers: |
| # CHECK-SEG-BEFORE: .bolt.reserved PROGBITS [[#ADDR:]] [[#OFF:]] |
| |
| # Config segment flags |
| # CHECK-SEG-BEFORE: Program Headers: |
| # CHECK-SEG-BEFORE: LOAD 0x{{0*}}[[#OFF]] 0x{{0*}}[[#ADDR]] {{.*}} R 0x200000 |
| |
| # RUN: llvm-bolt %t.exe -o %t.bolt |
| # Confirm the segment is now marked as executable |
| # RUN: llvm-readelf -We %t.bolt | FileCheck %s --check-prefix=CHECK-SEG-AFTER |
| # CHECK-SEG-AFTER: .bolt.reserved PROGBITS [[#ADDR:]] [[#OFF:]] |
| # CHECK-SEG-AFTER: LOAD 0x{{0*}}[[#OFF]] 0x{{0*}}[[#ADDR]] {{.*}} R E 0x200000 |
| |
| #--- src.c |
| int main() { return 0; } |
| |
| #--- ld.script |
| SECTIONS { |
| .bolt.reserved : ALIGN(2M) { |
| __bolt_reserved_start = .; |
| . += 2M; |
| __bolt_reserved_end = .; |
| } |
| } INSERT AFTER .text; |