ByteString on GHC-iPhone v5
All, GHC-iPhone is now at https://github.com/mietek/ghc https://github.com/mietek/packages-base https://github.com/mietek/packages-Cabal https://github.com/mietek/hsc2hs https://github.com/mietek/packages-unix I spent a whole lot of time on it and now I know what's going on with the ByteString issue. Here's what's going on: This code is brought in when you reference Data.ByteString.unpack or Data.ByteString.empty: foreign import ccall unsafe "static stdlib.h &free" c_free_finalizer :: FunPtr (Ptr Word8 -> IO ()) This produces this line of ARM assembly: .long _free Presumably because _free isn't in the executable anywhere (linked when it gets started), it adds a flag to the __TEXT section called S_ATTR_EXT_RELOC. You can see this with otool on the TestApp executable deep inside the $HOME/.Xcode directory - the flag's value is 0x00000200. For some reason this makes the dyld loader try to set the text section to be writeable with vm_protect() and the flag VM_PROT_WRITE. This violates the kernel's policy against self-modifying code on the iPhone, and vm_protect() returns with a failure status of 2. So that's what's going on. Why it's happening and how to fix it is next. Steve On 23/05/12 07:34, Carl Joachim Svenn wrote:
* this is a simpler ByteString example failing:
BS.pack [] `seq` return ()
* command options for clang to target iOS (corrected from previous mail):
"-arch armv7 -iphoneos_version_min=5.1.0"
best regards, Carl Joachim
participants (1)
-
Stephen Blackheath [to GHC-iPhone]