diff options
author | Thiemo Seufer <ths@networkno.de> | 2005-03-05 00:01:44 +0000 |
---|---|---|
committer | Thiemo Seufer <ths@networkno.de> | 2005-03-05 00:01:44 +0000 |
commit | bbe506e8ba9444fb4a00ba66762a2c498443e1b6 (patch) | |
tree | 4989bcc748cfc73d2cfb45f9321ee5247cde59ec /gas | |
parent | 92862f42b561a218a220939cd8a1bef7c9756d06 (diff) | |
download | gdb-bbe506e8ba9444fb4a00ba66762a2c498443e1b6.zip gdb-bbe506e8ba9444fb4a00ba66762a2c498443e1b6.tar.gz gdb-bbe506e8ba9444fb4a00ba66762a2c498443e1b6.tar.bz2 |
bfd/ChangeLog
* elfxx-mips.c (mips_elf_calculate_relocation): Handle special
'__gnu_local_gp' symbol used by gas -mno-shared.
gas/ChangeLog
* config/tc-mips.c (macro_build_lui): Use '__gnu_local_gp'
instead of '_gp' for -mno-shared optimization.
(s_cpload): Ditto.
(s_abicalls): Document it in the comment.
(md_show_usage): Document the -mno-shared option.
gas/testsuite/ChangeLog
* gas/mips/elf-rel23b.d: Use '__gnu_local_gp' instead of '_gp'
for -mno-shared optimization.
* gas/mips/elf-rel25a.d: Ditto.
ld/testsuite/ChangeLog
* ld-mips-elf/multi-got-no-shared-1.s,
ld-mips-elf/multi-got-no-shared-2.s,
ld-mips-elf/multi-got-no-shared.d: New tests.
* ld-mips-elf/mips-elf.exp: Run them.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 8 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 20 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-rel23b.d | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-rel25a.d | 4 |
5 files changed, 30 insertions, 12 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index efd2db9..1892de8 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2005-03-04 David Daney <ddaney@avtrex.com> + + * config/tc-mips.c (macro_build_lui): Use '__gnu_local_gp' + instead of '_gp' for -mno-shared optimization. + (s_cpload): Ditto. + (s_abicalls): Document it in the comment. + (md_show_usage): Document the -mno-shared option. + 2005-03-04 Richard Sandiford <rsandifo@redhat.com> * config/tc-mips.c (mips_set_options): Add sym32 field. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index a0ad808..284d09c 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -3393,13 +3393,14 @@ macro_build_lui (expressionS *ep, int regnum) else { assert (ep->X_op == O_symbol); - /* _gp_disp is a special case, used from s_cpload. _gp is used - if mips_no_shared. */ + /* _gp_disp is a special case, used from s_cpload. + __gnu_local_gp is used if mips_no_shared. */ assert (mips_pic == NO_PIC || (! HAVE_NEWABI && strcmp (S_GET_NAME (ep->X_add_symbol), "_gp_disp") == 0) || (! mips_in_shared - && strcmp (S_GET_NAME (ep->X_add_symbol), "_gp") == 0)); + && strcmp (S_GET_NAME (ep->X_add_symbol), + "__gnu_local_gp") == 0)); *r = BFD_RELOC_HI16_S; } @@ -11819,12 +11820,12 @@ s_abicalls (int ignore ATTRIBUTE_UNUSED) The .cpload argument is normally $25 == $t9. The -mno-shared option changes this to: - lui $gp,%hi(_gp) - addiu $gp,$gp,%lo(_gp) + lui $gp,%hi(__gnu_local_gp) + addiu $gp,$gp,%lo(__gnu_local_gp) and the argument is ignored. This saves an instruction, but the resulting code is not position independent; it uses an absolute - address for _gp. Thus code assembled with -mno-shared can go into - an ordinary executable, but not into a shared library. */ + address for __gnu_local_gp. Thus code assembled with -mno-shared + can go into an ordinary executable, but not into a shared library. */ static void s_cpload (int ignore ATTRIBUTE_UNUSED) @@ -11852,7 +11853,8 @@ s_cpload (int ignore ATTRIBUTE_UNUSED) in_shared = mips_in_shared || HAVE_64BIT_SYMBOLS; ex.X_op = O_symbol; - ex.X_add_symbol = symbol_find_or_make (in_shared ? "_gp_disp" : "_gp"); + ex.X_add_symbol = symbol_find_or_make (in_shared ? "_gp_disp" : + "__gnu_local_gp"); ex.X_op_symbol = NULL; ex.X_add_number = 0; @@ -14118,6 +14120,8 @@ MIPS options:\n\ -non_shared do not generate position independent code\n\ -xgot assume a 32 bit GOT\n\ -mpdr, -mno-pdr enable/disable creation of .pdr sections\n\ +-mshared, -mno-shared disable/enable .cpload optimization for\n\ + non-shared code\n\ -mabi=ABI create ABI conformant object file for:\n")); first = 1; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 077b7b6..21a8ff6c 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-03-04 David Daney <ddaney@avtrex.com> + + * gas/mips/elf-rel23b.d: Use '__gnu_local_gp' instead of '_gp' + for -mno-shared optimization. + * gas/mips/elf-rel25a.d: Ditto. + 2005-03-04 Nick Clifton <nickc@redhat.com> * gas/arm/arm.exp: Fix test for running the "undefined" to catch diff --git a/gas/testsuite/gas/mips/elf-rel23b.d b/gas/testsuite/gas/mips/elf-rel23b.d index b144a84..7c02f15 100644 --- a/gas/testsuite/gas/mips/elf-rel23b.d +++ b/gas/testsuite/gas/mips/elf-rel23b.d @@ -10,7 +10,7 @@ Disassembly of section \.text: 0+00 <.*>: .*: 0380282d move \$5,\$28 .*: 3c1c0000 lui \$28,0x0 - .*: R_MIPS_HI16 _gp + .*: R_MIPS_HI16 __gnu_local_gp .*: 279c0000 addiu \$28,\$28,0 - .*: R_MIPS_LO16 _gp + .*: R_MIPS_LO16 __gnu_local_gp .*: 00000000 nop diff --git a/gas/testsuite/gas/mips/elf-rel25a.d b/gas/testsuite/gas/mips/elf-rel25a.d index 5c45f1e..a7d30a5 100644 --- a/gas/testsuite/gas/mips/elf-rel25a.d +++ b/gas/testsuite/gas/mips/elf-rel25a.d @@ -9,7 +9,7 @@ Disassembly of section \.text: 0+00 <.*>: .*: 3c1c0000 lui \$28,0x0 - .*: R_MIPS_HI16 _gp + .*: R_MIPS_HI16 __gnu_local_gp .*: 279c0000 addiu \$28,\$28,0 - .*: R_MIPS_LO16 _gp + .*: R_MIPS_LO16 __gnu_local_gp #pass |