[Assorted-commits] SF.net SVN: assorted:[1343] sandbox/trunk/src/nix/preload
Brought to you by:
yangzhang
From: <yan...@us...> - 2009-04-27 21:23:14
|
Revision: 1343 http://assorted.svn.sourceforge.net/assorted/?rev=1343&view=rev Author: yangzhang Date: 2009-04-27 21:23:05 +0000 (Mon, 27 Apr 2009) Log Message: ----------- added demo that posix_memalign doesn't call malloc Modified Paths: -------------- sandbox/trunk/src/nix/preload/interposer.c sandbox/trunk/src/nix/preload/run.bash Added Paths: ----------- sandbox/trunk/src/nix/preload/memalign.c Modified: sandbox/trunk/src/nix/preload/interposer.c =================================================================== --- sandbox/trunk/src/nix/preload/interposer.c 2009-04-27 21:16:07 UTC (rev 1342) +++ sandbox/trunk/src/nix/preload/interposer.c 2009-04-27 21:23:05 UTC (rev 1343) @@ -1,30 +1,45 @@ #define _GNU_SOURCE #include <stdio.h> +#include <stdlib.h> #include <dlfcn.h> +#ifdef COUNT +int mallocs = 0; +void dump() { printf("%d mallocs\n", mallocs); } +#endif + void * malloc(size_t sz) { // Find and cache the next malloc (in our example it should be the "real" // malloc). static void * (*func)(); - if (!func) + if (!func) { func = (void *(*)()) dlsym(RTLD_NEXT, "malloc"); +#ifdef COUNT + atexit(dump); +#endif + } - // Do our thang. #ifdef VERBOSE - printf("malloc(%u) is called\n", sz); + printf("malloc(%zu) is called\n", sz); #endif // Call real malloc. void *p = func(sz); - // Do our thang. +#ifdef COUNT + ++mallocs; +#endif + #ifdef VERBOSE printf("malloc returned %p\n", p); #endif + +#ifdef FAILURES if (!p) printf("malloc failed!\n"); +#endif return p; } Added: sandbox/trunk/src/nix/preload/memalign.c =================================================================== --- sandbox/trunk/src/nix/preload/memalign.c (rev 0) +++ sandbox/trunk/src/nix/preload/memalign.c 2009-04-27 21:23:05 UTC (rev 1343) @@ -0,0 +1,9 @@ +// malloc doesn't get called at all! + +#include <stdlib.h> + +int main() { + void *p; + posix_memalign(&p, 131072, 131072); + return 0; +} Modified: sandbox/trunk/src/nix/preload/run.bash =================================================================== --- sandbox/trunk/src/nix/preload/run.bash 2009-04-27 21:16:07 UTC (rev 1342) +++ sandbox/trunk/src/nix/preload/run.bash 2009-04-27 21:23:05 UTC (rev 1343) @@ -4,6 +4,9 @@ gcc -Wall -o testc test.c g++ -Wall -o testcc test.cc -gcc -Wall -shared -fPIC -ldl -o interposer.so interposer.c -LD_PRELOAD=./interposer.so ./testc -LD_PRELOAD=./interposer.so ./testcc || true +g++ -Wall -o memalign memalign.c +gcc -Wall -DCOUNT -shared -fPIC -ldl -o interposer_c.so interposer.c +gcc -Wall -DVERBOSE -shared -fPIC -ldl -o interposer_v.so interposer.c +LD_PRELOAD=./interposer_v.so ./memalign +LD_PRELOAD=./interposer_c.so ./testc +LD_PRELOAD=./interposer_c.so ./testcc || true This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |