diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2012-09-19 14:23:54 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-10-09 17:06:49 -0500 |
commit | fb1836fd7b1b8839815595db08ae740ec7b86347 (patch) | |
tree | 54ff93536489c27b80af1f503520bd9894cdcfd3 /src/libc++ | |
parent | 84e4274fe412a577f67805cc701f4fb66a3feb2f (diff) | |
download | talos-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++')
-rwxr-xr-x | src/libc++/builtins.C | 56 |
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; } |