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