From ba3373f46899eedf11c19b1fda9408818b3dc831 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 29 Nov 2012 13:11:00 -0800 Subject: [PATCH] re PR libgcc/48076 (Unsafe double checked locking in __emutls_get_address) PR libgcc/48076 * emutls.c (__emutls_get_address): Add memory barrier before referencing emutls_key. From-SVN: r193959 --- gcc/ChangeLog | 6 ++++++ gcc/emutls.c | 3 +++ 2 files changed, 9 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33a8b4f0a5ac..2eb5a7e3401b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-11-24 Richard Henderson + + PR libgcc/48076 + * emutls.c (__emutls_get_address): Add memory barrier before + referencing emutls_key. + 2012-11-09 Eric Botcazou * doc/install.texi (sparc64-x-solaris2): Mention MPC as well. diff --git a/gcc/emutls.c b/gcc/emutls.c index b7ee3bdfa7ce..fcf6eb56f9bf 100644 --- a/gcc/emutls.c +++ b/gcc/emutls.c @@ -151,6 +151,9 @@ __emutls_get_address (struct __emutls_object *obj) __gthread_mutex_unlock (&emutls_mutex); } + /* Do not allow emutls_key to be loaded before offset. */ + __sync_synchronize(); + struct __emutls_array *arr = __gthread_getspecific (emutls_key); if (__builtin_expect (arr == NULL, 0)) { -- 2.47.2