* 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:
Jakub Jelinek 2003-01-24 23:44:45 +00:00
parent c34ee0383a
commit b9734f3572
51 changed files with 4634 additions and 310 deletions

View File

@ -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.

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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",

View File

@ -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

View File

@ -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.

View File

@ -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)
;

View File

@ -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)
{

View File

@ -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 \

View File

@ -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

View File

@ -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)

View File

@ -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.

View 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

View 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)

View 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 .*

View 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)

View 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

View 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

View 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

View 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

View 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 *

View 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

View 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

View 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+ .*

View 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 .*

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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+ .*

View 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

View File

@ -0,0 +1,9 @@
#source: tlssunnopic64.s
#source: tlsnopic.s
#as: --64 -Av9
#ld: -shared -melf64_sparc
#readelf: -WSsrl
#target: sparc-*-*
# FIXME
#pass

View 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

View 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

View 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

View 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

View 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

View 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 .*

View 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 .*

View 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

View 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

View 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

View 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

View 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