porting to uClibc-based 686 Linux
Dubiousjim
lists+haskell-glasgow at jimpryor.net
Wed Apr 3 16:55:14 CEST 2013
On Wed, Apr 03, 2013 at 09:56:58AM -0400, Dubiousjim wrote:
> Ok, with all of that, the build completes. And the build ghc-stage2
> (which I temporarily named inplace/lib/ghc-stage2.exe, but now let's
> restore it to its original name) does in fact execute on the target
> machine:
>
> $ inplace/lib/ghc-stage2 --version
> The Glorious Glasgow Haskell Compilation System, version 7.6.2
> $ inplace/lib/ghc-stage2 --interactive
> ghc-stage2: missing -B<dir> option
> $ cat ~/hello.hs
> main = putStrLn "Hello World!\n"
> $ inplace/lib/ghc-stage2 -B./inplace/lib ~/hello.hs -o hello
> $ ./hello
> Can't modify application's text section; use the GCC option -fPIE
> for
> position-independent executables.
>
> That's as far as I've got for now. Hopefully someone will have
> bothered to read this far and have some suggestions for what I should be
> doing differently, or how to proceed from here, to get the compiled
> ghc-stage2 really working on the target machine, so that I can use it to
> compile ghc on the target machine directly.
Oh, in fact I'm closer than I thought. The error I reported as:
> $ inplace/lib/ghc-stage2 -B./inplace/lib --interactive
> GHCi, version 7.6.2: http://www.haskell.org/ghc/ :? for help
> Loading package ghc-prim ... ghc-stage2: mmap 442368 bytes at (nil):
> Operation not permitted
> ghc-stage2: Try specifying an address with +RTS -xm<addr> -RTS
is in fact due to my forgetfulness. My target system uses PaX kernel
security, and so
compilers like ghc have to be tweaked before they can be used:
$ paxctl -c inplace/lib/ghc-stage2
$ paxctl -m inplace/lib/ghc-stage2
$ inplace/bin/ghc-stage2 -B./inplace/lib --interactive
GHCi, version 7.6.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>
Yay, the interpreter works!
But there's still something funny with the binaries generated by the
compiler. That means I can't yet use this ghc to directly recompile ghc
on my target system.
$ cat ~/hello.hs
main = putStrLn "Hello World!\n"
$ rm -f hello
$ inplace/bin/ghc-stage2 -B./inplace/lib ~/hello.hs -o hello
[1 of 1] Compiling Main ( /home/jim/hello.hs,
/home/jim/hello.o ) [flags changed]
Linking hello ...
$ ./hello
Can't modify application's text section; use the GCC option -fPIE
for
position-independent executables.
Seems like I'm close, but not quite there yet.
Supplying the flag -fPIE to ghc when building hello says:
ghc-stage2: unrecognised flags: -fPIE
The flag -fPIC on the other hand is accepted, but then the generated
binary hello still fails with the same error.
--
dubiousjim at gmail.com
More information about the Glasgow-haskell-users
mailing list