[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