On Sat, Jul 22, 2017 at 5:01 PM Alain O'Dea <[email protected]> wrote:
> On Sun, Jul 9, 2017 at 12:25 AM Alain O'Dea <[email protected]> wrote: > >> On Sat, Jul 8, 2017 at 2:23 PM Alain O'Dea <[email protected]> wrote: >> >>> On Sat, Jul 8, 2017 at 10:41 AM Alain O'Dea <[email protected]> >>> wrote: >>> >>>> I've got the build from GHC 7.6.3 in PKGSRC thru GHC 7.10.3 up to GHC >>>> 8.0.2 (latest stable) working with manual builds. >>>> >>>> I've been working in a PKGSRC 2017Q1 sandbox on the latest pkgbuild >>>> image to make it package-friendly. >>>> >>>> Here's my plan: >>>> 1. Create wip/ghc7x which builds GHC 7.10.3 by build depending on >>>> lang/ghc >>>> 2. Create wip/ghc8 which builds GHC 8.0.2 by build depending on >>>> wip/ghc7x >>>> >>>> I ran into an odd issue with the GHC 7.10.3 I built. It is a 64-bit >>>> binary, but is somehow linked against some 32-bit libraries (ncurses, >>>> iconv, gmp) and won't run. >>>> >>>> [root@ghc-builder-x86-64-smartos ~]# ghc >>>> ld.so.1: ghc: fatal: /opt/local/lib//libncurses.so.6: wrong ELF class: >>>> ELFCLASS32 >>>> Killed >>>> [root@ghc-builder-x86-64-smartos ~]# ldd >>>> /opt/local/lib/ghc-7.10.3/bin/ghc >>>> libncurses.so.6 => /opt/local/lib//libncurses.so.6 - >>>> wrong ELF class: ELFCLASS32 >>>> libiconv.so.2 => /opt/local/lib//libiconv.so.2 - wrong >>>> ELF class: ELFCLASS32 >>>> libgmp.so.10 => /opt/local/lib//libgmp.so.10 - wrong ELF >>>> class: ELFCLASS32 >>>> libm.so.2 => /usr/lib/amd64/libm.so.2 >>>> librt.so.1 => /usr/lib/amd64/librt.so.1 >>>> libdl.so.1 => /usr/lib/amd64/libdl.so.1 >>>> libpthread.so.1 => /usr/lib/amd64/libpthread.so.1 >>>> libssp.so.0 => /usr/lib/amd64/libssp.so.0 >>>> libssp.so.0 (LIBSSP_1.0) => (version not found) >>>> libc.so.1 => /usr/lib/amd64/libc.so.1 >>>> libgcc_s.so.1 => /usr/lib/64/libgcc_s.so.1 >>>> >>> >>> I also found this: >>> => Checking for work-directory references in ghc-7.10.3b >>> ERROR: /opt/local/lib/ghc-7.10.3/settings: ("readelf command", >>> "/home/pbulk/build/wip/ghc7x/work/.tools/bin/readelf"), >>> ERROR: *** The above files still have references to the build directory. >>> ERROR: This is possibly an error that should be fixed by unwrapping >>> ERROR: the files or adding missing tools to the package makefile! >>> *** Error code 1 >>> >>> It originates in GHC's aclocal.m4. It is somehow picking up the sandbox >>> tools instead of the platform tools. This came up unrelated to SmartOS on >>> #ghc as well last night and I regrettably missed the opportunity to engage >>> their core team. >>> >>> I fix it directly by including a patch for settings.in which disregards >>> the ar, ld, and readelf detected by their autoconf and put in correct >>> /opt/local/bin (ar and readelf) or /usr/bin (only for ld) equivalents. I >>> also fix the libssp link errors seen in compiling client code with GHC by >>> including -lssp in the linker options configs in settings.in. >>> >>> PKGSRC support for GHC 7.10.3 is pretty close to releasable now. The >>> pkgbuild image is an outstanding workbench for this, so thank you Jonathan >>> for putting that together. >>> >> >> Still getting broken binaries out of the build: >> >> [root@ghc-builder-x86-64-smartos /opt/local]# ghci >> ld.so.1: ghc: fatal: /opt/local/lib//libncurses.so.6: wrong ELF class: >> ELFCLASS32 >> Killed >> [root@ghc-builder-x86-64-smartos /opt/local]# ghc >> ld.so.1: ghc: fatal: /opt/local/lib//libncurses.so.6: wrong ELF class: >> ELFCLASS32 >> Killed >> [root@ghc-builder-x86-64-smartos /opt/local]# ldd >> /opt/local/lib/ghc-7.10.3/bin/ghc >> libssp.so.0 => /usr/lib/amd64/libssp.so.0 >> libssp.so.0 (LIBSSP_1.0) => (version not found) >> libncurses.so.6 => /opt/local/lib//libncurses.so.6 - wrong >> ELF class: ELFCLASS32 >> libiconv.so.2 => /opt/local/lib//libiconv.so.2 - wrong >> ELF class: ELFCLASS32 >> libgmp.so.10 => /opt/local/lib//libgmp.so.10 - wrong ELF class: >> ELFCLASS32 >> libm.so.2 => /usr/lib/amd64/libm.so.2 >> librt.so.1 => /usr/lib/amd64/librt.so.1 >> libdl.so.1 => /usr/lib/amd64/libdl.so.1 >> libpthread.so.1 => /usr/lib/amd64/libpthread.so.1 >> libc.so.1 => /usr/lib/amd64/libc.so.1 >> libgcc_s.so.1 => /usr/lib/64/libgcc_s.so.1 >> >> The ghc binary looks fine in the pkgbuild work .destdir: >> --<root@pkgbuild >> >-(/data/chroot/dev-2017Q1-x86_64)-</home/pbulk/build/wip/ghc7x/work>-- >> -> ldd .destdir/opt/local/lib/ghc-7.10.3/bin/ghc >> libssp.so.0 => >> /opt/local/gcc49/x86_64-sun-solaris2.11/lib/amd64/libssp.so.0 >> libncurses.so.6 => /opt/local/lib//libncurses.so.6 >> libiconv.so.2 => /opt/local/lib//libiconv.so.2 >> libgmp.so.10 => /opt/local/lib//libgmp.so.10 >> libm.so.2 => /usr/lib/amd64/libm.so.2 >> librt.so.1 => /usr/lib/amd64/librt.so.1 >> libdl.so.1 => /usr/lib/amd64/libdl.so.1 >> libpthread.so.1 => /usr/lib/amd64/libpthread.so.1 >> libc.so.1 => /usr/lib/amd64/libc.so.1 >> libgcc_s.so.1 => >> /opt/local/gcc49/x86_64-sun-solaris2.11/lib/amd64/libgcc_s.so.1 >> libumem.so.1 => /lib/64/libumem.so.1 >> >> I'm not sure why libcurses, libiconv, and libgmp come out wrong, while >> libm, librt, libdl, libpthread, libc, and libgcc_s all come out fine. I >> really have no idea why ldd shows a second libssp in the base-multiarch >> 17.1.0 zone I extracted >> /data/packages/SmartOS/2017Q1/x86_64/All/ghc-7.10.3b.tgz into. >> >> I think it's an issue with how I'm building my sandbox. I'm using >> `run-sandbox 2017Q1-x86_64`. >> >> When I run my package on base-64 17.1.0, it appears to work. I can >> compile hello.hs: >> main = putStrLn "Hello, World" >> >> but ghci segfaults: >> [root@ghc-builder-x86-64-smartos /opt/local]# ghci >> GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help >> Segmentation Fault (core dumped) >> >> I ran ghci with truss and got this tail: >> /2: setcontext(0xFFFFFD7FFEEBE4B0) >> /2: Received signal #14, SIGALRM, in lwp_park() [caught] >> /2: siginfo: SIG#0 >> /2: lwp_park(0x00000000, 0) Err#91 ERESTART >> /2: lwp_sigmask(SIG_SETMASK, 0x00002000, 0x00000000, 0x00000000, >> 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF] >> /2: setcontext(0xFFFFFD7FFEEBE4B0) >> /1: Incurred fault #6, FLTBOUNDS %pc = 0x0432FE0C >> /1: siginfo: SIGSEGV SEGV_ACCERR addr=0x0432FE0C >> /1: Received signal #11, SIGSEGV [default] >> /1: siginfo: SIGSEGV SEGV_ACCERR addr=0x0432FE0C >> >> It's not clear what ghci is attempting when it segfaults. When I build >> manually external to PKGSRC it works. >> >> I wondering if the extra slash in the lib paths is causing grief. >> >> I have a branch with my WIP on it: >> https://github.com/AlainODea/pkgsrc-wip/blob/ao-ghc7x/ghc7x/Makefile >> > > New strategy. I took pkgsrc-wip/ghc as a basis (much cleaner) and used > it's bootstrap to build GHC 7.10.3. > > Still getting segfaults, but I have decent details documented: > https://gist.github.com/AlainODea/c9a1da84efc8e22e3ba637af8a3f53c2 > > I'm out of my depth here. I've tried some basic mdb hacking to figure out > what happened, but I'm not getting far with that. > > I think I have it located in foreignExportStablePtr, but I'm not sure. > > Has anyone seen seg faults in GHCi after building GHC on SmartOS recently? > Confirmed. The 7.10.2 boot GHC at https://us-east.manta.joyent.com/pkgsrc/public/distfiles-local/ghc-7.10.2-boot-x86_64-unknown-solaris2.tar.xz is broken and unusable. I build GHC 7.10.3 successfully with PKGSRC GHC 7.6.3 and it works. I have a working Illumos-compatible x86_64 GHC 7.10.3 bindist. Here's how I built it: Get dependencies: ```bash pkgin update pkgin -y full-upgrade pkgin -y install build-essential ghc ``` Fix broken PKGSRC-installed GHC handling of SSP (append -lssp to its linker args): ```bash curl -OL https://gist.github.com/AlainODea/ccb4f0ad7385a691b6fe/raw/2dc2142db60ea3597d2bc1d09c5b406d66cc34e3/ghc_settings.patch patch /opt/local/lib/ghc-7.6.3/settings ghc_settings.patch ``` Get GHC 7.10.3b source distribution: ```bash curl -OL https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3b-src.tar.xz.sig curl -OL https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3b-src.tar.xz gpg --verify ghc-7.10.3b-src.tar.xz.sig curl -OL https://alainodea.com/.well-known/97DB64AD.asc ``` Expect this output from the GPG verify (97DB64AD is Ben Gamari's PGP key): ```plain gpg: Signature made Tue Dec 29 10:20:42 2015 UTC using RSA key ID 97DB64AD gpg: Good signature from "Benjamin Gamari <[email protected]>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: FFEB 7CE8 1E16 A36B 3E2D ED6F 2DE0 4D4E 97DB 64AD ``` There's a note coming on the haskell.org downloads page to clarify that Ben's key is the trusted key for this. Hopefully they'll also include a TLS verified link to his public key. Next step is to extract and build GHC 7.10.3: ```bash tar xf ghc-7.10.3b-src.tar.xz cd ghc-7.10.3/ curl -OL https://gist.github.com/AlainODea/ccb4f0ad7385a691b6fe/raw/c2b3a19b0e11d8287336f61b016db0072ddebc92/ghc_7.10.3_settings.in.patch patch settings.in ghc_7.10.3_settings.in.patch patch settings ghc_settings.patch pushd utils/lndir gcc lndir.c -o /opt/local/bin/lndir popd ./configure --prefix /opt/local --disable-ld-override gmake gmake binary-dist # you could stop here and use this to make a PKGSRC GHC 7.10.3 for further bootstrapping gmake install ``` Completing the step above and binary packaging it is the smart thing I think. The advantage of this is that it doesn't require introducing another bootstrap compiler. It just uses the binary GHC 7.8.3 in PKGSRC already. I'm going to try to make wip/ghc use that PKGSRC ghc binary as the bootstrap and bypass the distfiles-local issue. Optional next step is to extract and build GHC 8.0.2, but I think it would be better to complete the above and get GHC 7.10.3 into PKGSRC as a binary as it has a clean story and a less insane build: ```bash tar xf ghc-8.0.2-src.tar.xz cd ghc-8.0.2/ curl -OL https://gist.github.com/AlainODea/ccb4f0ad7385a691b6fe/raw/c2b3a19b0e11d8287336f61b016db0072ddebc92/ghc_8.0.2_settings.in.patch ./configure --prefix /opt/local --disable-ld-override gmake gmake binary-dist gmake install ``` ------------------------------------------- smartos-discuss Archives: https://www.listbox.com/member/archive/184463/=now RSS Feed: https://www.listbox.com/member/archive/rss/184463/25769125-55cfbc00 Modify Your Subscription: https://www.listbox.com/member/?member_id=25769125&id_secret=25769125-7688e9fb Powered by Listbox: http://www.listbox.com
