From 4939473afbcfe981b6411595a3b73e792ae28775 Mon Sep 17 00:00:00 2001 From: Ludwig Ortmann Date: Fri, 24 Jan 2014 17:03:01 +0100 Subject: [PATCH 1/3] guard malloc/free family --- cpu/native/include/native_internal.h | 4 +++ cpu/native/startup.c | 7 ++++- cpu/native/syscalls.c | 38 ++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/cpu/native/include/native_internal.h b/cpu/native/include/native_internal.h index 5ddc85f4db..7b8fcab7b6 100644 --- a/cpu/native/include/native_internal.h +++ b/cpu/native/include/native_internal.h @@ -32,6 +32,10 @@ void _native_syscall_enter(); */ extern ssize_t (*real_read)(int fd, void *buf, size_t count); extern ssize_t (*real_write)(int fd, const void *buf, size_t count); +extern void* (*real_malloc)(size_t size); +extern void (*real_free)(void *ptr); +extern void* (*real_calloc)(size_t nmemb, size_t size); +extern void* (*real_realloc)(void *ptr, size_t size); /** * data structures diff --git a/cpu/native/startup.c b/cpu/native/startup.c index 7c039c8322..46d015fc01 100644 --- a/cpu/native/startup.c +++ b/cpu/native/startup.c @@ -184,7 +184,12 @@ __attribute__((constructor)) static void startup(int argc, char **argv) /* get system read/write/printf */ *(void **)(&real_read) = dlsym(RTLD_NEXT, "read"); *(void **)(&real_write) = dlsym(RTLD_NEXT, "write"); - *(void **)(&real_printf) = dlsym(RTLD_NEXT, "printf"); + *(void **)(&real_malloc) = dlsym(RTLD_NEXT, "malloc"); + *(void **)(&real_calloc) = dlsym(RTLD_NEXT, "calloc"); + *(void **)(&real_realloc) = dlsym(RTLD_NEXT, "realloc"); + *(void **)(&real_free) = dlsym(RTLD_NEXT, "free"); + + *(void **)(&real_printf) = dlsym(RTLD_NEXT, "printf"); _progname = argv[0]; int argp = 1; diff --git a/cpu/native/syscalls.c b/cpu/native/syscalls.c index 0dbbdab9c0..bf63cc69d2 100644 --- a/cpu/native/syscalls.c +++ b/cpu/native/syscalls.c @@ -42,6 +42,10 @@ extern volatile tcb_t *active_thread; ssize_t (*real_read)(int fd, void *buf, size_t count); ssize_t (*real_write)(int fd, const void *buf, size_t count); +void* (*real_malloc)(size_t size); +void (*real_free)(void *ptr); +void* (*real_calloc)(size_t nmemb, size_t size); +void* (*real_realloc)(void *ptr, size_t size); void _native_syscall_enter() { @@ -72,6 +76,40 @@ void _native_syscall_leave() } } +void *malloc(size_t size) +{ + void *r; + _native_syscall_enter(); + r = real_malloc(size); + _native_syscall_leave(); + return r; +} + +void free(void *ptr) +{ + _native_syscall_enter(); + real_free(ptr); + _native_syscall_leave(); +} + +void *calloc(size_t nmemb, size_t size) +{ + void *r; + _native_syscall_enter(); + r = real_calloc(nmemb, size); + _native_syscall_leave(); + return r; +} + +void *realloc(void *ptr, size_t size) +{ + void *r; + _native_syscall_enter(); + r = real_realloc(ptr, size); + _native_syscall_leave(); + return r; +} + ssize_t read(int fd, void *buf, size_t count) { ssize_t r; From b22380990fbf75a0d6df378834d65e06146e19b2 Mon Sep 17 00:00:00 2001 From: Ludwig Ortmann Date: Fri, 24 Jan 2014 17:04:27 +0100 Subject: [PATCH 2/3] fix DEBUG in syscalls --- cpu/native/syscalls.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpu/native/syscalls.c b/cpu/native/syscalls.c index bf63cc69d2..cc5d5f5c7d 100644 --- a/cpu/native/syscalls.c +++ b/cpu/native/syscalls.c @@ -50,13 +50,13 @@ void* (*real_realloc)(void *ptr, size_t size); void _native_syscall_enter() { _native_in_syscall++; - DEBUG("> _native_in_syscall: %d\n", _native_in_syscall); + //real_write(STDOUT_FILENO, "> _native_in_syscall\n", 21); } void _native_syscall_leave() { + //real_write(STDOUT_FILENO, "< _native_in_syscall\n", 21); _native_in_syscall--; - DEBUG("< _native_in_syscall: %d\n", _native_in_syscall); if ( (_native_sigpend > 0) && (_native_in_isr == 0) From d8745e286121e291de5d7e009a4d84c4c3236348 Mon Sep 17 00:00:00 2001 From: Ludwig Ortmann Date: Fri, 24 Jan 2014 18:26:44 +0100 Subject: [PATCH 3/3] add local debug macro addresses https://github.com/RIOT-OS/RIOT/pull/559#issuecomment-33241773 --- cpu/native/syscalls.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cpu/native/syscalls.c b/cpu/native/syscalls.c index cc5d5f5c7d..0b947cf7e6 100644 --- a/cpu/native/syscalls.c +++ b/cpu/native/syscalls.c @@ -36,6 +36,9 @@ #include "native_internal.h" #define ENABLE_DEBUG (0) +#if ENABLE_DEBUG +#define LOCAL_DEBUG (1) +#endif #include "debug.h" extern volatile tcb_t *active_thread; @@ -50,12 +53,16 @@ void* (*real_realloc)(void *ptr, size_t size); void _native_syscall_enter() { _native_in_syscall++; - //real_write(STDOUT_FILENO, "> _native_in_syscall\n", 21); +#if LOCAL_DEBUG + real_write(STDERR_FILENO, "> _native_in_syscall\n", 21); +#endif } void _native_syscall_leave() { - //real_write(STDOUT_FILENO, "< _native_in_syscall\n", 21); +#if LOCAL_DEBUG + real_write(STDERR_FILENO, "< _native_in_syscall\n", 21); +#endif _native_in_syscall--; if ( (_native_sigpend > 0)