Error building ghc on raspberry pi.

roconnor at theorem.ca roconnor at theorem.ca
Sun Jan 27 19:52:37 CET 2013


On Mon, 21 Jan 2013, roconnor at theorem.ca wrote:

> On Mon, 21 Jan 2013, Karel Gardas wrote:
>
>> On 01/21/13 12:49 AM, roconnor at theorem.ca wrote:
>>> On Sun, 20 Jan 2013, Karel Gardas wrote:
>>> 
>>>>> Okay, I patched the settings filed generted by ./configure in the
>>>>> binary-dist and rank make install which completed. However,
>>>>> 
>>>>> pi at raspberrypi /tmp/bindist $ bin/ghc --make Main.hs
>>>>> [1 of 1] Compiling Main ( Main.hs, Main.o )
>>>>> Linking Main ...
>>>>> pi at raspberrypi /tmp/bindist $ ./Main
>>>>> Segmentation fault
>>>>> pi at raspberrypi /tmp/bindist $ cat Main.hs
>>>>> main = putStrLn "Hello World."
>>>>> 
>>>>> Damn it. So close. I don't know how make install succeded without
>>>>> segfaulting.
>>>> 
>>>> Sigh! Go back to your build tree and try the same thing with
>>>> inplace/bin/ghc-stage2 and let us know if this works or not. BTW:
>>>> What's in Main.hs?
>>> 
>>> pi at raspberrypi /tmp $ ghc-7.6.1c/inplace/bin/ghc-stage2 Main.hs
>>> [1 of 1] Compiling Main ( Main.hs, Main.o )
>>> Linking Main ...
>>> pi at raspberrypi /tmp $ ./Main
>>> Hello World.
>>> 
>>> The stage2 compiler works fine inplace.
>> 
>> OK, so binary-dist not only corrupted your settings file, but also somehow 
>> your compiler. Nice to see you are able to get working compiler on your RPi 
>> board. Congratulations! :-)
>
> Thanks. :)
>
> So the binary-dist has a settings.in file.  It is the configure step in the 
> binary-dist that generates the corrupt settings file.
>
> I'll try to poke around to see where and why the stage2 compiler and the 
> binary-dist compiler differ.

I replaced the lib/ghc-7.6.1/settings built from the binary-dist which 
read:

[("GCC extra via C opts", " -fwrapv"),
  ("C compiler command", "/usr/bin/gcc"),
  ("C compiler flags", " -fno-stack-protector "),
  ("ar command", "/usr/bin/ar"),
  ("ar flags", "q"),
  ("ar supports at file", "@ArSupportsAtFile@"),
  ("touch command", "touch"),
  ("dllwrap command", "/bin/false"),
  ("windres command", "/bin/false"),
  ("perl command", "/usr/bin/perl"),
  ("target os", "OSLinux"),
  ("target arch", "ArchARM {armISA = ARMv6, armISAExt = [VFPv2], armABI = HARD}"),
  ("target word size", "4"),
  ("target has GNU nonexec stack", "False"),
  ("target has .ident directive", "True"),
  ("target has subsections via symbols", "False"),
  ("LLVM llc command", "llc"),
  ("LLVM opt command", "opt")
  ]

With the settings file from the build:

[("GCC extra via C opts", " -fwrapv"),
  ("C compiler command", "/usr/bin/gcc"),
  ("C compiler flags", " -fno-stack-protector  -Wl,--hash-size=31 -Wl,--reduce-memory-overheads"),
  ("ar command", "/usr/bin/ar"),
  ("ar flags", "q"),
  ("ar supports at file", "YES"),
  ("touch command", "touch"),
  ("dllwrap command", "/bin/false"),
  ("windres command", "/bin/false"),
  ("perl command", "/usr/bin/perl"),
  ("target os", "OSLinux"),
  ("target arch", "ArchARM {armISA = ARMv6, armISAExt = [VFPv2], armABI = HARD}"),
  ("target word size", "4"),
  ("target has GNU nonexec stack", "False"),
  ("target has .ident directive", "True"),
  ("target has subsections via symbols", "False"),
  ("LLVM llc command", "/usr/bin/llc-3.0"),
  ("LLVM opt command", "/usr/bin/opt-3.0")
  ]

and now ghc builds executables that do not segfault!

It seem that the configure program in the binary-dist needs some patching.

-- 
Russell O'Connor                                      <http://r6.ca/>
``All talk about `theft,''' the general counsel of the American Graphophone
Company wrote, ``is the merest claptrap, for there exists no property in
ideas musical, literary or artistic, except as defined by statute.''



More information about the Glasgow-haskell-users mailing list