I *must* be doing something epic wrong here. However :
$ $ cat -n memalign_test.c 1 #define _POSIX_SOURCE 1 2 3 #include <ctype.h> 4 #include <errno.h> 5 #include <locale.h> 6 #include <stddef.h> 7 #include <stdio.h> 8 #include <stdlib.h> 9 #include <string.h> 10 11 int main(int argc, char *argv[]) { 12 13 char *buffer; 14 15 buffer = memalign( (size_t) 64, (size_t) 8 ); 16 if ( buffer == NULL ) 17 /***************************************** 18 * ENOMEM * 19 * In the future we will want to recover * 20 * from this sort of epic fail. At the * 21 * very least, a syslog entry. * 22 *****************************************/ 23 exit ( EXIT_FAILURE ); 24 25 buffer[0] = '\0'; /* something useful */ 26 27 return ( EXIT_SUCCESS ); 28 } 29 $ $ echo $CFLAGS -erroff -xstrconst -xildoff -m64 -xmemalign=8s -xnolibmil -Xa -xcode=pic32 -xregs=no%appl -xlibmieee -mc -g -xs -ftrap=%none -Qy -xbuiltin=%none -xdebugformat=dwarf -xunroll=1 -xtarget=ultraT2 -xcache=8/16/4:4096/64/16 -D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -D_DEBUG -DCGIEXTENDED $ uname -a SunOS node002 5.10 Generic_147440-23 sun4v sparc SUNW,T5240 $ cc -V cc: Sun C 5.9 SunOS_sparc Patch 124867-16 2010/08/11 usage: cc [ options] files. Use 'cc -flags' for details $ cc -\# $CFLAGS -o memalign_test.o -c memalign_test.c ### Note: NLSPATH = /opt/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat ### command line files and options (expanded): ### -c -D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -D_DEBUG -DCGIEXTENDED -erroff=%all -g -mc -Xa -xarch=sparcvis2 -m64 -xcache=8/16/4:4096/64/16 -xchip=ultraT2 -xcode=pic32 -xdebugformat=dwarf -xlibmieee -xmemalign=8s -xregs=no%appl -xs -xstrconst -xunroll=1 memalign_test.c -o memalign_test.o /opt/SUNWspro/prod/bin/acomp -dg -xldscope=global -i memalign_test.c -y-fbe -y/opt/SUNWspro/prod/bin/fbe -y-xcode=pic32 -y-xarch=v9b -y-xmemalign=8s -y-g -y-o -ymemalign_test.o -y-verbose -y-xthreadvar=dynamic -y-comdat -xdbggen=no%stabs+dwarf2+usedonly -e rroff=%all -strconst -D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -D_DEBUG -DCGIEXTENDED -xdbggen=incl -y-s -2K -m64 -fparam_ir -Qy -D__SunOS_5_10 -D__SUNPRO_C=0x590 -D__SVR4 -D__sun -D__SunOS -D__unix -D__sparcv9 -D__sparc -D__BUILTIN_VA_ARG_INCR -D__C99FEATURES__ -Xa -D__PRAGMA_REDEFINE_EXTNAME -Dunix -Dsun -Dsparc -D__RESTRICT -xc99=%all,no%lib -D__FLT_EVAL_METHOD__=0 -I/opt/SUNWspro/prod/include/cc "-g/opt/SUNWspro/prod/bin/cc -erroff -xstrconst -xildoff -m64 -xmemalign=8s -xnolibmil -Xa -xcode=pic32 -xregs=no%appl -xlibmieee -mc -g -xs -ftrap=%none -Qy -xbuiltin=%none -xdebugformat=dwarf -xunroll=1 -xtarget=ultraT2 -xcache=8/16/4:4096/64/16 -D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE - D_DEBUG -DCGIEXTENDED -o memalign_test.o -c " -fsimple=0 -D__SUN_PREFETCH -destination_ir=yabe /usr/ccs/bin/mcs -c memalign_test.o $ cc -\# $CFLAGS -o memalign_test memalign_test.o ### Note: NLSPATH = /opt/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat ### command line files and options (expanded): ### -D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -D_DEBUG -DCGIEXTENDED -erroff=%all -g -mc -Xa -xarch=sparcvis2 -m64 -xcache=8/16/4:4096/64/16 -xchip=ultraT2 -xcode=pic32 -xdebugformat=dwarf -xlibmieee -xmemalign=8s -xregs=no%appl -xs -xstrconst -xunroll=1 memalign_test.o -o memalign_test ### Note: LD_LIBRARY_PATH = <null> ### Note: LD_LIBRARY_PATH_64 = <null> ### Note: LD_RUN_PATH = <null> /usr/ccs/bin/ld /opt/SUNWspro/prod/lib/v9/crti.o /opt/SUNWspro/prod/lib/v9/crt1.o /opt/SUNWspro/prod/lib/v9/values-xi.o -o memalign_test memalign_test.o -Y "P,/opt/SUNWspro/prod/lib/sparcvis2/64:/opt/SUNWspro/prod/lib/v9:/usr/ccs/lib/sparcv9:/lib/sparcv9:/usr/lib/sparcv9" -Qy -lc /opt/SUNWspro/prod/lib/v9/crtn.o /usr/ccs/bin/mcs -c memalign_test $ $ dbx memalign_test Reading memalign_test Reading ld.so.1 Reading libc.so.1 (dbx) stop at 1 (2) stop at "memalign_test.c":15 (dbx) run Running: memalign_test (process id 19599) Reading libc_psr.so.1 stopped in main at line 15 in file "memalign_test.c" 15 buffer = memalign( (size_t) 64, (size_t) 8 ); (dbx) print buffer buffer = (nil) (dbx) step stopped in main at line 16 in file "memalign_test.c" 16 if ( buffer == NULL ) (dbx) print buffer buffer = 0x101080 "<bad address 0x101080>" (dbx) step stopped in main at line 25 in file "memalign_test.c" 25 buffer[0] = '\0'; /* something useful */ (dbx) step signal SEGV (no mapping at the fault address) in main at line 25 in file "memalign_test.c" 25 buffer[0] = '\0'; /* something useful */ (dbx) quit $ $ Good ol malloc : $ cat -n foo.c 1 #define _POSIX_SOURCE 1 2 3 #include <ctype.h> 4 #include <errno.h> 5 #include <locale.h> 6 #include <stddef.h> 7 #include <stdio.h> 8 #include <stdlib.h> 9 #include <string.h> 10 11 int main(int argc, char *argv[]) { 12 13 char *buffer; 14 15 buffer = malloc( (size_t) 8 ); 16 if ( buffer == NULL ) 17 /***************************************** 18 * ENOMEM * 19 * In the future we will want to recover * 20 * from this sort of epic fail. At the * 21 * very least, a syslog entry. * 22 *****************************************/ 23 exit ( EXIT_FAILURE ); 24 25 buffer[0] = '\0'; /* something useful */ 26 27 return ( EXIT_SUCCESS ); 28 } 29 $ $ cc $CFLAGS -o foo foo.c $ dbx foo Reading foo Reading ld.so.1 Reading libc.so.1 (dbx) stop at 1 (2) stop at "foo.c":15 (dbx) run Running: foo (process id 19633) Reading libc_psr.so.1 stopped in main at line 15 in file "foo.c" 15 buffer = malloc( (size_t) 8 ); (dbx) print buffer buffer = (nil) (dbx) step stopped in main at line 16 in file "foo.c" 16 if ( buffer == NULL ) (dbx) print buffer buffer = 0x100100fc0 "" (dbx) step stopped in main at line 25 in file "foo.c" 25 buffer[0] = '\0'; /* something useful */ (dbx) step stopped in main at line 27 in file "foo.c" 27 return ( EXIT_SUCCESS ); (dbx) print buffer buffer = 0x100100fc0 "" (dbx) step stopped in main at line 28 in file "foo.c" 28 } (dbx) step execution completed, exit code is 0 (dbx) quit $ So I went and looked at http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libbc/libc/gen/common/memalign.c to see, what bloody obvious thing I am doing wrong[1]. Perhaps alignment means bytes and I should have 8 there. Not sure. Dennis [1] other than leaving out the free(buffer) _______________________________________________ opensolaris-code mailing list opensolaris-code@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/opensolaris-code