Changeset 430548b


Ignore:
Timestamp:
05/28/15 21:24:13 (10 years ago)
Author:
Hal Finkel <hfinkel@…>
Branches:
master
Children:
3105f50
Parents:
fc0b9bf
git-author:
Hal Finkel <hfinkel@…> (05/28/15 21:24:13)
git-committer:
Hal Finkel <hfinkel@…> (05/28/15 21:24:13)
Message:

a working solution for static linking

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Makefile

    rfc0b9bf r430548b  
    55LDFLAGS = -lpthread -ldl 
    66 
    7 all: libmemlog.so libmemlog.a 
     7all: libmemlog.so memlog.o 
    88 
    9 libmemlog.a: memlog.c 
    10         rm -f memlog.o 
     9memlog.o: memlog.c 
    1110        $(CC) $(CPPFLAGS) $(CFLAGS) -c -o memlog.o memlog.c 
    12         ar cr libmemlog.a memlog.o 
    13         ranlib libmemlog.a 
    1411 
    1512libmemlog.so: memlog.c 
     
    1714 
    1815clean: 
    19         rm -f memlog.o libmemlog.a libmemlog.so 
     16        rm -f memlog.o libmemlog.so 
    2017 
  • memlog.c

    r625d5f9 r430548b  
    88#include <string.h> 
    99 
     10#include <malloc.h> 
    1011#include <execinfo.h> 
    1112#include <sys/syscall.h> 
     
    5455} 
    5556 
    56 static void print_context(void *caller) { 
     57static void print_context(const void *caller) { 
    5758  struct rusage usage; 
    5859  if (getrusage(RUSAGE_SELF, &usage)) { 
     
    6869 
    6970  int found_caller = 0; 
    70   caller =  __builtin_extract_return_addr(caller); 
     71  caller =  __builtin_extract_return_addr((void*) caller); 
    7172  for (int pci = 0; pci < num_pcs; ++pci) { 
    7273    intptr_t pc = (intptr_t) pcs[pci]; 
     
    120121} 
    121122 
    122 static void record_malloc(size_t size, void *ptr, void *caller) { 
     123static void record_malloc(size_t size, void *ptr, const void *caller) { 
    123124  if (!log_file) 
    124125    return; 
     
    135136} 
    136137 
    137 static void record_free(void *ptr, void *caller) { 
     138static void record_free(void *ptr, const void *caller) { 
    138139  if (!log_file) 
    139140    return; 
     
    158159extern void __libc_free(void *ptr); 
    159160 
    160 void *malloc(size_t size) { 
     161#ifdef __PIC__ 
     162#define FUNC(x) x 
     163#else 
     164#define FUNC(x) __wrap_ ## x 
     165#endif 
     166 
     167void *FUNC(malloc)(size_t size) { 
     168  const void *caller = __builtin_return_address(0); 
     169 
    161170  if (in_malloc) 
    162171    return __libc_malloc(size); 
     
    166175  void *ptr = __libc_malloc(size); 
    167176 
    168   void *caller = __builtin_return_address(0); 
    169177  record_malloc(size, ptr, caller); 
    170178 
     
    173181} 
    174182 
    175 void *realloc(void *ptr, size_t size) { 
     183void *FUNC(realloc)(void *ptr, size_t size) { 
     184  const void *caller = __builtin_return_address(0); 
     185 
    176186  if (in_malloc) 
    177187    return __libc_realloc(ptr, size); 
     
    181191  void *nptr = __libc_realloc(ptr, size); 
    182192 
    183   void *caller = __builtin_return_address(0); 
    184193  if (ptr) 
    185194    record_free(ptr, caller); 
     
    191200} 
    192201 
    193 void *calloc(size_t nmemb, size_t size) { 
     202void *FUNC(calloc)(size_t nmemb, size_t size) { 
     203  const void *caller = __builtin_return_address(0); 
     204 
    194205  if (in_malloc) 
    195206    return __libc_calloc(nmemb, size); 
     
    199210  void *ptr = __libc_calloc(nmemb, size); 
    200211 
    201   void *caller = __builtin_return_address(0); 
    202212  record_malloc(nmemb*size, ptr, caller); 
    203213 
     
    207217} 
    208218 
    209 void *memalign(size_t boundary, size_t size) { 
     219void *FUNC(memalign)(size_t boundary, size_t size) { 
     220  const void *caller = __builtin_return_address(0); 
     221 
    210222  if (in_malloc) 
    211223    return __libc_memalign(boundary, size); 
     
    215227  void *ptr = __libc_memalign(boundary, size); 
    216228 
    217   void *caller = __builtin_return_address(0); 
    218229  record_malloc(size, ptr, caller); 
    219230 
     
    223234} 
    224235 
    225 void free(void *ptr) { 
     236void FUNC(free)(void *ptr) { 
     237  const void *caller = __builtin_return_address(0); 
     238 
    226239  if (in_malloc || !ptr) 
    227240    return __libc_free(ptr); 
     
    229242  in_malloc = 1; 
    230243 
    231   void *caller = __builtin_return_address(0); 
    232244  record_free(ptr, caller); 
    233245 
Note: See TracChangeset for help on using the changeset viewer.