mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 12:39:59 +00:00
bfd/
* elf32-sparc.c (_bfd_sparc_elf_howto_table): Add TLS relocs. (elf32_sparc_rev32_howto): New variable. (sparc_reloc_map): Add TLS relocs. (elf32_sparc_reloc_type_lookup, elf32_sparc_info_to_howto): Handle REV32. (sparc_elf_hix22_reloc, sparc_elf_lox10_reloc, elf32_sparc_mkobject): New functions. (struct elf32_sparc_dyn_relocs, struct elf32_sparc_link_hash_entry, struct elf32_sparc_link_hash_table): New structures. (elf32_sparc_tdata, elf32_sparc_local_got_tls_type, elf32_sparc_hash_table): Define. (link_hash_newfunc, elf32_sparc_link_hash_table_create, create_got_section, elf32_sparc_create_dynamic_sections, elf32_sparc_copy_indirect_symbol, elf32_sparc_tls_transition): New functions. (elf32_sparc_check_relocs): Handle TLS relocs. Add dynamic reloc reference counting. (elf32_sparc_gc_sweep_hook): Likewise. (elf32_sparc_adjust_dynamic_symbol): Likewise. (elf32_sparc_size_dynamic_sections): Likewise. (elf32_sparc_relocate_section): Likewise. (allocate_dynrelocs, readonly_dynrelocs, dtpoff_base, tpoff): New functions. (elf32_sparc_object_p): Allocate backend private object data. (bfd_elf32_bfd_link_hash_table_create, elf_backend_copy_indirect_symbol, bfd_elf32_mkobject, elf_backend_can_refcount): Define. (elf_backend_create_dynamic_sections): Define to elf32_sparc_create_dynamic_sections. * reloc.c: Add SPARC TLS relocs. * bfd-in2.h, libbfd.h: Rebuilt. * elf64-sparc.c (sparc64_elf_howto_table): Add TLS relocs. (sparc_reloc_map): Likewise. gas/ * config/tc-sparc.c (sparc_ip): Handle TLS % operators. (tc_gen_reloc): Handle TLS relocs. (sparc_cons, cons_fix_new_sparc): Handle %r_tls_dtpoff. * config/tc-sparc.h (tc_fix_adjustable): Don't adjust TLS relocs. * config/obj-elf.c (obj_elf_section_word): Handle tls. (obj_elf_type): Handle tls_object. include/ * elf/sparc.h: Add TLS relocs. Move R_SPARC_REV32 to 252. ld/testsuite/ * ld-sparc/sparc.exp: New. * ld-sparc/tlsg32.s: New test. * ld-sparc/tlsg32.sd: Likewise. * ld-sparc/tlsg64.s: Likewise. * ld-sparc/tlsg64.sd: Likewise. * ld-sparc/tlslib.s: Likewise. * ld-sparc/tlsnopic.s: Likewise. * ld-sparc/tlspic.s: Likewise. * ld-sparc/tlssunbin32.dd: Likewise. * ld-sparc/tlssunbin32.rd: Likewise. * ld-sparc/tlssunbin32.s: Likewise. * ld-sparc/tlssunbin32.sd: Likewise. * ld-sparc/tlssunbin32.td: Likewise. * ld-sparc/tlssunbin64.dd: Likewise. * ld-sparc/tlssunbin64.rd: Likewise. * ld-sparc/tlssunbin64.s: Likewise. * ld-sparc/tlssunbin64.sd: Likewise. * ld-sparc/tlssunbin64.td: Likewise. * ld-sparc/tlssunbinpic32.s: Likewise. * ld-sparc/tlssunbinpic64.s: Likewise. * ld-sparc/tlssunnopic32.dd: Likewise. * ld-sparc/tlssunnopic32.rd: Likewise. * ld-sparc/tlssunnopic32.s: Likewise. * ld-sparc/tlssunnopic32.sd: Likewise. * ld-sparc/tlssunnopic64.dd: Likewise. * ld-sparc/tlssunnopic64.rd: Likewise. * ld-sparc/tlssunnopic64.s: Likewise. * ld-sparc/tlssunnopic64.sd: Likewise. * ld-sparc/tlssunpic32.dd: Likewise. * ld-sparc/tlssunpic32.rd: Likewise. * ld-sparc/tlssunpic32.s: Likewise. * ld-sparc/tlssunpic32.sd: Likewise. * ld-sparc/tlssunpic32.td: Likewise. * ld-sparc/tlssunpic64.dd: Likewise. * ld-sparc/tlssunpic64.rd: Likewise. * ld-sparc/tlssunpic64.s: Likewise. * ld-sparc/tlssunpic64.sd: Likewise. * ld-sparc/tlssunpic64.td: Likewise.
This commit is contained in:
parent
c34ee0383a
commit
b9734f3572
@ -1,3 +1,40 @@
|
||||
2003-01-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* elf32-sparc.c (_bfd_sparc_elf_howto_table): Add TLS relocs.
|
||||
(elf32_sparc_rev32_howto): New variable.
|
||||
(sparc_reloc_map): Add TLS relocs.
|
||||
(elf32_sparc_reloc_type_lookup, elf32_sparc_info_to_howto):
|
||||
Handle REV32.
|
||||
(sparc_elf_hix22_reloc, sparc_elf_lox10_reloc, elf32_sparc_mkobject):
|
||||
New functions.
|
||||
(struct elf32_sparc_dyn_relocs, struct elf32_sparc_link_hash_entry,
|
||||
struct elf32_sparc_link_hash_table):
|
||||
New structures.
|
||||
(elf32_sparc_tdata, elf32_sparc_local_got_tls_type,
|
||||
elf32_sparc_hash_table): Define.
|
||||
(link_hash_newfunc, elf32_sparc_link_hash_table_create,
|
||||
create_got_section, elf32_sparc_create_dynamic_sections,
|
||||
elf32_sparc_copy_indirect_symbol, elf32_sparc_tls_transition): New
|
||||
functions.
|
||||
(elf32_sparc_check_relocs): Handle TLS relocs. Add dynamic reloc
|
||||
reference counting.
|
||||
(elf32_sparc_gc_sweep_hook): Likewise.
|
||||
(elf32_sparc_adjust_dynamic_symbol): Likewise.
|
||||
(elf32_sparc_size_dynamic_sections): Likewise.
|
||||
(elf32_sparc_relocate_section): Likewise.
|
||||
(allocate_dynrelocs, readonly_dynrelocs, dtpoff_base, tpoff):
|
||||
New functions.
|
||||
(elf32_sparc_object_p): Allocate backend private object data.
|
||||
(bfd_elf32_bfd_link_hash_table_create,
|
||||
elf_backend_copy_indirect_symbol, bfd_elf32_mkobject,
|
||||
elf_backend_can_refcount): Define.
|
||||
(elf_backend_create_dynamic_sections): Define to
|
||||
elf32_sparc_create_dynamic_sections.
|
||||
* reloc.c: Add SPARC TLS relocs.
|
||||
* bfd-in2.h, libbfd.h: Rebuilt.
|
||||
* elf64-sparc.c (sparc64_elf_howto_table): Add TLS relocs.
|
||||
(sparc_reloc_map): Likewise.
|
||||
|
||||
2003-01-24 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
|
||||
* bfd-in2.h: Regenerate.
|
||||
|
@ -2163,6 +2163,32 @@ relocation types already defined. */
|
||||
/* SPARC little endian relocation */
|
||||
BFD_RELOC_SPARC_REV32,
|
||||
|
||||
/* SPARC TLS relocations */
|
||||
BFD_RELOC_SPARC_TLS_GD_HI22,
|
||||
BFD_RELOC_SPARC_TLS_GD_LO10,
|
||||
BFD_RELOC_SPARC_TLS_GD_ADD,
|
||||
BFD_RELOC_SPARC_TLS_GD_CALL,
|
||||
BFD_RELOC_SPARC_TLS_LDM_HI22,
|
||||
BFD_RELOC_SPARC_TLS_LDM_LO10,
|
||||
BFD_RELOC_SPARC_TLS_LDM_ADD,
|
||||
BFD_RELOC_SPARC_TLS_LDM_CALL,
|
||||
BFD_RELOC_SPARC_TLS_LDO_HIX22,
|
||||
BFD_RELOC_SPARC_TLS_LDO_LOX10,
|
||||
BFD_RELOC_SPARC_TLS_LDO_ADD,
|
||||
BFD_RELOC_SPARC_TLS_IE_HI22,
|
||||
BFD_RELOC_SPARC_TLS_IE_LO10,
|
||||
BFD_RELOC_SPARC_TLS_IE_LD,
|
||||
BFD_RELOC_SPARC_TLS_IE_LDX,
|
||||
BFD_RELOC_SPARC_TLS_IE_ADD,
|
||||
BFD_RELOC_SPARC_TLS_LE_HIX22,
|
||||
BFD_RELOC_SPARC_TLS_LE_LOX10,
|
||||
BFD_RELOC_SPARC_TLS_DTPMOD32,
|
||||
BFD_RELOC_SPARC_TLS_DTPMOD64,
|
||||
BFD_RELOC_SPARC_TLS_DTPOFF32,
|
||||
BFD_RELOC_SPARC_TLS_DTPOFF64,
|
||||
BFD_RELOC_SPARC_TLS_TPOFF32,
|
||||
BFD_RELOC_SPARC_TLS_TPOFF64,
|
||||
|
||||
/* Alpha ECOFF and ELF relocations. Some of these treat the symbol or
|
||||
"addend" in some special way.
|
||||
For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
|
||||
|
1964
bfd/elf32-sparc.c
1964
bfd/elf32-sparc.c
File diff suppressed because it is too large
Load Diff
@ -173,7 +173,31 @@ static reloc_howto_type sparc64_elf_howto_table[] =
|
||||
HOWTO(R_SPARC_L44, 0,2,13,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_L44", FALSE,0,0x00000fff,FALSE),
|
||||
HOWTO(R_SPARC_REGISTER, 0,4, 0,FALSE,0,complain_overflow_bitfield,sparc_elf_notsup_reloc, "R_SPARC_REGISTER",FALSE,0,MINUS_ONE, FALSE),
|
||||
HOWTO(R_SPARC_UA64, 0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_UA64", FALSE,0,MINUS_ONE, TRUE),
|
||||
HOWTO(R_SPARC_UA16, 0,1,16,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_UA16", FALSE,0,0x0000ffff,TRUE)
|
||||
HOWTO(R_SPARC_UA16, 0,1,16,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_UA16", FALSE,0,0x0000ffff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_GD_HI22,10,2,22,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_GD_HI22",FALSE,0,0x003fffff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_GD_LO10,0,2,10,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_GD_LO10",FALSE,0,0x000003ff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_GD_ADD,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_GD_ADD",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_GD_CALL,2,2,30,TRUE,0,complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_TLS_GD_CALL",FALSE,0,0x3fffffff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_LDM_HI22,10,2,22,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_LDM_HI22",FALSE,0,0x003fffff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_LDM_LO10,0,2,10,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_LDM_LO10",FALSE,0,0x000003ff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_LDM_ADD,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_LDM_ADD",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_LDM_CALL,2,2,30,TRUE,0,complain_overflow_signed, bfd_elf_generic_reloc, "R_SPARC_TLS_LDM_CALL",FALSE,0,0x3fffffff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_LDO_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_TLS_LDO_HIX22",FALSE,0,0x003fffff, FALSE),
|
||||
HOWTO(R_SPARC_TLS_LDO_LOX10,0,2,0,FALSE,0,complain_overflow_dont, sparc_elf_lox10_reloc, "R_SPARC_TLS_LDO_LOX10",FALSE,0,0x000003ff, FALSE),
|
||||
HOWTO(R_SPARC_TLS_LDO_ADD,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_LDO_ADD",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_IE_HI22,10,2,22,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_IE_HI22",FALSE,0,0x003fffff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_IE_LO10,0,2,10,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_IE_LO10",FALSE,0,0x000003ff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_IE_LD,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_IE_LD",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_IE_LDX,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_IE_LDX",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_IE_ADD,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_IE_ADD",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_LE_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc, "R_SPARC_TLS_LE_HIX22",FALSE,0,0x003fffff, FALSE),
|
||||
HOWTO(R_SPARC_TLS_LE_LOX10,0,2,0,FALSE,0,complain_overflow_dont, sparc_elf_lox10_reloc, "R_SPARC_TLS_LE_LOX10",FALSE,0,0x000003ff, FALSE),
|
||||
HOWTO(R_SPARC_TLS_DTPMOD32,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_DTPMOD32",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_DTPMOD64,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_DTPMOD64",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_DTPOFF32,0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF32",FALSE,0,0xffffffff,TRUE),
|
||||
HOWTO(R_SPARC_TLS_DTPOFF64,0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF64",FALSE,0,MINUS_ONE,TRUE),
|
||||
HOWTO(R_SPARC_TLS_TPOFF32,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_TPOFF32",FALSE,0,0x00000000,TRUE),
|
||||
HOWTO(R_SPARC_TLS_TPOFF64,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_TPOFF64",FALSE,0,0x00000000,TRUE)
|
||||
};
|
||||
|
||||
struct elf_reloc_map {
|
||||
@ -227,6 +251,30 @@ static const struct elf_reloc_map sparc_reloc_map[] =
|
||||
{ BFD_RELOC_SPARC_5, R_SPARC_5 },
|
||||
{ BFD_RELOC_SPARC_6, R_SPARC_6 },
|
||||
{ BFD_RELOC_SPARC_DISP64, R_SPARC_DISP64 },
|
||||
{ BFD_RELOC_SPARC_TLS_GD_HI22, R_SPARC_TLS_GD_HI22 },
|
||||
{ BFD_RELOC_SPARC_TLS_GD_LO10, R_SPARC_TLS_GD_LO10 },
|
||||
{ BFD_RELOC_SPARC_TLS_GD_ADD, R_SPARC_TLS_GD_ADD },
|
||||
{ BFD_RELOC_SPARC_TLS_GD_CALL, R_SPARC_TLS_GD_CALL },
|
||||
{ BFD_RELOC_SPARC_TLS_LDM_HI22, R_SPARC_TLS_LDM_HI22 },
|
||||
{ BFD_RELOC_SPARC_TLS_LDM_LO10, R_SPARC_TLS_LDM_LO10 },
|
||||
{ BFD_RELOC_SPARC_TLS_LDM_ADD, R_SPARC_TLS_LDM_ADD },
|
||||
{ BFD_RELOC_SPARC_TLS_LDM_CALL, R_SPARC_TLS_LDM_CALL },
|
||||
{ BFD_RELOC_SPARC_TLS_LDO_HIX22, R_SPARC_TLS_LDO_HIX22 },
|
||||
{ BFD_RELOC_SPARC_TLS_LDO_LOX10, R_SPARC_TLS_LDO_LOX10 },
|
||||
{ BFD_RELOC_SPARC_TLS_LDO_ADD, R_SPARC_TLS_LDO_ADD },
|
||||
{ BFD_RELOC_SPARC_TLS_IE_HI22, R_SPARC_TLS_IE_HI22 },
|
||||
{ BFD_RELOC_SPARC_TLS_IE_LO10, R_SPARC_TLS_IE_LO10 },
|
||||
{ BFD_RELOC_SPARC_TLS_IE_LD, R_SPARC_TLS_IE_LD },
|
||||
{ BFD_RELOC_SPARC_TLS_IE_LDX, R_SPARC_TLS_IE_LDX },
|
||||
{ BFD_RELOC_SPARC_TLS_IE_ADD, R_SPARC_TLS_IE_ADD },
|
||||
{ BFD_RELOC_SPARC_TLS_LE_HIX22, R_SPARC_TLS_LE_HIX22 },
|
||||
{ BFD_RELOC_SPARC_TLS_LE_LOX10, R_SPARC_TLS_LE_LOX10 },
|
||||
{ BFD_RELOC_SPARC_TLS_DTPMOD32, R_SPARC_TLS_DTPMOD32 },
|
||||
{ BFD_RELOC_SPARC_TLS_DTPMOD64, R_SPARC_TLS_DTPMOD64 },
|
||||
{ BFD_RELOC_SPARC_TLS_DTPOFF32, R_SPARC_TLS_DTPOFF32 },
|
||||
{ BFD_RELOC_SPARC_TLS_DTPOFF64, R_SPARC_TLS_DTPOFF64 },
|
||||
{ BFD_RELOC_SPARC_TLS_TPOFF32, R_SPARC_TLS_TPOFF32 },
|
||||
{ BFD_RELOC_SPARC_TLS_TPOFF64, R_SPARC_TLS_TPOFF64 },
|
||||
#ifndef SPARC64_OLD_RELOCS
|
||||
{ BFD_RELOC_SPARC_PLT32, R_SPARC_PLT32 },
|
||||
#endif
|
||||
|
24
bfd/libbfd.h
24
bfd/libbfd.h
@ -793,6 +793,30 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
||||
"BFD_RELOC_SPARC_L44",
|
||||
"BFD_RELOC_SPARC_REGISTER",
|
||||
"BFD_RELOC_SPARC_REV32",
|
||||
"BFD_RELOC_SPARC_TLS_GD_HI22",
|
||||
"BFD_RELOC_SPARC_TLS_GD_LO10",
|
||||
"BFD_RELOC_SPARC_TLS_GD_ADD",
|
||||
"BFD_RELOC_SPARC_TLS_GD_CALL",
|
||||
"BFD_RELOC_SPARC_TLS_LDM_HI22",
|
||||
"BFD_RELOC_SPARC_TLS_LDM_LO10",
|
||||
"BFD_RELOC_SPARC_TLS_LDM_ADD",
|
||||
"BFD_RELOC_SPARC_TLS_LDM_CALL",
|
||||
"BFD_RELOC_SPARC_TLS_LDO_HIX22",
|
||||
"BFD_RELOC_SPARC_TLS_LDO_LOX10",
|
||||
"BFD_RELOC_SPARC_TLS_LDO_ADD",
|
||||
"BFD_RELOC_SPARC_TLS_IE_HI22",
|
||||
"BFD_RELOC_SPARC_TLS_IE_LO10",
|
||||
"BFD_RELOC_SPARC_TLS_IE_LD",
|
||||
"BFD_RELOC_SPARC_TLS_IE_LDX",
|
||||
"BFD_RELOC_SPARC_TLS_IE_ADD",
|
||||
"BFD_RELOC_SPARC_TLS_LE_HIX22",
|
||||
"BFD_RELOC_SPARC_TLS_LE_LOX10",
|
||||
"BFD_RELOC_SPARC_TLS_DTPMOD32",
|
||||
"BFD_RELOC_SPARC_TLS_DTPMOD64",
|
||||
"BFD_RELOC_SPARC_TLS_DTPOFF32",
|
||||
"BFD_RELOC_SPARC_TLS_DTPOFF64",
|
||||
"BFD_RELOC_SPARC_TLS_TPOFF32",
|
||||
"BFD_RELOC_SPARC_TLS_TPOFF64",
|
||||
"BFD_RELOC_ALPHA_GPDISP_HI16",
|
||||
"BFD_RELOC_ALPHA_GPDISP_LO16",
|
||||
"BFD_RELOC_ALPHA_GPDISP",
|
||||
|
50
bfd/reloc.c
50
bfd/reloc.c
@ -1872,6 +1872,56 @@ ENUM
|
||||
BFD_RELOC_SPARC_REV32
|
||||
ENUMDOC
|
||||
SPARC little endian relocation
|
||||
ENUM
|
||||
BFD_RELOC_SPARC_TLS_GD_HI22
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_GD_LO10
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_GD_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_GD_CALL
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LDM_HI22
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LDM_LO10
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LDM_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LDM_CALL
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LDO_HIX22
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LDO_LOX10
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LDO_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_IE_HI22
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_IE_LO10
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_IE_LD
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_IE_LDX
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_IE_ADD
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LE_HIX22
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_LE_LOX10
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_DTPMOD32
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_DTPMOD64
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_DTPOFF32
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_DTPOFF64
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_TPOFF32
|
||||
ENUMX
|
||||
BFD_RELOC_SPARC_TLS_TPOFF64
|
||||
ENUMDOC
|
||||
SPARC TLS relocations
|
||||
|
||||
ENUM
|
||||
BFD_RELOC_ALPHA_GPDISP_HI16
|
||||
|
@ -1,3 +1,13 @@
|
||||
2003-01-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/tc-sparc.c (sparc_ip): Handle TLS % operators.
|
||||
(tc_gen_reloc): Handle TLS relocs.
|
||||
(sparc_cons, cons_fix_new_sparc): Handle %r_tls_dtpoff.
|
||||
* config/tc-sparc.h (tc_fix_adjustable): Don't adjust TLS
|
||||
relocs.
|
||||
* config/obj-elf.c (obj_elf_section_word): Handle tls.
|
||||
(obj_elf_type): Handle tls_object.
|
||||
|
||||
2003-01-24 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
|
||||
* config/tc-s390.c (s390_tls_suffix): New function.
|
||||
|
@ -868,6 +868,8 @@ obj_elf_section_word (str, len)
|
||||
return SHF_ALLOC;
|
||||
if (len == 9 && strncmp (str, "execinstr", 9) == 0)
|
||||
return SHF_EXECINSTR;
|
||||
if (len == 3 && strncmp (str, "tls", 3) == 0)
|
||||
return SHF_TLS;
|
||||
|
||||
#ifdef md_elf_section_word
|
||||
{
|
||||
@ -1638,6 +1640,9 @@ obj_elf_type (ignore)
|
||||
else if (strcmp (typename, "object") == 0
|
||||
|| strcmp (typename, "STT_OBJECT") == 0)
|
||||
type = BSF_OBJECT;
|
||||
else if (strcmp (typename, "tls_object") == 0
|
||||
|| strcmp (typename, "STT_TLS") == 0)
|
||||
type = BSF_OBJECT | BSF_THREAD_LOCAL;
|
||||
#ifdef md_elf_symbol_type
|
||||
else if ((type = md_elf_symbol_type (typename, sym, elfsym)) != -1)
|
||||
;
|
||||
|
@ -1806,10 +1806,88 @@ sparc_ip (str, pinsn)
|
||||
break;
|
||||
|
||||
case '\0': /* End of args. */
|
||||
if (*s == '\0')
|
||||
if (s[0] == ',' && s[1] == '%')
|
||||
{
|
||||
match = 1;
|
||||
static const struct tls_ops {
|
||||
/* The name as it appears in assembler. */
|
||||
char *name;
|
||||
/* strlen (name), precomputed for speed */
|
||||
int len;
|
||||
/* The reloc this pseudo-op translates to. */
|
||||
int reloc;
|
||||
/* 1 if call. */
|
||||
int call;
|
||||
} tls_ops[] = {
|
||||
{ "tgd_add", 7, BFD_RELOC_SPARC_TLS_GD_ADD, 0 },
|
||||
{ "tgd_call", 8, BFD_RELOC_SPARC_TLS_GD_CALL, 1 },
|
||||
{ "tldm_add", 8, BFD_RELOC_SPARC_TLS_LDM_ADD, 0 },
|
||||
{ "tldm_call", 9, BFD_RELOC_SPARC_TLS_LDM_CALL, 1 },
|
||||
{ "tldo_add", 8, BFD_RELOC_SPARC_TLS_LDO_ADD, 0 },
|
||||
{ "tie_ldx", 7, BFD_RELOC_SPARC_TLS_IE_LDX, 0 },
|
||||
{ "tie_ld", 6, BFD_RELOC_SPARC_TLS_IE_LD, 0 },
|
||||
{ "tie_add", 7, BFD_RELOC_SPARC_TLS_IE_ADD, 0 }
|
||||
};
|
||||
const struct tls_ops *o;
|
||||
char *s1;
|
||||
int npar = 0;
|
||||
|
||||
for (o = tls_ops; o->name; o++)
|
||||
if (strncmp (s + 2, o->name, o->len) == 0)
|
||||
break;
|
||||
if (o->name == NULL)
|
||||
break;
|
||||
|
||||
if (s[o->len + 2] != '(')
|
||||
{
|
||||
as_bad (_("Illegal operands: %%%s requires arguments in ()"), o->name);
|
||||
return special_case;
|
||||
}
|
||||
|
||||
if (! o->call && the_insn.reloc != BFD_RELOC_NONE)
|
||||
{
|
||||
as_bad (_("Illegal operands: %%%s cannot be used together with other relocs in the insn ()"),
|
||||
o->name);
|
||||
return special_case;
|
||||
}
|
||||
|
||||
if (o->call
|
||||
&& (the_insn.reloc != BFD_RELOC_32_PCREL_S2
|
||||
|| the_insn.exp.X_add_number != 0
|
||||
|| the_insn.exp.X_add_symbol
|
||||
!= symbol_find_or_make ("__tls_get_addr")))
|
||||
{
|
||||
as_bad (_("Illegal operands: %%%s can be only used with call __tls_get_addr"),
|
||||
o->name);
|
||||
return special_case;
|
||||
}
|
||||
|
||||
the_insn.reloc = o->reloc;
|
||||
memset (&the_insn.exp, 0, sizeof (the_insn.exp));
|
||||
s += o->len + 3;
|
||||
|
||||
for (s1 = s; *s1 && *s1 != ',' && *s1 != ']'; s1++)
|
||||
if (*s1 == '(')
|
||||
npar++;
|
||||
else if (*s1 == ')')
|
||||
{
|
||||
if (!npar)
|
||||
break;
|
||||
npar--;
|
||||
}
|
||||
|
||||
if (*s1 != ')')
|
||||
{
|
||||
as_bad (_("Illegal operands: %%%s requires arguments in ()"), o->name);
|
||||
return special_case;
|
||||
}
|
||||
|
||||
*s1 = '\0';
|
||||
(void) get_expression (s);
|
||||
*s1 = ')';
|
||||
s = s1 + 1;
|
||||
}
|
||||
if (*s == '\0')
|
||||
match = 1;
|
||||
break;
|
||||
|
||||
case '+':
|
||||
@ -2176,6 +2254,18 @@ sparc_ip (str, pinsn)
|
||||
{ "l44", 3, BFD_RELOC_SPARC_L44, 1, 0 },
|
||||
{ "uhi", 3, BFD_RELOC_SPARC_HH22, 1, 0 },
|
||||
{ "ulo", 3, BFD_RELOC_SPARC_HM10, 1, 0 },
|
||||
{ "tgd_hi22", 8, BFD_RELOC_SPARC_TLS_GD_HI22, 0, 0 },
|
||||
{ "tgd_lo10", 8, BFD_RELOC_SPARC_TLS_GD_LO10, 0, 0 },
|
||||
{ "tldm_hi22", 9, BFD_RELOC_SPARC_TLS_LDM_HI22, 0, 0 },
|
||||
{ "tldm_lo10", 9, BFD_RELOC_SPARC_TLS_LDM_LO10, 0, 0 },
|
||||
{ "tldo_hix22", 10, BFD_RELOC_SPARC_TLS_LDO_HIX22, 0,
|
||||
0 },
|
||||
{ "tldo_lox10", 10, BFD_RELOC_SPARC_TLS_LDO_LOX10, 0,
|
||||
0 },
|
||||
{ "tie_hi22", 8, BFD_RELOC_SPARC_TLS_IE_HI22, 0, 0 },
|
||||
{ "tie_lo10", 8, BFD_RELOC_SPARC_TLS_IE_LO10, 0, 0 },
|
||||
{ "tle_hix22", 9, BFD_RELOC_SPARC_TLS_LE_HIX22, 0, 0 },
|
||||
{ "tle_lox10", 9, BFD_RELOC_SPARC_TLS_LE_LOX10, 0, 0 },
|
||||
{ NULL, 0, 0, 0, 0 }
|
||||
};
|
||||
const struct ops *o;
|
||||
@ -2378,6 +2468,13 @@ sparc_ip (str, pinsn)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (the_insn.reloc >= BFD_RELOC_SPARC_TLS_GD_HI22
|
||||
&& the_insn.reloc <= BFD_RELOC_SPARC_TLS_TPOFF64)
|
||||
{
|
||||
error_message = _(": TLS operand can't be a constant");
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Constants that won't fit are checked in md_apply_fix3
|
||||
and bfd_install_relocation.
|
||||
??? It would be preferable to install the constants
|
||||
@ -3305,6 +3402,26 @@ tc_gen_reloc (section, fixp)
|
||||
case BFD_RELOC_SPARC_PLT64:
|
||||
case BFD_RELOC_VTABLE_ENTRY:
|
||||
case BFD_RELOC_VTABLE_INHERIT:
|
||||
case BFD_RELOC_SPARC_TLS_GD_HI22:
|
||||
case BFD_RELOC_SPARC_TLS_GD_LO10:
|
||||
case BFD_RELOC_SPARC_TLS_GD_ADD:
|
||||
case BFD_RELOC_SPARC_TLS_GD_CALL:
|
||||
case BFD_RELOC_SPARC_TLS_LDM_HI22:
|
||||
case BFD_RELOC_SPARC_TLS_LDM_LO10:
|
||||
case BFD_RELOC_SPARC_TLS_LDM_ADD:
|
||||
case BFD_RELOC_SPARC_TLS_LDM_CALL:
|
||||
case BFD_RELOC_SPARC_TLS_LDO_HIX22:
|
||||
case BFD_RELOC_SPARC_TLS_LDO_LOX10:
|
||||
case BFD_RELOC_SPARC_TLS_LDO_ADD:
|
||||
case BFD_RELOC_SPARC_TLS_IE_HI22:
|
||||
case BFD_RELOC_SPARC_TLS_IE_LO10:
|
||||
case BFD_RELOC_SPARC_TLS_IE_LD:
|
||||
case BFD_RELOC_SPARC_TLS_IE_LDX:
|
||||
case BFD_RELOC_SPARC_TLS_IE_ADD:
|
||||
case BFD_RELOC_SPARC_TLS_LE_HIX22:
|
||||
case BFD_RELOC_SPARC_TLS_LE_LOX10:
|
||||
case BFD_RELOC_SPARC_TLS_DTPOFF32:
|
||||
case BFD_RELOC_SPARC_TLS_DTPOFF64:
|
||||
code = fixp->fx_r_type;
|
||||
break;
|
||||
default:
|
||||
@ -3393,7 +3510,9 @@ tc_gen_reloc (section, fixp)
|
||||
&& code != BFD_RELOC_SPARC_WDISP22
|
||||
&& code != BFD_RELOC_SPARC_WDISP16
|
||||
&& code != BFD_RELOC_SPARC_WDISP19
|
||||
&& code != BFD_RELOC_SPARC_WPLT30)
|
||||
&& code != BFD_RELOC_SPARC_WPLT30
|
||||
&& code != BFD_RELOC_SPARC_TLS_GD_CALL
|
||||
&& code != BFD_RELOC_SPARC_TLS_LDM_CALL)
|
||||
reloc->addend = fixp->fx_addnumber;
|
||||
else if (symbol_section_p (fixp->fx_addsy))
|
||||
reloc->addend = (section->vma
|
||||
@ -4196,6 +4315,16 @@ sparc_cons (exp, size)
|
||||
sparc_cons_special_reloc = "plt";
|
||||
}
|
||||
}
|
||||
else if (strncmp (input_line_pointer + 3, "tls_dtpoff", 10) == 0)
|
||||
{
|
||||
if (size != 4 && size != 8)
|
||||
as_bad (_("Illegal operands: %%r_tls_dtpoff in %d-byte data field"), size);
|
||||
else
|
||||
{
|
||||
input_line_pointer += 13;
|
||||
sparc_cons_special_reloc = "tls_dtpoff";
|
||||
}
|
||||
}
|
||||
if (sparc_cons_special_reloc)
|
||||
{
|
||||
int bad = 0;
|
||||
@ -4329,12 +4458,18 @@ cons_fix_new_sparc (frag, where, nbytes, exp)
|
||||
case 8: r = BFD_RELOC_64_PCREL; break;
|
||||
default: abort ();
|
||||
}
|
||||
else
|
||||
else if (*sparc_cons_special_reloc == 'p')
|
||||
switch (nbytes)
|
||||
{
|
||||
case 4: r = BFD_RELOC_SPARC_PLT32; break;
|
||||
case 8: r = BFD_RELOC_SPARC_PLT64; break;
|
||||
}
|
||||
else
|
||||
switch (nbytes)
|
||||
{
|
||||
case 4: r = BFD_RELOC_SPARC_TLS_DTPOFF32; break;
|
||||
case 8: r = BFD_RELOC_SPARC_TLS_DTPOFF64; break;
|
||||
}
|
||||
}
|
||||
else if (sparc_no_align_cons)
|
||||
{
|
||||
|
@ -102,6 +102,8 @@ extern void sparc_handle_align PARAMS ((struct frag *));
|
||||
#define tc_fix_adjustable(FIX) \
|
||||
((FIX)->fx_r_type != BFD_RELOC_VTABLE_INHERIT \
|
||||
&& (FIX)->fx_r_type != BFD_RELOC_VTABLE_ENTRY \
|
||||
&& ((FIX)->fx_r_type < BFD_RELOC_SPARC_TLS_GD_HI22 \
|
||||
|| (FIX)->fx_r_type > BFD_RELOC_SPARC_TLS_TPOFF64) \
|
||||
&& (! sparc_pic_code \
|
||||
|| ((FIX)->fx_r_type != BFD_RELOC_HI22 \
|
||||
&& (FIX)->fx_r_type != BFD_RELOC_LO10 \
|
||||
|
@ -1,3 +1,7 @@
|
||||
2003-01-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* elf/sparc.h: Add TLS relocs. Move R_SPARC_REV32 to 252.
|
||||
|
||||
2003-01-20 Svein E. Seldal <Svein.Seldal@solidas.com>
|
||||
|
||||
* coff/tic4x.h (TICOFF_TARGET_MACHINE_GET): Fixed define bug
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* SPARC ELF support for BFD.
|
||||
Copyright 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
|
||||
By Doug Evans, Cygnus Support, <dje@cygnus.com>.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -126,13 +126,36 @@ START_RELOC_NUMBERS (elf_sparc_reloc_type)
|
||||
RELOC_NUMBER (R_SPARC_UA64, 54)
|
||||
RELOC_NUMBER (R_SPARC_UA16, 55)
|
||||
|
||||
/* little endian data relocs */
|
||||
RELOC_NUMBER (R_SPARC_REV32, 56)
|
||||
|
||||
RELOC_NUMBER (R_SPARC_TLS_GD_HI22, 56)
|
||||
RELOC_NUMBER (R_SPARC_TLS_GD_LO10, 57)
|
||||
RELOC_NUMBER (R_SPARC_TLS_GD_ADD, 58)
|
||||
RELOC_NUMBER (R_SPARC_TLS_GD_CALL, 59)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LDM_HI22, 60)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LDM_LO10, 61)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LDM_ADD, 62)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LDM_CALL, 63)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LDO_HIX22, 64)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LDO_LOX10, 65)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LDO_ADD, 66)
|
||||
RELOC_NUMBER (R_SPARC_TLS_IE_HI22, 67)
|
||||
RELOC_NUMBER (R_SPARC_TLS_IE_LO10, 68)
|
||||
RELOC_NUMBER (R_SPARC_TLS_IE_LD, 69)
|
||||
RELOC_NUMBER (R_SPARC_TLS_IE_LDX, 70)
|
||||
RELOC_NUMBER (R_SPARC_TLS_IE_ADD, 71)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LE_HIX22, 72)
|
||||
RELOC_NUMBER (R_SPARC_TLS_LE_LOX10, 73)
|
||||
RELOC_NUMBER (R_SPARC_TLS_DTPMOD32, 74)
|
||||
RELOC_NUMBER (R_SPARC_TLS_DTPMOD64, 75)
|
||||
RELOC_NUMBER (R_SPARC_TLS_DTPOFF32, 76)
|
||||
RELOC_NUMBER (R_SPARC_TLS_DTPOFF64, 77)
|
||||
RELOC_NUMBER (R_SPARC_TLS_TPOFF32, 78)
|
||||
RELOC_NUMBER (R_SPARC_TLS_TPOFF64, 79)
|
||||
|
||||
EMPTY_RELOC (R_SPARC_max_std)
|
||||
|
||||
RELOC_NUMBER (R_SPARC_GNU_VTINHERIT, 250)
|
||||
RELOC_NUMBER (R_SPARC_GNU_VTENTRY, 251)
|
||||
RELOC_NUMBER (R_SPARC_REV32, 252)
|
||||
|
||||
END_RELOC_NUMBERS (R_SPARC_max)
|
||||
|
||||
|
@ -1,3 +1,44 @@
|
||||
2003-01-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* ld-sparc/sparc.exp: New.
|
||||
* ld-sparc/tlsg32.s: New test.
|
||||
* ld-sparc/tlsg32.sd: Likewise.
|
||||
* ld-sparc/tlsg64.s: Likewise.
|
||||
* ld-sparc/tlsg64.sd: Likewise.
|
||||
* ld-sparc/tlslib.s: Likewise.
|
||||
* ld-sparc/tlsnopic.s: Likewise.
|
||||
* ld-sparc/tlspic.s: Likewise.
|
||||
* ld-sparc/tlssunbin32.dd: Likewise.
|
||||
* ld-sparc/tlssunbin32.rd: Likewise.
|
||||
* ld-sparc/tlssunbin32.s: Likewise.
|
||||
* ld-sparc/tlssunbin32.sd: Likewise.
|
||||
* ld-sparc/tlssunbin32.td: Likewise.
|
||||
* ld-sparc/tlssunbin64.dd: Likewise.
|
||||
* ld-sparc/tlssunbin64.rd: Likewise.
|
||||
* ld-sparc/tlssunbin64.s: Likewise.
|
||||
* ld-sparc/tlssunbin64.sd: Likewise.
|
||||
* ld-sparc/tlssunbin64.td: Likewise.
|
||||
* ld-sparc/tlssunbinpic32.s: Likewise.
|
||||
* ld-sparc/tlssunbinpic64.s: Likewise.
|
||||
* ld-sparc/tlssunnopic32.dd: Likewise.
|
||||
* ld-sparc/tlssunnopic32.rd: Likewise.
|
||||
* ld-sparc/tlssunnopic32.s: Likewise.
|
||||
* ld-sparc/tlssunnopic32.sd: Likewise.
|
||||
* ld-sparc/tlssunnopic64.dd: Likewise.
|
||||
* ld-sparc/tlssunnopic64.rd: Likewise.
|
||||
* ld-sparc/tlssunnopic64.s: Likewise.
|
||||
* ld-sparc/tlssunnopic64.sd: Likewise.
|
||||
* ld-sparc/tlssunpic32.dd: Likewise.
|
||||
* ld-sparc/tlssunpic32.rd: Likewise.
|
||||
* ld-sparc/tlssunpic32.s: Likewise.
|
||||
* ld-sparc/tlssunpic32.sd: Likewise.
|
||||
* ld-sparc/tlssunpic32.td: Likewise.
|
||||
* ld-sparc/tlssunpic64.dd: Likewise.
|
||||
* ld-sparc/tlssunpic64.rd: Likewise.
|
||||
* ld-sparc/tlssunpic64.s: Likewise.
|
||||
* ld-sparc/tlssunpic64.sd: Likewise.
|
||||
* ld-sparc/tlssunpic64.td: Likewise.
|
||||
|
||||
2003-01-24 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
|
||||
* ld-s390/s390.exp: New file.
|
||||
|
88
ld/testsuite/ld-sparc/sparc.exp
Normal file
88
ld/testsuite/ld-sparc/sparc.exp
Normal file
@ -0,0 +1,88 @@
|
||||
# Expect script for ld-sparc tests
|
||||
# Copyright (C) 2002, 2003 Free Software Foundation
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
|
||||
# Test i386 linking; all types of relocs. This tests the assembler and
|
||||
# tools like objdump as well as the linker.
|
||||
|
||||
if { !([istarget "sparc*-*-elf*"]
|
||||
|| ([istarget "sparc*-*-linux*"]
|
||||
&& ![istarget "*-*-*aout*"]
|
||||
&& ![istarget "*-*-*oldld*"])) } {
|
||||
return
|
||||
}
|
||||
|
||||
# List contains test-items with 3 items followed by 2 lists:
|
||||
# 0:name 1:ld options 2:assembler options
|
||||
# 3:filenames of assembler files 4: action and options. 5: name of output file
|
||||
|
||||
# Actions:
|
||||
# objdump: Apply objdump options on result. Compare with regex (last arg).
|
||||
# nm: Apply nm options on result. Compare with regex (last arg).
|
||||
# readelf: Apply readelf options on result. Compare with regex (last arg).
|
||||
|
||||
set sparctests {
|
||||
{"TLS -fpic -shared transitions" "-shared -melf32_sparc"
|
||||
"--32 -K PIC" {tlssunpic32.s tlspic.s}
|
||||
{{readelf -WSsrl tlssunpic32.rd} {objdump -drj.text tlssunpic32.dd}
|
||||
{objdump -sj.got tlssunpic32.sd} {objdump -sj.tdata tlssunpic32.td}}
|
||||
"libtlssunpic32.so"}
|
||||
{"Helper shared library" "-shared -melf32_sparc"
|
||||
"--32 -K PIC" {tlslib.s} {} "libtlslib32.so"}
|
||||
{"Another helper shared library" "-shared -melf32_sparc"
|
||||
"--32 -K PIC" {tlssunbinpic32.s} {} "libtlssunbinpic32.so"}
|
||||
{"TLS -fpic and -fno-pic exec transitions"
|
||||
"-melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o"
|
||||
"--32" {tlssunbin32.s}
|
||||
{{readelf -WSsrl tlssunbin32.rd} {objdump -drj.text tlssunbin32.dd}
|
||||
{objdump -sj.got tlssunbin32.sd} {objdump -sj.tdata tlssunbin32.td}}
|
||||
"tlssunbin32"}
|
||||
{"TLS -fno-pic -shared" "-shared -melf32_sparc"
|
||||
"--32" {tlssunnopic32.s tlsnopic.s}
|
||||
{{readelf -WSsrl tlssunnopic32.rd} {objdump -drj.text tlssunnopic32.dd}
|
||||
{objdump -sj.got tlssunnopic32.sd}} "libtlssunnopic32.so"}
|
||||
{"TLS in debug sections" "-melf32_sparc"
|
||||
"--32" {tlsg32.s}
|
||||
{{objdump -sj.debug_foobar tlsg32.sd}} "tlsg32"}
|
||||
}
|
||||
set sparc64tests {
|
||||
{"TLS -fpic -shared transitions" "-shared -melf64_sparc"
|
||||
"--64 -Av9 -K PIC" {tlssunpic64.s tlspic.s}
|
||||
{{readelf -WSsrl tlssunpic64.rd} {objdump -drj.text tlssunpic64.dd}
|
||||
{objdump -sj.got tlssunpic64.sd} {objdump -sj.tdata tlssunpic64.td}}
|
||||
"libtlssunpic64.so"}
|
||||
{"Helper shared library" "-shared -melf64_sparc"
|
||||
"--64 -Av9 -K PIC" {tlslib.s} {} "libtlslib64.so"}
|
||||
{"Another helper shared library" "-shared -melf64_sparc"
|
||||
"--64 -Av9 -K PIC" {tlssunbinpic64.s} {} "libtlssunbinpic64.so"}
|
||||
{"TLS -fpic and -fno-pic exec transitions"
|
||||
"-melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o"
|
||||
"--64 -Av9" {tlssunbin64.s}
|
||||
{{readelf -WSsrl tlssunbin64.rd} {objdump -drj.text tlssunbin64.dd}
|
||||
{objdump -sj.got tlssunbin64.sd} {objdump -sj.tdata tlssunbin64.td}}
|
||||
"tlssunbin64"}
|
||||
{"TLS -fno-pic -shared" "-shared -melf64_sparc"
|
||||
"--64 -Av9" {tlssunnopic64.s tlsnopic.s}
|
||||
{{readelf -WSsrl tlssunnopic64.rd} {objdump -drj.text tlssunnopic64.dd}
|
||||
{objdump -sj.got tlssunnopic64.sd}} "libtlssunnopic64.so"}
|
||||
{"TLS in debug sections" "-melf64_sparc"
|
||||
"--64 -Av9" {tlsg64.s}
|
||||
{{objdump -sj.debug_foobar tlsg64.sd}} "tlsg64"}
|
||||
}
|
||||
|
||||
run_ld_link_tests $sparctests
|
||||
# run_ld_link_tests $sparc64tests
|
12
ld/testsuite/ld-sparc/tlsg32.s
Normal file
12
ld/testsuite/ld-sparc/tlsg32.s
Normal file
@ -0,0 +1,12 @@
|
||||
.section .tbss
|
||||
.align 4
|
||||
.word 0, 0, 0, 0, 0, 0
|
||||
.type a,#tls_object
|
||||
.size a,4
|
||||
a:
|
||||
.word 0
|
||||
.text
|
||||
.globl _start
|
||||
_start:
|
||||
.section .debug_foobar
|
||||
.word %r_tls_dtpoff32(a)
|
10
ld/testsuite/ld-sparc/tlsg32.sd
Normal file
10
ld/testsuite/ld-sparc/tlsg32.sd
Normal file
@ -0,0 +1,10 @@
|
||||
#source: tlsg.s
|
||||
#as: --32
|
||||
#ld: -melf32_sparc
|
||||
#objdump: -sj.debug_foobar
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf32-sparc
|
||||
|
||||
Contents of section .debug_foobar:
|
||||
0+ 0+18 .*
|
12
ld/testsuite/ld-sparc/tlsg64.s
Normal file
12
ld/testsuite/ld-sparc/tlsg64.s
Normal file
@ -0,0 +1,12 @@
|
||||
.section .tbss
|
||||
.align 4
|
||||
.word 0, 0, 0, 0, 0, 0
|
||||
.type a,#tls_object
|
||||
.size a,4
|
||||
a:
|
||||
.word 0
|
||||
.text
|
||||
.globl _start
|
||||
_start:
|
||||
.section .debug_foobar
|
||||
.xword %r_tls_dtpoff64(a)
|
11
ld/testsuite/ld-sparc/tlsg64.sd
Normal file
11
ld/testsuite/ld-sparc/tlsg64.sd
Normal file
@ -0,0 +1,11 @@
|
||||
#source: tlsg.s
|
||||
#as: --64 -Av9
|
||||
#ld: -melf64_sparc
|
||||
#objdump: -sj.debug_foobar
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf64-sparc
|
||||
|
||||
Contents of section .debug_foobar:
|
||||
# FIXME
|
||||
#pass
|
20
ld/testsuite/ld-sparc/tlslib.s
Normal file
20
ld/testsuite/ld-sparc/tlslib.s
Normal file
@ -0,0 +1,20 @@
|
||||
.section ".tdata", #alloc, #write, #tls
|
||||
.align 4
|
||||
.globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
|
||||
sG1: .word 513
|
||||
sG2: .word 514
|
||||
sG3: .word 515
|
||||
sG4: .word 516
|
||||
sG5: .word 517
|
||||
sG6: .word 518
|
||||
sG7: .word 519
|
||||
sG8: .word 520
|
||||
|
||||
.text
|
||||
/* Dummy. */
|
||||
.globl __tls_get_addr
|
||||
.type __tls_get_addr,#function
|
||||
.proc 04
|
||||
__tls_get_addr:
|
||||
ret
|
||||
restore
|
8
ld/testsuite/ld-sparc/tlsnopic.s
Normal file
8
ld/testsuite/ld-sparc/tlsnopic.s
Normal file
@ -0,0 +1,8 @@
|
||||
.section ".tbss"
|
||||
.align 4
|
||||
.globl sh1, sh2, sh3, sh4
|
||||
.hidden sh1, sh2, sh3, sh4
|
||||
sh1: .word 0
|
||||
sh2: .word 0
|
||||
sh3: .word 0
|
||||
sh4: .word 0
|
12
ld/testsuite/ld-sparc/tlspic.s
Normal file
12
ld/testsuite/ld-sparc/tlspic.s
Normal file
@ -0,0 +1,12 @@
|
||||
.section ".tbss"
|
||||
.align 4
|
||||
.globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
|
||||
.hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
|
||||
sH1: .word 0
|
||||
sH2: .word 0
|
||||
sH3: .word 0
|
||||
sH4: .word 0
|
||||
sH5: .word 0
|
||||
sH6: .word 0
|
||||
sH7: .word 0
|
||||
sH8: .word 0
|
273
ld/testsuite/ld-sparc/tlssunbin32.dd
Normal file
273
ld/testsuite/ld-sparc/tlssunbin32.dd
Normal file
@ -0,0 +1,273 @@
|
||||
#source: tlssunbin32.s
|
||||
#as: --32
|
||||
#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o
|
||||
#objdump: -drj.text
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf32-sparc
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
0+11000 <fn2-0x8>:
|
||||
+11000: 81 c3 e0 08 retl *
|
||||
+11004: ae 03 c0 17 add %o7, %l7, %l7
|
||||
|
||||
0+11008 <fn2>:
|
||||
+11008: 9d e3 bf 98 save %sp, -104, %sp
|
||||
+1100c: 2f 00 00 50 sethi %hi\(0x14000\), %l7
|
||||
+11010: 7f ff ff fc call 11000 <.*>
|
||||
+11014: ae 05 e0 d0 add %l7, 0xd0, %l7 ! 140d0 <.*>
|
||||
+11018: 01 00 00 00 nop *
|
||||
+1101c: 01 00 00 00 nop *
|
||||
+11020: 01 00 00 00 nop *
|
||||
+11024: 01 00 00 00 nop *
|
||||
+11028: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+1102c: 01 00 00 00 nop *
|
||||
+11030: a4 04 60 10 add %l1, 0x10, %l2
|
||||
+11034: 01 00 00 00 nop *
|
||||
+11038: d0 05 c0 12 ld \[ %l7 \+ %l2 \], %o0
|
||||
+1103c: 01 00 00 00 nop *
|
||||
+11040: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+11044: 01 00 00 00 nop *
|
||||
+11048: 01 00 00 00 nop *
|
||||
+1104c: 01 00 00 00 nop *
|
||||
+11050: 01 00 00 00 nop *
|
||||
+11054: 01 00 00 00 nop *
|
||||
+11058: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+1105c: 92 02 20 08 add %o0, 8, %o1 ! 8 <.*>
|
||||
+11060: d0 05 c0 09 ld \[ %l7 \+ %o1 \], %o0
|
||||
+11064: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+11068: 01 00 00 00 nop *
|
||||
+1106c: 01 00 00 00 nop *
|
||||
+11070: 01 00 00 00 nop *
|
||||
+11074: 01 00 00 00 nop *
|
||||
+11078: 01 00 00 00 nop *
|
||||
+1107c: 21 00 00 04 sethi %hi\(0x1000\), %l0
|
||||
+11080: aa 1c 3f 60 xor %l0, -160, %l5
|
||||
+11084: 90 01 c0 15 add %g7, %l5, %o0
|
||||
+11088: 01 00 00 00 nop *
|
||||
+1108c: 01 00 00 00 nop *
|
||||
+11090: 01 00 00 00 nop *
|
||||
+11094: 01 00 00 00 nop *
|
||||
+11098: 01 00 00 00 nop *
|
||||
+1109c: 01 00 00 00 nop *
|
||||
+110a0: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+110a4: 92 1a 3f 80 xor %o0, -128, %o1
|
||||
+110a8: 90 01 c0 09 add %g7, %o1, %o0
|
||||
+110ac: 01 00 00 00 nop *
|
||||
+110b0: 01 00 00 00 nop *
|
||||
+110b4: 01 00 00 00 nop *
|
||||
+110b8: 01 00 00 00 nop *
|
||||
+110bc: 01 00 00 00 nop *
|
||||
+110c0: 01 00 00 00 nop *
|
||||
+110c4: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+110c8: 92 1a 3f a0 xor %o0, -96, %o1
|
||||
+110cc: 90 01 c0 09 add %g7, %o1, %o0
|
||||
+110d0: 01 00 00 00 nop *
|
||||
+110d4: 01 00 00 00 nop *
|
||||
+110d8: 01 00 00 00 nop *
|
||||
+110dc: 01 00 00 00 nop *
|
||||
+110e0: 01 00 00 00 nop *
|
||||
+110e4: 01 00 00 00 nop *
|
||||
+110e8: 01 00 00 00 nop *
|
||||
+110ec: 01 00 00 00 nop *
|
||||
+110f0: 01 00 00 00 nop *
|
||||
+110f4: 01 00 00 00 nop *
|
||||
+110f8: 01 00 00 00 nop *
|
||||
+110fc: 01 00 00 00 nop *
|
||||
+11100: 90 10 00 00 mov %g0, %o0
|
||||
+11104: 01 00 00 00 nop *
|
||||
+11108: 27 00 00 00 sethi %hi\(0\), %l3
|
||||
+1110c: 01 00 00 00 nop *
|
||||
+11110: a8 1c ff 80 xor %l3, -128, %l4
|
||||
+11114: 01 00 00 00 nop *
|
||||
+11118: aa 01 c0 14 add %g7, %l4, %l5
|
||||
+1111c: 01 00 00 00 nop *
|
||||
+11120: 25 00 00 00 sethi %hi\(0\), %l2
|
||||
+11124: 01 00 00 00 nop *
|
||||
+11128: a6 1c bf 86 xor %l2, -122, %l3
|
||||
+1112c: 01 00 00 00 nop *
|
||||
+11130: ec 11 c0 13 lduh \[ %g7 \+ %l3 \], %l6
|
||||
+11134: 01 00 00 00 nop *
|
||||
+11138: 01 00 00 00 nop *
|
||||
+1113c: 01 00 00 00 nop *
|
||||
+11140: 01 00 00 00 nop *
|
||||
+11144: 01 00 00 00 nop *
|
||||
+11148: 27 00 00 00 sethi %hi\(0\), %l3
|
||||
+1114c: 01 00 00 00 nop *
|
||||
+11150: 25 00 00 00 sethi %hi\(0\), %l2
|
||||
+11154: 01 00 00 00 nop *
|
||||
+11158: a8 1c ff a0 xor %l3, -96, %l4
|
||||
+1115c: 90 10 00 00 mov %g0, %o0
|
||||
+11160: a6 1c bf a5 xor %l2, -91, %l3
|
||||
+11164: aa 01 c0 14 add %g7, %l4, %l5
|
||||
+11168: ec 09 c0 13 ldub \[ %g7 \+ %l3 \], %l6
|
||||
+1116c: 01 00 00 00 nop *
|
||||
+11170: 01 00 00 00 nop *
|
||||
+11174: 01 00 00 00 nop *
|
||||
+11178: 01 00 00 00 nop *
|
||||
+1117c: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+11180: 01 00 00 00 nop *
|
||||
+11184: a4 04 60 08 add %l1, 8, %l2
|
||||
+11188: 01 00 00 00 nop *
|
||||
+1118c: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
|
||||
+11190: 01 00 00 00 nop *
|
||||
+11194: a4 01 c0 12 add %g7, %l2, %l2
|
||||
+11198: 01 00 00 00 nop *
|
||||
+1119c: 01 00 00 00 nop *
|
||||
+111a0: 01 00 00 00 nop *
|
||||
+111a4: 01 00 00 00 nop *
|
||||
+111a8: 17 00 00 04 sethi %hi\(0x1000\), %o3
|
||||
+111ac: 96 1a ff 60 xor %o3, -160, %o3
|
||||
+111b0: 01 00 00 00 nop *
|
||||
+111b4: 98 01 c0 0b add %g7, %o3, %o4
|
||||
+111b8: 01 00 00 00 nop *
|
||||
+111bc: 01 00 00 00 nop *
|
||||
+111c0: 01 00 00 00 nop *
|
||||
+111c4: 01 00 00 00 nop *
|
||||
+111c8: 29 00 00 00 sethi %hi\(0\), %l4
|
||||
+111cc: a2 1d 3f 80 xor %l4, -128, %l1
|
||||
+111d0: a6 10 00 11 mov %l1, %l3
|
||||
+111d4: a6 01 c0 13 add %g7, %l3, %l3
|
||||
+111d8: 01 00 00 00 nop *
|
||||
+111dc: 01 00 00 00 nop *
|
||||
+111e0: 01 00 00 00 nop *
|
||||
+111e4: 01 00 00 00 nop *
|
||||
+111e8: 13 00 00 00 sethi %hi\(0\), %o1
|
||||
+111ec: 96 1a 7f a0 xor %o1, -96, %o3
|
||||
+111f0: 90 10 00 0b mov %o3, %o0
|
||||
+111f4: 96 01 c0 08 add %g7, %o0, %o3
|
||||
+111f8: 01 00 00 00 nop *
|
||||
+111fc: 01 00 00 00 nop *
|
||||
+11200: 01 00 00 00 nop *
|
||||
+11204: 01 00 00 00 nop *
|
||||
+11208: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+1120c: 96 02 e0 04 add %o3, 4, %o3 ! 4 <.*>
|
||||
+11210: d4 05 c0 0b ld \[ %l7 \+ %o3 \], %o2
|
||||
+11214: d8 01 c0 0a ld \[ %g7 \+ %o2 \], %o4
|
||||
+11218: 01 00 00 00 nop *
|
||||
+1121c: 01 00 00 00 nop *
|
||||
+11220: 01 00 00 00 nop *
|
||||
+11224: 01 00 00 00 nop *
|
||||
+11228: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+1122c: 96 1a ff 90 xor %o3, -112, %o3
|
||||
+11230: 94 10 00 0b mov %o3, %o2
|
||||
+11234: d8 29 c0 0a stb %o4, \[ %g7 \+ %o2 \]
|
||||
+11238: 01 00 00 00 nop *
|
||||
+1123c: 01 00 00 00 nop *
|
||||
+11240: 01 00 00 00 nop *
|
||||
+11244: 01 00 00 00 nop *
|
||||
+11248: 1b 00 00 00 sethi %hi\(0\), %o5
|
||||
+1124c: 96 1b 7f b0 xor %o5, -80, %o3
|
||||
+11250: 94 10 00 0b mov %o3, %o2
|
||||
+11254: d8 49 c0 0a ldsb \[ %g7 \+ %o2 \], %o4
|
||||
+11258: 01 00 00 00 nop *
|
||||
+1125c: 01 00 00 00 nop *
|
||||
+11260: 01 00 00 00 nop *
|
||||
+11264: 01 00 00 00 nop *
|
||||
+11268: 81 c7 e0 08 ret *
|
||||
+1126c: 81 e8 00 00 restore *
|
||||
#...
|
||||
|
||||
00012000 <_start>:
|
||||
+12000: 9d e3 bf 98 save %sp, -104, %sp
|
||||
+12004: 29 00 00 94 sethi %hi\(0x25000\), %l4
|
||||
+12008: a8 15 20 e0 or %l4, 0xe0, %l4 ! 250e0 <.*>
|
||||
+1200c: 01 00 00 00 nop *
|
||||
+12010: 01 00 00 00 nop *
|
||||
+12014: 01 00 00 00 nop *
|
||||
+12018: 01 00 00 00 nop *
|
||||
+1201c: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+12020: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*>
|
||||
+12024: d4 05 00 0b ld \[ %l4 \+ %o3 \], %o2
|
||||
+12028: 98 01 c0 0a add %g7, %o2, %o4
|
||||
+1202c: 01 00 00 00 nop *
|
||||
+12030: 01 00 00 00 nop *
|
||||
+12034: 01 00 00 00 nop *
|
||||
+12038: 01 00 00 00 nop *
|
||||
+1203c: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+12040: 9a 1a ff d4 xor %o3, -44, %o5
|
||||
+12044: 94 10 00 0d mov %o5, %o2
|
||||
+12048: 98 01 c0 0a add %g7, %o2, %o4
|
||||
+1204c: 01 00 00 00 nop *
|
||||
+12050: 01 00 00 00 nop *
|
||||
+12054: 01 00 00 00 nop *
|
||||
+12058: 01 00 00 00 nop *
|
||||
+1205c: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+12060: 9a 1a ff f4 xor %o3, -12, %o5
|
||||
+12064: a4 10 00 0d mov %o5, %l2
|
||||
+12068: a4 01 c0 12 add %g7, %l2, %l2
|
||||
+1206c: 01 00 00 00 nop *
|
||||
+12070: 01 00 00 00 nop *
|
||||
+12074: 01 00 00 00 nop *
|
||||
+12078: 01 00 00 00 nop *
|
||||
+1207c: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+12080: 9a 1a ff fc xor %o3, -4, %o5
|
||||
+12084: a4 10 00 0d mov %o5, %l2
|
||||
+12088: e4 01 c0 12 ld \[ %g7 \+ %l2 \], %l2
|
||||
+1208c: 01 00 00 00 nop *
|
||||
+12090: 01 00 00 00 nop *
|
||||
+12094: 01 00 00 00 nop *
|
||||
+12098: 01 00 00 00 nop *
|
||||
+1209c: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+120a0: 9a 1a ff b4 xor %o3, -76, %o5
|
||||
+120a4: a4 10 00 0d mov %o5, %l2
|
||||
+120a8: a4 01 c0 12 add %g7, %l2, %l2
|
||||
+120ac: 01 00 00 00 nop *
|
||||
+120b0: 01 00 00 00 nop *
|
||||
+120b4: 01 00 00 00 nop *
|
||||
+120b8: 01 00 00 00 nop *
|
||||
+120bc: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+120c0: 9a 1a ff fc xor %o3, -4, %o5
|
||||
+120c4: a4 10 00 0d mov %o5, %l2
|
||||
+120c8: e2 29 c0 12 stb %l1, \[ %g7 \+ %l2 \]
|
||||
+120cc: 01 00 00 00 nop *
|
||||
+120d0: 01 00 00 00 nop *
|
||||
+120d4: 01 00 00 00 nop *
|
||||
+120d8: 01 00 00 00 nop *
|
||||
+120dc: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+120e0: 01 00 00 00 nop *
|
||||
+120e4: a4 1c 7f 64 xor %l1, -156, %l2
|
||||
+120e8: 01 00 00 00 nop *
|
||||
+120ec: a6 01 c0 12 add %g7, %l2, %l3
|
||||
+120f0: 01 00 00 00 nop *
|
||||
+120f4: 01 00 00 00 nop *
|
||||
+120f8: 01 00 00 00 nop *
|
||||
+120fc: 01 00 00 00 nop *
|
||||
+12100: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+12104: 90 1a 3f e6 xor %o0, -26, %o0
|
||||
+12108: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+1210c: 01 00 00 00 nop *
|
||||
+12110: 01 00 00 00 nop *
|
||||
+12114: 01 00 00 00 nop *
|
||||
+12118: 01 00 00 00 nop *
|
||||
+1211c: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+12120: 9a 1c 7f a5 xor %l1, -91, %o5
|
||||
+12124: 92 01 c0 0d add %g7, %o5, %o1
|
||||
+12128: 01 00 00 00 nop *
|
||||
+1212c: 01 00 00 00 nop *
|
||||
+12130: 01 00 00 00 nop *
|
||||
+12134: 01 00 00 00 nop *
|
||||
+12138: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+1213c: 9a 1c 7f 68 xor %l1, -152, %o5
|
||||
+12140: d2 01 c0 0d ld \[ %g7 \+ %o5 \], %o1
|
||||
+12144: 01 00 00 00 nop *
|
||||
+12148: 01 00 00 00 nop *
|
||||
+1214c: 01 00 00 00 nop *
|
||||
+12150: 01 00 00 00 nop *
|
||||
+12154: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+12158: 90 1a 3f eb xor %o0, -21, %o0
|
||||
+1215c: d2 29 c0 08 stb %o1, \[ %g7 \+ %o0 \]
|
||||
+12160: 01 00 00 00 nop *
|
||||
+12164: 01 00 00 00 nop *
|
||||
+12168: 01 00 00 00 nop *
|
||||
+1216c: 01 00 00 00 nop *
|
||||
+12170: 15 00 00 00 sethi %hi\(0\), %o2
|
||||
+12174: 98 1a bf ab xor %o2, -85, %o4
|
||||
+12178: da 69 c0 0c ldstub \[ %g7 \+ %o4 \], %o5
|
||||
+1217c: 01 00 00 00 nop *
|
||||
+12180: 01 00 00 00 nop *
|
||||
+12184: 01 00 00 00 nop *
|
||||
+12188: 01 00 00 00 nop *
|
||||
+1218c: 81 c7 e0 08 ret *
|
||||
+12190: 81 e8 00 00 restore *
|
137
ld/testsuite/ld-sparc/tlssunbin32.rd
Normal file
137
ld/testsuite/ld-sparc/tlssunbin32.rd
Normal file
@ -0,0 +1,137 @@
|
||||
#source: tlssunbin32.s
|
||||
#as: --32
|
||||
#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o
|
||||
#readelf: -WSsrl
|
||||
#target: sparc*-*-*
|
||||
|
||||
There are 17 section headers, starting at offset 0x[0-9a-f]+:
|
||||
|
||||
Section Headers:
|
||||
+\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
|
||||
+\[ 0\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
|
||||
+\[ 1\] .interp +.*
|
||||
+\[ 2\] .hash +.*
|
||||
+\[ 3\] .dynsym +.*
|
||||
+\[ 4\] .dynstr +.*
|
||||
+\[ 5\] .rela.dyn +.*
|
||||
+\[ 6\] .text +PROGBITS +0+11000 0+1000 0+1194 00 +AX +0 +0 4096
|
||||
+\[ 7\] .data +.*
|
||||
+\[ 8\] .tdata +PROGBITS +0+24000 0+4000 0+1060 00 WAT +0 +0 +4
|
||||
+\[ 9\] .tbss +NOBITS +0+25060 0+5060 0+40 00 WAT +0 +0 +4
|
||||
+\[10\] .dynamic +DYNAMIC +0+25060 0+5060 0+80 08 +WA +4 +0 +4
|
||||
+\[11\] .plt +.*
|
||||
+\[12\] .got +PROGBITS +0+250e0 0+50e0 0+14 04 +WA +0 +0 +4
|
||||
+\[13\] .bss +.*
|
||||
+\[14\] .shstrtab +.*
|
||||
+\[15\] .symtab +.*
|
||||
+\[16\] .strtab +.*
|
||||
#...
|
||||
|
||||
Elf file type is EXEC \(Executable file\)
|
||||
Entry point 0x12000
|
||||
There are 6 program headers, starting at offset [0-9]+
|
||||
|
||||
Program Headers:
|
||||
+Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
|
||||
+PHDR +0x0+34 0x0+10034 0x0+10034 0x0+c0 0x0+c0 R E 0x4
|
||||
+INTERP +0x0+f4 0x0+100f4 0x0+100f4 0x0+11 0x0+11 R +0x1
|
||||
.*Requesting program interpreter.*
|
||||
+LOAD +0x0+ 0x0+10000 0x0+10000 0x0+2194 0x0+2194 R E 0x10000
|
||||
+LOAD +0x0+4000 0x0+24000 0x0+24000 0x0+10f4 0x0+10f8 RWE 0x10000
|
||||
+DYNAMIC +0x0+5060 0x0+25060 0x0+25060 0x0+80 0x0+80 RW +0x4
|
||||
+TLS +0x0+4000 0x0+24000 0x0+24000 0x0+1060 0x0+10a0 R +0x4
|
||||
#...
|
||||
|
||||
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
|
||||
Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
|
||||
000250e4 +0000014e R_SPARC_TLS_TPOFF32 +00000000 +sG5 \+ 0
|
||||
000250e8 +0000034e R_SPARC_TLS_TPOFF32 +00000000 +sG2 \+ 0
|
||||
000250ec +0000074e R_SPARC_TLS_TPOFF32 +00000000 +sG6 \+ 0
|
||||
000250f0 +0000084e R_SPARC_TLS_TPOFF32 +00000000 +sG1 \+ 0
|
||||
|
||||
Symbol table '.dynsym' contains 11 entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
+0: 0+ +0 NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+1: 0+ +0 TLS +GLOBAL DEFAULT +UND sG5
|
||||
+2: 0+25060 +0 OBJECT +GLOBAL DEFAULT +ABS _DYNAMIC
|
||||
+3: 0+ +0 TLS +GLOBAL DEFAULT +UND sG2
|
||||
+4: [0-9a-f]+ +0 OBJECT +GLOBAL DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
|
||||
+5: 0+ +0 FUNC +GLOBAL DEFAULT +UND __tls_get_addr
|
||||
+6: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS __bss_start
|
||||
+7: 0+ +0 TLS +GLOBAL DEFAULT +UND sG6
|
||||
+8: 0+ +0 TLS +GLOBAL DEFAULT +UND sG1
|
||||
+9: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _edata
|
||||
+10: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _end
|
||||
|
||||
Symbol table '.symtab' contains 70 entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
+0: 0+ +0 NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+1: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +1 *
|
||||
+2: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +2 *
|
||||
+3: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +3 *
|
||||
+4: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +4 *
|
||||
+5: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +5 *
|
||||
+6: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +6 *
|
||||
+7: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +7 *
|
||||
+8: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +8 *
|
||||
+9: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +9 *
|
||||
+10: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +10 *
|
||||
+11: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +11 *
|
||||
+12: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +12 *
|
||||
+13: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +13 *
|
||||
+14: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +14 *
|
||||
+15: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +15 *
|
||||
+16: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +16 *
|
||||
+17: 0+1020 +0 TLS +LOCAL +DEFAULT +8 sl1
|
||||
+18: 0+1024 +0 TLS +LOCAL +DEFAULT +8 sl2
|
||||
+19: 0+1028 +0 TLS +LOCAL +DEFAULT +8 sl3
|
||||
+20: 0+102c +0 TLS +LOCAL +DEFAULT +8 sl4
|
||||
+21: 0+1030 +0 TLS +LOCAL +DEFAULT +8 sl5
|
||||
+22: 0+1034 +0 TLS +LOCAL +DEFAULT +8 sl6
|
||||
+23: 0+1038 +0 TLS +LOCAL +DEFAULT +8 sl7
|
||||
+24: 0+103c +0 TLS +LOCAL +DEFAULT +8 sl8
|
||||
+25: 0+1080 +0 TLS +LOCAL +DEFAULT +9 bl1
|
||||
+26: 0+1084 +0 TLS +LOCAL +DEFAULT +9 bl2
|
||||
+27: 0+1088 +0 TLS +LOCAL +DEFAULT +9 bl3
|
||||
+28: 0+108c +0 TLS +LOCAL +DEFAULT +9 bl4
|
||||
+29: 0+1090 +0 TLS +LOCAL +DEFAULT +9 bl5
|
||||
+30: 0+1094 +0 TLS +LOCAL +DEFAULT +9 bl6
|
||||
+31: 0+1098 +0 TLS +LOCAL +DEFAULT +9 bl7
|
||||
+32: 0+109c +0 TLS +LOCAL +DEFAULT +9 bl8
|
||||
+33: 0+250e0 +0 OBJECT +LOCAL +HIDDEN +12 _GLOBAL_OFFSET_TABLE_
|
||||
+34: 0+101c +0 TLS +GLOBAL DEFAULT +8 sg8
|
||||
+35: 0+107c +0 TLS +GLOBAL DEFAULT +9 bg8
|
||||
+36: 0+1074 +0 TLS +GLOBAL DEFAULT +9 bg6
|
||||
+37: 0+ +0 TLS +GLOBAL DEFAULT +UND sG5
|
||||
+38: 0+1068 +0 TLS +GLOBAL DEFAULT +9 bg3
|
||||
+39: 0+25060 +0 OBJECT +GLOBAL DEFAULT +ABS _DYNAMIC
|
||||
+40: 0+1008 +0 TLS +GLOBAL DEFAULT +8 sg3
|
||||
+41: 0+1048 +0 TLS +GLOBAL HIDDEN +8 sh3
|
||||
+42: 0+ +0 TLS +GLOBAL DEFAULT +UND sG2
|
||||
+43: 0+100c +0 TLS +GLOBAL DEFAULT +8 sg4
|
||||
+44: 0+1010 +0 TLS +GLOBAL DEFAULT +8 sg5
|
||||
+45: [0-9a-f]+ +0 OBJECT +GLOBAL DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
|
||||
+46: 0+1070 +0 TLS +GLOBAL DEFAULT +9 bg5
|
||||
+47: 0+ +0 FUNC +GLOBAL DEFAULT +UND __tls_get_addr
|
||||
+48: 0+1058 +0 TLS +GLOBAL HIDDEN +8 sh7
|
||||
+49: 0+105c +0 TLS +GLOBAL HIDDEN +8 sh8
|
||||
+50: 0+ +0 TLS +GLOBAL DEFAULT +8 sg1
|
||||
+51: 0+12000 +0 FUNC +GLOBAL DEFAULT +6 _start
|
||||
+52: 0+104c +0 TLS +GLOBAL HIDDEN +8 sh4
|
||||
+53: 0+1078 +0 TLS +GLOBAL DEFAULT +9 bg7
|
||||
+54: 0+1050 +0 TLS +GLOBAL HIDDEN +8 sh5
|
||||
+55: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS __bss_start
|
||||
+56: 0+ +0 TLS +GLOBAL DEFAULT +UND sG6
|
||||
+57: 0+11008 +0 FUNC +GLOBAL DEFAULT +6 fn2
|
||||
+58: 0+1004 +0 TLS +GLOBAL DEFAULT +8 sg2
|
||||
+59: 0+ +0 TLS +GLOBAL DEFAULT +UND sG1
|
||||
+60: 0+1040 +0 TLS +GLOBAL HIDDEN +8 sh1
|
||||
+61: 0+1014 +0 TLS +GLOBAL DEFAULT +8 sg6
|
||||
+62: 0+1018 +0 TLS +GLOBAL DEFAULT +8 sg7
|
||||
+63: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _edata
|
||||
+64: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _end
|
||||
+65: 0+1044 +0 TLS +GLOBAL HIDDEN +8 sh2
|
||||
+66: 0+1054 +0 TLS +GLOBAL HIDDEN +8 sh6
|
||||
+67: 0+1064 +0 TLS +GLOBAL DEFAULT +9 bg2
|
||||
+68: 0+1060 +0 TLS +GLOBAL DEFAULT +9 bg1
|
||||
+69: 0+106c +0 TLS +GLOBAL DEFAULT +9 bg4
|
114
ld/testsuite/ld-sparc/tlssunbin32.s
Normal file
114
ld/testsuite/ld-sparc/tlssunbin32.s
Normal file
@ -0,0 +1,114 @@
|
||||
.section ".tbss"
|
||||
.align 4
|
||||
.globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
|
||||
bg1: .word 0
|
||||
bg2: .word 0
|
||||
bg3: .word 0
|
||||
bg4: .word 0
|
||||
bg5: .word 0
|
||||
bg6: .word 0
|
||||
bg7: .word 0
|
||||
bg8: .word 0
|
||||
bl1: .word 0
|
||||
bl2: .word 0
|
||||
bl3: .word 0
|
||||
bl4: .word 0
|
||||
bl5: .word 0
|
||||
bl6: .word 0
|
||||
bl7: .word 0
|
||||
bl8: .word 0
|
||||
.text
|
||||
.globl _start
|
||||
.type _start,#function
|
||||
.proc 04
|
||||
_start:
|
||||
save %sp, -104, %sp
|
||||
.hidden _GLOBAL_OFFSET_TABLE_
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_), %l4
|
||||
or %l4, %lo(_GLOBAL_OFFSET_TABLE_), %l4
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sG6), %o3
|
||||
add %o3, %tie_lo10(sG6), %o3
|
||||
ld [%l4 + %o3], %o2, %tie_ld(sG6)
|
||||
add %g7, %o2, %o4, %tie_add(sG6)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against global var defined in exec */
|
||||
sethi %tie_hi22(bg6), %o3
|
||||
add %o3, %tie_lo10(bg6), %o5
|
||||
ld [%l4 + %o5], %o2, %tie_ld(bg6)
|
||||
add %g7, %o2, %o4, %tie_add(bg6)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against local var */
|
||||
sethi %tie_hi22(bl6), %o3
|
||||
add %o3, %tie_lo10(bl6), %o5
|
||||
ld [%l4 + %o5], %l2, %tie_ld(bl6)
|
||||
add %g7, %l2, %l2, %tie_add(bl6)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE -> LE against local var */
|
||||
sethi %tie_hi22(bl8), %o3
|
||||
add %o3, %tie_lo10(bl8), %o5
|
||||
ld [%l4 + %o5], %l2, %tie_ld(bl8)
|
||||
ld [%g7 + %l2], %l2, %tie_add(bl8)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against hidden but not local var */
|
||||
sethi %tie_hi22(sh6), %o3
|
||||
add %o3, %tie_lo10(sh6), %o5
|
||||
ld [%l4 + %o5], %l2, %tie_ld(sh6)
|
||||
add %g7, %l2, %l2, %tie_add(sh6)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE -> LE against hidden but not local var */
|
||||
sethi %tie_hi22(bl8), %o3
|
||||
add %o3, %tie_lo10(bl8), %o5
|
||||
ld [%l4 + %o5], %l2, %tie_ld(bl8)
|
||||
stb %l1, [%g7 + %l2], %tie_add(bl8)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, global var defined in exec */
|
||||
sethi %tle_hix22(sg2), %l1
|
||||
nop
|
||||
xor %l1, %tle_lox10(sg2), %l2
|
||||
nop
|
||||
add %g7, %l2, %l3
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, local var */
|
||||
sethi %tle_hix22(bl2+2), %o0
|
||||
xor %o0, %tle_lox10(bl2+2), %o0
|
||||
add %g7, %o0, %o0
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, hidden var defined in exec */
|
||||
sethi %tle_hix22(sh2+1), %l1
|
||||
xor %l1, %tle_lox10(sh2+1), %o5
|
||||
add %g7, %o5, %o1
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* Direct %g7 access */
|
||||
|
||||
/* LE, global var defined in exec */
|
||||
sethi %tle_hix22(sg3), %l1
|
||||
xor %l1, %tle_lox10(sg3), %o5
|
||||
ld [%g7 + %o5], %o1
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, local var */
|
||||
sethi %tle_hix22(bl3 + 3), %o0
|
||||
xor %o0, %tle_lox10(bl3 + 3), %o0
|
||||
stb %o1, [%g7 + %o0]
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, hidden var defined in exec */
|
||||
sethi %tle_hix22(sh3 + 3), %o2
|
||||
xor %o2, %tle_lox10(sh3 + 3), %o4
|
||||
ldstub [%g7 + %o4], %o5
|
||||
nop;nop;nop;nop
|
||||
|
||||
ret
|
||||
restore
|
11
ld/testsuite/ld-sparc/tlssunbin32.sd
Normal file
11
ld/testsuite/ld-sparc/tlssunbin32.sd
Normal file
@ -0,0 +1,11 @@
|
||||
#source: tlssunbin32.s
|
||||
#as: --32
|
||||
#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinbin32.o
|
||||
#objdump: -sj.got
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf32-sparc
|
||||
|
||||
Contents of section .got:
|
||||
250e0 00025060 0+ 0+ 0+ .*
|
||||
250f0 0+ .*
|
19
ld/testsuite/ld-sparc/tlssunbin32.td
Normal file
19
ld/testsuite/ld-sparc/tlssunbin32.td
Normal file
@ -0,0 +1,19 @@
|
||||
#source: tlssunbin32.s
|
||||
#as: --32
|
||||
#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o
|
||||
#objdump: -sj.tdata
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf32-sparc
|
||||
|
||||
Contents of section .tdata:
|
||||
24000 00000011 00000000 00000000 00000000 .*
|
||||
24010 00000000 00000000 00000000 00000000 .*
|
||||
#...
|
||||
24ff0 00000000 00000000 00000000 00000000 .*
|
||||
25000 00000000 00000012 00000013 00000014 .*
|
||||
25010 00000015 00000016 00000017 00000018 .*
|
||||
25020 00000041 00000042 00000043 00000044 .*
|
||||
25030 00000045 00000046 00000047 00000048 .*
|
||||
25040 00000101 00000102 00000103 00000104 .*
|
||||
25050 00000105 00000106 00000107 00000108 .*
|
11
ld/testsuite/ld-sparc/tlssunbin64.dd
Normal file
11
ld/testsuite/ld-sparc/tlssunbin64.dd
Normal file
@ -0,0 +1,11 @@
|
||||
#source: tlssunbin64.s
|
||||
#as: --64
|
||||
#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o
|
||||
#objdump: -drj.text
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf64-sparc
|
||||
|
||||
Disassembly of section .text:
|
||||
# FIXME
|
||||
#pass
|
8
ld/testsuite/ld-sparc/tlssunbin64.rd
Normal file
8
ld/testsuite/ld-sparc/tlssunbin64.rd
Normal file
@ -0,0 +1,8 @@
|
||||
#source: tlssunbin64.s
|
||||
#as: --64
|
||||
#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o
|
||||
#readelf: -WSsrl
|
||||
#target: sparc*-*-*
|
||||
|
||||
# FIXME
|
||||
#pass
|
118
ld/testsuite/ld-sparc/tlssunbin64.s
Normal file
118
ld/testsuite/ld-sparc/tlssunbin64.s
Normal file
@ -0,0 +1,118 @@
|
||||
.section ".tbss"
|
||||
.align 4
|
||||
.globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
|
||||
bg1: .word 0
|
||||
bg2: .word 0
|
||||
bg3: .word 0
|
||||
bg4: .word 0
|
||||
bg5: .word 0
|
||||
bg6: .word 0
|
||||
bg7: .word 0
|
||||
bg8: .word 0
|
||||
bl1: .word 0
|
||||
bl2: .word 0
|
||||
bl3: .word 0
|
||||
bl4: .word 0
|
||||
bl5: .word 0
|
||||
bl6: .word 0
|
||||
bl7: .word 0
|
||||
bl8: .word 0
|
||||
.text
|
||||
.globl _start
|
||||
.type _start,#function
|
||||
.proc 04
|
||||
_start:
|
||||
save %sp, -160, %sp
|
||||
.hidden _GLOBAL_OFFSET_TABLE_
|
||||
sethi %hh(_GLOBAL_OFFSET_TABLE_), %l1
|
||||
sethi %lm(_GLOBAL_OFFSET_TABLE_), %l2
|
||||
or %l1, %hm(_GLOBAL_OFFSET_TABLE_), %l1
|
||||
or %l2, %lo(_GLOBAL_OFFSET_TABLE_), %l2
|
||||
sllx %l1, 32, %l1
|
||||
add %l1, %l2, %l4
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sG6), %o3
|
||||
add %o3, %tie_lo10(sG6), %o3
|
||||
ldx [%l4 + %o3], %o2, %tie_ldx(sG6)
|
||||
add %g7, %o2, %o4, %tie_add(sG6)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against global var defined in exec */
|
||||
sethi %tie_hi22(bg6), %o3
|
||||
add %o3, %tie_lo10(bg6), %o5
|
||||
ldx [%l4 + %o5], %o2, %tie_ldx(bg6)
|
||||
add %g7, %o2, %o4, %tie_add(bg6)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against local var */
|
||||
sethi %tie_hi22(bl6), %o3
|
||||
add %o3, %tie_lo10(bl6), %o5
|
||||
ldx [%l4 + %o5], %l2, %tie_ldx(bl6)
|
||||
add %g7, %l2, %l2, %tie_add(bl6)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE -> LE against local var */
|
||||
sethi %tie_hi22(bl8), %o3
|
||||
add %o3, %tie_lo10(bl8), %o5
|
||||
ldx [%l4 + %o5], %l2, %tie_ldx(bl8)
|
||||
ldsw [%g7 + %l2], %l2, %tie_add(bl8)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against hidden but not local var */
|
||||
sethi %tie_hi22(sh6), %o3
|
||||
add %o3, %tie_lo10(sh6), %o5
|
||||
ldx [%l4 + %o5], %l2, %tie_ldx(sh6)
|
||||
add %g7, %l2, %l2, %tie_add(sh6)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE -> LE against hidden but not local var */
|
||||
sethi %tie_hi22(bl8), %o3
|
||||
add %o3, %tie_lo10(bl8), %o5
|
||||
ldx [%l4 + %o5], %l2, %tie_ldx(bl8)
|
||||
stb %l1, [%g7 + %l2], %tie_add(bl8)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, global var defined in exec */
|
||||
sethi %tle_hix22(sg2), %l1
|
||||
nop
|
||||
xor %l1, %tle_lox10(sg2), %l2
|
||||
nop
|
||||
add %g7, %l2, %l3
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, local var */
|
||||
sethi %tle_hix22(bl2+2), %o0
|
||||
xor %o0, %tle_lox10(bl2+2), %o0
|
||||
add %g7, %o0, %o0
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, hidden var defined in exec */
|
||||
sethi %tle_hix22(sh2+1), %l1
|
||||
xor %l1, %tle_lox10(sh2+1), %o5
|
||||
add %g7, %o5, %o1
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* Direct %g7 access */
|
||||
|
||||
/* LE, global var defined in exec */
|
||||
sethi %tle_hix22(sg3), %l1
|
||||
xor %l1, %tle_lox10(sg3), %o5
|
||||
ldx [%g7 + %o5], %o1
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, local var */
|
||||
sethi %tle_hix22(bl3 + 3), %o0
|
||||
xor %o0, %tle_lox10(bl3 + 3), %o0
|
||||
stb %o1, [%g7 + %o0]
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, hidden var defined in exec */
|
||||
sethi %tle_hix22(sh3 + 3), %o2
|
||||
xor %o2, %tle_lox10(sh3 + 3), %o4
|
||||
ldstub [%g7 + %o4], %o5
|
||||
nop;nop;nop;nop
|
||||
|
||||
ret
|
||||
restore
|
11
ld/testsuite/ld-sparc/tlssunbin64.sd
Normal file
11
ld/testsuite/ld-sparc/tlssunbin64.sd
Normal file
@ -0,0 +1,11 @@
|
||||
#source: tlssunbin64.s
|
||||
#as: --64
|
||||
#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o
|
||||
#objdump: -sj.got
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf64-sparc
|
||||
|
||||
Contents of section .got:
|
||||
# FIXME
|
||||
#pass
|
11
ld/testsuite/ld-sparc/tlssunbin64.td
Normal file
11
ld/testsuite/ld-sparc/tlssunbin64.td
Normal file
@ -0,0 +1,11 @@
|
||||
#source: tlssunbin64.s
|
||||
#as: --64
|
||||
#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o
|
||||
#objdump: -sj.tdata
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf64-sparc
|
||||
|
||||
Contents of section .tdata:
|
||||
# FIXME
|
||||
#pass
|
183
ld/testsuite/ld-sparc/tlssunbinpic32.s
Normal file
183
ld/testsuite/ld-sparc/tlssunbinpic32.s
Normal file
@ -0,0 +1,183 @@
|
||||
.data
|
||||
.align 4096
|
||||
.section ".tdata", #alloc, #write, #tls
|
||||
.align 4
|
||||
.globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
|
||||
.globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
sg1: .word 17
|
||||
.skip 4096
|
||||
sg2: .word 18
|
||||
sg3: .word 19
|
||||
sg4: .word 20
|
||||
sg5: .word 21
|
||||
sg6: .word 22
|
||||
sg7: .word 23
|
||||
sg8: .word 24
|
||||
sl1: .word 65
|
||||
sl2: .word 66
|
||||
sl3: .word 67
|
||||
sl4: .word 68
|
||||
sl5: .word 69
|
||||
sl6: .word 70
|
||||
sl7: .word 71
|
||||
sl8: .word 72
|
||||
sh1: .word 257
|
||||
sh2: .word 258
|
||||
sh3: .word 259
|
||||
sh4: .word 260
|
||||
sh5: .word 261
|
||||
sh6: .word 262
|
||||
sh7: .word 263
|
||||
sh8: .word 264
|
||||
.text
|
||||
.align 4096
|
||||
.LLGETPC0:
|
||||
retl
|
||||
add %o7, %l7, %l7
|
||||
|
||||
.globl fn2
|
||||
.type fn2,#function
|
||||
.proc 04
|
||||
fn2:
|
||||
save %sp, -104, %sp
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
|
||||
call .LLGETPC0
|
||||
add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE because variable is not defined in executable */
|
||||
sethi %tgd_hi22(sG1), %l1
|
||||
nop
|
||||
add %l1, %tgd_lo10(sG1), %l2
|
||||
nop
|
||||
add %l7, %l2, %o0, %tgd_add(sG1)
|
||||
nop
|
||||
call __tls_get_addr, %tgd_call(sG1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE because variable is not defined in executable where
|
||||
the variable is referenced through IE too */
|
||||
sethi %tgd_hi22(sG2), %o0
|
||||
add %o0, %tgd_lo10(sG2), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(sG2)
|
||||
call __tls_get_addr, %tgd_call(sG2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> LE with global variable defined in executable */
|
||||
sethi %tgd_hi22(sg1), %l0
|
||||
add %l0, %tgd_lo10(sg1), %l5
|
||||
add %l7, %l5, %o0, %tgd_add(sg1)
|
||||
call __tls_get_addr, %tgd_call(sg1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> LE with local variable defined in executable */
|
||||
sethi %tgd_hi22(sl1), %o0
|
||||
add %o0, %tgd_lo10(sl1), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(sl1)
|
||||
call __tls_get_addr, %tgd_call(sl1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> LE with hidden variable defined in executable */
|
||||
sethi %tgd_hi22(sh1), %o0
|
||||
add %o0, %tgd_lo10(sh1), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(sh1)
|
||||
call __tls_get_addr, %tgd_call(sh1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD -> LE */
|
||||
sethi %tldm_hi22(sl1), %l1
|
||||
nop
|
||||
add %l1, %tldm_lo10(sl1), %l2
|
||||
nop
|
||||
add %l7, %l2, %o0, %tldm_add(sl1)
|
||||
nop
|
||||
call __tls_get_addr, %tldm_call(sl1)
|
||||
nop
|
||||
sethi %tldo_hix22(sl1), %l3
|
||||
nop
|
||||
xor %l3, %tldo_lox10(sl1), %l4
|
||||
nop
|
||||
add %o0, %l4, %l5, %tldo_add(sl1)
|
||||
nop
|
||||
sethi %tldo_hix22(sl2 + 2), %l2
|
||||
nop
|
||||
xor %l2, %tldo_lox10(sl2 + 2), %l3
|
||||
nop
|
||||
lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD -> LE against hidden variables */
|
||||
sethi %tldm_hi22(sh1), %o1
|
||||
sethi %tldo_hix22(sh1), %l3
|
||||
add %o1, %tldm_lo10(sh1), %o2
|
||||
sethi %tldo_hix22(sh2 + 1), %l2
|
||||
add %l7, %o2, %o0, %tldm_add(sh1)
|
||||
xor %l3, %tldo_lox10(sh1), %l4
|
||||
call __tls_get_addr, %tldm_call(sh1)
|
||||
xor %l2, %tldo_lox10(sh2 + 1), %l3
|
||||
add %o0, %l4, %l5, %tldo_add(sh1)
|
||||
ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sG2), %l1
|
||||
nop
|
||||
add %l1, %tie_lo10(sG2), %l2
|
||||
nop
|
||||
ld [%l7 + %l2], %l2, %tie_ld(sG2)
|
||||
nop
|
||||
add %g7, %l2, %l2, %tie_add(sG2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against global var defined in exec */
|
||||
sethi %tie_hi22(sg1), %o3
|
||||
add %o3, %tie_lo10(sg1), %o3
|
||||
ld [%l7 + %o3], %o3, %tie_ld(sg1)
|
||||
add %g7, %o3, %o4, %tie_add(sg1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against local var */
|
||||
sethi %tie_hi22(sl1), %l4
|
||||
add %l4, %tie_lo10(sl1), %l1
|
||||
ld [%l7 + %l1], %l3, %tie_ld(sl1)
|
||||
add %g7, %l3, %l3, %tie_add(sl1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against hidden var */
|
||||
sethi %tie_hi22(sh1), %o1
|
||||
add %o1, %tie_lo10(sh1), %o3
|
||||
ld [%l7 + %o3], %o0, %tie_ld(sh1)
|
||||
add %g7, %o0, %o3, %tie_add(sh1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* Direct access through %g7 */
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sG5), %o3
|
||||
add %o3, %tie_lo10(sG5), %o3
|
||||
ld [%l7 + %o3], %o2, %tie_ld(sG5)
|
||||
ld [%g7 + %o2], %o4, %tie_add(sG5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE->LE against local var */
|
||||
sethi %tie_hi22(sl5), %o3
|
||||
add %o3, %tie_lo10(sl5), %o3
|
||||
ld [%l7 + %o3], %o2, %tie_ld(sl5)
|
||||
stb %o4, [%g7 + %o2], %tie_add(sl5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE->LE against hidden var */
|
||||
sethi %tie_hi22(sh5), %o5
|
||||
add %o5, %tie_lo10(sh5), %o3
|
||||
ld [%l7 + %o3], %o2, %tie_ld(sh5)
|
||||
ldsb [%g7 + %o2], %o4, %tie_add(sh5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
ret
|
||||
restore
|
182
ld/testsuite/ld-sparc/tlssunbinpic64.s
Normal file
182
ld/testsuite/ld-sparc/tlssunbinpic64.s
Normal file
@ -0,0 +1,182 @@
|
||||
.data
|
||||
.align 4096
|
||||
.section ".tdata", #alloc, #write, #tls
|
||||
.align 4
|
||||
.globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
|
||||
.globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
sg1: .word 17
|
||||
sg2: .word 18
|
||||
sg3: .word 19
|
||||
sg4: .word 20
|
||||
sg5: .word 21
|
||||
sg6: .word 22
|
||||
sg7: .word 23
|
||||
sg8: .word 24
|
||||
sl1: .word 65
|
||||
sl2: .word 66
|
||||
sl3: .word 67
|
||||
sl4: .word 68
|
||||
sl5: .word 69
|
||||
sl6: .word 70
|
||||
sl7: .word 71
|
||||
sl8: .word 72
|
||||
sh1: .word 257
|
||||
sh2: .word 258
|
||||
sh3: .word 259
|
||||
sh4: .word 260
|
||||
sh5: .word 261
|
||||
sh6: .word 262
|
||||
sh7: .word 263
|
||||
sh8: .word 264
|
||||
.text
|
||||
.align 4096
|
||||
.LLGETPC0:
|
||||
retl
|
||||
add %o7, %l7, %l7
|
||||
|
||||
.globl fn2
|
||||
.type fn2,#function
|
||||
.proc 04
|
||||
fn2:
|
||||
save %sp, -160, %sp
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
|
||||
call .LLGETPC0
|
||||
add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE because variable is not defined in executable */
|
||||
sethi %tgd_hi22(sG1), %l1
|
||||
nop
|
||||
add %l1, %tgd_lo10(sG1), %l2
|
||||
nop
|
||||
add %l7, %l2, %o0, %tgd_add(sG1)
|
||||
nop
|
||||
call __tls_get_addr, %tgd_call(sG1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE because variable is not defined in executable where
|
||||
the variable is referenced through IE too */
|
||||
sethi %tgd_hi22(sG2), %o0
|
||||
add %o0, %tgd_lo10(sG2), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(sG2)
|
||||
call __tls_get_addr, %tgd_call(sG2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> LE with global variable defined in executable */
|
||||
sethi %tgd_hi22(sg1), %l0
|
||||
add %l0, %tgd_lo10(sg1), %l5
|
||||
add %l7, %l5, %o0, %tgd_add(sg1)
|
||||
call __tls_get_addr, %tgd_call(sg1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> LE with local variable defined in executable */
|
||||
sethi %tgd_hi22(sl1), %o0
|
||||
add %o0, %tgd_lo10(sl1), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(sl1)
|
||||
call __tls_get_addr, %tgd_call(sl1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> LE with hidden variable defined in executable */
|
||||
sethi %tgd_hi22(sh1), %o0
|
||||
add %o0, %tgd_lo10(sh1), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(sh1)
|
||||
call __tls_get_addr, %tgd_call(sh1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD -> LE */
|
||||
sethi %tldm_hi22(sl1), %l1
|
||||
nop
|
||||
add %l1, %tldm_lo10(sl1), %l2
|
||||
nop
|
||||
add %l7, %l2, %o0, %tldm_add(sl1)
|
||||
nop
|
||||
call __tls_get_addr, %tldm_call(sl1)
|
||||
nop
|
||||
sethi %tldo_hix22(sl1), %l3
|
||||
nop
|
||||
xor %l3, %tldo_lox10(sl1), %l4
|
||||
nop
|
||||
add %o0, %l4, %l5, %tldo_add(sl1)
|
||||
nop
|
||||
sethi %tldo_hix22(sl2 + 2), %l2
|
||||
nop
|
||||
xor %l2, %tldo_lox10(sl2 + 2), %l3
|
||||
nop
|
||||
lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD -> LE against hidden variables */
|
||||
sethi %tldm_hi22(sh1), %o1
|
||||
sethi %tldo_hix22(sh1), %l3
|
||||
add %o1, %tldm_lo10(sh1), %o2
|
||||
sethi %tldo_hix22(sh2 + 1), %l2
|
||||
add %l7, %o2, %o0, %tldm_add(sh1)
|
||||
xor %l3, %tldo_lox10(sh1), %l4
|
||||
call __tls_get_addr, %tldm_call(sh1)
|
||||
xor %l2, %tldo_lox10(sh2 + 1), %l3
|
||||
add %o0, %l4, %l5, %tldo_add(sh1)
|
||||
ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sG2), %l1
|
||||
nop
|
||||
add %l1, %tie_lo10(sG2), %l2
|
||||
nop
|
||||
ldx [%l7 + %l2], %l2, %tie_ldx(sG2)
|
||||
nop
|
||||
add %g7, %l2, %l2, %tie_add(sG2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against global var defined in exec */
|
||||
sethi %tie_hi22(sg1), %o3
|
||||
add %o3, %tie_lo10(sg1), %o3
|
||||
ldx [%l7 + %o3], %o2, %tie_ldx(sg1)
|
||||
add %g7, %o2, %o4, %tie_add(sg1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against local var */
|
||||
sethi %tie_hi22(sl1), %l4
|
||||
add %l4, %tie_lo10(sl1), %l1
|
||||
ldx [%l7 + %l1], %l3, %tie_ldx(sl1)
|
||||
add %g7, %l3, %l3, %tie_add(sl1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE -> LE against hidden var */
|
||||
sethi %tie_hi22(sh1), %o1
|
||||
add %o1, %tie_lo10(sh1), %o3
|
||||
ldx [%l7 + %o3], %o0, %tie_ldx(sh1)
|
||||
add %g7, %o0, %o3, %tie_add(sh1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* Direct access through %g7 */
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sG5), %o3
|
||||
add %o3, %tie_lo10(sG5), %o3
|
||||
ldx [%l7 + %o3], %o2, %tie_ldx(sG5)
|
||||
ldx [%g7 + %o2], %o4, %tie_add(sG5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE->LE against local var */
|
||||
sethi %tie_hi22(sl5), %o3
|
||||
add %o3, %tie_lo10(sl5), %o3
|
||||
ldx [%l7 + %o3], %o2, %tie_ldx(sl5)
|
||||
stb %o4, [%g7 + %o2], %tie_add(sl5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE->LE against hidden var */
|
||||
sethi %tie_hi22(sh5), %o5
|
||||
add %o5, %tie_lo10(sh5), %o3
|
||||
ldx [%l7 + %o3], %o2, %tie_ldx(sh5)
|
||||
ldsb [%g7 + %o2], %o4, %tie_add(sh5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
return %i7 + 8
|
||||
nop
|
84
ld/testsuite/ld-sparc/tlssunnopic32.dd
Normal file
84
ld/testsuite/ld-sparc/tlssunnopic32.dd
Normal file
@ -0,0 +1,84 @@
|
||||
#source: tlssunnopic32.s
|
||||
#source: tlsnopic.s
|
||||
#as: --32
|
||||
#ld: -shared -melf32_sparc
|
||||
#objdump: -drj.text
|
||||
#target: isparc-*-*
|
||||
|
||||
.*: +file format elf32-sparc
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
00001000 <fn3>:
|
||||
+1000: 9d e3 bf 98 save %sp, -104, %sp
|
||||
+1004: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+1008: a2 14 60 00 mov %l1, %l1 ! 0 <.*>
|
||||
+100c: 01 00 00 00 nop *
|
||||
+1010: 01 00 00 00 nop *
|
||||
+1014: 01 00 00 00 nop *
|
||||
+1018: 01 00 00 00 nop *
|
||||
+101c: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+1020: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*>
|
||||
+1024: d4 04 40 0b ld \[ %l1 \+ %o3 \], %o2
|
||||
+1028: 98 01 c0 0a add %g7, %o2, %o4
|
||||
+102c: 01 00 00 00 nop *
|
||||
+1030: 01 00 00 00 nop *
|
||||
+1034: 01 00 00 00 nop *
|
||||
+1038: 01 00 00 00 nop *
|
||||
+103c: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+1040: 90 02 20 10 add %o0, 0x10, %o0 ! 10 <.*>
|
||||
+1044: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0
|
||||
+1048: d0 01 c0 08 ld \[ %g7 \+ %o0 \], %o0
|
||||
+104c: 01 00 00 00 nop *
|
||||
+1050: 01 00 00 00 nop *
|
||||
+1054: 01 00 00 00 nop *
|
||||
+1058: 01 00 00 00 nop *
|
||||
+105c: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+1060: 90 02 20 14 add %o0, 0x14, %o0 ! 14 <.*>
|
||||
+1064: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0
|
||||
+1068: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+106c: 01 00 00 00 nop *
|
||||
+1070: 01 00 00 00 nop *
|
||||
+1074: 01 00 00 00 nop *
|
||||
+1078: 01 00 00 00 nop *
|
||||
+107c: 1b 00 00 00 sethi %hi\(0\), %o5
|
||||
+1080: 92 03 60 18 add %o5, 0x18, %o1 ! 18 <.*>
|
||||
+1084: d4 04 40 09 ld \[ %l1 \+ %o1 \], %o2
|
||||
+1088: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \]
|
||||
+108c: 01 00 00 00 nop *
|
||||
+1090: 01 00 00 00 nop *
|
||||
+1094: 01 00 00 00 nop *
|
||||
+1098: 01 00 00 00 nop *
|
||||
+109c: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+10a0: 90 02 20 04 add %o0, 4, %o0 ! 4 <.*>
|
||||
+10a4: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0
|
||||
+10a8: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+10ac: 01 00 00 00 nop *
|
||||
+10b0: 01 00 00 00 nop *
|
||||
+10b4: 01 00 00 00 nop *
|
||||
+10b8: 01 00 00 00 nop *
|
||||
+10bc: 1b 00 00 00 sethi %hi\(0\), %o5
|
||||
+10c0: 92 03 60 08 add %o5, 8, %o1 ! 8 <.*>
|
||||
+10c4: d4 04 40 09 ld \[ %l1 \+ %o1 \], %o2
|
||||
+10c8: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \]
|
||||
+10cc: 01 00 00 00 nop *
|
||||
+10d0: 01 00 00 00 nop *
|
||||
+10d4: 01 00 00 00 nop *
|
||||
+10d8: 01 00 00 00 nop *
|
||||
+10dc: 15 00 00 00 sethi %hi\(0\), %o2
|
||||
+10e0: 98 1a a0 00 xor %o2, 0, %o4
|
||||
+10e4: 90 01 c0 0c add %g7, %o4, %o0
|
||||
+10e8: 01 00 00 00 nop *
|
||||
+10ec: 01 00 00 00 nop *
|
||||
+10f0: 01 00 00 00 nop *
|
||||
+10f4: 01 00 00 00 nop *
|
||||
+10f8: 15 00 00 00 sethi %hi\(0\), %o2
|
||||
+10fc: 94 1a a0 00 xor %o2, 0, %o2
|
||||
+1100: d4 01 c0 0a ld \[ %g7 \+ %o2 \], %o2
|
||||
+1104: 01 00 00 00 nop *
|
||||
+1108: 01 00 00 00 nop *
|
||||
+110c: 01 00 00 00 nop *
|
||||
+1110: 01 00 00 00 nop *
|
||||
+1114: 81 c7 e0 08 ret *
|
||||
+1118: 81 e8 00 00 restore *
|
||||
#pass
|
112
ld/testsuite/ld-sparc/tlssunnopic32.rd
Normal file
112
ld/testsuite/ld-sparc/tlssunnopic32.rd
Normal file
@ -0,0 +1,112 @@
|
||||
#source: tlssunnopic32.s
|
||||
#source: tlsnopic.s
|
||||
#as: --32
|
||||
#ld: -shared -melf32_sparc
|
||||
#readelf: -WSsrl
|
||||
#target: sparc-*-*
|
||||
|
||||
There are 15 section headers, starting at offset 0x[0-9a-f]+:
|
||||
|
||||
Section Headers:
|
||||
+\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
|
||||
+\[ 0\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
|
||||
+\[ 1\] .hash +.*
|
||||
+\[ 2\] .dynsym +.*
|
||||
+\[ 3\] .dynstr +.*
|
||||
+\[ 4\] .rela.dyn +.*
|
||||
+\[ 5\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
|
||||
+\[ 6\] .data +PROGBITS +0+12000 0+2000 0+ 0+ +WA +0 +0 4096
|
||||
+\[ 7\] .tbss +NOBITS +0+12000 0+2000 0+24 0+ WAT +0 +0 +4
|
||||
+\[ 8\] .dynamic +DYNAMIC +0+12000 0+2000 0+80 08 +WA +3 +0 +4
|
||||
+\[ 9\] .plt +.*
|
||||
+\[10\] .got +PROGBITS +0+12080 0+2080 0+1c 04 +WA +0 +0 +4
|
||||
+\[11\] .bss +.*
|
||||
+\[12\] .shstrtab +.*
|
||||
+\[13\] .symtab +.*
|
||||
+\[14\] .strtab +.*
|
||||
#...
|
||||
Elf file type is DYN \(Shared object file\)
|
||||
Entry point 0x1000
|
||||
There are 4 program headers, starting at offset [0-9a-f]+
|
||||
|
||||
Program Headers:
|
||||
+Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
|
||||
+LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x10000
|
||||
+LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+9c 0x0+a0 RWE 0x10000
|
||||
+DYNAMIC +0x0+2000 0x0+12000 0x0+12000 0x0+80 0x0+80 RW +0x4
|
||||
+TLS +0x0+2000 0x0+12000 0x0+12000 0x0+ 0x0+24 R +0x4
|
||||
#...
|
||||
|
||||
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 12 entries:
|
||||
Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
|
||||
0+1004 +0+a09 R_SPARC_HI22 +0+12080 +\.got \+ 12080
|
||||
0+1008 +0+a0c R_SPARC_LO10 +0+12080 +\.got \+ 12080
|
||||
0+10dc +0+48 R_SPARC_TLS_LE_HIX22 +0+9
|
||||
0+10e0 +0+49 R_SPARC_TLS_LE_LOX10 +0+9
|
||||
0+10f8 +0+48 R_SPARC_TLS_LE_HIX22 +0+1c
|
||||
0+10fc +0+49 R_SPARC_TLS_LE_LOX10 +0+1c
|
||||
0+12084 +0+4e R_SPARC_TLS_TPOFF32 +0+
|
||||
0+12088 +0+4e R_SPARC_TLS_TPOFF32 +0+4
|
||||
0+12094 +0+4e R_SPARC_TLS_TPOFF32 +0+14
|
||||
0+12098 +0+4e R_SPARC_TLS_TPOFF32 +0+18
|
||||
0+1208c +0+f4e R_SPARC_TLS_TPOFF32 +0+ +sg1 \+ 0
|
||||
0+12090 +0+114e R_SPARC_TLS_TPOFF32 +0+ +sg2 \+ 0
|
||||
|
||||
Symbol table '.dynsym' contains 20 entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
+0: 0+ +0 NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+1: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +1 *
|
||||
+2: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +2 *
|
||||
+3: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +3 *
|
||||
+4: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +4 *
|
||||
+5: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +5 *
|
||||
+6: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +6 *
|
||||
+7: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +7 *
|
||||
+8: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +8 *
|
||||
+9: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +9 *
|
||||
+10: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +10 *
|
||||
+11: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +11 *
|
||||
+12: 0+12000 +0 OBJECT +GLOBAL DEFAULT +ABS _DYNAMIC
|
||||
+13: 0+1000 +0 FUNC +GLOBAL DEFAULT +5 fn3
|
||||
+14: 0+12080 +0 OBJECT +GLOBAL DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
|
||||
+15: 0+ +0 NOTYPE +GLOBAL DEFAULT +UND sg1
|
||||
+16: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS __bss_start
|
||||
+17: 0+ +0 NOTYPE +GLOBAL DEFAULT +UND sg2
|
||||
+18: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _edata
|
||||
+19: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _end
|
||||
|
||||
Symbol table '.symtab' contains 33 entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
+0: 0+ +0 NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+1: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +1 *
|
||||
+2: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +2 *
|
||||
+3: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +3 *
|
||||
+4: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +4 *
|
||||
+5: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +5 *
|
||||
+6: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +6 *
|
||||
+7: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +7 *
|
||||
+8: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +8 *
|
||||
+9: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +9 *
|
||||
+10: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +10 *
|
||||
+11: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +11 *
|
||||
+12: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +12 *
|
||||
+13: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +13 *
|
||||
+14: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +14 *
|
||||
+15: 0+ +0 TLS +LOCAL +DEFAULT +7 bl1
|
||||
+16: 0+4 +0 TLS +LOCAL +DEFAULT +7 bl2
|
||||
+17: 0+8 +0 TLS +LOCAL +DEFAULT +7 bl3
|
||||
+18: 0+c +0 TLS +LOCAL +DEFAULT +7 bl4
|
||||
+19: 0+10 +0 TLS +LOCAL +DEFAULT +7 bl5
|
||||
+20: 0+1c +0 TLS +LOCAL +HIDDEN +7 sh3
|
||||
+21: 0+20 +0 TLS +LOCAL +HIDDEN +7 sh4
|
||||
+22: 0+14 +0 TLS +LOCAL +HIDDEN +7 sh1
|
||||
+23: 0+12080 +0 OBJECT +LOCAL +HIDDEN +ABS _GLOBAL_OFFSET_TABLE_
|
||||
+24: 0+18 +0 TLS +LOCAL +HIDDEN +7 sh2
|
||||
+25: 0+12000 +0 OBJECT +GLOBAL DEFAULT +ABS _DYNAMIC
|
||||
+26: 0+1000 +0 FUNC +GLOBAL DEFAULT +5 fn3
|
||||
+27: 0+12080 +0 OBJECT +GLOBAL DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
|
||||
+28: 0+ +0 NOTYPE +GLOBAL DEFAULT +UND sg1
|
||||
+29: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS __bss_start
|
||||
+30: 0+ +0 NOTYPE +GLOBAL DEFAULT +UND sg2
|
||||
+31: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _edata
|
||||
+32: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _end
|
77
ld/testsuite/ld-sparc/tlssunnopic32.s
Normal file
77
ld/testsuite/ld-sparc/tlssunnopic32.s
Normal file
@ -0,0 +1,77 @@
|
||||
.data
|
||||
.align 4096
|
||||
.section ".tbss"
|
||||
.align 4
|
||||
bl1: .word 0
|
||||
bl2: .word 0
|
||||
bl3: .word 0
|
||||
bl4: .word 0
|
||||
bl5: .word 0
|
||||
.text
|
||||
.align 4096
|
||||
.globl fn3
|
||||
.type fn3,#function
|
||||
.proc 04
|
||||
fn3:
|
||||
save %sp, -104, %sp
|
||||
.hidden _GLOBAL_OFFSET_TABLE_
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_), %l1
|
||||
or %l1, %lo(_GLOBAL_OFFSET_TABLE_), %l1
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sg1), %o3
|
||||
add %o3, %tie_lo10(sg1), %o3
|
||||
ld [%l1 + %o3], %o2, %tie_ld(sg1)
|
||||
add %g7, %o2, %o4, %tie_add(sg1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE against global var */
|
||||
sethi %tie_hi22(sg2), %o0
|
||||
add %o0, %tie_lo10(sg2), %o0
|
||||
ld [%l1 + %o0], %o0, %tie_ld(sg2)
|
||||
ld [%g7 + %o0], %o0, %tie_add(sg2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden var */
|
||||
sethi %tie_hi22(sh1), %o0
|
||||
add %o0, %tie_lo10(sh1), %o0
|
||||
ld [%l1 + %o0], %o0, %tie_ld(sh1)
|
||||
add %g7, %o0, %o0, %tie_add(sh1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE against hidden var */
|
||||
sethi %tie_hi22(sh2), %o5
|
||||
add %o5, %tie_lo10(sh2), %o1
|
||||
ld [%l1 + %o1], %o2, %tie_ld(sh2)
|
||||
stb %o3, [%g7 + %o2], %tie_add(sh2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against local var */
|
||||
sethi %tie_hi22(bl1), %o0
|
||||
add %o0, %tie_lo10(bl1), %o0
|
||||
ld [%l1 + %o0], %o0, %tie_ld(bl1)
|
||||
add %g7, %o0, %o0, %tie_add(bl1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE against local var */
|
||||
sethi %tie_hi22(bl2), %o5
|
||||
add %o5, %tie_lo10(bl2), %o1
|
||||
ld [%l1 + %o1], %o2, %tie_ld(bl2)
|
||||
stb %o3, [%g7 + %o2], %tie_add(bl2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, local var */
|
||||
sethi %tle_hix22(bl3+1), %o2
|
||||
xor %o2, %tle_lox10(bl3+1), %o4
|
||||
add %g7, %o4, %o0
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, hidden var, direct %g7 access */
|
||||
sethi %tle_hix22(sh3), %o2
|
||||
xor %o2, %tle_lox10(sh3), %o2
|
||||
ld [%g7 + %o2], %o2
|
||||
nop;nop;nop;nop
|
||||
|
||||
ret
|
||||
restore
|
12
ld/testsuite/ld-sparc/tlssunnopic32.sd
Normal file
12
ld/testsuite/ld-sparc/tlssunnopic32.sd
Normal file
@ -0,0 +1,12 @@
|
||||
#source: tlssunnopic32.s
|
||||
#source: tlsnopic.s
|
||||
#as: --32
|
||||
#ld: -shared -melf32_sparc
|
||||
#objdump: -sj.got
|
||||
#target: sparc-*-*
|
||||
|
||||
.*: file format elf32-sparc
|
||||
|
||||
Contents of section \.got:
|
||||
12080 0+12000 0+ 0+ 0+ .*
|
||||
12090 0+ 0+ 0+ .*
|
12
ld/testsuite/ld-sparc/tlssunnopic64.dd
Normal file
12
ld/testsuite/ld-sparc/tlssunnopic64.dd
Normal file
@ -0,0 +1,12 @@
|
||||
#source: tlssunnopic64.s
|
||||
#source: tlsnopic.s
|
||||
#as: --64 -Av9
|
||||
#ld: -shared -melf64_sparc
|
||||
#objdump: -drj.text
|
||||
#target: isparc-*-*
|
||||
|
||||
.*: +file format elf64-sparc
|
||||
|
||||
Disassembly of section .text:
|
||||
# FIXME
|
||||
#pass
|
9
ld/testsuite/ld-sparc/tlssunnopic64.rd
Normal file
9
ld/testsuite/ld-sparc/tlssunnopic64.rd
Normal file
@ -0,0 +1,9 @@
|
||||
#source: tlssunnopic64.s
|
||||
#source: tlsnopic.s
|
||||
#as: --64 -Av9
|
||||
#ld: -shared -melf64_sparc
|
||||
#readelf: -WSsrl
|
||||
#target: sparc-*-*
|
||||
|
||||
# FIXME
|
||||
#pass
|
81
ld/testsuite/ld-sparc/tlssunnopic64.s
Normal file
81
ld/testsuite/ld-sparc/tlssunnopic64.s
Normal file
@ -0,0 +1,81 @@
|
||||
.data
|
||||
.align 4096
|
||||
.section ".tbss"
|
||||
.align 4
|
||||
bl1: .word 0
|
||||
bl2: .word 0
|
||||
bl3: .word 0
|
||||
bl4: .word 0
|
||||
bl5: .word 0
|
||||
.text
|
||||
.align 4096
|
||||
.globl fn3
|
||||
.type fn3,#function
|
||||
.proc 04
|
||||
fn3:
|
||||
save %sp, -160, %sp
|
||||
.hidden _GLOBAL_OFFSET_TABLE_
|
||||
sethi %hh(_GLOBAL_OFFSET_TABLE_), %l1
|
||||
sethi %lm(_GLOBAL_OFFSET_TABLE_), %l2
|
||||
or %l1, %hm(_GLOBAL_OFFSET_TABLE_), %l1
|
||||
or %l2, %lo(_GLOBAL_OFFSET_TABLE_), %l2
|
||||
sllx %l1, 32, %l1
|
||||
add %l1, %l2, %l1
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sg1), %o3
|
||||
add %o3, %tie_lo10(sg1), %o3
|
||||
ldx [%l1 + %o3], %o2, %tie_ldx(sg1)
|
||||
add %g7, %o2, %o4, %tie_add(sg1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE against global var */
|
||||
sethi %tie_hi22(sg2), %o0
|
||||
add %o0, %tie_lo10(sg2), %o0
|
||||
ldx [%l1 + %o0], %o0, %tie_ldx(sg2)
|
||||
lduw [%g7 + %o0], %o0, %tie_add(sg2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden var */
|
||||
sethi %tie_hi22(sh1), %o0
|
||||
add %o0, %tie_lo10(sh1), %o0
|
||||
ldx [%l1 + %o0], %o0, %tie_ldx(sh1)
|
||||
add %g7, %o0, %o0, %tie_add(sh1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE against hidden var */
|
||||
sethi %tie_hi22(sh2), %o5
|
||||
add %o5, %tie_lo10(sh2), %o1
|
||||
ldx [%l1 + %o1], %o2, %tie_ldx(sh2)
|
||||
stb %o3, [%g7 + %o2], %tie_add(sh2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against local var */
|
||||
sethi %tie_hi22(bl1), %o0
|
||||
add %o0, %tie_lo10(bl1), %o0
|
||||
ldx [%l1 + %o0], %o0, %tie_ldx(bl1)
|
||||
add %g7, %o0, %o0, %tie_add(bl1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* direct %g7 access IE against local var */
|
||||
sethi %tie_hi22(bl2), %o5
|
||||
add %o5, %tie_lo10(bl2), %o1
|
||||
ldx [%l1 + %o1], %o2, %tie_ldx(bl2)
|
||||
stb %o3, [%g7 + %o2], %tie_add(bl2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, local var */
|
||||
sethi %tle_hix22(bl3+1), %o2
|
||||
xor %o2, %tle_lox10(bl3+1), %o4
|
||||
add %g7, %o4, %o0
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LE, hidden var, direct %g7 access */
|
||||
sethi %tle_hix22(sh3), %o2
|
||||
xor %o2, %tle_lox10(sh3), %o2
|
||||
ld [%g7 + %o2], %o2
|
||||
nop;nop;nop;nop
|
||||
|
||||
return %i7 + 8
|
||||
nop
|
12
ld/testsuite/ld-sparc/tlssunnopic64.sd
Normal file
12
ld/testsuite/ld-sparc/tlssunnopic64.sd
Normal file
@ -0,0 +1,12 @@
|
||||
#source: tlssunnopic64.s
|
||||
#source: tlsnopic.s
|
||||
#as: --64 -Av9
|
||||
#ld: -shared -melf64_sparc
|
||||
#objdump: -sj.got
|
||||
#target: sparc-*-*
|
||||
|
||||
.*: file format elf64-sparc
|
||||
|
||||
Contents of section \.got:
|
||||
# FIXME
|
||||
#pass
|
220
ld/testsuite/ld-sparc/tlssunpic32.dd
Normal file
220
ld/testsuite/ld-sparc/tlssunpic32.dd
Normal file
@ -0,0 +1,220 @@
|
||||
#source: tlssunpic32.s
|
||||
#source: tlspic.s
|
||||
#as: --32 -K PIC
|
||||
#ld: -shared -melf32_sparc
|
||||
#objdump: -drj.text
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf32-sparc
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
00001000 <fn1-0x8>:
|
||||
+1000: 81 c3 e0 08 retl *
|
||||
+1004: ae 03 c0 17 add %o7, %l7, %l7
|
||||
|
||||
00001008 <fn1>:
|
||||
+1008: 9d e3 bf 98 save %sp, -104, %sp
|
||||
+100c: 2f 00 00 44 sethi %hi\(0x11000\), %l7
|
||||
+1010: 7f ff ff fc call 1000 <.*>
|
||||
+1014: ae 05 e1 28 add %l7, 0x128, %l7 ! 11128 <.*>
|
||||
+1018: 01 00 00 00 nop *
|
||||
+101c: 01 00 00 00 nop *
|
||||
+1020: 01 00 00 00 nop *
|
||||
+1024: 01 00 00 00 nop *
|
||||
+1028: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+102c: 01 00 00 00 nop *
|
||||
+1030: a4 04 60 2c add %l1, 0x2c, %l2
|
||||
+1034: 01 00 00 00 nop *
|
||||
+1038: 90 05 c0 12 add %l7, %l2, %o0
|
||||
+103c: 01 00 00 00 nop *
|
||||
+1040: 40 00 44 3a call 12128 <.*>
|
||||
+1044: 01 00 00 00 nop *
|
||||
+1048: 01 00 00 00 nop *
|
||||
+104c: 01 00 00 00 nop *
|
||||
+1050: 01 00 00 00 nop *
|
||||
+1054: 01 00 00 00 nop *
|
||||
+1058: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+105c: 92 02 20 3c add %o0, 0x3c, %o1 ! 3c <.*>
|
||||
+1060: d0 05 c0 09 ld \[ %l7 \+ %o1 \], %o0
|
||||
+1064: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+1068: 01 00 00 00 nop *
|
||||
+106c: 01 00 00 00 nop *
|
||||
+1070: 01 00 00 00 nop *
|
||||
+1074: 01 00 00 00 nop *
|
||||
+1078: 01 00 00 00 nop *
|
||||
+107c: 19 00 00 00 sethi %hi\(0\), %o4
|
||||
+1080: 98 03 20 04 add %o4, 4, %o4 ! 4 <.*>
|
||||
+1084: 90 05 c0 0c add %l7, %o4, %o0
|
||||
+1088: 40 00 44 28 call 12128 <.*>
|
||||
+108c: 01 00 00 00 nop *
|
||||
+1090: 01 00 00 00 nop *
|
||||
+1094: 01 00 00 00 nop *
|
||||
+1098: 01 00 00 00 nop *
|
||||
+109c: 01 00 00 00 nop *
|
||||
+10a0: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+10a4: 90 02 20 0c add %o0, 0xc, %o0 ! c <.*>
|
||||
+10a8: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0
|
||||
+10ac: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+10b0: 01 00 00 00 nop *
|
||||
+10b4: 01 00 00 00 nop *
|
||||
+10b8: 01 00 00 00 nop *
|
||||
+10bc: 01 00 00 00 nop *
|
||||
+10c0: 01 00 00 00 nop *
|
||||
+10c4: 19 00 00 00 sethi %hi\(0\), %o4
|
||||
+10c8: 98 03 20 40 add %o4, 0x40, %o4 ! 40 <.*>
|
||||
+10cc: 90 05 c0 0c add %l7, %o4, %o0
|
||||
+10d0: 40 00 44 16 call 12128 <.*>
|
||||
+10d4: 01 00 00 00 nop *
|
||||
+10d8: 01 00 00 00 nop *
|
||||
+10dc: 01 00 00 00 nop *
|
||||
+10e0: 01 00 00 00 nop *
|
||||
+10e4: 01 00 00 00 nop *
|
||||
+10e8: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+10ec: 90 02 20 48 add %o0, 0x48, %o0 ! 48 <.*>
|
||||
+10f0: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0
|
||||
+10f4: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+10f8: 01 00 00 00 nop *
|
||||
+10fc: 01 00 00 00 nop *
|
||||
+1100: 01 00 00 00 nop *
|
||||
+1104: 01 00 00 00 nop *
|
||||
+1108: 01 00 00 00 nop *
|
||||
+110c: 19 00 00 00 sethi %hi\(0\), %o4
|
||||
+1110: 98 03 20 1c add %o4, 0x1c, %o4 ! 1c <.*>
|
||||
+1114: 90 05 c0 0c add %l7, %o4, %o0
|
||||
+1118: 40 00 44 04 call 12128 <.*>
|
||||
+111c: 01 00 00 00 nop *
|
||||
+1120: 01 00 00 00 nop *
|
||||
+1124: 01 00 00 00 nop *
|
||||
+1128: 01 00 00 00 nop *
|
||||
+112c: 01 00 00 00 nop *
|
||||
+1130: 11 00 00 00 sethi %hi\(0\), %o0
|
||||
+1134: 90 02 20 24 add %o0, 0x24, %o0 ! 24 <.*>
|
||||
+1138: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0
|
||||
+113c: 90 01 c0 08 add %g7, %o0, %o0
|
||||
+1140: 01 00 00 00 nop *
|
||||
+1144: 01 00 00 00 nop *
|
||||
+1148: 01 00 00 00 nop *
|
||||
+114c: 01 00 00 00 nop *
|
||||
+1150: 01 00 00 00 nop *
|
||||
+1154: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+1158: 01 00 00 00 nop *
|
||||
+115c: a4 04 60 14 add %l1, 0x14, %l2
|
||||
+1160: 01 00 00 00 nop *
|
||||
+1164: 90 05 c0 12 add %l7, %l2, %o0
|
||||
+1168: 01 00 00 00 nop *
|
||||
+116c: 40 00 43 ef call 12128 <.*>
|
||||
+1170: 01 00 00 00 nop *
|
||||
+1174: 27 3f ff ff sethi %hi\(0xfffffc00\), %l3
|
||||
+1178: 01 00 00 00 nop *
|
||||
+117c: a8 1c fc 20 xor %l3, -992, %l4
|
||||
+1180: 01 00 00 00 nop *
|
||||
+1184: aa 02 00 14 add %o0, %l4, %l5
|
||||
+1188: 01 00 00 00 nop *
|
||||
+118c: 25 3f ff ff sethi %hi\(0xfffffc00\), %l2
|
||||
+1190: 01 00 00 00 nop *
|
||||
+1194: a6 1c bc 26 xor %l2, -986, %l3
|
||||
+1198: 01 00 00 00 nop *
|
||||
+119c: ec 12 00 13 lduh \[ %o0 \+ %l3 \], %l6
|
||||
+11a0: 01 00 00 00 nop *
|
||||
+11a4: 01 00 00 00 nop *
|
||||
+11a8: 01 00 00 00 nop *
|
||||
+11ac: 01 00 00 00 nop *
|
||||
+11b0: 13 00 00 00 sethi %hi\(0\), %o1
|
||||
+11b4: 27 3f ff ff sethi %hi\(0xfffffc00\), %l3
|
||||
+11b8: 94 02 60 14 add %o1, 0x14, %o2
|
||||
+11bc: 25 3f ff ff sethi %hi\(0xfffffc00\), %l2
|
||||
+11c0: 90 05 c0 0a add %l7, %o2, %o0
|
||||
+11c4: a8 1c fc 40 xor %l3, -960, %l4
|
||||
+11c8: 40 00 43 d8 call 12128 <.*>
|
||||
+11cc: a6 1c bc 45 xor %l2, -955, %l3
|
||||
+11d0: aa 02 00 14 add %o0, %l4, %l5
|
||||
+11d4: ec 0a 00 13 ldub \[ %o0 \+ %l3 \], %l6
|
||||
+11d8: 01 00 00 00 nop *
|
||||
+11dc: 01 00 00 00 nop *
|
||||
+11e0: 01 00 00 00 nop *
|
||||
+11e4: 01 00 00 00 nop *
|
||||
+11e8: 13 00 00 00 sethi %hi\(0\), %o1
|
||||
+11ec: 27 3f ff ff sethi %hi\(0xfffffc00\), %l3
|
||||
+11f0: 94 02 60 14 add %o1, 0x14, %o2
|
||||
+11f4: 25 3f ff ff sethi %hi\(0xfffffc00\), %l2
|
||||
+11f8: 90 05 c0 0a add %l7, %o2, %o0
|
||||
+11fc: a8 1c fc 63 xor %l3, -925, %l4
|
||||
+1200: 40 00 43 ca call 12128 <.*>
|
||||
+1204: a6 1c bc 64 xor %l2, -924, %l3
|
||||
+1208: aa 02 00 14 add %o0, %l4, %l5
|
||||
+120c: ec 02 00 13 ld \[ %o0 \+ %l3 \], %l6
|
||||
+1210: 01 00 00 00 nop *
|
||||
+1214: 01 00 00 00 nop *
|
||||
+1218: 01 00 00 00 nop *
|
||||
+121c: 01 00 00 00 nop *
|
||||
+1220: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+1224: 01 00 00 00 nop *
|
||||
+1228: a4 04 60 3c add %l1, 0x3c, %l2
|
||||
+122c: 01 00 00 00 nop *
|
||||
+1230: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
|
||||
+1234: 01 00 00 00 nop *
|
||||
+1238: a4 01 c0 12 add %g7, %l2, %l2
|
||||
+123c: 01 00 00 00 nop *
|
||||
+1240: 01 00 00 00 nop *
|
||||
+1244: 01 00 00 00 nop *
|
||||
+1248: 01 00 00 00 nop *
|
||||
+124c: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+1250: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*>
|
||||
+1254: d4 05 c0 0b ld \[ %l7 \+ %o3 \], %o2
|
||||
+1258: 98 01 c0 0a add %g7, %o2, %o4
|
||||
+125c: 01 00 00 00 nop *
|
||||
+1260: 01 00 00 00 nop *
|
||||
+1264: 01 00 00 00 nop *
|
||||
+1268: 01 00 00 00 nop *
|
||||
+126c: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+1270: a4 04 60 48 add %l1, 0x48, %l2 ! 48 <.*>
|
||||
+1274: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
|
||||
+1278: a4 01 c0 12 add %g7, %l2, %l2
|
||||
+127c: 01 00 00 00 nop *
|
||||
+1280: 01 00 00 00 nop *
|
||||
+1284: 01 00 00 00 nop *
|
||||
+1288: 01 00 00 00 nop *
|
||||
+128c: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+1290: a4 04 60 24 add %l1, 0x24, %l2 ! 24 <.*>
|
||||
+1294: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
|
||||
+1298: a4 01 c0 12 add %g7, %l2, %l2
|
||||
+129c: 01 00 00 00 nop *
|
||||
+12a0: 01 00 00 00 nop *
|
||||
+12a4: 01 00 00 00 nop *
|
||||
+12a8: 01 00 00 00 nop *
|
||||
+12ac: 23 00 00 00 sethi %hi\(0\), %l1
|
||||
+12b0: a4 04 60 28 add %l1, 0x28, %l2 ! 28 <.*>
|
||||
+12b4: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2
|
||||
+12b8: e4 01 c0 12 ld \[ %g7 \+ %l2 \], %l2
|
||||
+12bc: 01 00 00 00 nop *
|
||||
+12c0: 01 00 00 00 nop *
|
||||
+12c4: 01 00 00 00 nop *
|
||||
+12c8: 01 00 00 00 nop *
|
||||
+12cc: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+12d0: 98 02 e0 10 add %o3, 0x10, %o4 ! 10 <.*>
|
||||
+12d4: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5
|
||||
+12d8: e4 29 c0 0d stb %l2, \[ %g7 \+ %o5 \]
|
||||
+12dc: 01 00 00 00 nop *
|
||||
+12e0: 01 00 00 00 nop *
|
||||
+12e4: 01 00 00 00 nop *
|
||||
+12e8: 01 00 00 00 nop *
|
||||
+12ec: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+12f0: 98 02 e0 34 add %o3, 0x34, %o4 ! 34 <.*>
|
||||
+12f4: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5
|
||||
+12f8: e4 11 c0 0d lduh \[ %g7 \+ %o5 \], %l2
|
||||
+12fc: 01 00 00 00 nop *
|
||||
+1300: 01 00 00 00 nop *
|
||||
+1304: 01 00 00 00 nop *
|
||||
+1308: 01 00 00 00 nop *
|
||||
+130c: 17 00 00 00 sethi %hi\(0\), %o3
|
||||
+1310: 98 02 e0 38 add %o3, 0x38, %o4 ! 38 <.*>
|
||||
+1314: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5
|
||||
+1318: e4 21 c0 0d st %l2, \[ %g7 \+ %o5 \]
|
||||
+131c: 01 00 00 00 nop *
|
||||
+1320: 01 00 00 00 nop *
|
||||
+1324: 01 00 00 00 nop *
|
||||
+1328: 01 00 00 00 nop *
|
||||
+132c: 81 c7 e0 08 ret *
|
||||
+1330: 81 e8 00 00 restore *
|
||||
#pass
|
155
ld/testsuite/ld-sparc/tlssunpic32.rd
Normal file
155
ld/testsuite/ld-sparc/tlssunpic32.rd
Normal file
@ -0,0 +1,155 @@
|
||||
#source: tlssunpic32.s
|
||||
#source: tlspic.s
|
||||
#as: --32 -K PIC
|
||||
#ld: -shared -melf32_sparc
|
||||
#readelf: -WSsrl
|
||||
#target: sparc*-*-*
|
||||
|
||||
There are 17 section headers, starting at offset 0x[0-9a-f]+:
|
||||
|
||||
Section Headers:
|
||||
+\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
|
||||
+\[ 0\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
|
||||
+\[ 1\] .hash +.*
|
||||
+\[ 2\] .dynsym +.*
|
||||
+\[ 3\] .dynstr +.*
|
||||
+\[ 4\] .rela.dyn +.*
|
||||
+\[ 5\] .rela.plt +.*
|
||||
+\[ 6\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
|
||||
+\[ 7\] .data +PROGBITS +0+12000 0+2000 0+ 0+ +WA +0 +0 4096
|
||||
+\[ 8\] .tdata +PROGBITS +0+12000 0+2000 0+60 0+ WAT +0 +0 +4
|
||||
+\[ 9\] .tbss +NOBITS +0+12060 0+2060 0+20 0+ WAT +0 +0 +4
|
||||
+\[10\] .dynamic +DYNAMIC +0+12060 0+2060 0+98 08 +WA +3 +0 +4
|
||||
+\[11\] .plt +.*
|
||||
+\[12\] .got +PROGBITS +0+12138 0+2138 0+4c 04 +WA +0 +0 +4
|
||||
+\[13\] .bss +.*
|
||||
+\[14\] .shstrtab +.*
|
||||
+\[15\] .symtab +.*
|
||||
+\[16\] .strtab +.*
|
||||
#...
|
||||
|
||||
Elf file type is DYN \(Shared object file\)
|
||||
Entry point 0x1000
|
||||
There are 4 program headers, starting at offset [0-9]+
|
||||
|
||||
Program Headers:
|
||||
+Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
|
||||
+LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x10000
|
||||
+LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+184 0x0+188 RWE 0x10000
|
||||
+DYNAMIC +0x0+2060 0x0+12060 0x0+12060 0x0+98 0x0+98 RW +0x4
|
||||
+TLS +0x0+2000 0x0+12000 0x0+12000 0x0+60 0x0+80 R +0x4
|
||||
#...
|
||||
|
||||
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
|
||||
Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
|
||||
0+1213c +0+4a R_SPARC_TLS_DTPMOD32 +0+
|
||||
0+12144 +0+4e R_SPARC_TLS_TPOFF32 +0+24
|
||||
0+12148 +0+4e R_SPARC_TLS_TPOFF32 +0+30
|
||||
0+1214c +0+4a R_SPARC_TLS_DTPMOD32 +0+
|
||||
0+12154 +0+4a R_SPARC_TLS_DTPMOD32 +0+
|
||||
0+1215c +0+4e R_SPARC_TLS_TPOFF32 +0+64
|
||||
0+1216c +0+4e R_SPARC_TLS_TPOFF32 +0+50
|
||||
0+12170 +0+4e R_SPARC_TLS_TPOFF32 +0+70
|
||||
0+12178 +0+4a R_SPARC_TLS_DTPMOD32 +0+
|
||||
0+12180 +0+4e R_SPARC_TLS_TPOFF32 +0+44
|
||||
0+12160 +0+124e R_SPARC_TLS_TPOFF32 +0+10 +sg5 \+ 0
|
||||
0+12164 +0+154a R_SPARC_TLS_DTPMOD32 +0+ +sg1 \+ 0
|
||||
0+12168 +0+154c R_SPARC_TLS_DTPOFF32 +0+ +sg1 \+ 0
|
||||
0+12174 +0+184e R_SPARC_TLS_TPOFF32 +0+4 +sg2 \+ 0
|
||||
|
||||
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
|
||||
0+12128 +0+1415 R_SPARC_JMP_SLOT +0+ +__tls_get_addr \+ 0
|
||||
|
||||
Symbol table '.dynsym' contains 30 entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
+0: 0+ +0 NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+1: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +1 *
|
||||
+2: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +2 *
|
||||
+3: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +3 *
|
||||
+4: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +4 *
|
||||
+5: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +5 *
|
||||
+6: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +6 *
|
||||
+7: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +7 *
|
||||
+8: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +8 *
|
||||
+9: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +9 *
|
||||
+10: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +10 *
|
||||
+11: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +11 *
|
||||
+12: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +12 *
|
||||
+13: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +13 *
|
||||
+14: 0+1c +0 TLS +GLOBAL DEFAULT +8 sg8
|
||||
+15: 0+12060 +0 OBJECT +GLOBAL DEFAULT +ABS _DYNAMIC
|
||||
+16: 0+8 +0 TLS +GLOBAL DEFAULT +8 sg3
|
||||
+17: 0+c +0 TLS +GLOBAL DEFAULT +8 sg4
|
||||
+18: 0+10 +0 TLS +GLOBAL DEFAULT +8 sg5
|
||||
+19: [0-9a-f]+ +0 OBJECT +GLOBAL DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
|
||||
+20: 0+ +0 NOTYPE +GLOBAL DEFAULT +UND __tls_get_addr
|
||||
+21: 0+ +0 TLS +GLOBAL DEFAULT +8 sg1
|
||||
+22: 0+1008 +0 FUNC +GLOBAL DEFAULT +6 fn1
|
||||
+23: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS __bss_start
|
||||
+24: 0+4 +0 TLS +GLOBAL DEFAULT +8 sg2
|
||||
+25: 0+14 +0 TLS +GLOBAL DEFAULT +8 sg6
|
||||
+26: 0+18 +0 TLS +GLOBAL DEFAULT +8 sg7
|
||||
+27: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _edata
|
||||
+28: 0+12138 +0 OBJECT +GLOBAL DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
|
||||
+29: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _end
|
||||
|
||||
Symbol table '.symtab' contains 57 entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
+0: 0+ +0 NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+1: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +1 *
|
||||
+2: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +2 *
|
||||
+3: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +3 *
|
||||
+4: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +4 *
|
||||
+5: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +5 *
|
||||
+6: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +6 *
|
||||
+7: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +7 *
|
||||
+8: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +8 *
|
||||
+9: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +9 *
|
||||
+10: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +10 *
|
||||
+11: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +11 *
|
||||
+12: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +12 *
|
||||
+13: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +13 *
|
||||
+14: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +14 *
|
||||
+15: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +15 *
|
||||
+16: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +16 *
|
||||
+17: 0+20 +0 TLS +LOCAL +DEFAULT +8 sl1
|
||||
+18: 0+24 +0 TLS +LOCAL +DEFAULT +8 sl2
|
||||
+19: 0+28 +0 TLS +LOCAL +DEFAULT +8 sl3
|
||||
+20: 0+2c +0 TLS +LOCAL +DEFAULT +8 sl4
|
||||
+21: 0+30 +0 TLS +LOCAL +DEFAULT +8 sl5
|
||||
+22: 0+34 +0 TLS +LOCAL +DEFAULT +8 sl6
|
||||
+23: 0+38 +0 TLS +LOCAL +DEFAULT +8 sl7
|
||||
+24: 0+3c +0 TLS +LOCAL +DEFAULT +8 sl8
|
||||
+25: 0+60 +0 TLS +LOCAL +HIDDEN +9 sH1
|
||||
+26: 0+48 +0 TLS +LOCAL +HIDDEN +8 sh3
|
||||
+27: 0+64 +0 TLS +LOCAL +HIDDEN +9 sH2
|
||||
+28: 0+78 +0 TLS +LOCAL +HIDDEN +9 sH7
|
||||
+29: 0+58 +0 TLS +LOCAL +HIDDEN +8 sh7
|
||||
+30: 0+5c +0 TLS +LOCAL +HIDDEN +8 sh8
|
||||
+31: 0+6c +0 TLS +LOCAL +HIDDEN +9 sH4
|
||||
+32: 0+4c +0 TLS +LOCAL +HIDDEN +8 sh4
|
||||
+33: 0+68 +0 TLS +LOCAL +HIDDEN +9 sH3
|
||||
+34: 0+50 +0 TLS +LOCAL +HIDDEN +8 sh5
|
||||
+35: 0+70 +0 TLS +LOCAL +HIDDEN +9 sH5
|
||||
+36: 0+74 +0 TLS +LOCAL +HIDDEN +9 sH6
|
||||
+37: 0+7c +0 TLS +LOCAL +HIDDEN +9 sH8
|
||||
+38: 0+40 +0 TLS +LOCAL +HIDDEN +8 sh1
|
||||
+39: 0+44 +0 TLS +LOCAL +HIDDEN +8 sh2
|
||||
+40: 0+54 +0 TLS +LOCAL +HIDDEN +8 sh6
|
||||
+41: 0+1c +0 TLS +GLOBAL DEFAULT +8 sg8
|
||||
+42: 0+12060 +0 OBJECT +GLOBAL DEFAULT +ABS _DYNAMIC
|
||||
+43: 0+8 +0 TLS +GLOBAL DEFAULT +8 sg3
|
||||
+44: 0+c +0 TLS +GLOBAL DEFAULT +8 sg4
|
||||
+45: 0+10 +0 TLS +GLOBAL DEFAULT +8 sg5
|
||||
+46: [0-9a-f]+ +0 OBJECT +GLOBAL DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_
|
||||
+47: 0+ +0 NOTYPE +GLOBAL DEFAULT +UND __tls_get_addr
|
||||
+48: 0+ +0 TLS +GLOBAL DEFAULT +8 sg1
|
||||
+49: 0+1008 +0 FUNC +GLOBAL DEFAULT +6 fn1
|
||||
+50: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS __bss_start
|
||||
+51: 0+4 +0 TLS +GLOBAL DEFAULT +8 sg2
|
||||
+52: 0+14 +0 TLS +GLOBAL DEFAULT +8 sg6
|
||||
+53: 0+18 +0 TLS +GLOBAL DEFAULT +8 sg7
|
||||
+54: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _edata
|
||||
+55: 0+12138 +0 OBJECT +GLOBAL DEFAULT +ABS _GLOBAL_OFFSET_TABLE_
|
||||
+56: [0-9a-f]+ +0 NOTYPE +GLOBAL DEFAULT +ABS _end
|
228
ld/testsuite/ld-sparc/tlssunpic32.s
Normal file
228
ld/testsuite/ld-sparc/tlssunpic32.s
Normal file
@ -0,0 +1,228 @@
|
||||
.data
|
||||
.align 4096
|
||||
.section ".tdata", #alloc, #write, #tls
|
||||
.align 4
|
||||
.globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
|
||||
.globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
sg1: .word 17
|
||||
sg2: .word 18
|
||||
sg3: .word 19
|
||||
sg4: .word 20
|
||||
sg5: .word 21
|
||||
sg6: .word 22
|
||||
sg7: .word 23
|
||||
sg8: .word 24
|
||||
sl1: .word 65
|
||||
sl2: .word 66
|
||||
sl3: .word 67
|
||||
sl4: .word 68
|
||||
sl5: .word 69
|
||||
sl6: .word 70
|
||||
sl7: .word 71
|
||||
sl8: .word 72
|
||||
sh1: .word 257
|
||||
sh2: .word 258
|
||||
sh3: .word 259
|
||||
sh4: .word 260
|
||||
sh5: .word 261
|
||||
sh6: .word 262
|
||||
sh7: .word 263
|
||||
sh8: .word 264
|
||||
|
||||
.text
|
||||
.align 4096
|
||||
.LLGETPC0:
|
||||
retl
|
||||
add %o7, %l7, %l7
|
||||
|
||||
.globl fn1
|
||||
.type fn1,#function
|
||||
.proc 04
|
||||
fn1:
|
||||
save %sp, -104, %sp
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
|
||||
call .LLGETPC0
|
||||
add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD */
|
||||
sethi %tgd_hi22(sg1), %l1
|
||||
nop
|
||||
add %l1, %tgd_lo10(sg1), %l2
|
||||
nop
|
||||
add %l7, %l2, %o0, %tgd_add(sg1)
|
||||
nop
|
||||
call __tls_get_addr, %tgd_call(sg1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE because variable is referenced through IE too */
|
||||
sethi %tgd_hi22(sg2), %o0
|
||||
add %o0, %tgd_lo10(sg2), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(sg2)
|
||||
call __tls_get_addr, %tgd_call(sg2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD against local variable */
|
||||
sethi %tgd_hi22(sl1), %o4
|
||||
add %o4, %tgd_lo10(sl1), %o4
|
||||
add %l7, %o4, %o0, %tgd_add(sl1)
|
||||
call __tls_get_addr, %tgd_call(sl1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE against local variable referenced through IE too */
|
||||
sethi %tgd_hi22(sl2), %o0
|
||||
add %o0, %tgd_lo10(sl2), %o0
|
||||
add %l7, %o0, %o0, %tgd_add(sl2)
|
||||
call __tls_get_addr, %tgd_call(sl2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD against hidden and local variable */
|
||||
sethi %tgd_hi22(sh1), %o4
|
||||
add %o4, %tgd_lo10(sh1), %o4
|
||||
add %l7, %o4, %o0, %tgd_add(sh1)
|
||||
call __tls_get_addr, %tgd_call(sh1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE against hidden and local variable referenced through
|
||||
IE too */
|
||||
sethi %tgd_hi22(sh2), %o0
|
||||
add %o0, %tgd_lo10(sh2), %o0
|
||||
add %l7, %o0, %o0, %tgd_add(sh2)
|
||||
call __tls_get_addr, %tgd_call(sh2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD against hidden but not local variable */
|
||||
sethi %tgd_hi22(sH1), %o4
|
||||
add %o4, %tgd_lo10(sH1), %o4
|
||||
add %l7, %o4, %o0, %tgd_add(sH1)
|
||||
call __tls_get_addr, %tgd_call(sH1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE against hidden but not local variable referenced through
|
||||
IE too */
|
||||
sethi %tgd_hi22(sH2), %o0
|
||||
add %o0, %tgd_lo10(sH2), %o0
|
||||
add %l7, %o0, %o0, %tgd_add(sH2)
|
||||
call __tls_get_addr, %tgd_call(sH2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD */
|
||||
sethi %tldm_hi22(sl1), %l1
|
||||
nop
|
||||
add %l1, %tldm_lo10(sl1), %l2
|
||||
nop
|
||||
add %l7, %l2, %o0, %tldm_add(sl1)
|
||||
nop
|
||||
call __tls_get_addr, %tldm_call(sl1)
|
||||
nop
|
||||
sethi %tldo_hix22(sl1), %l3
|
||||
nop
|
||||
xor %l3, %tldo_lox10(sl1), %l4
|
||||
nop
|
||||
add %o0, %l4, %l5, %tldo_add(sl1)
|
||||
nop
|
||||
sethi %tldo_hix22(sl2 + 2), %l2
|
||||
nop
|
||||
xor %l2, %tldo_lox10(sl2 + 2), %l3
|
||||
nop
|
||||
lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD against hidden and local variables */
|
||||
sethi %tldm_hi22(sh1), %o1
|
||||
sethi %tldo_hix22(sh1), %l3
|
||||
add %o1, %tldm_lo10(sh1), %o2
|
||||
sethi %tldo_hix22(sh2 + 1), %l2
|
||||
add %l7, %o2, %o0, %tldm_add(sh1)
|
||||
xor %l3, %tldo_lox10(sh1), %l4
|
||||
call __tls_get_addr, %tldm_call(sh1)
|
||||
xor %l2, %tldo_lox10(sh2 + 1), %l3
|
||||
add %o0, %l4, %l5, %tldo_add(sh1)
|
||||
ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD against hidden but not local variables */
|
||||
sethi %tldm_hi22(sH1), %o1
|
||||
sethi %tldo_hix22(sH1 + 3), %l3
|
||||
add %o1, %tldm_lo10(sH1), %o2
|
||||
sethi %tldo_hix22(sH2), %l2
|
||||
add %l7, %o2, %o0, %tldm_add(sH1)
|
||||
xor %l3, %tldo_lox10(sH1 + 3), %l4
|
||||
call __tls_get_addr, %tldm_call(sH1)
|
||||
xor %l2, %tldo_lox10(sH2), %l3
|
||||
add %o0, %l4, %l5, %tldo_add(sH1 + 3)
|
||||
ld [%o0 + %l3], %l6, %tldo_add(sH2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sg2), %l1
|
||||
nop
|
||||
add %l1, %tie_lo10(sg2), %l2
|
||||
nop
|
||||
ld [%l7 + %l2], %l2, %tie_ld(sg2)
|
||||
nop
|
||||
add %g7, %l2, %l2, %tie_add(sg2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against local var */
|
||||
sethi %tie_hi22(sl2), %o3
|
||||
add %o3, %tie_lo10(sl2), %o3
|
||||
ld [%l7 + %o3], %o2, %tie_ld(sl2)
|
||||
add %g7, %o2, %o4, %tie_add(sl2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden and local var */
|
||||
sethi %tie_hi22(sh2), %l1
|
||||
add %l1, %tie_lo10(sh2), %l2
|
||||
ld [%l7 + %l2], %l2, %tie_ld(sh2)
|
||||
add %g7, %l2, %l2, %tie_add(sh2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden but not local var */
|
||||
sethi %tie_hi22(sH2), %l1
|
||||
add %l1, %tie_lo10(sH2), %l2
|
||||
ld [%l7 + %l2], %l2, %tie_ld(sH2)
|
||||
add %g7, %l2, %l2, %tie_add(sH2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* Direct access through %g7 */
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sg5), %l1
|
||||
add %l1, %tie_lo10(sg5), %l2
|
||||
ld [%l7 + %l2], %l2, %tie_ld(sg5)
|
||||
ld [%g7 + %l2], %l2, %tie_add(sg5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against local var */
|
||||
sethi %tie_hi22(sl5), %o3
|
||||
add %o3, %tie_lo10(sl5), %o4
|
||||
ld [%l7 + %o4], %o5, %tie_ld(sl5)
|
||||
stb %l2, [%g7 + %o5], %tie_add(sl5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden and local var */
|
||||
sethi %tie_hi22(sh5), %o3
|
||||
add %o3, %tie_lo10(sh5), %o4
|
||||
ld [%l7 + %o4], %o5, %tie_ld(sh5)
|
||||
lduh [%g7 + %o5], %l2, %tie_add(sh5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden but not local var */
|
||||
sethi %tie_hi22(sH5), %o3
|
||||
add %o3, %tie_lo10(sH5), %o4
|
||||
ld [%l7 + %o4], %o5, %tie_ld(sH5)
|
||||
st %l2, [%g7 + %o5], %tie_add(sH5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
ret
|
||||
restore
|
15
ld/testsuite/ld-sparc/tlssunpic32.sd
Normal file
15
ld/testsuite/ld-sparc/tlssunpic32.sd
Normal file
@ -0,0 +1,15 @@
|
||||
#source: tlssunpic32.s
|
||||
#source: tlspic.s
|
||||
#as: --32 -K PIC
|
||||
#ld: -shared -melf32_sparc
|
||||
#objdump: -sj.got
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf32-sparc
|
||||
|
||||
Contents of section .got:
|
||||
12138 00012060 00000000 00000020 00000000 .*
|
||||
12148 00000000 00000000 00000000 00000000 .*
|
||||
12158 00000060 00000000 00000000 00000000 .*
|
||||
12168 00000000 00000000 00000000 00000000 .*
|
||||
12178 00000000 00000040 00000000 .*
|
16
ld/testsuite/ld-sparc/tlssunpic32.td
Normal file
16
ld/testsuite/ld-sparc/tlssunpic32.td
Normal file
@ -0,0 +1,16 @@
|
||||
#source: tlssunpic32.s
|
||||
#source: tlspic.s
|
||||
#as: --32 -K PIC
|
||||
#ld: -shared -melf32_sparc
|
||||
#objdump: -sj.tdata
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf32-sparc
|
||||
|
||||
Contents of section .tdata:
|
||||
12000 00000011 00000012 00000013 00000014 .*
|
||||
12010 00000015 00000016 00000017 00000018 .*
|
||||
12020 00000041 00000042 00000043 00000044 .*
|
||||
12030 00000045 00000046 00000047 00000048 .*
|
||||
12040 00000101 00000102 00000103 00000104 .*
|
||||
12050 00000105 00000106 00000107 00000108 .*
|
12
ld/testsuite/ld-sparc/tlssunpic64.dd
Normal file
12
ld/testsuite/ld-sparc/tlssunpic64.dd
Normal file
@ -0,0 +1,12 @@
|
||||
#source: tlssunpic64.s
|
||||
#source: tlspic.s
|
||||
#as: --64 -Av9 -K PIC
|
||||
#ld: -shared -melf64_sparc
|
||||
#objdump: -drj.text
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf64-sparc
|
||||
|
||||
Disassembly of section .text:
|
||||
# FIXME
|
||||
#pass
|
9
ld/testsuite/ld-sparc/tlssunpic64.rd
Normal file
9
ld/testsuite/ld-sparc/tlssunpic64.rd
Normal file
@ -0,0 +1,9 @@
|
||||
#source: tlssunpic64.s
|
||||
#source: tlspic.s
|
||||
#as: --64 -Av9 -K PIC
|
||||
#ld: -shared -melf64_sparc
|
||||
#readelf: -WSsrl
|
||||
#target: sparc*-*-*
|
||||
|
||||
# FIXME
|
||||
#pass
|
228
ld/testsuite/ld-sparc/tlssunpic64.s
Normal file
228
ld/testsuite/ld-sparc/tlssunpic64.s
Normal file
@ -0,0 +1,228 @@
|
||||
.data
|
||||
.align 4096
|
||||
.section ".tdata", #alloc, #write, #tls
|
||||
.align 4
|
||||
.globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
|
||||
.globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
sg1: .word 17
|
||||
sg2: .word 18
|
||||
sg3: .word 19
|
||||
sg4: .word 20
|
||||
sg5: .word 21
|
||||
sg6: .word 22
|
||||
sg7: .word 23
|
||||
sg8: .word 24
|
||||
sl1: .word 65
|
||||
sl2: .word 66
|
||||
sl3: .word 67
|
||||
sl4: .word 68
|
||||
sl5: .word 69
|
||||
sl6: .word 70
|
||||
sl7: .word 71
|
||||
sl8: .word 72
|
||||
sh1: .word 257
|
||||
sh2: .word 258
|
||||
sh3: .word 259
|
||||
sh4: .word 260
|
||||
sh5: .word 261
|
||||
sh6: .word 262
|
||||
sh7: .word 263
|
||||
sh8: .word 264
|
||||
|
||||
.text
|
||||
.align 4096
|
||||
.LLGETPC0:
|
||||
retl
|
||||
add %o7, %l7, %l7
|
||||
|
||||
.globl fn1
|
||||
.type fn1,#function
|
||||
.proc 04
|
||||
fn1:
|
||||
save %sp, -160, %sp
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
|
||||
call .LLGETPC0
|
||||
add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD */
|
||||
sethi %tgd_hi22(sg1), %l1
|
||||
nop
|
||||
add %l1, %tgd_lo10(sg1), %l2
|
||||
nop
|
||||
add %l7, %l2, %o0, %tgd_add(sg1)
|
||||
nop
|
||||
call __tls_get_addr, %tgd_call(sg1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE because variable is referenced through IE too */
|
||||
sethi %tgd_hi22(sg2), %o0
|
||||
add %o0, %tgd_lo10(sg2), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(sg2)
|
||||
call __tls_get_addr, %tgd_call(sg2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD against local variable */
|
||||
sethi %tgd_hi22(sl1), %o4
|
||||
add %o4, %tgd_lo10(sl1), %o4
|
||||
add %l7, %o4, %o0, %tgd_add(sl1)
|
||||
call __tls_get_addr, %tgd_call(sl1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE against local variable referenced through IE too */
|
||||
sethi %tgd_hi22(sl2), %o0
|
||||
add %o0, %tgd_lo10(sl2), %o0
|
||||
add %l7, %o0, %o0, %tgd_add(sl2)
|
||||
call __tls_get_addr, %tgd_call(sl2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD against hidden and local variable */
|
||||
sethi %tgd_hi22(sh1), %o4
|
||||
add %o4, %tgd_lo10(sh1), %o4
|
||||
add %l7, %o4, %o0, %tgd_add(sh1)
|
||||
call __tls_get_addr, %tgd_call(sh1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE against hidden and local variable referenced through
|
||||
IE too */
|
||||
sethi %tgd_hi22(sh2), %o0
|
||||
add %o0, %tgd_lo10(sh2), %o0
|
||||
add %l7, %o0, %o0, %tgd_add(sh2)
|
||||
call __tls_get_addr, %tgd_call(sh2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD against hidden but not local variable */
|
||||
sethi %tgd_hi22(sH1), %o4
|
||||
add %o4, %tgd_lo10(sH1), %o4
|
||||
add %l7, %o4, %o0, %tgd_add(sH1)
|
||||
call __tls_get_addr, %tgd_call(sH1)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* GD -> IE against hidden but not local variable referenced through
|
||||
IE too */
|
||||
sethi %tgd_hi22(sH2), %o0
|
||||
add %o0, %tgd_lo10(sH2), %o0
|
||||
add %l7, %o0, %o0, %tgd_add(sH2)
|
||||
call __tls_get_addr, %tgd_call(sH2)
|
||||
nop
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD */
|
||||
sethi %tldm_hi22(sl1), %l1
|
||||
nop
|
||||
add %l1, %tldm_lo10(sl1), %l2
|
||||
nop
|
||||
add %l7, %l2, %o0, %tldm_add(sl1)
|
||||
nop
|
||||
call __tls_get_addr, %tldm_call(sl1)
|
||||
nop
|
||||
sethi %tldo_hix22(sl1), %l3
|
||||
nop
|
||||
xor %l3, %tldo_lox10(sl1), %l4
|
||||
nop
|
||||
add %o0, %l4, %l5, %tldo_add(sl1)
|
||||
nop
|
||||
sethi %tldo_hix22(sl2 + 2), %l2
|
||||
nop
|
||||
xor %l2, %tldo_lox10(sl2 + 2), %l3
|
||||
nop
|
||||
lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD against hidden and local variables */
|
||||
sethi %tldm_hi22(sh1), %o1
|
||||
sethi %tldo_hix22(sh1), %l3
|
||||
add %o1, %tldm_lo10(sh1), %o2
|
||||
sethi %tldo_hix22(sh2 + 1), %l2
|
||||
add %l7, %o2, %o0, %tldm_add(sh1)
|
||||
xor %l3, %tldo_lox10(sh1), %l4
|
||||
call __tls_get_addr, %tldm_call(sh1)
|
||||
xor %l2, %tldo_lox10(sh2 + 1), %l3
|
||||
ldx [%o0 + %l4], %l5, %tldo_add(sh1)
|
||||
add %o0, %l3, %l6, %tldo_add(sh2 + 1)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* LD against hidden but not local variables */
|
||||
sethi %tldm_hi22(sH1), %o1
|
||||
sethi %tldo_hix22(sH1 + 3), %l3
|
||||
add %o1, %tldm_lo10(sH1), %o2
|
||||
sethi %tldo_hix22(sH2), %l2
|
||||
add %l7, %o2, %o0, %tldm_add(sH1)
|
||||
xor %l3, %tldo_lox10(sH1 + 3), %l4
|
||||
call __tls_get_addr, %tldm_call(sH1)
|
||||
xor %l2, %tldo_lox10(sH2), %l3
|
||||
add %o0, %l4, %l5, %tldo_add(sH1 + 3)
|
||||
ld [%o0 + %l3], %l6, %tldo_add(sH2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sg2), %l1
|
||||
nop
|
||||
add %l1, %tie_lo10(sg2), %l2
|
||||
nop
|
||||
ldx [%l7 + %l2], %l2, %tie_ldx(sg2)
|
||||
nop
|
||||
add %g7, %l2, %l2, %tie_add(sg2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against local var */
|
||||
sethi %tie_hi22(sl2), %o3
|
||||
add %o3, %tie_lo10(sl2), %o3
|
||||
ldx [%l7 + %o3], %o2, %tie_ldx(sl2)
|
||||
add %g7, %o2, %o4, %tie_add(sl2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden and local var */
|
||||
sethi %tie_hi22(sh2), %l1
|
||||
add %l1, %tie_lo10(sh2), %l2
|
||||
ldx [%l7 + %l2], %l2, %tie_ldx(sh2)
|
||||
add %g7, %l2, %l2, %tie_add(sh2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden but not local var */
|
||||
sethi %tie_hi22(sH2), %l1
|
||||
add %l1, %tie_lo10(sH2), %l2
|
||||
ldx [%l7 + %l2], %l2, %tie_ldx(sH2)
|
||||
add %g7, %l2, %l2, %tie_add(sH2)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* Direct access through %g7 */
|
||||
|
||||
/* IE against global var */
|
||||
sethi %tie_hi22(sg5), %l1
|
||||
add %l1, %tie_lo10(sg5), %l2
|
||||
ldx [%l7 + %l2], %l2, %tie_ldx(sg5)
|
||||
ldx [%g7 + %l2], %l2, %tie_add(sg5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against local var */
|
||||
sethi %tie_hi22(sl5), %o3
|
||||
add %o3, %tie_lo10(sl5), %o4
|
||||
ldx [%l7 + %o4], %o5, %tie_ldx(sl5)
|
||||
stb %l2, [%g7 + %o5], %tie_add(sl5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden and local var */
|
||||
sethi %tie_hi22(sh5), %o3
|
||||
add %o3, %tie_lo10(sh5), %o4
|
||||
ldx [%l7 + %o4], %o5, %tie_ldx(sh5)
|
||||
stx %l2, [%g7 + %o5], %tie_add(sh5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
/* IE against hidden but not local var */
|
||||
sethi %tie_hi22(sH5), %o3
|
||||
add %o3, %tie_lo10(sH5), %o4
|
||||
ldx [%l7 + %o4], %o5, %tie_ldx(sH5)
|
||||
st %l2, [%g7 + %o5], %tie_add(sH5)
|
||||
nop;nop;nop;nop
|
||||
|
||||
return %i7 + 8
|
||||
nop
|
12
ld/testsuite/ld-sparc/tlssunpic64.sd
Normal file
12
ld/testsuite/ld-sparc/tlssunpic64.sd
Normal file
@ -0,0 +1,12 @@
|
||||
#source: tlssunpic64.s
|
||||
#source: tlspic.s
|
||||
#as: --64 -K PIC
|
||||
#ld: -shared -melf64_sparc
|
||||
#objdump: -sj.got
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf64-sparc
|
||||
|
||||
Contents of section .got:
|
||||
# FIXME
|
||||
#pass
|
12
ld/testsuite/ld-sparc/tlssunpic64.td
Normal file
12
ld/testsuite/ld-sparc/tlssunpic64.td
Normal file
@ -0,0 +1,12 @@
|
||||
#source: tlssunpic64.s
|
||||
#source: tlspic.s
|
||||
#as: --64 -K PIC
|
||||
#ld: -shared -melf64_sparc
|
||||
#objdump: -sj.tdata
|
||||
#target: sparc*-*-*
|
||||
|
||||
.*: +file format elf64-sparc
|
||||
|
||||
Contents of section .tdata:
|
||||
# FIXME
|
||||
#pass
|
Loading…
Reference in New Issue
Block a user