This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

vxworks tls part 1


vxworks 6.6 supports a form of TLS. This patch adds the necessary linker script fragments.

tested on arm, mips, sh, powerpc, i686 & sparc vxworks targets

ok?

nathan
--
Nathan Sidwell    ::   http://www.codesourcery.com   ::         CodeSourcery

2007-11-06  Nathan Sidwell  <nathan@codesourcery.com>

	ld/
	* emulparams/vxworks.sh (OTHER_READONLY_SECTIONS,
	OTHER_READWRITE_SECTIONS): Add TLS sections.

	ld/testsuite/
	* ld-vxworks/tls-1.d: New.
	* ld-vxworks/tls-1.s: New.

Index: ld/emulparams/vxworks.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/vxworks.sh,v
retrieving revision 1.6
diff -c -3 -p -r1.6 vxworks.sh
*** ld/emulparams/vxworks.sh	27 Apr 2007 00:09:31 -0000	1.6
--- ld/emulparams/vxworks.sh	6 Nov 2007 17:15:32 -0000
*************** FINI_START='_fini = .;
*** 22,27 ****
--- 22,45 ----
  FINI_END="KEEP (*(.fini\$99));
            PROVIDE (${SYMPREFIX}_etext = .);"
  
+ OTHER_READONLY_SECTIONS=".tls_data ${RELOCATING-0} : {${RELOCATING+
+     __wrs_rtp_tls_data_start = .;
+     ___wrs_rtp_tls_data_start = .;}
+     *(.tls_data${RELOCATING+ .tls_data.*})
+   }${RELOCATING+
+   __wrs_rtp_tls_data_size = . - __wrs_rtp_tls_data_start;
+   ___wrs_rtp_tls_data_size = . - __wrs_rtp_tls_data_start;
+   __wrs_rtp_tls_data_align = ALIGNOF(.tls_data);
+   ___wrs_rtp_tls_data_align = ALIGNOF(.tls_data);}"
+ 
+ OTHER_READWRITE_SECTIONS=".tls_vars ${RELOCATING-0} : {${RELOCATING+
+     __wrs_rtp_tls_vars_start = .;
+     ___wrs_rtp_tls_vars_start = .;}
+     *(.tls_vars${RELOCATING+ .tls_vars.*})
+   }${RELOCATING+
+   __wrs_rtp_tls_vars_size = SIZEOF(.tls_vars);
+   ___wrs_rtp_tls_vars_size = SIZEOF(.tls_vars);}"
+ 
  ETEXT_NAME=etext_unrelocated
  OTHER_END_SYMBOLS="PROVIDE (${SYMPREFIX}_ehdr = ${TEXT_START_ADDR});"
  DATA_END_SYMBOLS=".edata : { PROVIDE (${SYMPREFIX}_edata = .); }"
Index: ld/testsuite/ld-vxworks/tls-1.d
===================================================================
RCS file: ld/testsuite/ld-vxworks/tls-1.d
diff -N ld/testsuite/ld-vxworks/tls-1.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-vxworks/tls-1.d	6 Nov 2007 19:01:11 -0000
***************
*** 0 ****
--- 1,25 ----
+ # source: tls-1.s
+ # ld: --entry foo -q
+ # nm: -r
+ 
+ #...
+ [0-9a-f]+ N __wrs_rtp_tls_vars_start
+ #...
+ 0000000c A __wrs_rtp_tls_vars_size
+ #...
+ [0-9a-f]+ N __wrs_rtp_tls_data_start
+ #...
+ 00000004 A __wrs_rtp_tls_data_size
+ #...
+ 00000004 A __wrs_rtp_tls_data_align
+ #...
+ [0-9a-f]+ N ___wrs_rtp_tls_vars_start
+ #...
+ 0000000c A ___wrs_rtp_tls_vars_size
+ #...
+ [0-9a-f]+ N ___wrs_rtp_tls_data_start
+ #...
+ 00000004 A ___wrs_rtp_tls_data_size
+ #...
+ 00000004 A ___wrs_rtp_tls_data_align
+ #pass
Index: ld/testsuite/ld-vxworks/tls-1.s
===================================================================
RCS file: ld/testsuite/ld-vxworks/tls-1.s
diff -N ld/testsuite/ld-vxworks/tls-1.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-vxworks/tls-1.s	6 Nov 2007 19:01:11 -0000
***************
*** 0 ****
--- 1,19 ----
+ 	.globl	foo
+ foo:
+ 
+ 	.section	.tls_data
+ 	.p2align	2
+ 	.type	i,%object
+ 	.size	i,4
+ i:
+ 	.space	4
+ 	.globl	__tls__i
+ 	.section	.tls_vars
+ 	.p2align	2
+ 	.type	__tls__i,%object
+ 	.size	__tls__i,12
+ __tls__i:
+ 	.4byte	i
+ 	.4byte	0
+ 	.4byte	4
+ 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]