diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2006-06-11 08:33:27 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2006-06-11 08:33:27 +0000 |
commit | 5108fc1bc95e59df3b7e56fa4144d8f438dfdbdc (patch) | |
tree | b858bef6b05cca3be6f6e7258c0f1056835af232 /ld | |
parent | dbed2504e9706bb9b5c4486b294bffb8b483b23b (diff) | |
download | gdb-5108fc1bc95e59df3b7e56fa4144d8f438dfdbdc.zip gdb-5108fc1bc95e59df3b7e56fa4144d8f438dfdbdc.tar.gz gdb-5108fc1bc95e59df3b7e56fa4144d8f438dfdbdc.tar.bz2 |
bfd/
* elfxx-mips.c (mips_elf_link_hash_table): Add function_stub_size.
(STUB_ORI): New macro.
(STUB_LI16U): Fix formatting.
(MIPS_FUNCTION_STUB_SIZE): Delete.
(MIPS_FUNCTION_STUB_MAX_SIZE): Likewise.
(MIPS_FUNCTION_STUB_NORMAL_SIZE): New macro.
(MIPS_FUNCTION_STUB_BIG_SIZE): Likewise.
(_bfd_mips_elf_adjust_dynamic_symbol): Use htab->function_stub_size
instead of MIPS_FUNCTION_STUB_SIZE.
(count_section_dynsyms): New function, split out from
_bfd_mips_elf_final_link.
(_bfd_mips_elf_always_size_sections): Get a worst-case estimate
of the number of dynamic symbols needed and use it to set up
function_stub_size. Use function_stub_size rather than
MIPS_FUNCTION_STUB_SIZE to determine the size of the stub section.
Use 16-byte stubs for 0x10000 dynamic symbols.
(_bfd_mips_elf_size_dynamic_sections): Use htab->function_stub_size
instead of MIPS_FUNCTION_STUB_SIZE. Fix formatting.
(_bfd_mips_elf_finish_dynamic_symbol): Likewise. Change the
size of the stub buffer from MIPS_FUNCTION_STUB_MAX_SIZE to
MIPS_FUNCTION_STUB_BIG_SIZE. Tweak the check for unhandled dynindxes.
Use MIPS_FUNCTION_STUB_BIG_SIZE rather than a hard-coded 20.
Use STUB_ORI rather than STUB_LI16U for big stubs.
(_bfd_mips_elf_link_hash_table_create): Initialize function_stub_size.
(_bfd_mips_elf_final_link): Use count_section_dynsyms.
ld/testsuite/
* ld-mips-elf/stub-dynsym-1.s,
* ld-mips-elf/stub-dynsym-1.ld,
* ld-mips-elf/stub-dynsym-1-7fff.d,
* ld-mips-elf/stub-dynsym-1-8000.d,
* ld-mips-elf/stub-dynsym-1-fff0.d,
* ld-mips-elf/stub-dynsym-1-10000.d,
* ld-mips-elf/stub-dynsym-1-2fe80.d: New test.
* ld-mips-elf/mips-elf.exp: Run it.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/mips-elf.exp | 27 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d | 18 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d | 18 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d | 16 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d | 16 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d | 16 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/stub-dynsym-1.ld | 17 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/stub-dynsym-1.s | 10 |
9 files changed, 149 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 5b36623..5995a35 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2006-06-11 Richard Sandiford <richard@codesourcery.com> + + * ld-mips-elf/stub-dynsym-1.s, + * ld-mips-elf/stub-dynsym-1.ld, + * ld-mips-elf/stub-dynsym-1-7fff.d, + * ld-mips-elf/stub-dynsym-1-8000.d, + * ld-mips-elf/stub-dynsym-1-fff0.d, + * ld-mips-elf/stub-dynsym-1-10000.d, + * ld-mips-elf/stub-dynsym-1-2fe80.d: New test. + * ld-mips-elf/mips-elf.exp: Run it. + 2006-06-06 Alan Modra <amodra@bigpond.net.au> * ld-elfvers/vers.exp (objdump_versionstuff): Allow versions in diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 645b7e0..b5ddaef 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -137,6 +137,33 @@ if $has_newabi { run_dump_test "emit-relocs-1" } +if {[istarget mips*-*-linux*]} { + # The number of symbols that are always included in the symbol table + # for these tests. The 5 are: + # + # the null symbol entry + # the .MIPS.stubs section symbol + # the .text section symbol + # _gp + # _GLOBAL_OFFSET_TABLE_ + set base_syms 5 + foreach dynsym { 7fff 8000 fff0 10000 2fe80 } { + run_ld_link_tests \ + [list [list \ + "Stub for dynsym 0x$dynsym" \ + "-shared -melf32btsmip -T stub-dynsym-1.ld" \ + [concat \ + "-EB -march=mips1 -32 -KPIC" \ + "--defsym base_syms=$base_syms" \ + "--defsym dynsym=0x$dynsym"] \ + [list "stub-dynsym-1.s"] \ + [list [list \ + "objdump" "-dz" \ + "stub-dynsym-1-$dynsym.d"]] \ + "stub-dynsym-1-$dynsym"]] + } + } + # For tests which may involve multiple files, use run_ld_link_tests. # List contains test-items with 3 items followed by 2 lists: diff --git a/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d b/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d new file mode 100644 index 0000000..b59bb5f --- /dev/null +++ b/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d @@ -0,0 +1,18 @@ + +.*: file format elf32-tradbigmips + +Disassembly of section \.MIPS\.stubs: + +.* <\.MIPS.stubs>: +.*: 8f998010 lw t9,-32752\(gp\) +.*: 03e07821 move t7,ra +.*: 3c180001 lui t8,0x1 +.*: 0320f809 jalr t9 +.*: 37180000 ori t8,t8,0x0 +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +Disassembly of section .text: +#pass diff --git a/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d b/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d new file mode 100644 index 0000000..07ca1a2 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d @@ -0,0 +1,18 @@ + +.*: file format elf32-tradbigmips + +Disassembly of section \.MIPS\.stubs: + +.* <\.MIPS.stubs>: +.*: 8f998010 lw t9,-32752\(gp\) +.*: 03e07821 move t7,ra +.*: 3c180002 lui t8,0x2 +.*: 0320f809 jalr t9 +.*: 3718fe80 ori t8,t8,0xfe80 +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +Disassembly of section .text: +#pass diff --git a/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d b/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d new file mode 100644 index 0000000..bfc94c5 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d @@ -0,0 +1,16 @@ + +.*: file format elf32-tradbigmips + +Disassembly of section \.MIPS\.stubs: + +.* <\.MIPS.stubs>: +.*: 8f998010 lw t9,-32752\(gp\) +.*: 03e07821 move t7,ra +.*: 0320f809 jalr t9 +.*: 24187fff li t8,32767 +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +Disassembly of section .text: +#pass diff --git a/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d b/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d new file mode 100644 index 0000000..2861ac2 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d @@ -0,0 +1,16 @@ + +.*: file format elf32-tradbigmips + +Disassembly of section \.MIPS\.stubs: + +.* <\.MIPS.stubs>: +.*: 8f998010 lw t9,-32752\(gp\) +.*: 03e07821 move t7,ra +.*: 0320f809 jalr t9 +.*: 34188000 li t8,0x8000 +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +Disassembly of section .text: +#pass diff --git a/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d b/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d new file mode 100644 index 0000000..440d32a --- /dev/null +++ b/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d @@ -0,0 +1,16 @@ + +.*: file format elf32-tradbigmips + +Disassembly of section \.MIPS\.stubs: + +.* <\.MIPS.stubs>: +.*: 8f998010 lw t9,-32752\(gp\) +.*: 03e07821 move t7,ra +.*: 0320f809 jalr t9 +.*: 3418fff0 li t8,0xfff0 +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +.*: 00000000 nop +Disassembly of section .text: +#pass diff --git a/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld b/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld new file mode 100644 index 0000000..17c998d --- /dev/null +++ b/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld @@ -0,0 +1,17 @@ +SECTIONS +{ + . = 0x80000; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .rel.dyn : { *(.rel.dyn) } + .MIPS.stubs : { *(.MIPS.stubs) } + .text : { *(.text) } + + . = ALIGN (0x10000); + _gp = . + 0x7ff0; + .got : { *(.got) } + + /DISCARD/ : { *(.reginfo) } +} diff --git a/ld/testsuite/ld-mips-elf/stub-dynsym-1.s b/ld/testsuite/ld-mips-elf/stub-dynsym-1.s new file mode 100644 index 0000000..15d2e1b --- /dev/null +++ b/ld/testsuite/ld-mips-elf/stub-dynsym-1.s @@ -0,0 +1,10 @@ + .macro decl + .global exported\@ + .equ exported\@,\@ + .endm + + .rept dynsym - base_syms + decl + .endr + + lw $25,%call16(foo)($gp) |