[PATCH v1] ld/ELF: Add --image-base command line option to the ELF linker

Alan Modra amodra@gmail.com
Fri Oct 25 03:37:23 GMT 2024


On Fri, Oct 25, 2024 at 01:25:21AM +0000, hakan wrote:
> LLD has dropped the option -Ttext-segment for specifying image base
> addresses, instead forcing the use of the --image-base option for both
> ELF and PE targets. As it stands, GNU LD and LLVM LLD are incompatible,
> having two different options for the same functionality.
> 
> This patch enables the use of --image-base on ELF targets, advancing
> consistency and compatibility.
> 
> See: https://reviews.llvm.org/D70468
>      https://maskray.me/blog/2020-11-15-explain-gnu-linker-options#address-related
>      https://sourceware.org/bugzilla/show_bug.cgi?id=25207
> 
> Moreover, a new test has been added to ensure -z separate-code behaviour
> when used with -Ttext-segment stays the same. When this combination is
> used, -Ttext-segment sets the address of the first segment (R), not the
> text segment (RX), and like with -z noseparate-code, no segments lesser
> than the specified address are created. If this behaviour was to change,
> the first (R) segment of the ELF file would begin in a lesser address
> than the specified text (RX) segment, breaking traditional use of this
> option for specifying image base address.
> 
> ld/
> 	PR 25207
> 	* emultempl/pe.em: Remove redeclaration of --image-base.
> 	* emultempl/pep.em: Ditto.
> 	* emultempl/beos.em: Ditto.
> 	* ldlex.h (enum option_values): Move OPTION_IMAGE_BASE.
> 	* lexsup.c (ld_options): Add --image-base.
> 	(parse_args): On ELF, make --image-base follow -Ttext-segment behaviour.
> 	* ld.texi: Document the new option and re-define -Ttext-segment
> 	with established behaviour.
> 	* testsuite/ld-elf/pr25207.d: New file.
> 	* testsuite/ld-elf/pr25207.s: New file.
> 	* NEWS: Mention the new feature.
> 
> Tested on Linux x86-64, for ELF and PE targets.

The test needs some tweaking.  Fix these fails then the patch is OK.

arc-linux-uclibc  +FAIL: ld-elf/pr25207
bfin-linux-uclibc  +FAIL: ld-elf/pr25207
h8300-linux-gnu  +FAIL: ld-elf/pr25207
hppa64-linux-gnu  +FAIL: ld-elf/pr25207
metag-linux-gnu  +FAIL: ld-elf/pr25207
mips64-linux-gnuabi64  +FAIL: ld-elf/pr25207
mipsel-linux-gnu  +FAIL: ld-elf/pr25207
mipsisa32el-linux-gnu  +FAIL: ld-elf/pr25207
mips-linux-gnu  +FAIL: ld-elf/pr25207
nds32le-linux-gnu  +FAIL: ld-elf/pr25207
sparc64-linux-gnu  +FAIL: ld-elf/pr25207

-- 
Alan Modra


More information about the Binutils mailing list