Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Jun 2012 13:53:28 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r237397 - in stable/9/lib/libthr/arch/arm: arm include
Message-ID:  <201206211353.q5LDrSxI016504@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Thu Jun 21 13:53:28 2012
New Revision: 237397
URL: http://svn.freebsd.org/changeset/base/237397

Log:
  MFC: r231619
  
  Add thread-local storage support for arm:
  
  - Switch to Variant I TCB layout
  - Use function from rtld for TCB allocation/deallocation

Modified:
  stable/9/lib/libthr/arch/arm/arm/pthread_md.c
  stable/9/lib/libthr/arch/arm/include/pthread_md.h
Directory Properties:
  stable/9/lib/libthr/   (props changed)

Modified: stable/9/lib/libthr/arch/arm/arm/pthread_md.c
==============================================================================
--- stable/9/lib/libthr/arch/arm/arm/pthread_md.c	Thu Jun 21 13:51:50 2012	(r237396)
+++ stable/9/lib/libthr/arch/arm/arm/pthread_md.c	Thu Jun 21 13:53:28 2012	(r237397)
@@ -37,14 +37,17 @@ _tcb_ctor(struct pthread *thread, int in
 {
 	struct tcb *tcb;
 
-	tcb = malloc(sizeof(struct tcb));
+	tcb = _rtld_allocate_tls((initial) ? _tcb_get() :  NULL,
+	    sizeof(struct tcb), 16);
 	if (tcb)
 		tcb->tcb_thread = thread;
+
 	return (tcb);
 }
 
 void
 _tcb_dtor(struct tcb *tcb)
 {
-	free(tcb);
+
+	_rtld_free_tls(tcb, sizeof(struct tcb), 16);
 }

Modified: stable/9/lib/libthr/arch/arm/include/pthread_md.h
==============================================================================
--- stable/9/lib/libthr/arch/arm/include/pthread_md.h	Thu Jun 21 13:51:50 2012	(r237396)
+++ stable/9/lib/libthr/arch/arm/include/pthread_md.h	Thu Jun 21 13:53:28 2012	(r237397)
@@ -43,10 +43,8 @@
  * Variant II tcb, first two members are required by rtld.
  */
 struct tcb {
-	struct tcb		*tcb_self;	/* required by rtld */
 	void			*tcb_dtv;	/* required by rtld */
 	struct pthread		*tcb_thread;	/* our hook */
-	void			*tcb_spare[1];
 };
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206211353.q5LDrSxI016504>