From: Kevin R. <ke...@ro...> - 2003-08-27 21:23:19
|
The following is excerpted from UFFI's test suite. The below code works fine on x86 0.8.3, but fails on Mac OS X 0.8.3. I suspect it may have to do with field start computations since the code works fine if I add another 4-byte integer field between field i and field d. =20 compile.sh ---------- cc -dynamic -c test.c -o test.o ld -bundle /usr/lib/bundle1.o -flat_namespace -undefined suppress -o test.b= undle test.o test.c ------ typedef struct { int i; double d; } test_type; test_type test_struct =3D {42, 3.2}; test.lisp --------- (sb-alien:load-1-foreign "test.bundle") (sb-alien:define-alien-type test-type (sb-alien:struct test-type (i (sb-alien:signed 32)) (d (sb-alien:double-float)))) =20 (sb-alien:define-alien-variable ("test_struct" *test-struct*) test-type) (unless (=3D 42 (sb-alien:slot *test-struct* 'i)) (error "Integer value ~d should be 42~%" (sb-alien:slot *test-struct* 'i)= )) (unless (=3D 3.2d0 (sb-alien:slot *test-struct* 'd)) (error "Double value ~d should be 3.2d0~%" (sb-alien:slot *test-struct* '= d))) --=20 Kevin Rosenberg ke...@ro... |
From: Christophe R. <cs...@ca...> - 2004-02-23 13:37:47
|
Kevin Rosenberg <ke...@ro...> writes: > The following is excerpted from UFFI's test suite. The below code > works fine on x86 0.8.3, but fails on Mac OS X 0.8.3. I suspect it may > have to do with field start computations since the code works fine if > I add another 4-byte integer field between field i and field d. I think Apple's ABI has an 'unnatural' alignment policy. Gary Byers or other Mac experts will be able to comment further, but does the UFFI test suite pass with the following patch? (defun guess-alignment (bits) (cond ((null bits) nil) #!-(or x86 (and ppc darwin)) ((> bits 32) 64) ((> bits 16) 32) ((> bits 8) 16) ((> bits 1) 8) (t 1))) Cheers, Christophe -- http://www-jcsu.jesus.cam.ac.uk/~csr21/ +44 1223 510 299/+44 7729 383 757 (set-pprint-dispatch 'number (lambda (s o) (declare (special b)) (format s b))) (defvar b "~&Just another Lisp hacker~%") (pprint #36rJesusCollegeCambridge) |
From: Raymond W. <Ray...@fa...> - 2004-02-23 14:43:17
Attachments:
aligntest.c
|
Christophe Rhodes writes: > Kevin Rosenberg <ke...@ro...> writes: > > > The following is excerpted from UFFI's test suite. The below code > > works fine on x86 0.8.3, but fails on Mac OS X 0.8.3. I suspect it may > > have to do with field start computations since the code works fine if > > I add another 4-byte integer field between field i and field d. > > I think Apple's ABI has an 'unnatural' alignment policy. Gary Byers > or other Mac experts will be able to comment further, but does the > UFFI test suite pass with the following patch? > > (defun guess-alignment (bits) > (cond ((null bits) nil) > #!-(or x86 (and ppc darwin)) ((> bits 32) 64) > ((> bits 16) 32) > ((> bits 8) 16) > ((> bits 1) 8) > (t 1))) The following test program indicates that you're right... but I may have done something wrong in the program. On my PB G4, I get 32-bit alignment for both static and stack allocation. Is this likely to be different on a G5? |
From: Brian M. <bma...@cs...> - 2004-02-23 16:21:12
|
On Feb 23, 2004, at 9:35 AM, Raymond Wiker wrote: > The following test program indicates that you're right... but > I may have done something wrong in the program. On my PB G4, I get > 32-bit alignment for both static and stack allocation. Is this likely > to be different on a G5? [chandler@distral ~]% ./aligntest Global allocation: align = 32 bits Stack allocation: align = 32 bits [chandler@distral ~]% machine ppc970 So, the answer is "no", at least not for now. -- Brian Mastenbrook bma...@cs... http://cs.indiana.edu/~bmastenb/ |
From: Christophe R. <cs...@ca...> - 2004-03-15 16:05:13
|
Brian Mastenbrook <bma...@cs...> writes: > On Feb 23, 2004, at 9:35 AM, Raymond Wiker wrote: > >> The following test program indicates that you're right... but >> I may have done something wrong in the program. On my PB G4, I get >> 32-bit alignment for both static and stack allocation. Is this likely >> to be different on a G5? > > [chandler@distral ~]% ./aligntest > Global allocation: align = 32 bits > Stack allocation: align = 32 bits Thanks to both of you. In sbcl-0.8.8.26, I have made the change to GUESS-ALIGNMENT, so if someone (Kevin?) has a chance to run the UFFI test suite, maybe you will find that behaviour has changed for the better. Cheers, Christophe -- http://www-jcsu.jesus.cam.ac.uk/~csr21/ +44 1223 510 299/+44 7729 383 757 (set-pprint-dispatch 'number (lambda (s o) (declare (special b)) (format s b))) (defvar b "~&Just another Lisp hacker~%") (pprint #36rJesusCollegeCambridge) |