[compiler-rt] [profile] Make the binary-id-offset.c test more robust (PR #117647)

via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 25 16:10:30 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-pgo

Author: Josh Stone (cuviper)

<details>
<summary>Changes</summary>

Using a `--section-start` address in the test was causing link errors on
some targets. Now it uses a linker script to move the note after `.bss`,
which should still have the kind of memory offset we're looking for.

This is a follow-up to #<!-- -->114907 to fix buildbot errors.


---
Full diff: https://github.com/llvm/llvm-project/pull/117647.diff


1 Files Affected:

- (modified) compiler-rt/test/profile/Linux/binary-id-offset.c (+14-9) 


``````````diff
diff --git a/compiler-rt/test/profile/Linux/binary-id-offset.c b/compiler-rt/test/profile/Linux/binary-id-offset.c
index c66fe82d714ce9..dd4ce7dc4d03d2 100644
--- a/compiler-rt/test/profile/Linux/binary-id-offset.c
+++ b/compiler-rt/test/profile/Linux/binary-id-offset.c
@@ -1,15 +1,15 @@
-// REQUIRES: linux
+// REQUIRES: linux, lld-available
 //
 // Make sure the build-id can be found in both EXEC and DYN (PIE) files,
-// even when the note's section-start is forced to a weird address.
+// even when the note has been loaded at an offset address in memory.
 // (The DYN case would also apply to libraries, not explicitly tested here.)
 
 // DEFINE: %{cflags} =
-// DEFINE: %{check} = (                                             \
-// DEFINE:     %clang_profgen -Wl,--build-id -o %t %s %{cflags}  && \
-// DEFINE:     env LLVM_PROFILE_FILE=%t.profraw %run %t          && \
-// DEFINE:     llvm-readelf --notes %t                           && \
-// DEFINE:     llvm-profdata show --binary-ids %t.profraw           \
+// DEFINE: %{check} = (                                                           \
+// DEFINE:     %clang_profgen -fuse-ld=lld -Wl,--build-id -o %t %s %{cflags}   && \
+// DEFINE:     env LLVM_PROFILE_FILE=%t.profraw %run %t                        && \
+// DEFINE:     llvm-readelf --notes %t                                         && \
+// DEFINE:     llvm-profdata show --binary-ids %t.profraw                         \
 // DEFINE:   ) | FileCheck %s
 
 // REDEFINE: %{cflags} = -no-pie
@@ -18,15 +18,20 @@
 // REDEFINE: %{cflags} = -pie -fPIE
 // RUN: %{check}
 
-// REDEFINE: %{cflags} = -no-pie -Wl,--section-start=.note.gnu.build-id=0x1000000
+// Moving the note after .bss also gives it extra LOAD segment padding,
+// making its memory offset different than its file offset.
+// RUN: echo "SECTIONS { .note.gnu.build-id : {} } INSERT AFTER .bss;" >%t.script
+
+// REDEFINE: %{cflags} = -no-pie -Wl,--script=%t.script
 // RUN: %{check}
 
-// REDEFINE: %{cflags} = -pie -fPIE -Wl,--section-start=.note.gnu.build-id=0x1000000
+// REDEFINE: %{cflags} = -pie -fPIE -Wl,--script=%t.script
 // RUN: %{check}
 
 // CHECK-LABEL{LITERAL}: .note.gnu.build-id
 // CHECK: Build ID: [[ID:[0-9a-f]+]]
 
+// CHECK-LABEL{LITERAL}: Instrumentation level: Front-end
 // CHECK-LABEL{LITERAL}: Binary IDs:
 // CHECK-NEXT: [[ID]]
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/117647


More information about the llvm-commits mailing list