From 5226a6a892f922ea672e5775c61776830aaf27b7 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 21 Sep 2021 13:21:41 +0100 Subject: [PATCH] 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. --- ld/ChangeLog | 27 ++++++++++++++++++++++++++ ld/ld.texi | 4 +++- ld/ldlang.c | 10 +++++++++- ld/testsuite/ld-alpha/tlspic.rd | 2 +- ld/testsuite/ld-arm/tls-gdesc-got.d | 2 +- ld/testsuite/ld-i386/tlsnopic.rd | 2 +- ld/testsuite/ld-ia64/tlspic.rd | 2 +- ld/testsuite/ld-sparc/gotop32.rd | 2 +- ld/testsuite/ld-sparc/gotop64.rd | 2 +- ld/testsuite/ld-sparc/tlssunnopic32.rd | 2 +- ld/testsuite/ld-sparc/tlssunnopic64.rd | 2 +- ld/testsuite/ld-sparc/tlssunpic32.rd | 2 +- ld/testsuite/ld-sparc/tlssunpic64.rd | 2 +- ld/testsuite/ld-tic6x/shlib-1.rd | 2 +- ld/testsuite/ld-tic6x/shlib-1b.rd | 2 +- ld/testsuite/ld-tic6x/shlib-1r.rd | 2 +- ld/testsuite/ld-tic6x/shlib-1rb.rd | 2 +- ld/testsuite/ld-tic6x/shlib-noindex.rd | 2 +- ld/testsuite/ld-x86-64/pr14207.d | 2 +- ld/testsuite/ld-x86-64/tlsdesc.rd | 2 +- ld/testsuite/ld-x86-64/tlspic.rd | 2 +- ld/testsuite/ld-x86-64/tlspic2.rd | 2 +- 22 files changed, 58 insertions(+), 21 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 2733da1f08e..9be239d4d81 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,30 @@ +2021-09-21 Nick Clifton + + * 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 * testsuite/ld-arc/got-weak.d: Update file. diff --git a/ld/ld.texi b/ld/ld.texi index 72b5c373ba1..db410f0bf2d 100644 --- a/ld/ld.texi +++ b/ld/ld.texi @@ -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 diff --git a/ld/ldlang.c b/ld/ldlang.c index 2610be995ca..bc3f8b76d35 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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); + } } } diff --git a/ld/testsuite/ld-alpha/tlspic.rd b/ld/testsuite/ld-alpha/tlspic.rd index b79fc71463d..a19df375b7c 100644 --- a/ld/testsuite/ld-alpha/tlspic.rd +++ b/ld/testsuite/ld-alpha/tlspic.rd @@ -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: diff --git a/ld/testsuite/ld-arm/tls-gdesc-got.d b/ld/testsuite/ld-arm/tls-gdesc-got.d index 873d11f3328..38efaa88f5c 100644 --- a/ld/testsuite/ld-arm/tls-gdesc-got.d +++ b/ld/testsuite/ld-arm/tls-gdesc-got.d @@ -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: diff --git a/ld/testsuite/ld-i386/tlsnopic.rd b/ld/testsuite/ld-i386/tlsnopic.rd index 229ce23a9af..719e44d0e0f 100644 --- a/ld/testsuite/ld-i386/tlsnopic.rd +++ b/ld/testsuite/ld-i386/tlsnopic.rd @@ -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: diff --git a/ld/testsuite/ld-ia64/tlspic.rd b/ld/testsuite/ld-ia64/tlspic.rd index 02c98006ea0..4b6e76e5943 100644 --- a/ld/testsuite/ld-ia64/tlspic.rd +++ b/ld/testsuite/ld-ia64/tlspic.rd @@ -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: diff --git a/ld/testsuite/ld-sparc/gotop32.rd b/ld/testsuite/ld-sparc/gotop32.rd index 0f02e9191cc..a6b7107dee6 100644 --- a/ld/testsuite/ld-sparc/gotop32.rd +++ b/ld/testsuite/ld-sparc/gotop32.rd @@ -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: diff --git a/ld/testsuite/ld-sparc/gotop64.rd b/ld/testsuite/ld-sparc/gotop64.rd index 249d7312a47..22b3769292b 100644 --- a/ld/testsuite/ld-sparc/gotop64.rd +++ b/ld/testsuite/ld-sparc/gotop64.rd @@ -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: diff --git a/ld/testsuite/ld-sparc/tlssunnopic32.rd b/ld/testsuite/ld-sparc/tlssunnopic32.rd index 01f89334587..5574868393f 100644 --- a/ld/testsuite/ld-sparc/tlssunnopic32.rd +++ b/ld/testsuite/ld-sparc/tlssunnopic32.rd @@ -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: diff --git a/ld/testsuite/ld-sparc/tlssunnopic64.rd b/ld/testsuite/ld-sparc/tlssunnopic64.rd index 8104c67c8a1..cadc77c344f 100644 --- a/ld/testsuite/ld-sparc/tlssunnopic64.rd +++ b/ld/testsuite/ld-sparc/tlssunnopic64.rd @@ -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: diff --git a/ld/testsuite/ld-sparc/tlssunpic32.rd b/ld/testsuite/ld-sparc/tlssunpic32.rd index d4012626a49..7ad8c99d134 100644 --- a/ld/testsuite/ld-sparc/tlssunpic32.rd +++ b/ld/testsuite/ld-sparc/tlssunpic32.rd @@ -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: diff --git a/ld/testsuite/ld-sparc/tlssunpic64.rd b/ld/testsuite/ld-sparc/tlssunpic64.rd index 58162057f9b..61f84c580f2 100644 --- a/ld/testsuite/ld-sparc/tlssunpic64.rd +++ b/ld/testsuite/ld-sparc/tlssunpic64.rd @@ -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: diff --git a/ld/testsuite/ld-tic6x/shlib-1.rd b/ld/testsuite/ld-tic6x/shlib-1.rd index 6b64d01271b..9ad2396170e 100644 --- a/ld/testsuite/ld-tic6x/shlib-1.rd +++ b/ld/testsuite/ld-tic6x/shlib-1.rd @@ -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: diff --git a/ld/testsuite/ld-tic6x/shlib-1b.rd b/ld/testsuite/ld-tic6x/shlib-1b.rd index 6b64d01271b..9ad2396170e 100644 --- a/ld/testsuite/ld-tic6x/shlib-1b.rd +++ b/ld/testsuite/ld-tic6x/shlib-1b.rd @@ -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: diff --git a/ld/testsuite/ld-tic6x/shlib-1r.rd b/ld/testsuite/ld-tic6x/shlib-1r.rd index 6b64d01271b..9ad2396170e 100644 --- a/ld/testsuite/ld-tic6x/shlib-1r.rd +++ b/ld/testsuite/ld-tic6x/shlib-1r.rd @@ -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: diff --git a/ld/testsuite/ld-tic6x/shlib-1rb.rd b/ld/testsuite/ld-tic6x/shlib-1rb.rd index 6b64d01271b..9ad2396170e 100644 --- a/ld/testsuite/ld-tic6x/shlib-1rb.rd +++ b/ld/testsuite/ld-tic6x/shlib-1rb.rd @@ -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: diff --git a/ld/testsuite/ld-tic6x/shlib-noindex.rd b/ld/testsuite/ld-tic6x/shlib-noindex.rd index 38934ba2b5f..f087d15bffd 100644 --- a/ld/testsuite/ld-tic6x/shlib-noindex.rd +++ b/ld/testsuite/ld-tic6x/shlib-noindex.rd @@ -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: diff --git a/ld/testsuite/ld-x86-64/pr14207.d b/ld/testsuite/ld-x86-64/pr14207.d index 1713888ff71..f330600b916 100644 --- a/ld/testsuite/ld-x86-64/pr14207.d +++ b/ld/testsuite/ld-x86-64/pr14207.d @@ -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: diff --git a/ld/testsuite/ld-x86-64/tlsdesc.rd b/ld/testsuite/ld-x86-64/tlsdesc.rd index 58feb20e55a..98bda5b2a39 100644 --- a/ld/testsuite/ld-x86-64/tlsdesc.rd +++ b/ld/testsuite/ld-x86-64/tlsdesc.rd @@ -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: diff --git a/ld/testsuite/ld-x86-64/tlspic.rd b/ld/testsuite/ld-x86-64/tlspic.rd index 2e44dc6ac6b..e5d991ab323 100644 --- a/ld/testsuite/ld-x86-64/tlspic.rd +++ b/ld/testsuite/ld-x86-64/tlspic.rd @@ -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: diff --git a/ld/testsuite/ld-x86-64/tlspic2.rd b/ld/testsuite/ld-x86-64/tlspic2.rd index 60decd2787b..4c20f3b4252 100644 --- a/ld/testsuite/ld-x86-64/tlspic2.rd +++ b/ld/testsuite/ld-x86-64/tlspic2.rd @@ -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: -- 2.30.2