-
-
Save maxdeliso/1346980 to your computer and use it in GitHub Desktop.
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <errno.h> | |
#include <setjmp.h> | |
#define BYTE (1) | |
#define KILOBYTE (1024*(BYTE)) | |
#define MEGABYTE (1024*(KILOBYTE)) | |
#define GIGABYTE (1024*(MEGABYTE)) | |
const static char staticVar; | |
char globalVar; | |
struct memSeg { | |
char label[8]; | |
unsigned long address; | |
}; | |
void listArgs( int argc, char** argv, char** env ); | |
void listSizes( ); | |
void printMemLayout(); | |
int compareMemSegs( const struct memSeg* A, const struct memSeg* B ); | |
unsigned long long tempFileTest(unsigned long long n); | |
unsigned int mallocTest(unsigned int n); | |
void setJmpTest(); | |
int main( int argc, char ** argv, char** envv ) { | |
printf("#####LIBC PROBE LOG#####\n"); | |
listArgs( argc, argv, envv ); | |
listSizes(); | |
printMemLayout(); | |
if( tempFileTest(BYTE) ) { | |
if( tempFileTest(64 * KILOBYTE) ) { | |
if( tempFileTest(32 * MEGABYTE ) ) { | |
printf("-----ALL TMPFILE TESTS PASSED\n"); | |
} | |
} | |
} | |
if( mallocTest(BYTE) ) { | |
if( mallocTest(64 * KILOBYTE) ) { | |
if( mallocTest(32 * MEGABYTE ) ) { | |
if( mallocTest( 128 * MEGABYTE ) ) { | |
printf("-----ALL MALLOC TESTS PASSED\n"); | |
} | |
} | |
} | |
} | |
setJmpTest(); | |
return 0; | |
} | |
void listArgs( int argc, char** argv, char** envv ) | |
{ | |
int i; | |
printf("\n+++PROGRAM ARGUMENTS:\n"); | |
for( i = 0; i < argc; i++ ) { | |
printf( "-----%4i: %s\n", i, argv[i] ); | |
} | |
printf("\n+++PROGRAM ENVIRONMENTS:\n"); | |
i = -1; | |
do { | |
i++; | |
if( envv[i] ) { | |
printf("-----%4i: %s\n", i, envv[i] ); | |
} | |
} while( envv[i] ); | |
} | |
void listSizes( ) | |
{ | |
printf("\n+++VARIABLE SIZES( bytes)\n"); | |
printf("-----%15s = %5i\n", "char", sizeof(char)); | |
printf("-----%15s = %5i\n", "int", sizeof(int)); | |
printf("-----%15s = %5i\n", "long", sizeof(long)); | |
printf("-----%15s = %5i\n", "long long", sizeof(long long)); | |
printf("-----%15s = %5i\n", "float", sizeof(float)); | |
printf("-----%15s = %5i\n", "double", sizeof(double)); | |
} | |
void printMemLayout() | |
{ | |
char stackVar; | |
char *heapVar = malloc(1); | |
struct memSeg memorySegments[5]; | |
int i; | |
strcpy(memorySegments[0].label, "code"); | |
memorySegments[0].address = (unsigned long) main; | |
strcpy(memorySegments[1].label, "stack"); | |
memorySegments[1].address = (unsigned long) &stackVar; | |
strcpy(memorySegments[2].label, "heap"); | |
memorySegments[2].address = (unsigned long) heapVar; | |
strcpy(memorySegments[3].label, "static"); | |
memorySegments[3].address = (unsigned long) &staticVar; | |
strcpy(memorySegments[4].label, "global"); | |
memorySegments[4].address = (unsigned long) &globalVar; | |
qsort( memorySegments, 5, sizeof( struct memSeg ), compareMemSegs ); | |
printf("\n+++MEMORY LAYOUT\n"); | |
for( i = 0; i < 5; i++ ) { | |
printf("-----%8s : 0x%08x \n", | |
memorySegments[i].label, memorySegments[i].address ); | |
} | |
free( heapVar ); | |
} | |
int compareMemSegs( const struct memSeg* A, const struct memSeg* B ) | |
{ | |
return A->address - B->address; | |
} | |
unsigned long long tempFileTest(unsigned long long n) | |
{ | |
FILE* tmpFile = tmpfile(); | |
int c, err; | |
unsigned long long i; | |
char errBuf[64]; | |
for(i=0, c='A', err=0; err == 0 && i < n; i++, c++ ) { | |
if( fputc( c, tmpFile ) == EOF ) { | |
err = errno; | |
sprintf(errBuf, "-----TMPFILE(%i): FAILED\n", n ); | |
perror(errBuf); | |
} | |
} | |
fclose( tmpFile ); | |
if( !err ) { | |
printf("\n+++TMPFILE(%i): PASSED\n", n); | |
return i; | |
} else { | |
return 0; | |
} | |
} | |
unsigned int mallocTest(unsigned int n) | |
{ | |
void* memBlock = malloc( n ); | |
if( memBlock ) { | |
free( memBlock ); | |
printf("\n+++MALLOCTEST(%i): PASSED\n", n); | |
return n; | |
} else { | |
printf("\n+++MALLOCTEST(%i): PASSED\n", n); | |
return 0; | |
} | |
} | |
void setJmpTest() | |
{ | |
jmp_buf env; | |
int val; | |
printf("\n+++SETJMPTEST\n"); | |
if( !( val = setjmp( env ) ) ) | |
{ | |
printf("-----val = %i\n", val ); | |
longjmp( env, 1 ); | |
} else { | |
printf("-----val = %i\n", val ); | |
} | |
} |
jmd5473@pollock201-lab-mac245[test]$ uname -a
Darwin pollock201-lab-mac245.clc-labs.its.psu.edu 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386
jmd5473@pollock201-lab-mac245[test]$ ./test
LIBC PROBE LOG
+++PROGRAM ARGUMENTS:
----- 0: ./test
+++PROGRAM ENVIRONMENTS:
----- 0: MANPATH=/usr/local/man:
----- 1: TERM_PROGRAM=Apple_Terminal
----- 2: TERM=xterm-color
----- 3: SHELL=/bin/bash
----- 4: TMPDIR=/var/folders/zz/zzzivhrRnAmviuee++AaKk+17Zg/-Tmp-/
----- 5: Apple_PubSub_Socket_Render=/tmp/launch-3KLmpe/Render
----- 6: TERM_PROGRAM_VERSION=273.1
----- 7: USER=jmd5473
----- 8: COMMAND_MODE=unix2003
----- 9: VRAY_FOR_MAYA2012_PLUGINS_x64=/Applications/Autodesk/maya2012/Maya.app/Contents/vray/vrayplugins
----- 10: SSH_AUTH_SOCK=/tmp/launch-6dV3dj/Listeners
----- 11: __CF_USER_TEXT_ENCODING=0x3265B:0:0
----- 12: PATH=/Library/PSU/Bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/PSU/Bin:/Library/PSUadmin:/usr/texbin:/usr/X11/bin
----- 13: PWD=/tmp/test
----- 14: EDITOR=vi
----- 15: SVN=https://subversion.tlt.psu.edu
----- 16: LANG=en_US.UTF-8
----- 17: PS1=\u@\h[\W]$
----- 18: VRAY_PATH=:/Applications/ChaosGroup/V-Ray/Maya2012-x64/bin/x64/vc6
----- 19: VRAY_TOOLS_MAYA2012_x64=/Applications/ChaosGroup/V-Ray/Maya2012-x64/bin
----- 20: SHLVL=1
----- 21: HOME=/Users/psuguest
----- 22: VRAY_FOR_MAYA2012_PLUGINS_PowerPC=/Applications/Autodesk/maya2012/Maya.app/Contents/vray/vrayplugins
----- 23: LOGNAME=jmd5473
----- 24: VRAY_FOR_MAYA2012_MAIN_x64=/Applications/Autodesk/maya2012/Maya.app/Contents/vray
----- 25: Codebase=https://subversion.tlt.psu.edu/Codebase
----- 26: DISPLAY=/tmp/launch-qQLplm/org.x:0
----- 27: VRAY_FOR_MAYA2012_MAIN_PowerPC=/Applications/Autodesk/maya2012/Maya.app/Contents/vray
----- 28: _=./test
----- 29: OLDPWD=/tmp
+++VARIABLE SIZES( bytes)
----- char = 1
----- int = 4
----- long = 8
----- long long = 8
----- float = 4
----- double = 8
+++MEMORY LAYOUT
----- code : 0x00001604
----- static : 0x000020e0
----- global : 0x000020e1
----- heap : 0x00100080
----- stack : 0x5fbff4af
+++TMPFILE(1): PASSED
+++TMPFILE(65536): PASSED
+++TMPFILE(33554432): PASSED
-----ALL TMPFILE TESTS PASSED
+++MALLOCTEST(1): PASSED
+++MALLOCTEST(65536): PASSED
+++MALLOCTEST(33554432): PASSED
+++MALLOCTEST(134217728): PASSED
-----ALL MALLOC TESTS PASSED
+++SETJMPTEST
-----val = 0
-----val = 1
[jmd5473@lxpollock201-214 test]$ uname -a
Linux lxpollock201-214.clc-labs.its.psu.edu 2.6.18-238.9.1.el5 #1 SMP Fri Mar 18 12:42:39 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
[jmd5473@lxpollock201-214 test]$ ./libcprobe
LIBC PROBE LOG
+++PROGRAM ARGUMENTS:
----- 0: ./libcprobe
+++PROGRAM ENVIRONMENTS:
----- 0: MKLROOT=/opt/intel/composerxe-2011.4.191/mkl
----- 1: MANPATH=/opt/intel/composerxe-2011.4.191/man/en_US:/opt/intel/composerxe-2011.4.191/man/en_US:/opt/intel/composerxe-2011.4.191/man/en_US:/opt/intel/composerxe-2011.4.191/man/en_US:/usr/kerberos/man:/usr/local/share/man:/usr/share/man/en:/usr/share/man::
----- 2: KDE_MULTIHEAD=false
----- 3: SSH_AGENT_PID=9198
----- 4: HOSTNAME=lxpollock201-214.clc-labs.its.psu.edu
----- 5: IPPROOT=/opt/intel/composerxe-2011.4.191/ipp
----- 6: INTEL_LICENSE_FILE=/opt/intel/composerxe-2011.4.191/licenses:/opt/intel/licenses:/Users/guest/intel/licenses:/opt/intel/composerxe-2011.4.191/licenses:/opt/intel/licenses:/Users/guest/intel/licenses
----- 7: DESKTOP_STARTUP_ID=
----- 8: SHELL=/bin/bash
----- 9: TERM=xterm
----- 10: HISTSIZE=1000
----- 11: GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/Users/guest/.gtkrc-2.0:/Users/PSUbackup/206427/.kde/share/config/gtkrc-2.0
----- 12: KDE_NO_IPV6=1
----- 13: LIBRARY_PATH=/opt/intel/composerxe-2011.4.191/compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/ipp/../compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/ipp/lib/intel64:/opt/intel/composerxe-2011.4.191/compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/mkl/lib/intel64:/opt/intel/composerxe-2011.4.191/tbb/lib/intel64//cc4.1.0_libc2.4_kernel2.6.16.21:/opt/intel/composerxe-2011.4.191/compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/ipp/../compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/ipp/lib/intel64:/opt/intel/composerxe-2011.4.191/compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/mkl/lib/intel64:/opt/intel/composerxe-2011.4.191/tbb/lib/intel64//cc4.1.0_libc2.4_kernel2.6.16.21
----- 14: GTK_RC_FILES=/etc/gtk/gtkrc:/Users/guest/.gtkrc:/Users/PSUbackup/206427/.kde/share/config/gtkrc
----- 15: GS_LIB=/Users/guest/.fonts
----- 16: WINDOWID=22020167
----- 17: FPATH=/opt/intel/composerxe-2011.4.191/mkl/include:/opt/intel/composerxe-2011.4.191/mkl/include
----- 18: QTDIR=/usr/lib64/qt-3.3
----- 19: QTINC=/usr/lib64/qt-3.3/include
----- 20: KDE_FULL_SESSION=true
----- 21: USER=jmd5473
----- 22: LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:.cmd=00;32:.exe=00;32:.com=00;32:.btm=00;32:.bat=00;32:.sh=00;32:.csh=00;32:.tar=00;31:.tgz=00;31:.arj=00;31:.taz=00;31:.lzh=00;31:.zip=00;31:.z=00;31:.Z=00;31:.gz=00;31:.bz2=00;31:.bz=00;31:.tz=00;31:.rpm=00;31:.cpio=00;31:.jpg=00;35:.gif=00;35:.bmp=00;35:.xbm=00;35:.xpm=00;35:.png=00;35:.tif=00;35:
----- 23: LD_LIBRARY_PATH=/opt/intel/composerxe-2011.4.191/compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/ipp/../compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/ipp/lib/intel64:/opt/intel/composerxe-2011.4.191/compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/mkl/lib/intel64:/opt/intel/composerxe-2011.4.191/tbb/lib/intel64//cc4.1.0_libc2.4_kernel2.6.16.21:/opt/intel/composerxe-2011.4.191/compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/ipp/../compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/ipp/lib/intel64:/opt/intel/composerxe-2011.4.191/compiler/lib/intel64:/opt/intel/composerxe-2011.4.191/mkl/lib/intel64:/opt/intel/composerxe-2011.4.191/tbb/lib/intel64//cc4.1.0_libc2.4_kernel2.6.16.21:/opt/intel/composerxe-2011.4.191/mpirt/lib/intel64:/opt/intel/composerxe-2011.4.191/mpirt/lib/intel64
----- 24: SSH_AUTH_SOCK=/tmp/ssh-EqUdnM9159/agent.9159
----- 25: CPATH=/opt/intel/composerxe-2011.4.191/mkl/include:/opt/intel/composerxe-2011.4.191/tbb/include:/opt/intel/composerxe-2011.4.191/mkl/include:/opt/intel/composerxe-2011.4.191/tbb/include
----- 26: KDEDIR=/usr
----- 27: SESSION_MANAGER=local/lxpollock201-214.clc-labs.its.psu.edu:/tmp/.ICE-unix/9506
----- 28: USERNAME=jmd5473
----- 29: XDG_CONFIG_DIRS=/etc/kde/xdg:/etc/xdg
----- 30: NLSPATH=/opt/intel/composerxe-2011.4.191/compiler/lib/intel64/locale/%l_%t/%N:/opt/intel/composerxe-2011.4.191/ipp/lib/intel64/locale/%l_%t/%N:/opt/intel/composerxe-2011.4.191/mkl/lib/intel64/locale/%l_%t/%N:/opt/intel/composerxe-2011.4.191/debugger/intel64/locale/%l_%t/%N:/opt/intel/composerxe-2011.4.191/compiler/lib/intel64/locale/%l_%t/%N:/opt/intel/composerxe-2011.4.191/ipp/lib/intel64/locale/%l_%t/%N:/opt/intel/composerxe-2011.4.191/mkl/lib/intel64/locale/%l_%t/%N:/opt/intel/composerxe-2011.4.191/debugger/intel64/locale/%l_%t/%N
----- 31: DESKTOP_SESSION=default
----- 32: PATH=/opt/intel/composerxe-2011.4.191/bin/intel64:/opt/intel/composerxe-2011.4.191/bin/intel64:/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/local/cuda/bin:/opt/intel/vtune_amplifier/bin32:/opt/intel/vtune_amplifier/bin64:/opt/intel/composerxe-2011.4.191/mpirt/bin/intel64:/Users/guest/bin:/usr/local/cuda/bin:/opt/intel/vtune_amplifier/bin32:/opt/intel/vtune_amplifier/bin64:/opt/intel/composerxe-2011.4.191/mpirt/bin/intel64
----- 33: MAIL=/var/spool/mail/jmd5473
----- 34: QT_IM_MODULE=scim
----- 35: GDM_XSERVER_LOCATION=local
----- 36: PWD=/tmp/test
----- 37: INPUTRC=/etc/inputrc
----- 38: XMODIFIERS=@im=SCIM
----- 39: LANG=en_US.UTF-8
----- 40: KDE_IS_PRELINKED=1
----- 41: GDMSESSION=default
----- 42: KRB5CCNAME=FILE:/tmp/krb5cc_206427_V8H5pH
----- 43: SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
----- 44: HOME=/Users/guest
----- 45: SHLVL=3
----- 46: XCURSOR_THEME=default
----- 47: LOGNAME=jmd5473
----- 48: CVS_RSH=ssh
----- 49: QTLIB=/usr/lib64/qt-3.3/lib
----- 50: DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-AMjKgKfgg9,guid=d24b0e94464027d1c02572004eb887b2
----- 51: LESSOPEN=|/usr/bin/lesspipe.sh %s
----- 52: DISPLAY=:0.0
----- 53: GTK_IM_MODULE=scim-bridge
----- 54: INCLUDE=/opt/intel/composerxe-2011.4.191/ipp/include:/opt/intel/composerxe-2011.4.191/mkl/include:/opt/intel/composerxe-2011.4.191/ipp/include:/opt/intel/composerxe-2011.4.191/mkl/include
----- 55: TBB30_INSTALL_DIR=/opt/intel/composerxe-2011.4.191/tbb
----- 56: G_BROKEN_FILENAMES=1
----- 57: COLORTERM=gnome-terminal
----- 58: XAUTHORITY=/tmp/.gdmWKIF4V
----- 59: _=./libcprobe
----- 60: OLDPWD=/Users/PSUbackup/206427
+++VARIABLE SIZES( bytes)
----- char = 1
----- int = 4
----- long = 8
----- long long = 8
----- float = 4
----- double = 8
+++MEMORY LAYOUT
----- stack : 0xd893927f
----- code : 0x00400808
----- static : 0x00601394
----- global : 0x00601398
----- heap : 0x06e7f010
+++TMPFILE(1): PASSED
+++TMPFILE(65536): PASSED
+++TMPFILE(33554432): PASSED
-----ALL TMPFILE TESTS PASSED
+++MALLOCTEST(1): PASSED
+++MALLOCTEST(65536): PASSED
+++MALLOCTEST(33554432): PASSED
+++MALLOCTEST(134217728): PASSED
-----ALL MALLOC TESTS PASSED
+++SETJMPTEST
-----val = 0
-----val = 1