summaryrefslogtreecommitdiffstats
path: root/src/libc++/builtins.C
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-09-19 14:23:54 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-10-09 17:06:49 -0500
commitfb1836fd7b1b8839815595db08ae740ec7b86347 (patch)
tree54ff93536489c27b80af1f503520bd9894cdcfd3 /src/libc++/builtins.C
parent84e4274fe412a577f67805cc701f4fb66a3feb2f (diff)
downloadtalos-hostboot-fb1836fd7b1b8839815595db08ae740ec7b86347.tar.gz
talos-hostboot-fb1836fd7b1b8839815595db08ae740ec7b86347.zip
Support code coverage in extended modules.
- Reduce optimization (to -Os) to fit when doing coverage profile. - Remove errl storage area from base image. - Add GCC function attributes to sys library functions. RTC: 36933 Change-Id: Ic83011a2444ef5b735db0446a14a0af34187eebf Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1908 Tested-by: Jenkins Server Reviewed-by: Brian H. Horton <brianh@linux.ibm.com> Reviewed-by: ADAM R. MUHLE <armuhle@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: Melissa J. Connell <missyc@us.ibm.com> Reviewed-by: Paul Nguyen <nguyenp@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/libc++/builtins.C')
-rwxr-xr-xsrc/libc++/builtins.C56
1 files changed, 31 insertions, 25 deletions
diff --git a/src/libc++/builtins.C b/src/libc++/builtins.C
index e65d1d967..7cef85485 100755
--- a/src/libc++/builtins.C
+++ b/src/libc++/builtins.C
@@ -1,30 +1,31 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/libc++/builtins.C $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2010 - 2011
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/libc++/builtins.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2010,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#include <stdint.h>
#include <stdlib.h>
#include <arch/ppc.H>
#include <util/locked/list.H>
+#include <sys/sync.h>
void* operator new(size_t s)
{
@@ -109,13 +110,13 @@ struct DtorEntry_t
key_type key;
void (*dtor)(void*);
void * arg;
- void * dso_handle;
DtorEntry_t * next;
DtorEntry_t * prev;
};
Util::Locked::List<DtorEntry_t, DtorEntry_t::key_type> g_dtorRegistry;
+mutex_t g_dtorLock = MUTEX_INITIALIZER;
/**
@@ -125,15 +126,17 @@ Util::Locked::List<DtorEntry_t, DtorEntry_t::key_type> g_dtorRegistry;
*/
void call_dtors(void * i_dso_handle)
{
+ mutex_lock(&g_dtorLock);
+
DtorEntry_t * entry = NULL;
- // A module is never exited by different threads so
- // assume no locking needed here.
while( NULL != (entry = g_dtorRegistry.find(i_dso_handle)) )
{
g_dtorRegistry.erase(entry); // remove from list
(*(entry->dtor))(entry->arg);
delete entry;
}
+
+ mutex_unlock(&g_dtorLock);
}
@@ -150,7 +153,10 @@ extern "C" int __cxa_atexit(void (*i_dtor)(void*),
entry->key = i_dso_handle;
entry->dtor = i_dtor;
entry->arg = i_arg;
+
+ mutex_lock(&g_dtorLock);
g_dtorRegistry.insert(entry);
+ mutex_unlock(&g_dtorLock);
}
return 0;
}
OpenPOWER on IntegriCloud