PARAMS ((bfd *, struct bfd_link_info *));
static bfd_vma dtpoff_base
PARAMS ((struct bfd_link_info *));
+static bfd_vma tpoff
+ PARAMS ((struct bfd_link_info *, bfd_vma));
static asection * sh_elf_gc_mark_hook
PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
struct elf_link_hash_entry *, Elf_Internal_Sym *));
/* Number of pc-relative relocs copied for the input section. */
bfd_size_type pc_count;
-
- /* If TRUE, R_SH_TLS_TPOFF32 relocation is generated. */
- bfd_boolean tls_tpoff32;
};
/* sh ELF linker hash entry. */
will be called from elflink.h. If elflink.h doesn't call our
finish_dynamic_symbol routine, we'll need to do something about
initializing any .plt and .got entries in sh_elf_relocate_section. */
-#define WILL_CALL_FINISH_DYNAMIC_SYMBOL(DYN, INFO, H) \
+#define WILL_CALL_FINISH_DYNAMIC_SYMBOL(DYN, SHARED, H) \
((DYN) \
- && ((INFO)->shared \
+ && ((SHARED) \
|| ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0) \
&& ((H)->dynindx != -1 \
|| ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0))
return FALSE;
}
- if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
+ if (info->shared
+ || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
{
asection *s = htab->splt;
if (tls_type == GOT_TLS_GD)
s->_raw_size += 4;
dyn = htab->root.dynamic_sections_created;
- /* R_SH_TLS_IE_32 needs one dynamic relocation,
+ /* R_SH_TLS_IE_32 needs one dynamic relocation if dynamic,
R_SH_TLS_GD needs one if local symbol and two if global. */
if ((tls_type == GOT_TLS_GD && h->dynindx == -1)
- || tls_type == GOT_TLS_IE)
+ || (tls_type == GOT_TLS_IE && dyn))
htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
else if (tls_type == GOT_TLS_GD)
htab->srelgot->_raw_size += 2 * sizeof (Elf32_External_Rela);
- else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h))
+ else if (info->shared ||
+ WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
}
else
eh->datalabel_got.offset = s->_raw_size;
s->_raw_size += 4;
dyn = htab->root.dynamic_sections_created;
- if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h))
+ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h))
htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
}
else
}
else
{
- for (p = eh->dyn_relocs; p; p = p->next)
- if (p->tls_tpoff32)
- goto keep;
-
/* For the non-shared case, discard space for relocs against
symbols which turn out to need copy relocs or are not
dynamic. */
|| r_type == R_SH_GOT_MEDLOW16
|| r_type == R_SH_GOT_MEDHI16
|| r_type == R_SH_GOT_HI16)
- && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h)
+ && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
&& (! info->shared
|| (! info->symbolic && h->dynindx != -1)
|| (h->elf_link_hash_flags
BFD_ASSERT (off != (bfd_vma) -1);
dyn = htab->root.dynamic_sections_created;
- if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h)
+ if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
|| (info->shared
&& (info->symbolic || h->dynindx == -1
|| (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
if (! info->shared
&& (h->dynindx == -1
|| (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
- {
- struct elf_sh_dyn_relocs *p;
-
- /* If TPOFF32 relocation can be created, convert it. */
- for (p = sh_elf_hash_entry (h)->dyn_relocs; p; p = p->next)
- if (p->sec == input_section && p->tls_tpoff32)
- {
- r_type = R_SH_TLS_LE_32;
- break;
- }
- }
+ r_type = R_SH_TLS_LE_32;
}
if (r_type == R_SH_TLS_GD_32 && tls_type == GOT_TLS_IE)
{
bfd_vma offset;
unsigned short insn;
- int indx;
- Elf_Internal_Rela outrel;
- bfd_byte *loc;
if (ELF32_R_TYPE (rel->r_info) == R_SH_TLS_GD_32)
{
bfd_put_16 (output_bfd, 0x0009, contents + offset + 4);
}
- if (sreloc == NULL)
- {
- const char *name;
-
- name = (bfd_elf_string_from_elf_section
- (input_bfd,
- elf_elfheader (input_bfd)->e_shstrndx,
- elf_section_data (input_section)->rel_hdr.sh_name));
- if (name == NULL)
- return FALSE;
-
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
- && strcmp (bfd_get_section_name (input_bfd,
- input_section),
- name + 5) == 0);
-
- sreloc = bfd_get_section_by_name (dynobj, name);
- BFD_ASSERT (sreloc != NULL);
- }
-
- if (h == NULL
- || h->dynindx == -1
- || (! info->shared
- && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
- indx = 0;
- else
- indx = h->dynindx;
- outrel.r_offset = (input_section->output_section->vma
- + input_section->output_offset
- + rel->r_offset);
- outrel.r_info = ELF32_R_INFO (indx, R_SH_TLS_TPOFF32);
- if (indx == 0)
- outrel.r_addend = relocation - dtpoff_base (info);
- else
- outrel.r_addend = 0;
-
- loc = sreloc->contents;
- loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
- bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
+ bfd_put_32 (output_bfd, tpoff (info, relocation),
+ contents + rel->r_offset);
continue;
}
off = local_got_offsets[r_symndx];
}
+ /* Relocate R_SH_TLS_IE_32 directly when statically linking. */
+ if (r_type == R_SH_TLS_IE_32
+ && ! htab->root.dynamic_sections_created)
+ {
+ off &= ~1;
+ bfd_put_32 (output_bfd, tpoff (info, relocation),
+ sgot->contents + off);
+ bfd_put_32 (output_bfd, sgot->output_offset + off,
+ contents + rel->r_offset);
+ continue;
+ }
+
if ((off & 1) != 0)
off &= ~1;
else
outrel.r_offset = (sgot->output_section->vma
+ sgot->output_offset + off);
- if (h == NULL
- || h->dynindx == -1
- || (! info->shared
- && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+ if (h == NULL || h->dynindx == -1)
indx = 0;
else
indx = h->dynindx;
+
dr_type = (r_type == R_SH_TLS_GD_32 ? R_SH_TLS_DTPMOD32 :
R_SH_TLS_TPOFF32);
if (dr_type == R_SH_TLS_TPOFF32 && indx == 0)
case R_SH_TLS_LDO_32:
if (! info->shared)
- {
- int indx;
- Elf_Internal_Rela outrel;
- bfd_byte *loc;
-
- if (sreloc == NULL)
- {
- const char *name;
-
- name = (bfd_elf_string_from_elf_section
- (input_bfd,
- elf_elfheader (input_bfd)->e_shstrndx,
- elf_section_data (input_section)->rel_hdr.sh_name));
- if (name == NULL)
- return FALSE;
-
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
- && strcmp (bfd_get_section_name (input_bfd,
- input_section),
- name + 5) == 0);
-
- sreloc = bfd_get_section_by_name (dynobj, name);
- BFD_ASSERT (sreloc != NULL);
- }
-
- indx = (h && h->dynindx != -1) ? h->dynindx : 0;
- outrel.r_offset = (input_section->output_section->vma
- + input_section->output_offset
- + rel->r_offset);
- outrel.r_info = ELF32_R_INFO (indx, R_SH_TLS_TPOFF32);
- if (indx == 0)
- outrel.r_addend = relocation - dtpoff_base (info);
- else
- outrel.r_addend = 0;
-
- loc = sreloc->contents;
- loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
- bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
- continue;
- }
+ relocation = tpoff (info, relocation);
else
relocation -= dtpoff_base (info);
Elf_Internal_Rela outrel;
bfd_byte *loc;
+ if (! info->shared)
+ {
+ relocation = tpoff (info, relocation);
+ addend = rel->r_addend;
+ goto final_link_relocate;
+ }
+
if (sreloc == NULL)
{
const char *name;
BFD_ASSERT (sreloc != NULL);
}
- indx = (h && h->dynindx != -1) ? h->dynindx : 0;
+ if (h == NULL || h->dynindx == -1)
+ indx = 0;
+ else
+ indx = h->dynindx;
+
outrel.r_offset = (input_section->output_section->vma
+ input_section->output_offset
+ rel->r_offset);
dtpoff_base (info)
struct bfd_link_info *info;
{
- /* If tls_segment is NULL, we should have signalled an error already. */
- if (elf_hash_table (info)->tls_segment == NULL)
- return 0;
+ /* If tls_segment is NULL, we should have signalled an error already. */
+ if (elf_hash_table (info)->tls_segment == NULL)
+ return 0;
return elf_hash_table (info)->tls_segment->start;
}
+/* Return the relocation value for R_SH_TLS_TPOFF32.. */
+
+static bfd_vma
+tpoff (info, address)
+ struct bfd_link_info *info;
+ bfd_vma address;
+{
+ /* If tls_segment is NULL, we should have signalled an error already. */
+ if (elf_hash_table (info)->tls_segment == NULL)
+ return 0;
+ /* SH TLS ABI is variant I and static TLS block start just after tcbhead
+ structure which has 2 pointer fields. */
+ return (address - dtpoff_base (info) + 8);
+}
+
static asection *
sh_elf_gc_mark_hook (sec, info, rel, h, sym)
asection *sec;
return FALSE;
break;
- force_got:
case R_SH_TLS_IE_32:
if (info->shared)
info->flags |= DF_STATIC_TLS;
/* FALLTHROUGH */
+ force_got:
case R_SH_TLS_GD_32:
case R_SH_GOT32:
#ifdef INCLUDE_SHMEDIA
p->sec = sec;
p->count = 0;
p->pc_count = 0;
- p->tls_tpoff32 = FALSE;
}
p->count += 1;
return FALSE;
}
- if (ELF32_R_TYPE (rel->r_info) == R_SH_TLS_LD_32)
- break;
+ break;
- /* FALLTHROUGH */
case R_SH_TLS_LDO_32:
- /* We make a R_SH_TLS_TPOFF32 relocation. Count it as a
- copy relocation. */
- if (! info->shared)
- {
- struct elf_sh_dyn_relocs *p;
- struct elf_sh_dyn_relocs **head;
-
- if (dynobj == NULL)
- htab->root.dynobj = dynobj = abfd;
-
- if (sreloc == NULL)
- {
- const char *name;
-
- name = (bfd_elf_string_from_elf_section
- (abfd,
- elf_elfheader (abfd)->e_shstrndx,
- elf_section_data (sec)->rel_hdr.sh_name));
- if (name == NULL)
- return FALSE;
-
- BFD_ASSERT (strncmp (name, ".rela", 5) == 0
- && strcmp (bfd_get_section_name (abfd, sec),
- name + 5) == 0);
-
- sreloc = bfd_get_section_by_name (dynobj, name);
- if (sreloc == NULL)
- {
- flagword flags;
-
- sreloc = bfd_make_section (dynobj, name);
- flags = (SEC_HAS_CONTENTS | SEC_READONLY
- | SEC_IN_MEMORY | SEC_LINKER_CREATED);
- if ((sec->flags & SEC_ALLOC) != 0)
- flags |= SEC_ALLOC | SEC_LOAD;
- if (sreloc == NULL
- || ! bfd_set_section_flags (dynobj, sreloc, flags)
- || ! bfd_set_section_alignment (dynobj, sreloc, 2))
- return FALSE;
- }
- elf_section_data (sec)->sreloc = sreloc;
- if (sec->flags & SEC_READONLY)
- info->flags |= DF_TEXTREL;
- }
-
- /* If this is a global symbol, we count the number of
- relocations we need for this symbol. */
- if (h != NULL)
- head = &((struct elf_sh_link_hash_entry *) h)->dyn_relocs;
- else
- {
- asection *s;
-
- /* Track dynamic relocs needed for local syms too. */
- s = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
- sec, r_symndx);
- if (s == NULL)
- return FALSE;
-
- head = ((struct elf_sh_dyn_relocs **)
- &elf_section_data (s)->local_dynrel);
- }
-
- p = *head;
- if (p == NULL || p->sec != sec)
- {
- bfd_size_type amt = sizeof (*p);
- p = ((struct elf_sh_dyn_relocs *) bfd_alloc (dynobj, amt));
- if (p == NULL)
- return FALSE;
- p->next = *head;
- *head = p;
- p->sec = sec;
- p->count = 0;
- p->pc_count = 0;
- p->tls_tpoff32 = FALSE;
- }
-
- p->count += 1;
- p->tls_tpoff32 = TRUE;
- }
+ /* Nothing to do. */
break;
default:
401052: 09 00 nop
401054: 09 00 nop
401056: 09 00 nop
- 401058: 03 d4 mov\.l 401068 <fn2\+0x68>,r4 ! 0x0
+ 401058: 03 d4 mov\.l 401068 <fn2\+0x68>,r4 ! 0x8
40105a: 12 00 stc gbr,r0
40105c: 4c 30 add r4,r0
40105e: 09 00 nop
401062: 09 00 nop
401064: 04 a0 bra 401070 <fn2\+0x70>
401066: 09 00 nop
- 401068: 00 00 .*[ ]*.*
+ 401068: 08 00 .*[ ]*.*
40106a: 00 00 .*[ ]*.*
40106c: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
40106e: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
401072: 09 00 nop
401074: 09 00 nop
401076: 09 00 nop
- 401078: 03 d4 mov\.l 401088 <fn2\+0x88>,r4 ! 0x0
+ 401078: 03 d4 mov\.l 401088 <fn2\+0x88>,r4 ! 0x10
40107a: 12 00 stc gbr,r0
40107c: 4c 30 add r4,r0
40107e: 09 00 nop
401082: 09 00 nop
401084: 04 a0 bra 401090 <fn2\+0x90>
401086: 09 00 nop
- 401088: 00 00 .*[ ]*.*
+ 401088: 10 00 .*[ ]*.*
40108a: 00 00 .*[ ]*.*
40108c: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
40108e: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
401092: 09 00 nop
401094: 09 00 nop
401096: 09 00 nop
- 401098: 03 d4 mov\.l 4010a8 <fn2\+0xa8>,r4 ! 0x0
+ 401098: 03 d4 mov\.l 4010a8 <fn2\+0xa8>,r4 ! 0x18
40109a: 12 00 stc gbr,r0
40109c: 4c 30 add r4,r0
40109e: 09 00 nop
4010a2: 09 00 nop
4010a4: 04 a0 bra 4010b0 <fn2\+0xb0>
4010a6: 09 00 nop
- 4010a8: 00 00 .*[ ]*.*
+ 4010a8: 18 00 .*[ ]*.*
4010aa: 00 00 .*[ ]*.*
4010ac: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
4010ae: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
4010ce: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
4010d0: 09 00 nop
4010d2: 09 00 nop
- 4010d4: 2c d1 mov\.l 401188 <fn2\+0x188>,r1 ! 0x0
+ 4010d4: 2c d1 mov\.l 401188 <fn2\+0x188>,r1 ! 0x10
4010d6: 0c 31 add r0,r1
4010d8: 09 00 nop
4010da: 09 00 nop
- 4010dc: 2b d2 mov\.l 40118c <fn2\+0x18c>,r2 ! 0x0
+ 4010dc: 2b d2 mov\.l 40118c <fn2\+0x18c>,r2 ! 0x14
4010de: 0c 32 add r0,r2
4010e0: 09 00 nop
4010e2: 09 00 nop
4010fe: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
401100: 09 00 nop
401102: 09 00 nop
- 401104: 22 d1 mov\.l 401190 <fn2\+0x190>,r1 ! 0x0
+ 401104: 22 d1 mov\.l 401190 <fn2\+0x190>,r1 ! 0x18
401106: 0c 31 add r0,r1
401108: 09 00 nop
40110a: 09 00 nop
- 40110c: 21 d2 mov\.l 401194 <fn2\+0x194>,r2 ! 0x0
+ 40110c: 21 d2 mov\.l 401194 <fn2\+0x194>,r2 ! 0x1c
40110e: 0c 32 add r0,r2
401110: 09 00 nop
401112: 09 00 nop
401142: 09 00 nop
401144: 09 00 nop
401146: 09 00 nop
- 401148: 02 d0 mov\.l 401154 <fn2\+0x154>,r0 ! 0x0
+ 401148: 02 d0 mov\.l 401154 <fn2\+0x154>,r0 ! 0x8
40114a: 12 01 stc gbr,r1
40114c: 09 00 nop
40114e: 03 a0 bra 401158 <fn2\+0x158>
401150: 0c 31 add r0,r1
401152: 09 00 nop
- 401154: 00 00 .*[ ]*.*
+ 401154: 08 00 .*[ ]*.*
401156: 00 00 .*[ ]*.*
401158: 09 00 nop
40115a: 09 00 nop
40115c: 09 00 nop
40115e: 09 00 nop
- 401160: 02 d0 mov\.l 40116c <fn2\+0x16c>,r0 ! 0x0
+ 401160: 02 d0 mov\.l 40116c <fn2\+0x16c>,r0 ! 0x18
401162: 12 01 stc gbr,r1
401164: 09 00 nop
401166: 03 a0 bra 401170 <fn2\+0x170>
401168: 0c 31 add r0,r1
40116a: 09 00 nop
- 40116c: 00 00 .*[ ]*.*
+ 40116c: 18 00 .*[ ]*.*
40116e: 00 00 .*[ ]*.*
401170: 09 00 nop
401172: 09 00 nop
401182: 09 00 nop
401184: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
401186: 01 00 .*[ ]*.*
+ 401188: 10 00 .*[ ]*.*
+ 40118a: 00 00 .*[ ]*.*
+ 40118c: 14 00 .*[ ]*.*
+ 40118e: 00 00 .*[ ]*.*
+ 401190: 18 00 .*[ ]*.*
+ 401192: 00 00 .*[ ]*.*
+ 401194: 1c 00 .*[ ]*.*
\.\.\.
00402000 <_start>:
402026: 09 00 nop
402028: 09 00 nop
40202a: 09 00 nop
- 40202c: 02 d0 mov\.l 402038 <_start\+0x38>,r0 ! 0x0
+ 40202c: 02 d0 mov\.l 402038 <_start\+0x38>,r0 ! 0x20
40202e: 12 01 stc gbr,r1
402030: 09 00 nop
402032: 03 a0 bra 40203c <_start\+0x3c>
402034: 0c 31 add r0,r1
402036: 09 00 nop
- 402038: 00 00 .*[ ]*.*
+ 402038: 20 00 .*[ ]*.*
40203a: 00 00 .*[ ]*.*
40203c: 09 00 nop
40203e: 09 00 nop
402040: 09 00 nop
402042: 09 00 nop
- 402044: 02 d0 mov\.l 402050 <_start\+0x50>,r0 ! 0x0
+ 402044: 02 d0 mov\.l 402050 <_start\+0x50>,r0 ! 0x2c
402046: 12 01 stc gbr,r1
402048: 09 00 nop
40204a: 03 a0 bra 402054 <_start\+0x54>
40204c: 0c 31 add r0,r1
40204e: 09 00 nop
- 402050: 00 00 .*[ ]*.*
+ 402050: 2c 00 .*[ ]*.*
402052: 00 00 .*[ ]*.*
402054: 09 00 nop
402056: 09 00 nop
402058: 09 00 nop
40205a: 09 00 nop
- 40205c: 02 d0 mov\.l 402068 <_start\+0x68>,r0 ! 0x0
+ 40205c: 02 d0 mov\.l 402068 <_start\+0x68>,r0 ! 0x1c
40205e: 12 01 stc gbr,r1
402060: 09 00 nop
402062: 03 a0 bra 40206c <_start\+0x6c>
402064: 0c 31 add r0,r1
402066: 09 00 nop
- 402068: 00 00 .*[ ]*.*
+ 402068: 1c 00 .*[ ]*.*
40206a: 00 00 .*[ ]*.*
40206c: 09 00 nop
40206e: 09 00 nop
402070: 09 00 nop
402072: 09 00 nop
402074: 12 01 stc gbr,r1
- 402076: 0c d0 mov\.l 4020a8 <_start\+0xa8>,r0 ! 0x0
+ 402076: 0c d0 mov\.l 4020a8 <_start\+0xa8>,r0 ! 0x8
402078: 1c 30 add r1,r0
40207a: 09 00 nop
40207c: 09 00 nop
40207e: 09 00 nop
402080: 09 00 nop
402082: 12 01 stc gbr,r1
- 402084: 09 d0 mov\.l 4020ac <_start\+0xac>,r0 ! 0x0
+ 402084: 09 d0 mov\.l 4020ac <_start\+0xac>,r0 ! 0x28
402086: 1c 30 add r1,r0
402088: 09 00 nop
40208a: 09 00 nop
40208c: 09 00 nop
40208e: 09 00 nop
402090: 12 01 stc gbr,r1
- 402092: 07 d0 mov\.l 4020b0 <_start\+0xb0>,r0 ! 0x0
+ 402092: 07 d0 mov\.l 4020b0 <_start\+0xb0>,r0 ! 0x18
402094: 1c 30 add r1,r0
402096: 09 00 nop
402098: 09 00 nop
4020a2: f6 6e mov\.l @r15\+,r14
4020a4: [0-9a-f]+ [0-9a-f]+ .*[ ]*.*
4020a6: 01 00 .*[ ]*.*
+ 4020a8: 08 00 .*[ ]*.*
+ 4020aa: 00 00 .*[ ]*.*
+ 4020ac: 28 00 .*[ ]*.*
+ 4020ae: 00 00 .*[ ]*.*
+ 4020b0: 18 00 .*[ ]*.*
\.\.\.
\[11\] \.tbss +NOBITS +0+413018 [0-9a-f]+ 0+010 00 WAT 0 0 1
\[12\] \.dynamic +DYNAMIC +0+413018 .*
#...
- \[[0-9a-f]+\] \.got +PROGBITS +0+4130c0 .*
+ \[[0-9a-f]+\] \.got +PROGBITS +0+4130b8 .*
\[[0-9a-f]+\] \.sbss +.*
\[[0-9a-f]+\] \.bss +.*
#...
04 +\.tbss \.dynamic *
05 +\.tdata \.tbss *
-Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 19 entries:
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
-0+401068 00000097 R_SH_TLS_TPOFF32 +0+00
-0+401088 00000097 R_SH_TLS_TPOFF32 +0+08
-0+4010a8 00000097 R_SH_TLS_TPOFF32 +0+10
-0+401154 00000097 R_SH_TLS_TPOFF32 +0+00
-0+40116c 00000097 R_SH_TLS_TPOFF32 +0+10
-0+401188 00000097 R_SH_TLS_TPOFF32 +0+08
-0+40118c 00000097 R_SH_TLS_TPOFF32 +0+0c
-0+401190 00000097 R_SH_TLS_TPOFF32 +0+10
-0+401194 00000097 R_SH_TLS_TPOFF32 +0+14
-0+402038 00000097 R_SH_TLS_TPOFF32 +0+18
-0+402050 00000097 R_SH_TLS_TPOFF32 +0+24
-0+402068 00000097 R_SH_TLS_TPOFF32 +0+14
-0+4020a8 00000097 R_SH_TLS_TPOFF32 +0+00
-0+4020ac 00000097 R_SH_TLS_TPOFF32 +0+20
-0+4020b0 00000097 R_SH_TLS_TPOFF32 +0+10
-0+4130d0 00000197 R_SH_TLS_TPOFF32 +0+ +sG3 \+ 0
-0+4130d4 00000397 R_SH_TLS_TPOFF32 +0+ +sG2 \+ 0
-0+4130d8 00000497 R_SH_TLS_TPOFF32 +0+ +sG4 \+ 0
-0+4130dc 0000[0-9a-f]+97 R_SH_TLS_TPOFF32 +0+ +sG1 \+ 0
+0+4130c8 00000197 R_SH_TLS_TPOFF32 +0+ +sG3 \+ 0
+0+4130cc 00000397 R_SH_TLS_TPOFF32 +0+ +sG2 \+ 0
+0+4130d0 00000497 R_SH_TLS_TPOFF32 +0+ +sG4 \+ 0
+0+4130d4 0000[0-9a-f]+97 R_SH_TLS_TPOFF32 +0+ +sG1 \+ 0
Relocation section '\.rela\.plt' at offset 0x[0-9a-f]+ contains 1 entries:
Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
-0+4130cc 000005a4 R_SH_JMP_SLOT +[0-9a-f]+ +__tls_get_addr \+ [0-9a-f]+
+0+4130c4 000005a4 R_SH_JMP_SLOT +[0-9a-f]+ +__tls_get_addr \+ [0-9a-f]+
Symbol table '\.dynsym' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
+[0-9]+: 00000004 +0 TLS +GLOBAL DEFAULT +10 sg2
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG1
+[0-9]+: 00000010 +0 TLS +GLOBAL HIDDEN +10 sh1
- +[0-9]+: 004130e0 +0 NOTYPE GLOBAL DEFAULT ABS _edata
+ +[0-9]+: 004130d8 +0 NOTYPE GLOBAL DEFAULT ABS _edata
+[0-9]+: [0-9a-f]+ +0 OBJECT GLOBAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_
+[0-9]+: [0-9a-f]+ +0 NOTYPE GLOBAL DEFAULT ABS _end
+[0-9]+: 00000014 +0 TLS +GLOBAL HIDDEN +10 sh2