From 3e3e68fa09e9a6e6b5a4c820eed66512d046418a Mon Sep 17 00:00:00 2001 From: strange Date: Sat, 14 Nov 2009 23:54:16 -0700 Subject: [PATCH] As previously guessed, the overload library is once again unrequired. Sigh. Basically, a sequence of gdb commands can basically replicate the functionality of the overload library. An example gdb MI2 session to demonstrate: strange@quark:~/c/aesalon$ gdb --interpreter=mi2 ~/c/malloc_test (gdb) -break-insert -f __malloc ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y", addr="",pending="__malloc",times="0",original-location="__malloc"} (gdb) -exec-run ^running (gdb) *stopped,reason="breakpoint-hit",disp="keep",bkptno="1", frame={addr="0x00007ffff7b03770",func="*__GI___libc_malloc", args=[{name="bytes",value="1"}],file="malloc.c",line="3593"},thread-id="1", stopped-threads="all" (gdb) -break-after 1 1 ^done (gdb) -exec-finish ^running *running,thread-id="1" (gdb) *stopped,reason="function-finished",frame={addr="0x000000000040054a", func="allocate_memory",args=[],file="malloc_test_2.c", fullname="/home/strange/c/malloc_test_2.c",line="7"},gdb-result-var="$1", return-value="(void *) 0x601010",thread-id="1",stopped-threads="all" (gdb) -exec-continue ^running (gdb) *stopped,reason="exited-normally" (gdb) (edited for clarity, of course.) The interesting line here is the '*stopped,reason="function-finished"', in particular the result-record 'return-value' . . . That alone should be enough. Sorry, but goodbye again, overload. --- src/overload/Overload.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/src/overload/Overload.c b/src/overload/Overload.c index 9006e0c..2cd46e7 100644 --- a/src/overload/Overload.c +++ b/src/overload/Overload.c @@ -13,45 +13,33 @@ void __attribute__((visibility ("hidden"))) *(*aesalon_overload_calloc)(size_t, void __attribute__((visibility ("hidden"))) *(*aesalon_overload_malloc)(size_t); void __attribute__((visibility ("hidden"))) *(*aesalon_overload_free)(); void __attribute__((visibility ("hidden"))) *(*aesalon_overload_realloc)(void *, size_t); -FILE __attribute__((visibility ("hidden"))) *aesalon_overload_pipe; -int __attribute__((visibility ("hidden"))) aesalon_overload_initialized; void __attribute__((constructor)) aesalon_overload_initialize() { *(void **)(&aesalon_overload_calloc) = dlsym(RTLD_NEXT, "calloc"); *(void **)(&aesalon_overload_malloc) = dlsym(RTLD_NEXT, "malloc"); *(void **)(&aesalon_overload_free) = dlsym(RTLD_NEXT, "free"); *(void **)(&aesalon_overload_realloc) = dlsym(RTLD_NEXT, "realloc"); - - char named_pipe[1024]; - - strcpy(named_pipe, "/tmp/aesalon_overload-"); - - strcat(named_pipe, getenv("AESALON_PID")); - - aesalon_overload_pipe = fopen(named_pipe, "wt"); - aesalon_overload_initialized = 1; } void __attribute__((destructor)) aesalon_overload_deinitialize() { - fclose(aesalon_overload_pipe); } void *calloc(size_t nmemb, size_t size) { void *value = aesalon_overload_calloc(nmemb, size); - if(aesalon_overload_initialized) fprintf(aesalon_overload_pipe, "calloc:%li:%li:%p\n", nmemb, size, value); return value; } + void *malloc(size_t size) { void *value = aesalon_overload_malloc(size); - if(aesalon_overload_initialized) fprintf(aesalon_overload_pipe, "malloc:%li:%p\n", size, value); return value; } + void free(void *ptr) { aesalon_overload_free(ptr); - if(aesalon_overload_initialized) fprintf(aesalon_overload_pipe, "free:%p\n", ptr); + return; } + void *realloc(void *ptr, size_t size) { void *value = aesalon_overload_realloc(ptr, size); - if(aesalon_overload_initialized) fprintf(aesalon_overload_pipe, "realloc:%p:%li:%p\n", ptr, size, value); return value; } -- 2.11.4.GIT