projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
bytecode: Add `OBJECT_TYPE_{UN,}SIGNED_ENUM` type
[lttng-ust.git]
/
liblttng-ust-libc-wrapper
/
lttng-ust-malloc.c
diff --git
a/liblttng-ust-libc-wrapper/lttng-ust-malloc.c
b/liblttng-ust-libc-wrapper/lttng-ust-malloc.c
index 652dd5ae977decbf24bf1587c2326902b74a0bd1..1e9a25e5c89dbbefbf6ff819a3a37a2e7d8d8c24 100644
(file)
--- a/
liblttng-ust-libc-wrapper/lttng-ust-malloc.c
+++ b/
liblttng-ust-libc-wrapper/lttng-ust-malloc.c
@@
-17,7
+17,11
@@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define _GNU_SOURCE
+/*
+ * Do _not_ define _LGPL_SOURCE because we don't want to create a
+ * circular dependency loop between this malloc wrapper, liburcu and
+ * libc.
+ */
#include <lttng/ust-dlfcn.h>
#include <sys/types.h>
#include <stdio.h>
#include <lttng/ust-dlfcn.h>
#include <sys/types.h>
#include <stdio.h>
@@
-28,9
+32,11
@@
#include <urcu/tls-compat.h>
#include <urcu/arch.h>
#include <lttng/align.h>
#include <urcu/tls-compat.h>
#include <urcu/arch.h>
#include <lttng/align.h>
+#include <helper.h>
#define TRACEPOINT_DEFINE
#define TRACEPOINT_CREATE_PROBES
#define TRACEPOINT_DEFINE
#define TRACEPOINT_CREATE_PROBES
+#define TP_IP_PARAM ip
#include "ust_libc.h"
#define STATIC_CALLOC_LEN 4096
#include "ust_libc.h"
#define STATIC_CALLOC_LEN 4096
@@
-89,8
+95,8
@@
void ust_malloc_spin_unlock(pthread_mutex_t *lock)
#define pthread_mutex_lock ust_malloc_spin_lock
#define pthread_mutex_unlock ust_malloc_spin_unlock
static DEFINE_URCU_TLS(int, malloc_nesting);
#define pthread_mutex_lock ust_malloc_spin_lock
#define pthread_mutex_unlock ust_malloc_spin_unlock
static DEFINE_URCU_TLS(int, malloc_nesting);
-#undef
ust_malloc_spin
_unlock
-#undef
ust_malloc_spin
_lock
+#undef
pthread_mutex
_unlock
+#undef
pthread_mutex
_lock
#undef calloc
/*
#undef calloc
/*
@@
-115,7
+121,7
@@
void *static_calloc_aligned(size_t nmemb, size_t size, size_t alignment)
res_offset = CMM_LOAD_SHARED(static_calloc_buf_offset);
do {
prev_offset = res_offset;
res_offset = CMM_LOAD_SHARED(static_calloc_buf_offset);
do {
prev_offset = res_offset;
- aligned_offset = ALIGN(prev_offset + sizeof(size_t), alignment);
+ aligned_offset =
LTTNG_UST_
ALIGN(prev_offset + sizeof(size_t), alignment);
new_offset = aligned_offset + nmemb * size;
if (new_offset > sizeof(static_calloc_buf)) {
abort();
new_offset = aligned_offset + nmemb * size;
if (new_offset > sizeof(static_calloc_buf)) {
abort();
@@
-261,7
+267,7
@@
void *malloc(size_t size)
retval = cur_alloc.malloc(size);
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, malloc,
retval = cur_alloc.malloc(size);
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, malloc,
- size, retval,
__builtin_return_address(0
));
+ size, retval,
LTTNG_UST_CALLER_IP(
));
}
URCU_TLS(malloc_nesting)--;
return retval;
}
URCU_TLS(malloc_nesting)--;
return retval;
@@
-281,7
+287,7
@@
void free(void *ptr)
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, free,
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, free,
- ptr,
__builtin_return_address(0
));
+ ptr,
LTTNG_UST_CALLER_IP(
));
}
if (cur_alloc.free == NULL) {
}
if (cur_alloc.free == NULL) {
@@
-311,7
+317,7
@@
void *calloc(size_t nmemb, size_t size)
retval = cur_alloc.calloc(nmemb, size);
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, calloc,
retval = cur_alloc.calloc(nmemb, size);
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, calloc,
- nmemb, size, retval,
__builtin_return_address(0
));
+ nmemb, size, retval,
LTTNG_UST_CALLER_IP(
));
}
URCU_TLS(malloc_nesting)--;
return retval;
}
URCU_TLS(malloc_nesting)--;
return retval;
@@
-364,7
+370,7
@@
void *realloc(void *ptr, size_t size)
end:
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, realloc,
end:
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, realloc,
- ptr, size, retval,
__builtin_return_address(0
));
+ ptr, size, retval,
LTTNG_UST_CALLER_IP(
));
}
URCU_TLS(malloc_nesting)--;
return retval;
}
URCU_TLS(malloc_nesting)--;
return retval;
@@
-386,7
+392,7
@@
void *memalign(size_t alignment, size_t size)
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, memalign,
alignment, size, retval,
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, memalign,
alignment, size, retval,
-
__builtin_return_address(0
));
+
LTTNG_UST_CALLER_IP(
));
}
URCU_TLS(malloc_nesting)--;
return retval;
}
URCU_TLS(malloc_nesting)--;
return retval;
@@
-408,12
+414,18
@@
int posix_memalign(void **memptr, size_t alignment, size_t size)
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, posix_memalign,
*memptr, alignment, size,
if (URCU_TLS(malloc_nesting) == 1) {
tracepoint(lttng_ust_libc, posix_memalign,
*memptr, alignment, size,
- retval,
__builtin_return_address(0
));
+ retval,
LTTNG_UST_CALLER_IP(
));
}
URCU_TLS(malloc_nesting)--;
return retval;
}
}
URCU_TLS(malloc_nesting)--;
return retval;
}
+static
+void lttng_ust_fixup_malloc_nesting_tls(void)
+{
+ asm volatile ("" : : "m" (URCU_TLS(malloc_nesting)));
+}
+
__attribute__((constructor))
void lttng_ust_malloc_wrapper_init(void)
{
__attribute__((constructor))
void lttng_ust_malloc_wrapper_init(void)
{
@@
-421,6
+433,7
@@
void lttng_ust_malloc_wrapper_init(void)
if (cur_alloc.calloc) {
return;
}
if (cur_alloc.calloc) {
return;
}
+ lttng_ust_fixup_malloc_nesting_tls();
/*
* Ensure the allocator is in place before the process becomes
* multithreaded.
/*
* Ensure the allocator is in place before the process becomes
* multithreaded.
This page took
0.02906 seconds
and
4
git commands to generate.