From b02c4cfa790d7908bf2eab1fc69b02ed81109678 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 2 Oct 2009 15:00:30 +0000 Subject: [PATCH] ld/ * emultempl/ppc32elf.em (emit_stub_syms): Init to -1. (ppc_after_open): Set emit_stubs_syms by default when shared. (OPTION_NO_STUBSYMS): Define. (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Handle --no-emit-stub-syms. * emultempl/ppc64elf.em (emit_stub_syms): Init to -1. (gld${EMULATION_NAME}_finish): Set emit_stubs_syms by default. (OPTION_NO_STUBSYMS): Define. (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Handle --no-emit-stub-syms. ld/testsuite/ * ld-powerpc/tlsexe.d: Update. * ld-powerpc/tlsexe.r: Update. * ld-powerpc/tlsexetoc.d: Update. * ld-powerpc/tlsexetoc.r: Update. * ld-powerpc/tlsso.d: Update. * ld-powerpc/tlsso.r: Update. * ld-powerpc/tlstocso.d: Update. * ld-powerpc/tlstocso.r: Update. --- ld/ChangeLog | 13 +++++++++++++ ld/emultempl/ppc32elf.em | 12 ++++++++++-- ld/emultempl/ppc64elf.em | 16 +++++++++++++--- ld/testsuite/ChangeLog | 11 +++++++++++ ld/testsuite/ld-powerpc/tlsexe.d | 3 ++- ld/testsuite/ld-powerpc/tlsexe.r | 4 +++- ld/testsuite/ld-powerpc/tlsexetoc.d | 3 ++- ld/testsuite/ld-powerpc/tlsexetoc.r | 4 +++- ld/testsuite/ld-powerpc/tlsso.d | 3 ++- ld/testsuite/ld-powerpc/tlsso.r | 2 ++ ld/testsuite/ld-powerpc/tlstocso.d | 3 ++- ld/testsuite/ld-powerpc/tlstocso.r | 2 ++ 12 files changed, 65 insertions(+), 11 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index f8778b2f1fb..3ef99ee4dca 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,16 @@ +2009-10-03 Alan Modra + + * emultempl/ppc32elf.em (emit_stub_syms): Init to -1. + (ppc_after_open): Set emit_stubs_syms by default when shared. + (OPTION_NO_STUBSYMS): Define. + (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS, + PARSE_AND_LIST_ARGS_CASES): Handle --no-emit-stub-syms. + * emultempl/ppc64elf.em (emit_stub_syms): Init to -1. + (gld${EMULATION_NAME}_finish): Set emit_stubs_syms by default. + (OPTION_NO_STUBSYMS): Define. + (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS, + PARSE_AND_LIST_ARGS_CASES): Handle --no-emit-stub-syms. + 2009-09-29 Joel Sherrill * emulparams/m68kelf.sh (NOP): Use 0x4e71 (nop) rather than 0x4e75 diff --git a/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em index 2295ae90d19..3befe75091a 100644 --- a/ld/emultempl/ppc32elf.em +++ b/ld/emultempl/ppc32elf.em @@ -36,7 +36,7 @@ static int notlsopt = 0; static int no_tls_get_addr_opt = 0; /* Whether to emit symbols for stubs. */ -static int emit_stub_syms = 0; +static int emit_stub_syms = -1; /* Chooses the correct place for .plt and .got. */ static enum ppc_elf_plt_type plt_style = PLT_UNSET; @@ -55,7 +55,8 @@ ppc_after_open (void) lang_output_section_statement_type *plt_os[2]; lang_output_section_statement_type *got_os[2]; - emit_stub_syms |= link_info.emitrelocations; + if (emit_stub_syms < 0) + emit_stub_syms = link_info.emitrelocations || link_info.shared; new_plt = ppc_elf_select_plt_layout (link_info.output_bfd, &link_info, plt_style, emit_stub_syms); if (new_plt < 0) @@ -182,10 +183,12 @@ PARSE_AND_LIST_PROLOGUE=' #define OPTION_OLD_PLT (OPTION_NEW_PLT + 1) #define OPTION_OLD_GOT (OPTION_OLD_PLT + 1) #define OPTION_STUBSYMS (OPTION_OLD_GOT + 1) +#define OPTION_NO_STUBSYMS (OPTION_STUBSYMS + 1) ' PARSE_AND_LIST_LONGOPTS=' { "emit-stub-syms", no_argument, NULL, OPTION_STUBSYMS }, + { "no-emit-stub-syms", no_argument, NULL, OPTION_NO_STUBSYMS }, { "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT }, { "no-tls-get-addr-optimize", no_argument, NULL, OPTION_NO_TLS_GET_ADDR_OPT }, { "secure-plt", no_argument, NULL, OPTION_NEW_PLT }, @@ -196,6 +199,7 @@ PARSE_AND_LIST_LONGOPTS=' PARSE_AND_LIST_OPTIONS=' fprintf (file, _("\ --emit-stub-syms Label linker stubs with a symbol.\n\ + --no-emit-stub-syms Don'\''t label linker stubs with a symbol.\n\ --no-tls-optimize Don'\''t try to optimize TLS accesses.\n\ --no-tls-get-addr-optimize Don'\''t use a special __tls_get_addr call.\n\ --secure-plt Use new-style PLT if possible.\n\ @@ -209,6 +213,10 @@ PARSE_AND_LIST_ARGS_CASES=' emit_stub_syms = 1; break; + case OPTION_NO_STUBSYMS: + emit_stub_syms = 0; + break; + case OPTION_NO_TLS_OPT: notlsopt = 1; break; diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em index 09f0f17fdc2..88971d7c362 100644 --- a/ld/emultempl/ppc64elf.em +++ b/ld/emultempl/ppc64elf.em @@ -59,7 +59,7 @@ static int no_toc_opt = 0; static int no_multi_toc = 0; /* Whether to emit symbols for stubs. */ -static int emit_stub_syms = 0; +static int emit_stub_syms = -1; static asection *toc_section = 0; @@ -378,7 +378,8 @@ gld${EMULATION_NAME}_finish (void) char *msg = NULL; char *line, *endline; - emit_stub_syms |= link_info.emitrelocations; + if (emit_stub_syms < 0) + emit_stub_syms = 1; if (!ppc64_elf_build_stubs (emit_stub_syms, &link_info, config.stats ? &msg : NULL)) einfo ("%X%P: can not build stubs: %E\n"); @@ -487,7 +488,8 @@ fi PARSE_AND_LIST_PROLOGUE=' #define OPTION_STUBGROUP_SIZE 301 #define OPTION_STUBSYMS (OPTION_STUBGROUP_SIZE + 1) -#define OPTION_DOTSYMS (OPTION_STUBSYMS + 1) +#define OPTION_NO_STUBSYMS (OPTION_STUBSYMS + 1) +#define OPTION_DOTSYMS (OPTION_NO_STUBSYMS + 1) #define OPTION_NO_DOTSYMS (OPTION_DOTSYMS + 1) #define OPTION_NO_TLS_OPT (OPTION_NO_DOTSYMS + 1) #define OPTION_NO_TLS_GET_ADDR_OPT (OPTION_NO_TLS_OPT + 1) @@ -500,6 +502,7 @@ PARSE_AND_LIST_PROLOGUE=' PARSE_AND_LIST_LONGOPTS=' { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE }, { "emit-stub-syms", no_argument, NULL, OPTION_STUBSYMS }, + { "no-emit-stub-syms", no_argument, NULL, OPTION_NO_STUBSYMS }, { "dotsyms", no_argument, NULL, OPTION_DOTSYMS }, { "no-dotsyms", no_argument, NULL, OPTION_NO_DOTSYMS }, { "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT }, @@ -525,6 +528,9 @@ PARSE_AND_LIST_OPTIONS=' --emit-stub-syms Label linker stubs with a symbol.\n" )); fprintf (file, _("\ + --no-emit-stub-syms Don'\''t label linker stubs with a symbol.\n" + )); + fprintf (file, _("\ --dotsyms For every version pattern \"foo\" in a version\n\ script, add \".foo\" so that function code\n\ symbols are treated the same as function\n\ @@ -568,6 +574,10 @@ PARSE_AND_LIST_ARGS_CASES=' emit_stub_syms = 1; break; + case OPTION_NO_STUBSYMS: + emit_stub_syms = 0; + break; + case OPTION_DOTSYMS: dotsyms = 1; break; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 3fbd06f180f..2870084b54f 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2009-10-03 Alan Modra + + * ld-powerpc/tlsexe.d: Update. + * ld-powerpc/tlsexe.r: Update. + * ld-powerpc/tlsexetoc.d: Update. + * ld-powerpc/tlsexetoc.r: Update. + * ld-powerpc/tlsso.d: Update. + * ld-powerpc/tlsso.r: Update. + * ld-powerpc/tlstocso.d: Update. + * ld-powerpc/tlstocso.r: Update. + 2009-10-02 Alan Modra * lib/ld-lib.exp (ld_simple_link_defsyms): New proc, adding diff --git a/ld/testsuite/ld-powerpc/tlsexe.d b/ld/testsuite/ld-powerpc/tlsexe.d index e7f1e4c584c..54db23d1f95 100644 --- a/ld/testsuite/ld-powerpc/tlsexe.d +++ b/ld/testsuite/ld-powerpc/tlsexe.d @@ -8,7 +8,7 @@ Disassembly of section \.text: -.* <_start-0x4c>: +.* <00000010\.plt_call\.__tls_get_addr(|_opt)\+0>: .* e9 63 00 00 ld r11,0\(r3\) .* e9 83 00 08 ld r12,8\(r3\) .* 7c 60 1b 78 mr r0,r3 @@ -71,6 +71,7 @@ Disassembly of section \.text: .* 60 00 00 00 nop .* 00 00 00 00 .* .* 00 01 02 00 .* +.* <__glink_PLTresolve>: .* 7d 88 02 a6 mflr r12 .* 42 9f 00 05 bcl- 20,4\*cr7\+so,.* .* 7d 68 02 a6 mflr r11 diff --git a/ld/testsuite/ld-powerpc/tlsexe.r b/ld/testsuite/ld-powerpc/tlsexe.r index 55d2503fa31..db43d87c5fd 100644 --- a/ld/testsuite/ld-powerpc/tlsexe.r +++ b/ld/testsuite/ld-powerpc/tlsexe.r @@ -96,7 +96,9 @@ Symbol table '\.symtab' contains [0-9]+ entries: .* TLS +LOCAL +DEFAULT +8 le4 .* TLS +LOCAL +DEFAULT +8 le5 .* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC -.* (FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt) +.* (NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)) +.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0) +.* ((FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve) .* GLOBAL +DEFAULT +UND gd .* GLOBAL +DEFAULT +9 le0 .* GLOBAL +DEFAULT +9 ld0 diff --git a/ld/testsuite/ld-powerpc/tlsexetoc.d b/ld/testsuite/ld-powerpc/tlsexetoc.d index 83b1aca960f..8354e2de209 100644 --- a/ld/testsuite/ld-powerpc/tlsexetoc.d +++ b/ld/testsuite/ld-powerpc/tlsexetoc.d @@ -8,7 +8,7 @@ Disassembly of section \.text: -.* <_start-0x4c>: +.* <00000010\.plt_call\.__tls_get_addr(|_opt)\+0>: .* e9 63 00 00 ld r11,0\(r3\) .* e9 83 00 08 ld r12,8\(r3\) .* 7c 60 1b 78 mr r0,r3 @@ -55,6 +55,7 @@ Disassembly of section \.text: .* 60 00 00 00 nop .* 00 00 00 00 .* .* 00 01 02 28 .* +.* <__glink_PLTresolve>: .* 7d 88 02 a6 mflr r12 .* 42 9f 00 05 bcl- 20,4\*cr7\+so,.* .* 7d 68 02 a6 mflr r11 diff --git a/ld/testsuite/ld-powerpc/tlsexetoc.r b/ld/testsuite/ld-powerpc/tlsexetoc.r index 1488effe0af..82426acd4d6 100644 --- a/ld/testsuite/ld-powerpc/tlsexetoc.r +++ b/ld/testsuite/ld-powerpc/tlsexetoc.r @@ -96,7 +96,9 @@ Symbol table '\.symtab' contains [0-9]+ entries: .* TLS +LOCAL +DEFAULT +8 le5 .* NOTYPE +LOCAL +DEFAULT +12 \.Lie0 .* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC -.* (FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt) +.* (NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)) +.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0) +.* ((FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)|NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve) .* TLS +GLOBAL +DEFAULT +UND gd .* TLS +GLOBAL +DEFAULT +9 le0 .* TLS +GLOBAL +DEFAULT +9 ld0 diff --git a/ld/testsuite/ld-powerpc/tlsso.d b/ld/testsuite/ld-powerpc/tlsso.d index 194e8cbce23..4a3b04557d4 100644 --- a/ld/testsuite/ld-powerpc/tlsso.d +++ b/ld/testsuite/ld-powerpc/tlsso.d @@ -8,7 +8,7 @@ Disassembly of section \.text: -.*: +.* <00000010\.plt_call\.__tls_get_addr(|_opt)\+0>: .* f8 41 00 28 std r2,40\(r1\) .* e9 62 80 78 ld r11,-32648\(r2\) .* 7d 69 03 a6 mtctr r11 @@ -57,6 +57,7 @@ Disassembly of section \.text: .* a9 49 00 00 lha r10,0\(r9\) .* 00 00 00 00 .* .* 00 01 02 20 .* +.* <__glink_PLTresolve>: .* 7d 88 02 a6 mflr r12 .* 42 9f 00 05 bcl- 20,4\*cr7\+so,.* .* 7d 68 02 a6 mflr r11 diff --git a/ld/testsuite/ld-powerpc/tlsso.r b/ld/testsuite/ld-powerpc/tlsso.r index b41019930ee..fa792f35aab 100644 --- a/ld/testsuite/ld-powerpc/tlsso.r +++ b/ld/testsuite/ld-powerpc/tlsso.r @@ -110,6 +110,8 @@ Symbol table '\.symtab' contains [0-9]+ entries: .* TLS +LOCAL +DEFAULT +7 le4 .* TLS +LOCAL +DEFAULT +7 le5 .* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC +.* NOTYPE +LOCAL +DEFAULT +6 00000010\.plt_call\.__tls_get_addr\+0 +.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve .* NOTYPE +LOCAL +DEFAULT +UND \.__tls_get_addr .* TLS +GLOBAL +DEFAULT +UND gd .* TLS +GLOBAL +DEFAULT +8 le0 diff --git a/ld/testsuite/ld-powerpc/tlstocso.d b/ld/testsuite/ld-powerpc/tlstocso.d index ce8fe515290..0b84311e2ea 100644 --- a/ld/testsuite/ld-powerpc/tlstocso.d +++ b/ld/testsuite/ld-powerpc/tlstocso.d @@ -8,7 +8,7 @@ Disassembly of section \.text: -.*: +.* <00000010\.plt_call\.__tls_get_addr(|_opt)\+0>: .* f8 41 00 28 std r2,40\(r1\) .* e9 62 80 70 ld r11,-32656\(r2\) .* 7d 69 03 a6 mtctr r11 @@ -41,6 +41,7 @@ Disassembly of section \.text: .* 99 49 00 00 stb r10,0\(r9\) .* 00 00 00 00 .* .* 00 01 02 18 .* +.* <__glink_PLTresolve>: .* 7d 88 02 a6 mflr r12 .* 42 9f 00 05 bcl- 20,4\*cr7\+so,.* .* 7d 68 02 a6 mflr r11 diff --git a/ld/testsuite/ld-powerpc/tlstocso.r b/ld/testsuite/ld-powerpc/tlstocso.r index 3fc01620b59..21ddeee6381 100644 --- a/ld/testsuite/ld-powerpc/tlstocso.r +++ b/ld/testsuite/ld-powerpc/tlstocso.r @@ -106,6 +106,8 @@ Symbol table '\.symtab' contains [0-9]+ entries: .* TLS +LOCAL +DEFAULT +7 le5 .* NOTYPE +LOCAL +DEFAULT +11 \.Lie0 .* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC +.* NOTYPE +LOCAL +DEFAULT +6 00000010\.plt_call\.__tls_get_addr\+0 +.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve .* NOTYPE +LOCAL +DEFAULT +UND \.__tls_get_addr .* TLS +GLOBAL +DEFAULT +UND gd .* TLS +GLOBAL +DEFAULT +8 le0 -- 2.30.2