[gambit-list] I think I found a bug on Gambit-C's build process during building for iOS.
Eonil
drawtree at gmail.com
Sun Feb 20 10:28:47 EST 2011
Oh, the bug already discovered and patched!
I'm sorry about posting duplicated issue.
On Feb 21, 2011, at 12:04 AM, Eonil wrote:
> Hi.
> I'm Hoon Hwangbo, and currently trying to build Gambit-C for Apple's iOS platforms. I think I found a bug on Gambit-C's build process. Please reply your opinions.
>
> I started with cross-compiling whole source code with iOS SDK. I followed 'jlongster''s method described on:
>
> http://jlongster.com/legacy/scheme-iphone-apps.html
>
> I had succeed building for iOS device. `libgambc.a` linked and executed well.
> But I met some errors during building for iOS simulator. (iOS has 2 kind of platforms, I'll describe about this later section)
>
> This is first error.
>
> os_io.c: In function ‘___device_stream_kind_from_fd’:
> os_io.c:5835: error: storage size of ‘s’ isn’t known
> make[1]: *** [os_io.o] Error 1
> make: *** [all-recursive] Error 1
>
> The line at source code is,
>
> struct ___stat s;
>
> `___stat` is typedef-ed as `stat`. I don't know why, however, it couldn't be compiled. I just modified the code uing `stat` type directly.
>
> struct stat s;
>
> Compilation continued.
> And another error pop up.
>
> os.c: In function ‘___os_file_info’:
> os.c:1488: error: storage size of ‘s’ isn’t known
> make[1]: *** [os.o] Error 1
> make: *** [all-recursive] Error 1
>
> Exactly same error and exactly same source code. I modified it as same as above.
> Compilation continued. Build complete without additional error. It's linked but failed to be executed. It raised a runtime error:
>
> Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
> fstat64 called from function ___device_stream_setup_from_fd in image gambit-c-test3.
> If you are encountering this problem running a simulator binary within gdb, make sure you 'set start-with-shell off' first.
> Program received signal: “SIGABRT”.
>
> I felt there is an error about determining environment is 32-bit or 64-bit. Because iOS simulator is completely 32bit environment.
> I rollbacked all changes. I searched `fstat64` from all source code, and I found it's on 'include/configure.h'. It's marked like this.
>
> #define HAVE_STAT64 1
>
> I changed it like this.
>
> #define HAVE_STAT64 0
>
> Compilation failed again exactly same with first 2 errors.
> I didn't modified the code like before. Instead of, I looked at 'os.h'. There was a code block.
>
> #ifdef HAVE_STAT64
> #define USE_stat
> #define ___stat stat64
> #define ___lstat lstat64
> #define ___fstat fstat64
> #else
> #ifdef HAVE_STAT
> #define USE_stat
> #define ___stat stat
> #define ___lstat lstat
> #define ___fstat fstat
> #endif
> #endif
>
> I modified it like this to force using only 32-bit functions.
>
> /*
> #ifdef HAVE_STAT64
> #define USE_stat
> #define ___stat stat64
> #define ___lstat lstat64
> #define ___fstat fstat64
> #else
> #ifdef HAVE_STAT
> */
> #define USE_stat
> #define ___stat stat
> #define ___lstat lstat
> #define ___fstat fstat
> /*
> #endif
> #endif
> */
>
> And finally… It worked! Compiled well, linked well, executed well!
> I don't know why it was configured using 64-bit functions. Maybe the bug in the tool-chain, but it should be evaded to support iOS.
>
> It's working now, but I can't sure my modification is correct. Maybe it's not correct. My modification destructs #ifdef logic. I didn't analyze all the logic. There were test codes, but I don't know how to execute the test. (Can you let me know how to execute the test...?) I'm not good at low-level system programming. I'm just a programmer who want to embed nice scripting system with functional language into my app. I'm newbie on `make` tool-chain and complete newbie on Scheme :)
>
> I wish this errors to be corrected. Maybe building for iOS is not so important, this errors may a sign of another bug. Please review the codes at the positions.
>
>
>
>
> PS. My environment:
> - Mac OS X 10.6 Snow Leopard
> - iOS SDK 4.2
> - Gambit-C 4.6 source code of version
>
>
>
>
>
> iOS platform description.
> ======================
> There are 2 kind of iOS platform.
>
> - iOS Device. This is real hardware platform composed of ARM(32bit)+darwin(32bit)
> - iOS Simulator. This is simulated platform on Mac OS X. Composed of x86(32bit)+darwin(32bit) This is not a full emulator. It's behaves a little differently with iOS Device platform.
>
> So, Apple offers SDK with 2 versions of development tool-chains.
> Each version contains modified version of GCC for each platform.
>
>
>
>
>
>
>
> CONTACT
> + Hwangbo Hoon
> + iPhone: +82 10 4583 3612
> + Twitter: http://twitter.com/#!/eonilc
> + Blog: http://blog.eonil.com/ (Korean)
>
CONTACT
+ Hwangbo Hoon
+ iPhone: +82 10 4583 3612
+ Twitter: http://twitter.com/#!/eonilc
+ Blog: http://blog.eonil.com/ (Korean)
More information about the Gambit-list
mailing list