This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: Tidy bfdio to consistenly use containing archive
- From: "Maciej W. Rozycki" <macro at mips dot com>
- To: Alan Modra <amodra at gmail dot com>
- Cc: <binutils at sourceware dot org>
- Date: Wed, 13 Jun 2018 13:10:57 +0100
- Subject: Re: Tidy bfdio to consistenly use containing archive
- References: <20180605130826.GF7660@bubble.grove.modra.org>
Hi Alan,
> It's possible to have a valid "where" field for archives by always
> using and updating the containing archive BFD. That's what this patch
> does. Note that cache.c used to find the containing archive BFD
> anyway for the iostream, so we're not really doing extra work, just
> transferring it up to the correct abstraction level.
>
> The patch also gets rid of some hacks. bfd_tell was called when
> bfd_seek failed, in an attempt to correct "where". That's got to be
> papering over another problem, so that code has been removed.
> bfd_read also had an "optimiziation" to return early when the number
> of bytes was zero, and bfd_seek optimized calls that didn't move the
> file pointer. This was covering for a coff_slurp_line_table bug where
> IO was attempted on a pe-dll BFD without an iovec.
It might be either the removal of what you call 'an "optimization"' or
something else with your change, but in any case it has caused a serious
performance regression seen in the GAS test suite with one of the MIPS
test cases. Execution times and the load before and after commit
5c4ce239a3ab are respectively:
$ /usr/bin/time ../as-new -o dump.o .../gas/testsuite/gas/mips/align.s
0.16user 0.31system 0:05.19elapsed 9%CPU (0avgtext+0avgdata 23904maxresident)k
0inputs+0outputs (0major+1590minor)pagefaults 0swaps
and:
$ /usr/bin/time ../as-new -o dump.o .../gas/testsuite/gas/mips/align.s
2.48user 20.18system 0:33.97elapsed 66%CPU (0avgtext+0avgdata 23904maxresident)k
0inputs+0outputs (0major+1590minor)pagefaults 0swaps
This causes intermittent test suite failures with MIPS targets:
mips64-img-linux +FAIL: MIPS align maximum
mips64-kfreebsd-gnu +FAIL: MIPS align maximum
mips64-linux +FAIL: MIPS align maximum
mips64-mti-linux +FAIL: MIPS align maximum
mips64el-freebsd +FAIL: MIPS align maximum
mips64el-kfreebsd-gnu +FAIL: MIPS align maximum
mips64el-linux +FAIL: MIPS align maximum
mips64el-openbsd +FAIL: MIPS align maximum
mips64el-ps2-elf +FAIL: MIPS align maximum
mips64vr-elf +FAIL: MIPS align maximum
due to timeouts, which the regressed execution time in my test environment
(where multiple test suites are run in parallel) is clearly on the verge
of, e.g.:
../as-new -o dump.o .../gas/testsuite/gas/mips/align.s
Executing on host: sh -c {../as-new -o dump.o .../gas/testsuite/gas/mips/align.s 2>&1} /dev/null gas.out (timeout = 300)
WARNING: program timed out.
.../gas/testsuite/../../binutils/nm-new -n dump.o
Executing on host: sh -c {.../gas/testsuite/../../binutils/nm-new -n dump.o >dump.out 2>gas.stderr} /dev/null (timeout = 300)
.../gas/testsuite/../../binutils/nm-new: dump.o: file format not recognized
FAIL: MIPS align maximum
Can you please have a look into it?
Maciej