From 8ecdc98b5beb950cd557a85e41f6dd6da5d2537d Mon Sep 17 00:00:00 2001 From: Oleksandr Tymoshenko Date: Tue, 14 Feb 2012 00:17:43 +0000 Subject: [PATCH] Add thread-local storage support for arm: - Switch to Variant I TCB layout - Use function from rtld for TCB allocation/deallocation --- lib/libthr/arch/arm/arm/pthread_md.c | 7 +++++-- lib/libthr/arch/arm/include/pthread_md.h | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/libthr/arch/arm/arm/pthread_md.c b/lib/libthr/arch/arm/arm/pthread_md.c index 7ca2b25dcf9..028f06c1793 100644 --- a/lib/libthr/arch/arm/arm/pthread_md.c +++ b/lib/libthr/arch/arm/arm/pthread_md.c @@ -37,14 +37,17 @@ _tcb_ctor(struct pthread *thread, int initial) { 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); } diff --git a/lib/libthr/arch/arm/include/pthread_md.h b/lib/libthr/arch/arm/include/pthread_md.h index e799c542feb..83ddf7f8595 100644 --- a/lib/libthr/arch/arm/include/pthread_md.h +++ b/lib/libthr/arch/arm/include/pthread_md.h @@ -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]; }; /*