[llvm] [BOLT, test] Add --image-base to tests that use --section-start (PR #140570)

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Mon May 19 09:27:03 PDT 2025


https://github.com/MaskRay created https://github.com/llvm/llvm-project/pull/140570

When using -no-pie without a SECTIONS command, the linker uses the
target's default image base. If -Ttext= or --section-start specifies an
output section address below this base, the result is likely unintended.
LLD will give a diagnostic (#140187) and may change the behavior in the future.
It's good to set an explicit image base to avoid relying on its current
behavior. BOLT doesn't seem to care whether a PT_PHDR segment is
present.


>From bd46c943045ae965ec94080c6b5894bf0bdac0ff Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Mon, 19 May 2025 09:26:54 -0700
Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?=
 =?UTF-8?q?l=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.5-bogner
---
 bolt/test/AArch64/check-init-not-moved.s | 2 +-
 bolt/test/AArch64/pad-before-funcs.s     | 2 +-
 bolt/test/RISCV/reloc-jt.s               | 2 +-
 bolt/test/X86/double-rel-scan.s          | 2 +-
 bolt/test/X86/double-rel.s               | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/bolt/test/AArch64/check-init-not-moved.s b/bolt/test/AArch64/check-init-not-moved.s
index ad4b80d2e60e2..bea0dbccfc8c0 100644
--- a/bolt/test/AArch64/check-init-not-moved.s
+++ b/bolt/test/AArch64/check-init-not-moved.s
@@ -5,7 +5,7 @@
 # address. Test checks that _init is not moved.
 
 # RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown %s -o %t.o
-# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -static -Wl,--section-start=.data=0x1000 -Wl,--section-start=.init=0x1004
+# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -static -Wl,--image-base=0,-Tdata=0x1000,--section-start=.init=0x1004
 # RUN: llvm-bolt %t.exe -o %t.bolt
 # RUN: llvm-nm %t.exe | FileCheck --check-prefix=CHECK-ORIGINAL %s
 # RUN: llvm-nm %t.bolt | FileCheck --check-prefix=CHECK-BOLTED %s
diff --git a/bolt/test/AArch64/pad-before-funcs.s b/bolt/test/AArch64/pad-before-funcs.s
index c1b92063d6fa4..49b30627ede4f 100644
--- a/bolt/test/AArch64/pad-before-funcs.s
+++ b/bolt/test/AArch64/pad-before-funcs.s
@@ -8,7 +8,7 @@
 
 
 # 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: %clang %cflags %t.o -o %t.exe -Wl,-q -Wl,--image-base=0x3000,--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
diff --git a/bolt/test/RISCV/reloc-jt.s b/bolt/test/RISCV/reloc-jt.s
index 009ce6cca95df..a1fc854f036da 100644
--- a/bolt/test/RISCV/reloc-jt.s
+++ b/bolt/test/RISCV/reloc-jt.s
@@ -1,6 +1,6 @@
 /// NOTE: assign section addresses explicitly to make the symbol difference
 /// calculation below less fragile.
-// RUN: %clang %cflags -Wl,--section-start=.text=0x1000,--section-start=.data=0x2000 -o %t %s
+// RUN: %clang %cflags -Wl,--image-base=0,--section-start=.text=0x1000,--section-start=.data=0x2000 -o %t %s
 // RUN: llvm-bolt -o %t.bolt %t
 // RUN: llvm-readelf -x .data %t.bolt | FileCheck %s
 
diff --git a/bolt/test/X86/double-rel-scan.s b/bolt/test/X86/double-rel-scan.s
index a8318d3c11862..77a55074a938b 100644
--- a/bolt/test/X86/double-rel-scan.s
+++ b/bolt/test/X86/double-rel-scan.s
@@ -6,7 +6,7 @@
 # REQUIRES: system-linux
 
 # RUN: llvm-mc -filetype=obj -triple x86_64-unknown-linux %s -o %t.o
-# RUN: ld.lld %t.o -o %t.exe -q --Ttext=0x80000
+# RUN: ld.lld %t.o -o %t.exe -q --image-base=0x80000 --Ttext=0x80000
 # RUN: llvm-bolt %t.exe --relocs -o %t.bolt --funcs=foo
 # RUN: llvm-objdump -d --print-imm-hex %t.exe \
 # RUN:   | FileCheck %s
diff --git a/bolt/test/X86/double-rel.s b/bolt/test/X86/double-rel.s
index f7754f77e782b..f061515a632e3 100644
--- a/bolt/test/X86/double-rel.s
+++ b/bolt/test/X86/double-rel.s
@@ -5,7 +5,7 @@
 # REQUIRES: system-linux
 
 # RUN: llvm-mc -filetype=obj -triple x86_64-unknown-linux %s -o %t.o
-# RUN: ld.lld %t.o -o %t.exe -q --Tdata=0x80000
+# RUN: ld.lld %t.o -o %t.exe -q --image-base=0x70000 --Tdata=0x80000
 # RUN: llvm-bolt %t.exe --relocs -o %t.null --print-only=_start --print-disasm \
 # RUN:   | FileCheck %s --check-prefix=CHECK-BOLT
 # RUN: llvm-objdump -d --print-imm-hex %t.exe \



More information about the llvm-commits mailing list