Change the linker's heuristic for computing the entry point for binaries so that shared libraries default to an entry point of 0.

* ldlang.c (lang_end): When computing the entry point, only
	try the start address of the entry section when creating an
	executable.
	* ld.texi (Entry point): Update description of heuristic used to
	choose the entry point.
	testsuite/ld-alpha/tlspic.rd: Update expected entry point address.
	testsuite/ld-arm/tls-gdesc-got.d: Likewise.
	testsuite/ld-i386/tlsnopic.rd: Likewise.
	testsuite/ld-ia64/tlspic.rd: Likewise.
	testsuite/ld-sparc/gotop32.rd: Likewise.
	testsuite/ld-sparc/gotop64.rd: Likewise.
	testsuite/ld-sparc/tlssunnopic32.rd: Likewise.
	testsuite/ld-sparc/tlssunnopic64.rd: Likewise.
	testsuite/ld-sparc/tlssunpic32.rd: Likewise.
	testsuite/ld-sparc/tlssunpic64.rd: Likewise.
	testsuite/ld-tic6x/shlib-1.rd: Likewise.
	testsuite/ld-tic6x/shlib-1b.rd: Likewise.
	testsuite/ld-tic6x/shlib-1r.rd: Likewise.
	testsuite/ld-tic6x/shlib-1rb.rd: Likewise.
	testsuite/ld-tic6x/shlib-noindex.rd: Likewise.
	testsuite/ld-x86-64/pr14207.d: Likewise.
	testsuite/ld-x86-64/tlsdesc.rd: Likewise.
	testsuite/ld-x86-64/tlspic.rd: Likewise.
	testsuite/ld-x86-64/tlspic2.rd: Likewise.
This commit is contained in:
Nick Clifton 2021-09-21 13:21:41 +01:00
parent 5335ab6872
commit 5226a6a892
22 changed files with 58 additions and 21 deletions

View File

@ -1,3 +1,30 @@
2021-09-21 Nick Clifton <nickc@redhat.com>
* ldlang.c (lang_end): When computing the entry point, only
try the start address of the entry section when creating an
executable.
* ld.texi (Entry point): Update description of heuristic used to
choose the entry point.
testsuite/ld-alpha/tlspic.rd: Update expected entry point address.
testsuite/ld-arm/tls-gdesc-got.d: Likewise.
testsuite/ld-i386/tlsnopic.rd: Likewise.
testsuite/ld-ia64/tlspic.rd: Likewise.
testsuite/ld-sparc/gotop32.rd: Likewise.
testsuite/ld-sparc/gotop64.rd: Likewise.
testsuite/ld-sparc/tlssunnopic32.rd: Likewise.
testsuite/ld-sparc/tlssunnopic64.rd: Likewise.
testsuite/ld-sparc/tlssunpic32.rd: Likewise.
testsuite/ld-sparc/tlssunpic64.rd: Likewise.
testsuite/ld-tic6x/shlib-1.rd: Likewise.
testsuite/ld-tic6x/shlib-1b.rd: Likewise.
testsuite/ld-tic6x/shlib-1r.rd: Likewise.
testsuite/ld-tic6x/shlib-1rb.rd: Likewise.
testsuite/ld-tic6x/shlib-noindex.rd: Likewise.
testsuite/ld-x86-64/pr14207.d: Likewise.
testsuite/ld-x86-64/tlsdesc.rd: Likewise.
testsuite/ld-x86-64/tlspic.rd: Likewise.
testsuite/ld-x86-64/tlspic2.rd: Likewise.
2021-09-15 Claudiu Zissulescu <claziss@synopsys.com>
* testsuite/ld-arc/got-weak.d: Update file.

View File

@ -3910,7 +3910,9 @@ the value of a target-specific symbol, if it is defined; For many
targets this is @code{start}, but PE- and BeOS-based systems for example
check a list of possible entry symbols, matching the first one found.
@item
the address of the first byte of the @samp{.text} section, if present;
the address of the first byte of the code section, if present and an
executable is being created - the code section is usually
@samp{.text}, but can be something else;
@item
The address @code{0}.
@end itemize

View File

@ -6984,7 +6984,8 @@ lang_end (void)
if (!bfd_set_start_address (link_info.output_bfd, val))
einfo (_("%F%P: can't set start address\n"));
}
else
/* BZ 2004952: Only use the start of the entry section for executables. */
else if bfd_link_executable (&link_info)
{
asection *ts;
@ -7010,6 +7011,13 @@ lang_end (void)
entry_symbol.name);
}
}
else
{
if (warn)
einfo (_("%P: warning: cannot find entry symbol %s;"
" not setting start address\n"),
entry_symbol.name);
}
}
}

View File

@ -29,7 +29,7 @@ Section Headers:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -2,7 +2,7 @@
.*/tls-lib2-got.so: file format elf32-.*arm.*
architecture: arm.*, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0+8(1e8|220)
start address 0x[0-9a-f]+
Disassembly of section .got:

View File

@ -26,7 +26,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -31,7 +31,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -23,7 +23,7 @@ Section Headers:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -23,7 +23,7 @@ Section Headers:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -23,7 +23,7 @@ Section Headers:
+\[[ 0-9]+\] .shstrtab +.*
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -23,7 +23,7 @@ Section Headers:
+\[[ 0-9]+\] .shstrtab +.*
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -27,7 +27,7 @@ Section Headers:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -27,7 +27,7 @@ Section Headers:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -23,7 +23,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x10000080
Entry point 0x[0-9a-f]+
There are 4 program headers, starting at offset 52
Program Headers:

View File

@ -23,7 +23,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x10000080
Entry point 0x[0-9a-f]+
There are 4 program headers, starting at offset 52
Program Headers:

View File

@ -23,7 +23,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x10000080
Entry point 0x[0-9a-f]+
There are 4 program headers, starting at offset 52
Program Headers:

View File

@ -23,7 +23,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x10000080
Entry point 0x[0-9a-f]+
There are 4 program headers, starting at offset 52
Program Headers:

View File

@ -24,7 +24,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x10000080
Entry point 0x[0-9a-f]+
There are 4 program headers, starting at offset 52
Program Headers:

View File

@ -5,7 +5,7 @@
#target: x86_64-*-linux*
Elf file type is DYN \(Shared object file\)
Entry point 0x149
Entry point 0x[0-9a-f]+
There are 4 program headers, starting at offset 64
Program Headers:

View File

@ -29,7 +29,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -29,7 +29,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers:

View File

@ -29,7 +29,7 @@ Key to Flags:
#...
Elf file type is DYN \(Shared object file\)
Entry point 0x1000
Entry point 0x[0-9a-f]+
There are [0-9]+ program headers, starting at offset [0-9]+
Program Headers: