forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reapply "[BOLT] Add --pad-funcs-before=func:n (llvm#117924)" (llvm#12…
…1918) - **Reapply "[BOLT] Add --pad-funcs-before=func:n (llvm#117924)"** - **[BOLT] Fix --pad-funcs{,-before} state misinteraction** When --pad-funcs-before was introduced, it introduced a bug whereby the first one to get parsed could influence the other. Ensure that each has its own state and test that they don't interact in this manner by testing how the `_subsequent` symbol moves when both arguments are supplied with different padding values. Fixed by having a function (and static state) for each of before/after.
- Loading branch information
1 parent
0d9cf26
commit aa9cc72
Showing
3 changed files
with
104 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
# Test checks that --pad-before-funcs is working as expected. | ||
# It should be able to introduce a configurable offset for the _start symbol. | ||
# It should reject requests which don't obey the code alignment requirement. | ||
|
||
# Tests check inserting padding before _start; and additionally a test where | ||
# padding is inserted after start. In each case, check that the following | ||
# symbol ends up in the expected place as well. | ||
|
||
|
||
# RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown %s -o %t.o | ||
# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -Wl,--section-start=.text=0x4000 | ||
# RUN: llvm-bolt %t.exe -o %t.bolt.0 --pad-funcs-before=_start:0 | ||
# RUN: llvm-bolt %t.exe -o %t.bolt.4 --pad-funcs-before=_start:4 | ||
# RUN: llvm-bolt %t.exe -o %t.bolt.8 --pad-funcs-before=_start:8 | ||
# RUN: llvm-bolt %t.exe -o %t.bolt.4.4 --pad-funcs-before=_start:4 --pad-funcs=_start:4 | ||
# RUN: llvm-bolt %t.exe -o %t.bolt.4.8 --pad-funcs-before=_start:4 --pad-funcs=_start:8 | ||
|
||
# RUN: not llvm-bolt %t.exe -o %t.bolt.8 --pad-funcs-before=_start:1 2>&1 | FileCheck --check-prefix=CHECK-BAD-ALIGN %s | ||
|
||
# CHECK-BAD-ALIGN: user-requested 1 padding bytes before function _start(*2) is not a multiple of the minimum function alignment (4). | ||
|
||
# RUN: llvm-objdump --section=.text --disassemble %t.bolt.0 | FileCheck --check-prefix=CHECK-0 %s | ||
# RUN: llvm-objdump --section=.text --disassemble %t.bolt.4 | FileCheck --check-prefix=CHECK-4 %s | ||
# RUN: llvm-objdump --section=.text --disassemble %t.bolt.8 | FileCheck --check-prefix=CHECK-8 %s | ||
# RUN: llvm-objdump --section=.text --disassemble %t.bolt.4.4 | FileCheck --check-prefix=CHECK-4-4 %s | ||
# RUN: llvm-objdump --section=.text --disassemble %t.bolt.4.8 | FileCheck --check-prefix=CHECK-4-8 %s | ||
|
||
# Trigger relocation mode in bolt. | ||
.reloc 0, R_AARCH64_NONE | ||
|
||
.section .text | ||
|
||
# CHECK-0: 0000000000400000 <_start> | ||
# CHECK-4: 0000000000400004 <_start> | ||
# CHECK-4-4: 0000000000400004 <_start> | ||
# CHECK-8: 0000000000400008 <_start> | ||
.globl _start | ||
_start: | ||
ret | ||
|
||
# CHECK-0: 0000000000400004 <_subsequent> | ||
# CHECK-4: 0000000000400008 <_subsequent> | ||
# CHECK-4-4: 000000000040000c <_subsequent> | ||
# CHECK-4-8: 0000000000400010 <_subsequent> | ||
# CHECK-8: 000000000040000c <_subsequent> | ||
.globl _subsequent | ||
_subsequent: | ||
ret |