[[!meta copyright="Copyright © 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 a log of a binutils build and testsuite run; this is from
a0fc8b2145396563ff60761d8b4ff1d3d3a92c41 (2010-11-07)
[[sources|source_repositories/binutils]], run on kepler.SCHWINGE and grubber.

    $ export LC_ALL=C
    $ ../hurd/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 50 minutes.

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/hurd.build/ && cat 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/hurd.build/ && cat log_build* | sed "s%${PWD}%[...]%g"') > open_issues/binutils/testsuite/log_build-diff

[[log_build-diff]].

    $ make -k check
    [...]

On grubber, this takes roughly 45 minutes.

    $ ssh kepler.SCHWINGE 'cd tmp/source/binutils/ && cat hurd.build/*/*.sum hurd.build/*/*/*.sum | sed "s%${PWD}%[...]%g"' > open_issues/binutils/testsuite/sum_linux
    $ ssh grubber 'cd tmp/binutils/ && cat hurd.build/*/*.sum hurd.build/*/*/*.sum | sed "s%${PWD}%[...]%g"' > open_issues/binutils/testsuite/sum_hurd

Comparing the results files, [[sum_linux]] to [[sum_hurd]]:

    $ diff -u -F ^Running open_issues/binutils/testsuite/sum_linux open_issues/binutils/testsuite/sum_hurd
    --- open_issues/binutils/testsuite/sum_linux	2010-11-08 06:45:04.000000000 +0100
    +++ open_issues/binutils/testsuite/sum_hurd	2010-11-08 06:45:18.000000000 +0100
    @@ -1,5 +1,5 @@
    -Test Run By thomas on Sun Nov  7 20:20:33 2010
    -Native configuration is i686-pc-linux-gnu
    +Test Run By tschwinge on Sun Nov  7 21:03:30 2010
    +Native configuration is i686-unknown-gnu0.3
     
     		=== binutils tests ===
     
    @@ -114,8 +114,8 @@ Running [...]/hurd/binutils/testsuite/bi
     
     # of expected passes		83
     # of unsupported tests		2
    -Test Run By thomas on Sun Nov  7 20:20:55 2010
    -Native configuration is i686-pc-linux-gnu
    +Test Run By tschwinge on Sun Nov  7 21:10:31 2010
    +Native configuration is i686-unknown-gnu0.3
     
     		=== ld tests ===
     
    @@ -295,9 +295,9 @@ Running [...]/hurd/ld/testsuite/ld-elf/e
     PASS: preinit array
     PASS: init array
     PASS: fini array
    -PASS: static preinit array
    -PASS: static init array
    -PASS: static fini array
    +XFAIL: static preinit array
    +XFAIL: static init array
    +XFAIL: static fini array
     Running [...]/hurd/ld/testsuite/ld-elf/exclude.exp ...
     PASS: ld link shared library
     PASS: ld export symbols from archive
    @@ -551,8 +551,8 @@ Running [...]/hurd/ld/testsuite/ld-elfwe
     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
    @@ -563,10 +563,10 @@ Running [...]/hurd/ld/testsuite/ld-elfwe
     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)
    @@ -871,13 +871,13 @@ Running [...]/hurd/ld/testsuite/ld-xtens
     
     		=== ld Summary ===
     
    -# of expected passes		616
    -# of expected failures		8
    +# of expected passes		607
    +# of expected failures		17
     # of untested testcases		6
     /media/data[...]/hurd.build/ld/ld-new 2.21.51.20101107
     
    -Test Run By thomas on Sun Nov  7 20:20:38 2010
    -Native configuration is i686-pc-linux-gnu
    +Test Run By tschwinge on Sun Nov  7 21:05:14 2010
    +Native configuration is i686-unknown-gnu0.3
     
     		=== gas tests ===
     

# Analysis

## <a name="static">`FAIL: static [...]`</a>

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...

## <a name="64ksec">`FAIL: ld-elf/64ksec`</a>

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.

## <a name="weak">`FAIL: ELF weak [...]`</a>

[[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.