Skip to content

Instantly share code, notes, and snippets.

@maxdeliso
Created November 8, 2011 04:14
Show Gist options
  • Save maxdeliso/1346980 to your computer and use it in GitHub Desktop.
Save maxdeliso/1346980 to your computer and use it in GitHub Desktop.
a test to see whether the functionality in libc is available and whether it works
#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 );
}
}
@maxdeliso
Copy link
Author

[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

@maxdeliso
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment