Author: gonzo
Date: Tue Feb 14 00:17:43 2012
New Revision: 231619
URL: http://svn.freebsd.org/changeset/base/231619

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

Modified:
  head/lib/libthr/arch/arm/arm/pthread_md.c
  head/lib/libthr/arch/arm/include/pthread_md.h

Modified: head/lib/libthr/arch/arm/arm/pthread_md.c
==============================================================================
--- head/lib/libthr/arch/arm/arm/pthread_md.c   Tue Feb 14 00:16:34 2012        
(r231618)
+++ head/lib/libthr/arch/arm/arm/pthread_md.c   Tue Feb 14 00:17:43 2012        
(r231619)
@@ -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: head/lib/libthr/arch/arm/include/pthread_md.h
==============================================================================
--- head/lib/libthr/arch/arm/include/pthread_md.h       Tue Feb 14 00:16:34 
2012        (r231618)
+++ head/lib/libthr/arch/arm/include/pthread_md.h       Tue Feb 14 00:17:43 
2012        (r231619)
@@ -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];
 };
 
 /*
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to