mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-05 00:04:22 +08:00
bfd/
* elfxx-mips.c (mips_use_local_got_p): New function. (mips_elf_count_got_symbols, mips_elf_calculate_relocation): Use it. (_bfd_mips_elf_check_relocs): Set pointer_equality_needed for GOT and absolute references. ld/testsuite/ * ld-mips-elf/pic-and-nonpic-6-n32.ad, ld-mips-elf/pic-and-nonpic-6-n32.dd, ld-mips-elf/pic-and-nonpic-6-n32.gd, ld-mips-elf/pic-and-nonpic-6-n32.nd, ld-mips-elf/pic-and-nonpic-6-n32.rd, ld-mips-elf/pic-and-nonpic-6-n64.ad, ld-mips-elf/pic-and-nonpic-6-n64.dd, ld-mips-elf/pic-and-nonpic-6-n64.gd, ld-mips-elf/pic-and-nonpic-6-n64.nd, ld-mips-elf/pic-and-nonpic-6-n64.rd, ld-mips-elf/pic-and-nonpic-6-o32.ad, ld-mips-elf/pic-and-nonpic-6-o32.dd, ld-mips-elf/pic-and-nonpic-6-o32.gd, ld-mips-elf/pic-and-nonpic-6-o32.nd, ld-mips-elf/pic-and-nonpic-6-o32.rd: Fix symbol value of extf4. No longer expect extf3, extf4 and extd2 to be in the global GOT.
This commit is contained in:
parent
3fcec3ee77
commit
c5d6fa4495
@ -1,3 +1,10 @@
|
||||
2013-10-13 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* elfxx-mips.c (mips_use_local_got_p): New function.
|
||||
(mips_elf_count_got_symbols, mips_elf_calculate_relocation): Use it.
|
||||
(_bfd_mips_elf_check_relocs): Set pointer_equality_needed for
|
||||
GOT and absolute references.
|
||||
|
||||
2013-10-09 Roland McGrath <mcgrathr@google.com>
|
||||
|
||||
* elf64-alpha.c (elf64_alpha_relax_tls_get_addr): Cast switch
|
||||
|
164
bfd/elfxx-mips.c
164
bfd/elfxx-mips.c
@ -4299,6 +4299,36 @@ mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Return true if a GOT entry for H should live in the local rather than
|
||||
global GOT area. */
|
||||
|
||||
static bfd_boolean
|
||||
mips_use_local_got_p (struct bfd_link_info *info,
|
||||
struct mips_elf_link_hash_entry *h)
|
||||
{
|
||||
/* Symbols that aren't in the dynamic symbol table must live in the
|
||||
local GOT. This includes symbols that are completely undefined
|
||||
and which therefore don't bind locally. We'll report undefined
|
||||
symbols later if appropriate. */
|
||||
if (h->root.dynindx == -1)
|
||||
return TRUE;
|
||||
|
||||
/* Symbols that bind locally can (and in the case of forced-local
|
||||
symbols, must) live in the local GOT. */
|
||||
if (h->got_only_for_calls
|
||||
? SYMBOL_CALLS_LOCAL (info, &h->root)
|
||||
: SYMBOL_REFERENCES_LOCAL (info, &h->root))
|
||||
return TRUE;
|
||||
|
||||
/* If this is an executable that must provide a definition of the symbol,
|
||||
either though PLTs or copy relocations, then that address should go in
|
||||
the local rather than global GOT. */
|
||||
if (info->executable && h->has_static_relocs)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* A mips_elf_link_hash_traverse callback for which DATA points to the
|
||||
link_info structure. Decide whether the hash entry needs an entry in
|
||||
the global part of the primary GOT, setting global_got_area accordingly.
|
||||
@ -4318,18 +4348,8 @@ mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
|
||||
if (h->global_got_area != GGA_NONE)
|
||||
{
|
||||
/* Make a final decision about whether the symbol belongs in the
|
||||
local or global GOT. Symbols that bind locally can (and in the
|
||||
case of forced-local symbols, must) live in the local GOT.
|
||||
Those that are aren't in the dynamic symbol table must also
|
||||
live in the local GOT.
|
||||
|
||||
Note that the former condition does not always imply the
|
||||
latter: symbols do not bind locally if they are completely
|
||||
undefined. We'll report undefined symbols later if appropriate. */
|
||||
if (h->root.dynindx == -1
|
||||
|| (h->got_only_for_calls
|
||||
? SYMBOL_CALLS_LOCAL (info, &h->root)
|
||||
: SYMBOL_REFERENCES_LOCAL (info, &h->root)))
|
||||
local or global GOT. */
|
||||
if (mips_use_local_got_p (info, h))
|
||||
/* The symbol belongs in the local GOT. We no longer need this
|
||||
entry if it was only used for relocations; those relocations
|
||||
will be against the null or section symbol instead of H. */
|
||||
@ -5468,10 +5488,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
&& (target_is_16_bit_code_p
|
||||
|| target_is_micromips_code_p))));
|
||||
|
||||
local_p = (h == NULL
|
||||
|| (h->got_only_for_calls
|
||||
? SYMBOL_CALLS_LOCAL (info, &h->root)
|
||||
: SYMBOL_REFERENCES_LOCAL (info, &h->root)));
|
||||
local_p = (h == NULL || mips_use_local_got_p (info, h));
|
||||
|
||||
gp0 = _bfd_get_gp_value (input_bfd);
|
||||
gp = _bfd_get_gp_value (abfd);
|
||||
@ -7955,6 +7972,8 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
unsigned int r_type;
|
||||
struct elf_link_hash_entry *h;
|
||||
bfd_boolean can_make_dynamic_p;
|
||||
bfd_boolean call_reloc_p;
|
||||
bfd_boolean constrain_symbol_p;
|
||||
|
||||
r_symndx = ELF_R_SYM (abfd, rel->r_info);
|
||||
r_type = ELF_R_TYPE (abfd, rel->r_info);
|
||||
@ -7987,12 +8006,30 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
/* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
|
||||
relocation into a dynamic one. */
|
||||
can_make_dynamic_p = FALSE;
|
||||
|
||||
/* Set CALL_RELOC_P to true if the relocation is for a call,
|
||||
and if pointer equality therefore doesn't matter. */
|
||||
call_reloc_p = FALSE;
|
||||
|
||||
/* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
|
||||
into account when deciding how to define the symbol.
|
||||
Relocations in nonallocatable sections such as .pdr and
|
||||
.debug* should have no effect. */
|
||||
constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
|
||||
|
||||
switch (r_type)
|
||||
{
|
||||
case R_MIPS_GOT16:
|
||||
case R_MIPS_CALL16:
|
||||
case R_MIPS_CALL_HI16:
|
||||
case R_MIPS_CALL_LO16:
|
||||
case R_MIPS16_CALL16:
|
||||
case R_MICROMIPS_CALL16:
|
||||
case R_MICROMIPS_CALL_HI16:
|
||||
case R_MICROMIPS_CALL_LO16:
|
||||
call_reloc_p = TRUE;
|
||||
/* Fall through. */
|
||||
|
||||
case R_MIPS_GOT16:
|
||||
case R_MIPS_GOT_HI16:
|
||||
case R_MIPS_GOT_LO16:
|
||||
case R_MIPS_GOT_PAGE:
|
||||
@ -8002,14 +8039,10 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
case R_MIPS_TLS_GD:
|
||||
case R_MIPS_TLS_LDM:
|
||||
case R_MIPS16_GOT16:
|
||||
case R_MIPS16_CALL16:
|
||||
case R_MIPS16_TLS_GOTTPREL:
|
||||
case R_MIPS16_TLS_GD:
|
||||
case R_MIPS16_TLS_LDM:
|
||||
case R_MICROMIPS_GOT16:
|
||||
case R_MICROMIPS_CALL16:
|
||||
case R_MICROMIPS_CALL_HI16:
|
||||
case R_MICROMIPS_CALL_LO16:
|
||||
case R_MICROMIPS_GOT_HI16:
|
||||
case R_MICROMIPS_GOT_LO16:
|
||||
case R_MICROMIPS_GOT_PAGE:
|
||||
@ -8030,12 +8063,27 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
bfd_set_error (bfd_error_bad_value);
|
||||
return FALSE;
|
||||
}
|
||||
can_make_dynamic_p = TRUE;
|
||||
break;
|
||||
|
||||
/* This is just a hint; it can safely be ignored. Don't set
|
||||
has_static_relocs for the corresponding symbol. */
|
||||
case R_MIPS_NONE:
|
||||
case R_MIPS_JALR:
|
||||
case R_MICROMIPS_JALR:
|
||||
/* These relocations have empty fields and are purely there to
|
||||
provide link information. The symbol value doesn't matter. */
|
||||
constrain_symbol_p = FALSE;
|
||||
break;
|
||||
|
||||
case R_MIPS_GPREL16:
|
||||
case R_MIPS_GPREL32:
|
||||
case R_MIPS16_GPREL:
|
||||
case R_MICROMIPS_GPREL16:
|
||||
/* GP-relative relocations always resolve to a definition in a
|
||||
regular input file, ignoring the one-definition rule. This is
|
||||
important for the GP setup sequence in NewABI code, which
|
||||
always resolves to a local function even if other relocations
|
||||
against the symbol wouldn't. */
|
||||
constrain_symbol_p = FALSE;
|
||||
break;
|
||||
|
||||
case R_MIPS_32:
|
||||
@ -8062,35 +8110,8 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
can_make_dynamic_p = TRUE;
|
||||
if (dynobj == NULL)
|
||||
elf_hash_table (info)->dynobj = dynobj = abfd;
|
||||
break;
|
||||
}
|
||||
/* For sections that are not SEC_ALLOC a copy reloc would be
|
||||
output if possible (implying questionable semantics for
|
||||
read-only data objects) or otherwise the final link would
|
||||
fail as ld.so will not process them and could not therefore
|
||||
handle any outstanding dynamic relocations.
|
||||
|
||||
For such sections that are also SEC_DEBUGGING, we can avoid
|
||||
these problems by simply ignoring any relocs as these
|
||||
sections have a predefined use and we know it is safe to do
|
||||
so.
|
||||
|
||||
This is needed in cases such as a global symbol definition
|
||||
in a shared library causing a common symbol from an object
|
||||
file to be converted to an undefined reference. If that
|
||||
happens, then all the relocations against this symbol from
|
||||
SEC_DEBUGGING sections in the object file will resolve to
|
||||
nil. */
|
||||
if ((sec->flags & SEC_DEBUGGING) != 0)
|
||||
break;
|
||||
/* Fall through. */
|
||||
|
||||
default:
|
||||
/* Most static relocations require pointer equality, except
|
||||
for branches. */
|
||||
if (h)
|
||||
h->pointer_equality_needed = TRUE;
|
||||
/* Fall through. */
|
||||
break;
|
||||
|
||||
case R_MIPS_26:
|
||||
case R_MIPS_PC16:
|
||||
@ -8100,13 +8121,28 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
case R_MICROMIPS_PC10_S1:
|
||||
case R_MICROMIPS_PC16_S1:
|
||||
case R_MICROMIPS_PC23_S2:
|
||||
if (h)
|
||||
((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
|
||||
call_reloc_p = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (h)
|
||||
{
|
||||
if (constrain_symbol_p)
|
||||
{
|
||||
if (!can_make_dynamic_p)
|
||||
((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
|
||||
|
||||
if (!call_reloc_p)
|
||||
h->pointer_equality_needed = 1;
|
||||
|
||||
/* We must not create a stub for a symbol that has
|
||||
relocations related to taking the function's address.
|
||||
This doesn't apply to VxWorks, where CALL relocs refer
|
||||
to a .got.plt entry instead of a normal .got entry. */
|
||||
if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
|
||||
((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
|
||||
}
|
||||
|
||||
/* Relocations against the special VxWorks __GOTT_BASE__ and
|
||||
__GOTT_INDEX__ symbols must be left to the loader. Allocate
|
||||
room for them in .rela.dyn. */
|
||||
@ -8387,28 +8423,6 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
h->plt.plist->need_comp = TRUE;
|
||||
}
|
||||
|
||||
/* We must not create a stub for a symbol that has relocations
|
||||
related to taking the function's address. This doesn't apply to
|
||||
VxWorks, where CALL relocs refer to a .got.plt entry instead of
|
||||
a normal .got entry. */
|
||||
if (!htab->is_vxworks && h != NULL)
|
||||
switch (r_type)
|
||||
{
|
||||
default:
|
||||
((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
|
||||
break;
|
||||
case R_MIPS16_CALL16:
|
||||
case R_MIPS_CALL16:
|
||||
case R_MIPS_CALL_HI16:
|
||||
case R_MIPS_CALL_LO16:
|
||||
case R_MIPS_JALR:
|
||||
case R_MICROMIPS_CALL16:
|
||||
case R_MICROMIPS_CALL_HI16:
|
||||
case R_MICROMIPS_CALL_LO16:
|
||||
case R_MICROMIPS_JALR:
|
||||
break;
|
||||
}
|
||||
|
||||
/* See if this reloc would need to refer to a MIPS16 hard-float stub,
|
||||
if there is one. We only need to handle global symbols here;
|
||||
we decide whether to keep or delete stubs for local symbols
|
||||
|
@ -1,3 +1,22 @@
|
||||
2013-10-13 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* ld-mips-elf/pic-and-nonpic-6-n32.ad,
|
||||
ld-mips-elf/pic-and-nonpic-6-n32.dd,
|
||||
ld-mips-elf/pic-and-nonpic-6-n32.gd,
|
||||
ld-mips-elf/pic-and-nonpic-6-n32.nd,
|
||||
ld-mips-elf/pic-and-nonpic-6-n32.rd,
|
||||
ld-mips-elf/pic-and-nonpic-6-n64.ad,
|
||||
ld-mips-elf/pic-and-nonpic-6-n64.dd,
|
||||
ld-mips-elf/pic-and-nonpic-6-n64.gd,
|
||||
ld-mips-elf/pic-and-nonpic-6-n64.nd,
|
||||
ld-mips-elf/pic-and-nonpic-6-n64.rd,
|
||||
ld-mips-elf/pic-and-nonpic-6-o32.ad,
|
||||
ld-mips-elf/pic-and-nonpic-6-o32.dd,
|
||||
ld-mips-elf/pic-and-nonpic-6-o32.gd,
|
||||
ld-mips-elf/pic-and-nonpic-6-o32.nd,
|
||||
ld-mips-elf/pic-and-nonpic-6-o32.rd: Fix symbol value of extf4.
|
||||
No longer expect extf3, extf4 and extd2 to be in the global GOT.
|
||||
|
||||
2013-10-03 Will Newton <will.newton@linaro.org>
|
||||
|
||||
* ld-ifunc/ifunc.exp: Enable ifunc tests for AArch64.
|
||||
|
@ -16,10 +16,10 @@ Dynamic section at offset .* contains .*:
|
||||
0x70000001 \(MIPS_RLD_VERSION\) * 1
|
||||
0x70000005 \(MIPS_FLAGS\) * NOTPOT
|
||||
0x70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
|
||||
0x7000000a \(MIPS_LOCAL_GOTNO\) * 2
|
||||
0x7000000a \(MIPS_LOCAL_GOTNO\) * 5
|
||||
0x70000011 \(MIPS_SYMTABNO\) * 12
|
||||
0x70000012 \(MIPS_UNREFEXTNO\) * .*
|
||||
0x70000013 \(MIPS_GOTSYM\) * 0x5
|
||||
0x70000013 \(MIPS_GOTSYM\) * 0x8
|
||||
0x00000014 \(PLTREL\) * REL
|
||||
0x00000017 \(JMPREL\) * 0x43028
|
||||
0x00000002 \(PLTRELSZ\) * 24 \(bytes\)
|
||||
|
@ -2,13 +2,13 @@
|
||||
#
|
||||
# -32752: lazy resolution function
|
||||
# -32748: reserved for module pointer
|
||||
# -32744: extf2's GOT entry (undefined 0)
|
||||
# -32740: extf3's GOT entry (PLT entry)
|
||||
# -32736: extd2's GOT entry (copy reloc)
|
||||
# -32732: extf1's GOT entry (.MIPS.stubs entry)
|
||||
# -32728: extd1's GOT entry (undefined 0)
|
||||
# -32724: extf4's GOT entry (PLT entry)
|
||||
# -32620: extd4's GOT entry (undefined 0, reloc only)
|
||||
# -32744: extd2's local GOT entry (copy reloc)
|
||||
# -32740: extf3's local GOT entry (PLT entry)
|
||||
# -32736: extf4's local GOT entry (PLT entry)
|
||||
# -32732: extf2's global GOT entry (undefined 0)
|
||||
# -32728: extf1's global GOT entry (.MIPS.stubs entry)
|
||||
# -32724: extd1's global GOT entry (undefined 0)
|
||||
# -32720: extd4's global GOT entry (undefined 0, reloc only)
|
||||
|
||||
.*
|
||||
|
||||
@ -61,14 +61,14 @@ Disassembly of section \.text:
|
||||
44020: 3c1c0006 lui gp,0x6
|
||||
44024: 0399e021 addu gp,gp,t9
|
||||
44028: 279c3fd0 addiu gp,gp,16336
|
||||
4402c: 8f998024 lw t9,-32732\(gp\)
|
||||
44030: 8f848018 lw a0,-32744\(gp\)
|
||||
44034: 8f858028 lw a1,-32728\(gp\)
|
||||
4402c: 8f998028 lw t9,-32728\(gp\)
|
||||
44030: 8f848024 lw a0,-32732\(gp\)
|
||||
44034: 8f85802c lw a1,-32724\(gp\)
|
||||
44038: 0320f809 jalr t9
|
||||
4403c: 8f868020 lw a2,-32736\(gp\)
|
||||
4403c: 8f868018 lw a2,-32744\(gp\)
|
||||
44040: 8f99801c lw t9,-32740\(gp\)
|
||||
44044: 03200008 jr t9
|
||||
44048: 8f84802c lw a0,-32724\(gp\)
|
||||
44048: 8f848020 lw a0,-32736\(gp\)
|
||||
|
||||
0004404c <f3>:
|
||||
4404c: 03e00008 jr ra
|
||||
@ -98,5 +98,5 @@ Disassembly of section \.MIPS\.stubs:
|
||||
440a0: 8f998010 lw t9,-32752\(gp\)
|
||||
440a4: 03e07821 move t3,ra
|
||||
440a8: 0320f809 jalr t9
|
||||
440ac: 24180008 li t8,8
|
||||
440ac: 24180009 li t8,9
|
||||
\.\.\.
|
||||
|
@ -7,14 +7,17 @@ Primary GOT:
|
||||
000a0000 -32752\(gp\) 00000000 Lazy resolver
|
||||
000a0004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
|
||||
|
||||
Local entries:
|
||||
Address Access Initial
|
||||
000a0008 -32744\(gp\) 000a2000
|
||||
000a000c -32740\(gp\) 00043080
|
||||
000a0010 -32736\(gp\) 00043060
|
||||
|
||||
Global entries:
|
||||
Address Access Initial Sym\.Val\. Type Ndx Name
|
||||
000a0008 -32744\(gp\) 00000000 00000000 FUNC UND extf2
|
||||
000a000c -32740\(gp\) 00000000 00000000 FUNC UND extf3
|
||||
000a0010 -32736\(gp\) 000a2000 000a2000 OBJECT 16 extd2
|
||||
000a0014 -32732\(gp\) 000440a0 000440a0 FUNC UND extf1
|
||||
000a0018 -32728\(gp\) 00000000 00000000 OBJECT UND extd1
|
||||
000a001c -32724\(gp\) 00000000 00000000 FUNC UND extf4
|
||||
000a0014 -32732\(gp\) 00000000 00000000 FUNC UND extf2
|
||||
000a0018 -32728\(gp\) 000440a0 000440a0 FUNC UND extf1
|
||||
000a001c -32724\(gp\) 00000000 00000000 OBJECT UND extd1
|
||||
000a0020 -32720\(gp\) 00000000 00000000 OBJECT UND extd4
|
||||
|
||||
|
||||
@ -27,6 +30,6 @@ PLT GOT:
|
||||
|
||||
Entries:
|
||||
Address Initial Sym.Val. Type Ndx Name
|
||||
00081008 00043040 00000000 FUNC UND extf4
|
||||
00081008 00043040 00043060 FUNC UND extf4
|
||||
0008100c 00043040 00000000 FUNC UND extf5
|
||||
00081010 00043040 00000000 FUNC UND extf3
|
||||
|
@ -1,17 +1,40 @@
|
||||
|
||||
Symbol table '\.dynsym' contains .*:
|
||||
#
|
||||
# extf4 is referenced by a JAL and .word. The former requires a PLT entry
|
||||
# and the latter requires pointer equality, which means a symbol value is
|
||||
# needed.
|
||||
#...
|
||||
.*: 00000000 +0 +FUNC +GLOBAL +DEFAULT +UND +extf5
|
||||
.*: 0+43060 +0 +FUNC +GLOBAL +DEFAULT \[MIPS PLT\] +UND +extf4
|
||||
#
|
||||
# extf5 is called but does not have its address taken. It needs a PLT
|
||||
# but no symbol value should be set.
|
||||
#...
|
||||
.*: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf5
|
||||
#
|
||||
# extd2 is referenced by %got, .word and %hi/%lo. The last pair forces
|
||||
# a copy reloc.
|
||||
#
|
||||
.*: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
|
||||
#
|
||||
# extf3 is referenced by a JAL and a GOT CALL reloc. The JAL forces a PLT
|
||||
# that the GOT CALL reloc will also use, but pointer equality isn't needed
|
||||
# and so no symbol value should be set.
|
||||
#
|
||||
.*: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
|
||||
#
|
||||
# extd3 is referenced by .word and %hi/%lo. The latter pair forces
|
||||
# a copy reloc.
|
||||
#...
|
||||
.*: 0+a2018 +28 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd3
|
||||
#
|
||||
# The index on the next line should correspond to MIPS_GOTSYM,
|
||||
# and the remaining symbols should have the same order as the
|
||||
# GOT layout given in the *.dd dump.
|
||||
#...
|
||||
*5: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
|
||||
*6: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
|
||||
*7: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
|
||||
*8: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
|
||||
*9: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
|
||||
*10: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf4
|
||||
#
|
||||
*8: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
|
||||
*9: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
|
||||
*10: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
|
||||
*11: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd4
|
||||
|
||||
#pass
|
||||
|
@ -2,13 +2,13 @@
|
||||
Relocation section '\.rel\.dyn' at offset .* contains .*:
|
||||
* Offset * Info * Type * Sym\.Value * Sym\. Name
|
||||
00000000 * 00000000 * R_MIPS_NONE *
|
||||
000a2018 * [^ ]*7e * R_MIPS_COPY * 000a2018 * extd3
|
||||
000a2000 * [^ ]*7e * R_MIPS_COPY * 000a2000 * extd2
|
||||
000a2018 * [^ ]*7e * R_MIPS_COPY * 000a2018 * extd3
|
||||
000a1000 * [^ ]*03 * R_MIPS_REL32 * 00000000 * extd1
|
||||
000a1014 * [^ ]*03 * R_MIPS_REL32 * 00000000 * extd4
|
||||
|
||||
Relocation section '\.rel\.plt' at offset .* contains .*:
|
||||
* Offset * Info * Type * Sym\.Value * Sym\. Name
|
||||
00081008 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf4
|
||||
00081008 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00043060 * extf4
|
||||
0008100c * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf5
|
||||
00081010 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf3
|
||||
|
@ -16,10 +16,10 @@ Dynamic section at offset .* contains .*:
|
||||
0x0+70000001 \(MIPS_RLD_VERSION\) * 1
|
||||
0x0+70000005 \(MIPS_FLAGS\) * NOTPOT
|
||||
0x0+70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
|
||||
0x0+7000000a \(MIPS_LOCAL_GOTNO\) * 2
|
||||
0x0+7000000a \(MIPS_LOCAL_GOTNO\) * 5
|
||||
0x0+70000011 \(MIPS_SYMTABNO\) * 12
|
||||
0x0+70000012 \(MIPS_UNREFEXTNO\) * .*
|
||||
0x0+70000013 \(MIPS_GOTSYM\) * 0x5
|
||||
0x0+70000013 \(MIPS_GOTSYM\) * 0x8
|
||||
0x0+00000014 \(PLTREL\) * REL
|
||||
0x0+00000017 \(JMPREL\) * 0x43050
|
||||
0x0+00000002 \(PLTRELSZ\) * 48 \(bytes\)
|
||||
|
@ -1,14 +1,14 @@
|
||||
# GOT layout:
|
||||
#
|
||||
# -32752: lazy resolution function
|
||||
# -32744: reserved for module pointer
|
||||
# -32736: extf2's GOT entry (undefined 0)
|
||||
# -32728: extf3's GOT entry (PLT entry)
|
||||
# -32720: extd2's GOT entry (copy reloc)
|
||||
# -32712: extf1's GOT entry (.MIPS.stubs entry)
|
||||
# -32704: extd1's GOT entry (undefined 0)
|
||||
# -32696: extf4's GOT entry (PLT entry)
|
||||
# -32688: extd4's GOT entry (undefined 0, reloc only)
|
||||
# -32748: reserved for module pointer
|
||||
# -32744: extd2's local GOT entry (copy reloc)
|
||||
# -32740: extf3's local GOT entry (PLT entry)
|
||||
# -32736: extf4's local GOT entry (PLT entry)
|
||||
# -32732: extf2's global GOT entry (undefined 0)
|
||||
# -32728: extf1's global GOT entry (.MIPS.stubs entry)
|
||||
# -32724: extd1's global GOT entry (undefined 0)
|
||||
# -32720: extd4's global GOT entry (undefined 0, reloc only)
|
||||
|
||||
.*
|
||||
|
||||
@ -61,14 +61,14 @@ Disassembly of section \.text:
|
||||
44020: 3c1c0006 lui gp,0x6
|
||||
44024: 0399e021 addu gp,gp,t9
|
||||
44028: 279c3fd0 addiu gp,gp,16336
|
||||
4402c: df998038 ld t9,-32712\(gp\)
|
||||
44030: df848020 ld a0,-32736\(gp\)
|
||||
44034: df858040 ld a1,-32704\(gp\)
|
||||
4402c: df998040 ld t9,-32704\(gp\)
|
||||
44030: df848038 ld a0,-32712\(gp\)
|
||||
44034: df858048 ld a1,-32696\(gp\)
|
||||
44038: 0320f809 jalr t9
|
||||
4403c: df868030 ld a2,-32720\(gp\)
|
||||
4403c: df868020 ld a2,-32736\(gp\)
|
||||
44040: df998028 ld t9,-32728\(gp\)
|
||||
44044: 03200008 jr t9
|
||||
44048: df848048 ld a0,-32696\(gp\)
|
||||
44048: df848030 ld a0,-32720\(gp\)
|
||||
|
||||
0+4404c <f3>:
|
||||
4404c: 03e00008 jr ra
|
||||
@ -98,5 +98,5 @@ Disassembly of section \.MIPS\.stubs:
|
||||
440a0: df998010 ld t9,-32752\(gp\)
|
||||
440a4: 03e0782d move t3,ra
|
||||
440a8: 0320f809 jalr t9
|
||||
440ac: 64180008 daddiu t8,zero,8
|
||||
440ac: 64180009 daddiu t8,zero,9
|
||||
\.\.\.
|
||||
|
@ -1,32 +1,35 @@
|
||||
|
||||
Primary GOT:
|
||||
Canonical gp value: 00000000000a7ff0
|
||||
Canonical gp value: 0+0a7ff0
|
||||
|
||||
Reserved entries:
|
||||
Address Access Initial Purpose
|
||||
00000000000a0000 -32752\(gp\) 0000000000000000 Lazy resolver
|
||||
00000000000a0008 -32744\(gp\) 8000000000000000 Module pointer \(GNU extension\)
|
||||
* Address * Access * Initial Purpose
|
||||
0+0a0000 -32752\(gp\) 0+ Lazy resolver
|
||||
0+0a0008 -32744\(gp\) 8000000000000000 Module pointer \(GNU extension\)
|
||||
|
||||
Local entries:
|
||||
* Address * Access * Initial
|
||||
0+0a0010 -32736\(gp\) 0+0a2000
|
||||
0+0a0018 -32728\(gp\) 0+0430c0
|
||||
0+0a0020 -32720\(gp\) 0+0430a0
|
||||
|
||||
Global entries:
|
||||
Address Access Initial Sym\.Val\. Type Ndx Name
|
||||
00000000000a0010 -32736\(gp\) 0000000000000000 0000000000000000 FUNC UND extf2
|
||||
00000000000a0018 -32728\(gp\) 0000000000000000 0000000000000000 FUNC UND extf3
|
||||
00000000000a0020 -32720\(gp\) 00000000000a2000 00000000000a2000 OBJECT 16 extd2
|
||||
00000000000a0028 -32712\(gp\) 00000000000440a0 00000000000440a0 FUNC UND extf1
|
||||
00000000000a0030 -32704\(gp\) 0000000000000000 0000000000000000 OBJECT UND extd1
|
||||
00000000000a0038 -32696\(gp\) 0000000000000000 0000000000000000 FUNC UND extf4
|
||||
00000000000a0040 -32688\(gp\) 0000000000000000 0000000000000000 OBJECT UND extd4
|
||||
* Address * Access * Initial * Sym\.Val\. * Type * Ndx Name
|
||||
0+0a0028 -32712\(gp\) 0+000000 0+000000 FUNC UND extf2
|
||||
0+0a0030 -32704\(gp\) 0+0440a0 0+0440a0 FUNC UND extf1
|
||||
0+0a0038 -32696\(gp\) 0+000000 0+000000 OBJECT UND extd1
|
||||
0+0a0040 -32688\(gp\) 0+000000 0+000000 OBJECT UND extd4
|
||||
|
||||
|
||||
PLT GOT:
|
||||
|
||||
Reserved entries:
|
||||
Address Initial Purpose
|
||||
0000000000081000 0000000000000000 PLT lazy resolver
|
||||
0000000000081008 0000000000000000 Module pointer
|
||||
* Address * Initial * Purpose
|
||||
0+081000 0+ PLT lazy resolver
|
||||
0+081008 0+ Module pointer
|
||||
|
||||
Entries:
|
||||
Address Initial Sym.Val. Type Ndx Name
|
||||
0000000000081010 0000000000043080 0000000000000000 FUNC UND extf4
|
||||
0000000000081018 0000000000043080 0000000000000000 FUNC UND extf5
|
||||
0000000000081020 0000000000043080 0000000000000000 FUNC UND extf3
|
||||
* Address * Initial * Sym.Val. * Type * Ndx Name
|
||||
0+081010 0+043080 0+0430a0 FUNC UND extf4
|
||||
0+081018 0+043080 0+000000 FUNC UND extf5
|
||||
0+081020 0+043080 0+000000 FUNC UND extf3
|
||||
|
@ -1,17 +1,40 @@
|
||||
|
||||
Symbol table '\.dynsym' contains .*:
|
||||
#
|
||||
# extf4 is referenced by a JAL and .word. The former requires a PLT entry
|
||||
# and the latter requires pointer equality, which means a symbol value is
|
||||
# needed.
|
||||
#...
|
||||
.*: 0+430a0 +0 +FUNC +GLOBAL +DEFAULT \[MIPS PLT\] +UND +extf4
|
||||
#
|
||||
# extf5 is called but does not have its address taken. It needs a PLT
|
||||
# but no symbol value should be set.
|
||||
#...
|
||||
.*: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf5
|
||||
#
|
||||
# extd2 is referenced by %got, .word and %hi/%lo. The last pair forces
|
||||
# a copy reloc.
|
||||
#
|
||||
.*: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
|
||||
#
|
||||
# extf3 is referenced by a JAL and a GOT CALL reloc. The JAL forces a PLT
|
||||
# that the GOT CALL reloc will also use, but pointer equality isn't needed
|
||||
# and so no symbol value should be set.
|
||||
#
|
||||
.*: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
|
||||
#
|
||||
# extd3 is referenced by .word and %hi/%lo. The latter pair forces
|
||||
# a copy reloc.
|
||||
#...
|
||||
.*: 0+a2018 +28 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd3
|
||||
#
|
||||
# The index on the next line should correspond to MIPS_GOTSYM,
|
||||
# and the remaining symbols should have the same order as the
|
||||
# GOT layout given in the *.dd dump.
|
||||
#...
|
||||
*5: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
|
||||
*6: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
|
||||
*7: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
|
||||
*8: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
|
||||
*9: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
|
||||
*10: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf4
|
||||
#
|
||||
*8: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
|
||||
*9: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
|
||||
*10: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
|
||||
*11: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd4
|
||||
|
||||
#pass
|
||||
|
@ -4,10 +4,10 @@ Relocation section '\.rel\.dyn' at offset .* contains .*:
|
||||
0+00000 * 0+ * R_MIPS_NONE *
|
||||
*Type2: R_MIPS_NONE *
|
||||
*Type3: R_MIPS_NONE *
|
||||
0+a2018 * [^ ]*7e * R_MIPS_COPY * 0+a2018 * extd3
|
||||
0+a2000 * [^ ]*7e * R_MIPS_COPY * 0+a2000 * extd2
|
||||
*Type2: R_MIPS_NONE *
|
||||
*Type3: R_MIPS_NONE *
|
||||
0+a2000 * [^ ]*7e * R_MIPS_COPY * 0+a2000 * extd2
|
||||
0+a2018 * [^ ]*7e * R_MIPS_COPY * 0+a2018 * extd3
|
||||
*Type2: R_MIPS_NONE *
|
||||
*Type3: R_MIPS_NONE *
|
||||
0+a1000 * [^ ]*03 * R_MIPS_REL32 * 0+00000 * extd1
|
||||
@ -19,7 +19,7 @@ Relocation section '\.rel\.dyn' at offset .* contains .*:
|
||||
|
||||
Relocation section '\.rel\.plt' at offset .* contains .*:
|
||||
* Offset * Info * Type * Sym\. Value * Sym\. Name
|
||||
0+81010 * [^ ]*7f * R_MIPS_JUMP_SLOT * 0+00000 * extf4
|
||||
0+81010 * [^ ]*7f * R_MIPS_JUMP_SLOT * 0+430a0 * extf4
|
||||
*Type2: R_MIPS_NONE *
|
||||
*Type3: R_MIPS_NONE *
|
||||
0+81018 * [^ ]*7f * R_MIPS_JUMP_SLOT * 0+00000 * extf5
|
||||
|
@ -16,10 +16,10 @@ Dynamic section at offset .* contains .*:
|
||||
0x70000001 \(MIPS_RLD_VERSION\) * 1
|
||||
0x70000005 \(MIPS_FLAGS\) * NOTPOT
|
||||
0x70000006 \(MIPS_BASE_ADDRESS\) * 0x40000
|
||||
0x7000000a \(MIPS_LOCAL_GOTNO\) * 2
|
||||
0x7000000a \(MIPS_LOCAL_GOTNO\) * 5
|
||||
0x70000011 \(MIPS_SYMTABNO\) * 12
|
||||
0x70000012 \(MIPS_UNREFEXTNO\) * .*
|
||||
0x70000013 \(MIPS_GOTSYM\) * 0x5
|
||||
0x70000013 \(MIPS_GOTSYM\) * 0x8
|
||||
0x00000014 \(PLTREL\) * REL
|
||||
0x00000017 \(JMPREL\) * 0x43028
|
||||
0x00000002 \(PLTRELSZ\) * 24 \(bytes\)
|
||||
|
@ -2,13 +2,13 @@
|
||||
#
|
||||
# -32752: lazy resolution function
|
||||
# -32748: reserved for module pointer
|
||||
# -32744: extf2's GOT entry (undefined 0)
|
||||
# -32740: extf3's GOT entry (PLT entry)
|
||||
# -32736: extd2's GOT entry (copy reloc)
|
||||
# -32732: extf1's GOT entry (.MIPS.stubs entry)
|
||||
# -32728: extd1's GOT entry (undefined 0)
|
||||
# -32724: extf4's GOT entry (PLT entry)
|
||||
# -32620: extd4's GOT entry (undefined 0, reloc only)
|
||||
# -32744: extd2's local GOT entry (copy reloc)
|
||||
# -32740: extf3's local GOT entry (PLT entry)
|
||||
# -32736: extf4's local GOT entry (PLT entry)
|
||||
# -32732: extf2's global GOT entry (undefined 0)
|
||||
# -32728: extf1's global GOT entry (.MIPS.stubs entry)
|
||||
# -32724: extd1's global GOT entry (undefined 0)
|
||||
# -32720: extd4's global GOT entry (undefined 0, reloc only)
|
||||
|
||||
.*
|
||||
|
||||
@ -61,14 +61,14 @@ Disassembly of section \.text:
|
||||
44020: 3c1c0006 lui gp,0x6
|
||||
44024: 279c3fd0 addiu gp,gp,16336
|
||||
44028: 0399e021 addu gp,gp,t9
|
||||
4402c: 8f998024 lw t9,-32732\(gp\)
|
||||
44030: 8f848018 lw a0,-32744\(gp\)
|
||||
44034: 8f858028 lw a1,-32728\(gp\)
|
||||
4402c: 8f998028 lw t9,-32728\(gp\)
|
||||
44030: 8f848024 lw a0,-32732\(gp\)
|
||||
44034: 8f85802c lw a1,-32724\(gp\)
|
||||
44038: 0320f809 jalr t9
|
||||
4403c: 8f868020 lw a2,-32736\(gp\)
|
||||
4403c: 8f868018 lw a2,-32744\(gp\)
|
||||
44040: 8f99801c lw t9,-32740\(gp\)
|
||||
44044: 03200008 jr t9
|
||||
44048: 8f84802c lw a0,-32724\(gp\)
|
||||
44048: 8f848020 lw a0,-32736\(gp\)
|
||||
|
||||
0004404c <f3>:
|
||||
4404c: 03e00008 jr ra
|
||||
@ -98,5 +98,5 @@ Disassembly of section \.MIPS\.stubs:
|
||||
440a0: 8f998010 lw t9,-32752\(gp\)
|
||||
440a4: 03e07821 move t7,ra
|
||||
440a8: 0320f809 jalr t9
|
||||
440ac: 24180008 li t8,8
|
||||
440ac: 24180009 li t8,9
|
||||
\.\.\.
|
||||
|
@ -7,14 +7,17 @@ Primary GOT:
|
||||
000a0000 -32752\(gp\) 00000000 Lazy resolver
|
||||
000a0004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
|
||||
|
||||
Local entries:
|
||||
Address Access Initial
|
||||
000a0008 -32744\(gp\) 000a2000
|
||||
000a000c -32740\(gp\) 00043080
|
||||
000a0010 -32736\(gp\) 00043060
|
||||
|
||||
Global entries:
|
||||
Address Access Initial Sym\.Val\. Type Ndx Name
|
||||
000a0008 -32744\(gp\) 00000000 00000000 FUNC UND extf2
|
||||
000a000c -32740\(gp\) 00000000 00000000 FUNC UND extf3
|
||||
000a0010 -32736\(gp\) 000a2000 000a2000 OBJECT 16 extd2
|
||||
000a0014 -32732\(gp\) 000440a0 000440a0 FUNC UND extf1
|
||||
000a0018 -32728\(gp\) 00000000 00000000 OBJECT UND extd1
|
||||
000a001c -32724\(gp\) 00000000 00000000 FUNC UND extf4
|
||||
000a0014 -32732\(gp\) 00000000 00000000 FUNC UND extf2
|
||||
000a0018 -32728\(gp\) 000440a0 000440a0 FUNC UND extf1
|
||||
000a001c -32724\(gp\) 00000000 00000000 OBJECT UND extd1
|
||||
000a0020 -32720\(gp\) 00000000 00000000 OBJECT UND extd4
|
||||
|
||||
|
||||
@ -27,6 +30,6 @@ PLT GOT:
|
||||
|
||||
Entries:
|
||||
Address Initial Sym.Val. Type Ndx Name
|
||||
00081008 00043040 00000000 FUNC UND extf4
|
||||
00081008 00043040 00043060 FUNC UND extf4
|
||||
0008100c 00043040 00000000 FUNC UND extf5
|
||||
00081010 00043040 00000000 FUNC UND extf3
|
||||
|
@ -1,17 +1,40 @@
|
||||
|
||||
Symbol table '\.dynsym' contains .*:
|
||||
#
|
||||
# extf4 is referenced by a JAL and .word. The former requires a PLT entry
|
||||
# and the latter requires pointer equality, which means a symbol value is
|
||||
# needed.
|
||||
#...
|
||||
.*: 00000000 +0 +FUNC +GLOBAL +DEFAULT +UND +extf5
|
||||
.*: 0+43060 +0 +FUNC +GLOBAL +DEFAULT \[MIPS PLT\] +UND +extf4
|
||||
#
|
||||
# extf5 is called but does not have its address taken. It needs a PLT
|
||||
# but no symbol value should be set.
|
||||
#...
|
||||
.*: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf5
|
||||
#
|
||||
# extd2 is referenced by %got, .word and %hi/%lo. The last pair forces
|
||||
# a copy reloc.
|
||||
#
|
||||
.*: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
|
||||
#
|
||||
# extf3 is referenced by a JAL and a GOT CALL reloc. The JAL forces a PLT
|
||||
# that the GOT CALL reloc will also use, but pointer equality isn't needed
|
||||
# and so no symbol value should be set.
|
||||
#
|
||||
.*: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
|
||||
#
|
||||
# extd3 is referenced by .word and %hi/%lo. The latter pair forces
|
||||
# a copy reloc.
|
||||
#...
|
||||
.*: 0+a2018 +28 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd3
|
||||
#
|
||||
# The index on the next line should correspond to MIPS_GOTSYM,
|
||||
# and the remaining symbols should have the same order as the
|
||||
# GOT layout given in the *.dd dump.
|
||||
#...
|
||||
*5: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
|
||||
*6: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf3
|
||||
*7: 0+a2000 +24 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +extd2
|
||||
*8: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
|
||||
*9: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
|
||||
*10: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf4
|
||||
#
|
||||
*8: 0+ +0 +FUNC +GLOBAL +DEFAULT +UND +extf2
|
||||
*9: 0+440a0 +0 +FUNC +GLOBAL +DEFAULT +UND +extf1
|
||||
*10: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd1
|
||||
*11: 0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +extd4
|
||||
|
||||
#pass
|
||||
|
@ -2,13 +2,13 @@
|
||||
Relocation section '\.rel\.dyn' at offset .* contains .*:
|
||||
* Offset * Info * Type * Sym\.Value * Sym\. Name
|
||||
00000000 * 00000000 * R_MIPS_NONE *
|
||||
000a2018 * [^ ]*7e * R_MIPS_COPY * 000a2018 * extd3
|
||||
000a2000 * [^ ]*7e * R_MIPS_COPY * 000a2000 * extd2
|
||||
000a2018 * [^ ]*7e * R_MIPS_COPY * 000a2018 * extd3
|
||||
000a1000 * [^ ]*03 * R_MIPS_REL32 * 00000000 * extd1
|
||||
000a1014 * [^ ]*03 * R_MIPS_REL32 * 00000000 * extd4
|
||||
|
||||
Relocation section '\.rel\.plt' at offset .* contains .*:
|
||||
* Offset * Info * Type * Sym\.Value * Sym\. Name
|
||||
00081008 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf4
|
||||
00081008 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00043060 * extf4
|
||||
0008100c * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf5
|
||||
00081010 * [^ ]*7f * R_MIPS_JUMP_SLOT * 00000000 * extf3
|
||||
|
Loading…
Reference in New Issue
Block a user