From: Richard Sandiford Date: Mon, 11 Feb 2013 18:09:24 +0000 (+0000) Subject: bfd/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3dff0dd1e3b7170e2220cb12d3ed281af1b4ee3e;p=binutils-gdb.git bfd/ * elfxx-mips.c (mips_got_entry): Update comments. (mips_elf_multi_got_entry_eq): Rename to... (mips_elf_got_entry_eq): ...this, deleting the old definition. (mips_elf_create_got_info): Remove master_got_p argument. Always use mips_elf_got_entry_eq. (mips_elf_bfd_got, mips_elf_multi_got, mips_elf_create_got_section): Update calls accordingly. ld/testsuite/ * ld-mips-elf/tlsdyn-o32-1.d, ld-mips-elf/tlsdyn-o32-1.got, ld-mips-elf/tlsdyn-o32-2.d, ld-mips-elf/tlsdyn-o32-2.got, ld-mips-elf/tlsdyn-o32-3.d, ld-mips-elf/tlsdyn-o32-3.got, ld-mips-elf/tls-hidden3.d, ld-mips-elf/tls-hidden3.got: Update for new hash table order. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ed3ab9517fe..67a27153d4a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2013-02-11 Richard Sandiford + + * elfxx-mips.c (mips_got_entry): Update comments. + (mips_elf_multi_got_entry_eq): Rename to... + (mips_elf_got_entry_eq): ...this, deleting the old definition. + (mips_elf_create_got_info): Remove master_got_p argument. + Always use mips_elf_got_entry_eq. + (mips_elf_bfd_got, mips_elf_multi_got, mips_elf_create_got_section): + Update calls accordingly. + 2013-02-11 Richard Sandiford * elfxx-mips.c (mips_got_info): Remove bfd2got. diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 64fa3827eaf..7ab99520cb0 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -48,41 +48,26 @@ #include "hashtab.h" /* This structure is used to hold information about one GOT entry. - There are three types of entry: - - (1) absolute addresses - (abfd == NULL) - (2) SYMBOL + OFFSET addresses, where SYMBOL is local to an input bfd - (abfd != NULL, symndx >= 0) - (3) SYMBOL addresses, where SYMBOL is not local to an input bfd - (abfd != NULL, symndx == -1) - - Type (3) entries are treated differently for different types of GOT. - In the "master" GOT -- i.e. the one that describes every GOT - reference needed in the link -- the mips_got_entry is keyed on both - the symbol and the input bfd that references it. If it turns out - that we need multiple GOTs, we can then use this information to - create separate GOTs for each input bfd. - - However, we want each of these separate GOTs to have at most one - entry for a given symbol, so their type (3) entries are keyed only - on the symbol. The input bfd given by the "abfd" field is somewhat - arbitrary in this case. - - This means that when there are multiple GOTs, each GOT has a unique - mips_got_entry for every symbol within it. We can therefore use the - mips_got_entry fields (tls_type and gotidx) to track the symbol's - GOT index. - - However, if it turns out that we need only a single GOT, we continue - to use the master GOT to describe it. There may therefore be several - mips_got_entries for the same symbol, each with a different input bfd. - We want to make sure that each symbol gets a unique GOT entry, so when - there's a single GOT, we use the symbol's hash entry, not the - mips_got_entry fields, to track a symbol's GOT index. */ + There are four types of entry: + + (1) an absolute address + requires: abfd == NULL + fields: d.address + + (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd + requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM + fields: abfd, symndx, d.addend, tls_type + + (3) a SYMBOL address, where SYMBOL is not local to an input bfd + requires: abfd != NULL, symndx == -1 + fields: d.h, tls_type + + (4) a TLS LDM slot + requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM + fields: none; there's only one of these per GOT. */ struct mips_got_entry { - /* The input bfd in which the symbol is defined. */ + /* One input bfd that needs the GOT entry. */ bfd *abfd; /* The index of the symbol, as stored in the relocation r_info, if we have a local symbol; -1 otherwise. */ @@ -95,7 +80,7 @@ struct mips_got_entry that should be added to the symbol value. */ bfd_vma addend; /* If abfd != NULL && symndx == -1, the hash table entry - corresponding to symbol in the GOT. The symbol's entry + corresponding to a symbol in the GOT. The symbol's entry is in the local area if h->global_got_area is GGA_NONE, otherwise it is in the global area. */ struct mips_elf_link_hash_entry *h; @@ -2769,29 +2754,6 @@ mips_elf_hash_bfd_vma (bfd_vma addr) #endif } -/* got_entries only match if they're identical, except for gotidx, so - use all fields to compute the hash, and compare the appropriate - union members. */ - -static int -mips_elf_got_entry_eq (const void *entry1, const void *entry2) -{ - const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1; - const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2; - - return (e1->abfd == e2->abfd - && e1->symndx == e2->symndx - && (e1->tls_type & GOT_TLS_TYPE) == (e2->tls_type & GOT_TLS_TYPE) - && (!e1->abfd ? e1->d.address == e2->d.address - : e1->symndx >= 0 ? e1->d.addend == e2->d.addend - : e1->d.h == e2->d.h)); -} - -/* multi_got_entries are still a match in the case of global objects, - even if the input bfd in which they're referenced differs, so the - hash computation and compare functions are adjusted - accordingly. */ - static hashval_t mips_elf_got_entry_hash (const void *entry_) { @@ -2807,7 +2769,7 @@ mips_elf_got_entry_hash (const void *entry_) } static int -mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2) +mips_elf_got_entry_eq (const void *entry1, const void *entry2) { const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1; const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2; @@ -2840,11 +2802,10 @@ mips_got_page_entry_eq (const void *entry1_, const void *entry2_) return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx; } -/* Create and return a new mips_got_info structure. MASTER_GOT_P - is true if this is the master GOT rather than a multigot. */ +/* Create and return a new mips_got_info structure. */ static struct mips_got_info * -mips_elf_create_got_info (bfd *abfd, bfd_boolean master_got_p) +mips_elf_create_got_info (bfd *abfd) { struct mips_got_info *g; @@ -2853,12 +2814,8 @@ mips_elf_create_got_info (bfd *abfd, bfd_boolean master_got_p) return NULL; g->tls_ldm_offset = MINUS_ONE; - if (master_got_p) - g->got_entries = htab_try_create (1, mips_elf_got_entry_hash, - mips_elf_got_entry_eq, NULL); - else - g->got_entries = htab_try_create (1, mips_elf_got_entry_hash, - mips_elf_multi_got_entry_eq, NULL); + g->got_entries = htab_try_create (1, mips_elf_got_entry_hash, + mips_elf_got_entry_eq, NULL); if (g->got_entries == NULL) return NULL; @@ -2883,7 +2840,7 @@ mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p) tdata = mips_elf_tdata (abfd); if (!tdata->got && create_p) - tdata->got = mips_elf_create_got_info (abfd, FALSE); + tdata->got = mips_elf_create_got_info (abfd); return tdata->got; } @@ -4594,7 +4551,7 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, /* If we do not find any suitable primary GOT, create an empty one. */ if (got_per_bfd_arg.primary == NULL) - g->next = mips_elf_create_got_info (abfd, FALSE); + g->next = mips_elf_create_got_info (abfd); else g->next = got_per_bfd_arg.primary; g->next->next = got_per_bfd_arg.current; @@ -4904,7 +4861,7 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; - htab->got_info = mips_elf_create_got_info (abfd, TRUE); + htab->got_info = mips_elf_create_got_info (abfd); mips_elf_section_data (s)->elf.this_hdr.sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index bd7b94b4f05..376b119dc58 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2013-02-11 Richard Sandiford + + * ld-mips-elf/tlsdyn-o32-1.d, ld-mips-elf/tlsdyn-o32-1.got, + ld-mips-elf/tlsdyn-o32-2.d, ld-mips-elf/tlsdyn-o32-2.got, + ld-mips-elf/tlsdyn-o32-3.d, ld-mips-elf/tlsdyn-o32-3.got, + ld-mips-elf/tls-hidden3.d, ld-mips-elf/tls-hidden3.got: Update + for new hash table order. + 2013-02-11 Richard Sandiford * ld-mips-elf/tls-hidden4.got, ld-mips-elf/tls-multi-got-1.d, diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3.d b/ld/testsuite/ld-mips-elf/tls-hidden3.d index b6279061352..fda8f0623cc 100644 --- a/ld/testsuite/ld-mips-elf/tls-hidden3.d +++ b/ld/testsuite/ld-mips-elf/tls-hidden3.d @@ -6,19 +6,19 @@ Disassembly of section \.text: # # The TLS entries are ordered as follows: # -# foo0 (-0x7ff0 + 0x20) +# foo3 (-0x7ff0 + 0x20) # foo1 (-0x7ff0 + 0x24) # foo2 (-0x7ff0 + 0x28) -# foo3 (-0x7ff0 + 0x2c) +# foo0 (-0x7ff0 + 0x2c) # # Any order would be acceptable, but it must match the .got dump. # 00080c00 <\.text>: - 80c00: 8f84801c lw a0,-32740\(gp\) + 80c00: 8f848028 lw a0,-32728\(gp\) 80c04: 8f848020 lw a0,-32736\(gp\) 80c08: 8f848024 lw a0,-32732\(gp\) - 80c0c: 8f848028 lw a0,-32728\(gp\) - 80c10: 8f84801c lw a0,-32740\(gp\) + 80c0c: 8f84801c lw a0,-32740\(gp\) + 80c10: 8f848028 lw a0,-32728\(gp\) 80c14: 8f848020 lw a0,-32736\(gp\) 80c18: 8f848024 lw a0,-32732\(gp\) - 80c1c: 8f848028 lw a0,-32728\(gp\) + 80c1c: 8f84801c lw a0,-32740\(gp\) diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3.got b/ld/testsuite/ld-mips-elf/tls-hidden3.got index eb8258edf9f..a0c180ca570 100644 --- a/ld/testsuite/ld-mips-elf/tls-hidden3.got +++ b/ld/testsuite/ld-mips-elf/tls-hidden3.got @@ -11,13 +11,13 @@ # # The order of the TLS entries is: # -# foo0 (offset 0x20) +# foo3 (offset 0x20) # foo1 (offset 0x24) # foo2 (offset 0x28) -# foo3 (offset 0x2c) +# foo0 (offset 0x2c) # # Any order would be acceptable, but it must match the .d dump. # Contents of section \.got: - 90000 00000000 80000000 00000000 0000abc0 .* - 90010 0000abc4 0000abc8 0000abcc .* + 90000 00000000 80000000 00000000 0000abcc .* + 90010 0000abc4 0000abc8 0000abc0 .* diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d index ac591654f56..77c210f0524 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d @@ -12,19 +12,19 @@ Disassembly of section .text: .*: 03a0f021 move s8,sp .*: afbc0000 sw gp,0\(sp\) .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848020 addiu a0,gp,-32736 + .*: 27848028 addiu a0,gp,-32728 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848034 addiu a0,gp,-32716 + .*: 2784801c addiu a0,gp,-32740 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848028 addiu a0,gp,-32728 + .*: 27848034 addiu a0,gp,-32716 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) @@ -33,7 +33,7 @@ Disassembly of section .text: .*: 24638000 addiu v1,v1,-32768 .*: 00621821 addu v1,v1,v0 .*: 7c02283b rdhwr v0,\$5 - .*: 8f83801c lw v1,-32740\(gp\) + .*: 8f838024 lw v1,-32732\(gp\) .*: 00000000 nop .*: 00621821 addu v1,v1,v0 .*: 8f838030 lw v1,-32720\(gp\) @@ -62,19 +62,19 @@ Disassembly of section .text: .*: 03a0f021 move s8,sp .*: afbc0000 sw gp,0\(sp\) .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848020 addiu a0,gp,-32736 + .*: 27848028 addiu a0,gp,-32728 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848034 addiu a0,gp,-32716 + .*: 2784801c addiu a0,gp,-32740 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848028 addiu a0,gp,-32728 + .*: 27848034 addiu a0,gp,-32716 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) @@ -83,7 +83,7 @@ Disassembly of section .text: .*: 24638000 addiu v1,v1,-32768 .*: 00621821 addu v1,v1,v0 .*: 7c02283b rdhwr v0,\$5 - .*: 8f83801c lw v1,-32740\(gp\) + .*: 8f838024 lw v1,-32732\(gp\) .*: 00000000 nop .*: 00621821 addu v1,v1,v0 .*: 8f838030 lw v1,-32720\(gp\) diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got index 427fc2fac7a..fe067080b28 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got @@ -4,15 +4,15 @@ DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 00000000 R_MIPS_NONE \*ABS\* -10000030 R_MIPS_TLS_DTPMOD32 tlsbin_gd -10000034 R_MIPS_TLS_DTPREL32 tlsbin_gd -10000044 R_MIPS_TLS_DTPMOD32 tlsvar_gd -10000048 R_MIPS_TLS_DTPREL32 tlsvar_gd +10000038 R_MIPS_TLS_DTPMOD32 tlsbin_gd +1000003c R_MIPS_TLS_DTPREL32 tlsbin_gd +1000002c R_MIPS_TLS_DTPMOD32 tlsvar_gd +10000030 R_MIPS_TLS_DTPREL32 tlsvar_gd 10000040 R_MIPS_TLS_TPREL32 tlsvar_ie -1000002c R_MIPS_TLS_TPREL32 tlsbin_ie +10000034 R_MIPS_TLS_TPREL32 tlsbin_ie Contents of section .got: 10000020 00000000 80000000 004004ac 00000000 .........@...... - 10000030 00000000 00000000 00000001 00000000 ................ - 10000040 00000000 00000000 00000000 ............ + 10000030 00000000 00000000 00000000 00000000 ................ + 10000040 00000000 00000001 00000000 ............ diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d index 509483ea4bc..77c210f0524 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d @@ -18,13 +18,13 @@ Disassembly of section .text: .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848034 addiu a0,gp,-32716 + .*: 2784801c addiu a0,gp,-32740 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848020 addiu a0,gp,-32736 + .*: 27848034 addiu a0,gp,-32716 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) @@ -33,7 +33,7 @@ Disassembly of section .text: .*: 24638000 addiu v1,v1,-32768 .*: 00621821 addu v1,v1,v0 .*: 7c02283b rdhwr v0,\$5 - .*: 8f83801c lw v1,-32740\(gp\) + .*: 8f838024 lw v1,-32732\(gp\) .*: 00000000 nop .*: 00621821 addu v1,v1,v0 .*: 8f838030 lw v1,-32720\(gp\) @@ -68,13 +68,13 @@ Disassembly of section .text: .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848034 addiu a0,gp,-32716 + .*: 2784801c addiu a0,gp,-32740 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848020 addiu a0,gp,-32736 + .*: 27848034 addiu a0,gp,-32716 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) @@ -83,7 +83,7 @@ Disassembly of section .text: .*: 24638000 addiu v1,v1,-32768 .*: 00621821 addu v1,v1,v0 .*: 7c02283b rdhwr v0,\$5 - .*: 8f83801c lw v1,-32740\(gp\) + .*: 8f838024 lw v1,-32732\(gp\) .*: 00000000 nop .*: 00621821 addu v1,v1,v0 .*: 8f838030 lw v1,-32720\(gp\) diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got index 46ad88f5613..58502a78426 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got @@ -6,13 +6,13 @@ OFFSET TYPE VALUE 00000000 R_MIPS_NONE \*ABS\* 10000038 R_MIPS_TLS_DTPMOD32 tlsbin_gd 1000003c R_MIPS_TLS_DTPREL32 tlsbin_gd -10000044 R_MIPS_TLS_DTPMOD32 tlsvar_gd -10000048 R_MIPS_TLS_DTPREL32 tlsvar_gd +1000002c R_MIPS_TLS_DTPMOD32 tlsvar_gd +10000030 R_MIPS_TLS_DTPREL32 tlsvar_gd 10000040 R_MIPS_TLS_TPREL32 tlsvar_ie -1000002c R_MIPS_TLS_TPREL32 tlsbin_ie +10000034 R_MIPS_TLS_TPREL32 tlsbin_ie Contents of section .got: 10000020 00000000 80000000 004004ac 00000000 .* - 10000030 00000001 00000000 00000000 00000000 .* - 10000040 00000000 00000000 00000000 .* + 10000030 00000000 00000000 00000000 00000000 .* + 10000040 00000000 00000001 00000000 .* diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d index 2a1480ab3b1..5c1ffe406c2 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d @@ -18,13 +18,13 @@ Disassembly of section .text: .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848034 addiu a0,gp,-32716 + .*: 2784801c addiu a0,gp,-32740 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848020 addiu a0,gp,-32736 + .*: 27848034 addiu a0,gp,-32716 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) @@ -33,7 +33,7 @@ Disassembly of section .text: .*: 24638000 addiu v1,v1,-32768 .*: 00621821 addu v1,v1,v0 .*: 7c02283b rdhwr v0,\$5 - .*: 8f83801c lw v1,-32740\(gp\) + .*: 8f838024 lw v1,-32732\(gp\) .*: 00000000 nop .*: 00621821 addu v1,v1,v0 .*: 8f838030 lw v1,-32720\(gp\) @@ -64,13 +64,13 @@ Disassembly of section .text: .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848034 addiu a0,gp,-32716 + .*: 2784801c addiu a0,gp,-32740 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) .*: 00000000 nop .*: 8f998018 lw t9,-32744\(gp\) - .*: 27848020 addiu a0,gp,-32736 + .*: 27848034 addiu a0,gp,-32716 .*: 0320f809 jalr t9 .*: 00000000 nop .*: 8fdc0000 lw gp,0\(s8\) @@ -79,7 +79,7 @@ Disassembly of section .text: .*: 24638000 addiu v1,v1,-32768 .*: 00621821 addu v1,v1,v0 .*: 7c02283b rdhwr v0,\$5 - .*: 8f83801c lw v1,-32740\(gp\) + .*: 8f838024 lw v1,-32732\(gp\) .*: 00000000 nop .*: 00621821 addu v1,v1,v0 .*: 8f838030 lw v1,-32720\(gp\) diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got index 5a7d608c0f9..9980d3c6ddf 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got @@ -6,13 +6,13 @@ OFFSET TYPE VALUE 00000000 R_MIPS_NONE \*ABS\* 10000038 R_MIPS_TLS_DTPMOD32 tlsbin_gd 1000003c R_MIPS_TLS_DTPREL32 tlsbin_gd -10000044 R_MIPS_TLS_DTPMOD32 tlsvar_gd -10000048 R_MIPS_TLS_DTPREL32 tlsvar_gd +1000002c R_MIPS_TLS_DTPMOD32 tlsvar_gd +10000030 R_MIPS_TLS_DTPREL32 tlsvar_gd 10000040 R_MIPS_TLS_TPREL32 tlsvar_ie -1000002c R_MIPS_TLS_TPREL32 tlsbin_ie +10000034 R_MIPS_TLS_TPREL32 tlsbin_ie Contents of section .got: 10000020 00000000 80000000 0040055c 00000000 .* - 10000030 00000001 00000000 00000000 00000000 .* - 10000040 00000000 00000000 00000000 .* + 10000030 00000000 00000000 00000000 00000000 .* + 10000040 00000000 00000001 00000000 .*