[[!meta copyright="Copyright © 2007, 2008, 2010 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] [[!tag open_issue_binutils]] Here's what's to be done for maintaining GNU Binutils. As these tools primarily deal with low-level parts of the target architecture and the object file format (ELF ABI), which are essentially (at least meant to be) the same, there shouldn't be many differences comparing the binutils between the GNU/Hurd and GNU/Linux ports, for example. There are a few, though, as explained below. [[!toc levels=2]] # [[General information|/binutils]] # [[Sources|source_repositories/binutils]] # Configuration Last reviewed up to the [[Git mirror's e347ef3b343fc42ed312d5125047d59ae15df795 (2010-12-20) sources|source_repositories/binutils]]. * Globally * a.out, COFF, PE image support and 64 bit support are not interesting. * In the [[testsuite]]s, `.exp` and `.d` files very likely should not only care for `*-*-linux*`, but also `*-*-gnu*`. (If the need to be conditionalized like this at all.) * `bfd/` * `config.bfd` * `i[3-7]86-*-gnu*` Comparing to `i[3-7]86-*-linux-*`: * `i386linux_vec` -- a.out. * `i386pei_vec` -- PE. * 64 bit. * `configure.host` Souldn't need anything. x86 Linux neither. * `configure.in` Linux: * `COREFILE=trad-core.lo` with `TRAD_HEADER='"hosts/i386linux.h"'` We don't have any such core file support configured. TODO: should we? Where is this core file reading exactly used? GDB? * `i386linux_vec` -- a.out. * `i386pei_vec` -- PE. * `binutils/` * `configure.tgt` * `gas/` * `config/te-gnu.h` C.f. `te-linux.h`; search tree for `TE_LINUX` vs. `TE_GNU` usage. * `tc-i386.h` Sole `TE_LINUX` usage is for a.out. * `configure.tgt` * `ld/` * `configure.host` * `*-*-gnu*` TODO: resolve `crt0.o` vs. `crt1.o` issue. [[Testsuite failures|testsuite#static]]. * `configure.tgt` * `i[3-7]86-*-gnu*` Compare to `i[3-7]86-*-linux-*`, but don't need a.out (`i386linux`) and 64 bit support. # Build Here's a log of a binutils build run; this is from our [[Git repository's 245f62b817ee31135a190793dddb340f04ac95e6 (2010-12-20) sources|source_repositories/binutils]], run on kepler.SCHWINGE and grubber. $ export LC_ALL=C $ ../master/configure --prefix="$PWD".install 2>&1 | tee log_build [...] $ make SHELL=/bin/bash 2>&1 | tee log_build_ [...] (kepler.SCHWINGE defaults to using /bin/sh for libtool, grubber to /bin/bash; thus harmonized.) On grubber, this takes roughly one hour. ## Analysis x86 GNU/Linux and GNU/Hurd's configurations are [[slightly different|binutils]], thus mask out most of the differences that are due to GNU/Linux defining `-DTRAD_CORE`, `-DHAVE_i386linux_vec` (`-DSELECT_VECS='[...],&i386linux_vec[...]`), `-DHAVE_i386pei_vec` (`-DSELECT_VECS='[...],&i386pei_vec[...]`). $ diff -wu <(ssh kepler.SCHWINGE 'cd tmp/source/binutils/ && cat hurd/master.build/log_build* | sed -e "s%${PWD}%[...]%g" -e s%-DTRAD_CORE%% -e s%-DHAVE_i386linux_vec%% -e s%-DHAVE_i386pei_vec%% -e s%-DSELECT_VECS=\\\('\\\''\\\?\\\)\&bfd_elf32_i386_vec,\&i386linux_vec,\&i386pei_vec,\&bfd_elf32_little_generic_vec,\&bfd_elf32_big_generic_vec'\\\''\\\?%-DSELECT_VECS=\\\1\\\&bfd_elf32_i386_vec,\\\&bfd_elf32_little_generic_vec,\\\&bfd_elf32_big_generic_vec\\\1%') <(ssh grubber 'cd tmp/binutils/ && cat hurd/master.build/log_build* | sed "s%${PWD}%[...]%g"') > open_issues/binutils/log_build-diff [[log_build-diff]]. # Install $ make SHELL=/bin/bash install 2>&1 | tee log_install [...] (kepler.SCHWINGE defaults to using /bin/sh, grubber to /bin/bash; thus harmonized.) On grubber, this needs roughly 15 minutes, and takes up around 0.7 GiB. ## Analysis $ diff -wu <(ssh kepler.SCHWINGE 'cd tmp/source/binutils/ && cat hurd/master.build/log_install | sed -e "s%${PWD}%[...]%g" -e "s%i686-pc-linux-gnu%[ARCH]%g"') <(ssh grubber 'cd tmp/binutils/ && cat hurd/master.build/log_install | sed -e "s%${PWD}%[...]%g" -e "s%i686-unknown-gnu0\.3%[ARCH]%g"') > open_issues/binutils/log_install-diff [[log_install-diff]]. * `libtool: finish`: `ldconfig` is not run for the Hurd. # Testsuite $ make -k check [...] On grubber, this takes roughly one hour. $ ssh kepler.SCHWINGE 'cd tmp/source/binutils/ && cat hurd/master.build/*/*.sum hurd/master.build/*/*/*.sum | sed "s%${PWD}%[...]%g"' > open_issues/binutils/sum_linux $ ssh grubber 'cd tmp/binutils/ && cat hurd/master.build/*/*.sum hurd/master.build/*/*/*.sum | sed "s%${PWD}%[...]%g"' > open_issues/binutils/sum_hurd Comparing the results files, [[sum_linux]] to [[sum_hurd]]: $ diff -u -F ^Running open_issues/binutils/sum_linux open_issues/binutils/sum_hurd --- open_issues/binutils/sum_linux 2010-12-20 19:01:06.000000000 +0100 +++ open_issues/binutils/sum_hurd 2010-12-20 19:01:20.000000000 +0100 @@ -1,5 +1,5 @@ -Test Run By thomas on Mon Dec 20 11:34:53 2010 -Native configuration is i686-pc-linux-gnu +Test Run By tschwinge on Mon Dec 20 11:35:47 2010 +Native configuration is i686-unknown-gnu0.3 === binutils tests === @@ -114,8 +114,8 @@ Running [...]/hurd/master/binutils/tests # of expected passes 83 # of unsupported tests 2 -Test Run By thomas on Mon Dec 20 11:35:19 2010 -Native configuration is i686-pc-linux-gnu +Test Run By tschwinge on Mon Dec 20 11:44:29 2010 +Native configuration is i686-unknown-gnu0.3 === ld tests === @@ -296,10 +296,10 @@ Running [...]/hurd/master/ld/testsuite/l PASS: init array PASS: fini array PASS: init array mixed -PASS: static preinit array -PASS: static init array -PASS: static fini array -PASS: static init array mixed +XFAIL: static preinit array +XFAIL: static init array +XFAIL: static fini array +XPASS: static init array mixed Running [...]/hurd/master/ld/testsuite/ld-elf/exclude.exp ... PASS: ld link shared library PASS: ld export symbols from archive @@ -553,8 +553,8 @@ Running [...]/hurd/master/ld/testsuite/l PASS: ELF DSO weak func last DSO PASS: ELF weak func first PASS: ELF weak func last -PASS: ELF weak func first DSO -PASS: ELF weak func last DSO +XFAIL: ELF weak func first DSO +XFAIL: ELF weak func last DSO PASS: ELF DSO weak data first PASS: ELF DSO weak data last PASS: ELF DSO weak data first DSO @@ -565,10 +565,10 @@ Running [...]/hurd/master/ld/testsuite/l PASS: ELF weak data last PASS: ELF weak data first common PASS: ELF weak data last common -PASS: ELF weak data first DSO -PASS: ELF weak data last DSO -PASS: ELF weak data first DSO common -PASS: ELF weak data last DSO common +XFAIL: ELF weak data first DSO +XFAIL: ELF weak data last DSO +XFAIL: ELF weak data first DSO common +XFAIL: ELF weak data last DSO common PASS: ELF DSO small bar (size) PASS: ELF DSO foo with small bar (size) PASS: ELF DSO big bar (size) @@ -873,13 +873,14 @@ Running [...]/hurd/master/ld/testsuite/l === ld Summary === -# of expected passes 618 -# of expected failures 8 +# of expected passes 608 +# of unexpected successes 1 +# of expected failures 17 # of untested testcases 6 /media/data[...]/hurd/master.build/ld/ld-new 2.21.51.20101220 -Test Run By thomas on Mon Dec 20 11:34:59 2010 -Native configuration is i686-pc-linux-gnu +Test Run By tschwinge on Mon Dec 20 11:38:03 2010 +Native configuration is i686-unknown-gnu0.3 === gas tests === ## Analysis * `FAIL: static [...]` The testsuite isn't prepared for using `crt0.o` instead of `crt1.o` depending on whether a static or dynamic executable is created. Documented in `ld/configure.host`. Perhaps we should finally rewrite this messy code in glibc to avoid this difference... * `FAIL: ld-elf/64ksec` On the idle grubber, this one takes a few minutes wall time to complete successfully ([[I/O system weakness|performance/io_system/binutils_ld_64ksec]]), so assuming some system load variation, the testsuite's timeout may trigger. * `FAIL: ELF weak [...]` [[I|tschwinge]] suppose this is due to us having an override w.r.t. weak symbol handling in glibc, needed for our external [[/libpthread]]. TODO: document properly.