Hi Andrew,
Apologies for the generic subject, I don't totally understand the
nature of the bug.
No worries. You have the problem narrowed down to a single commit,
which definitely helps.
I have a basic linker script that stopped working after upgrading to
binutils 2.40. I did a git bisect on the repository and it seems that
the breakage starts with commit
b1eecf6f66a4a642f4cb35688213e6c1c1ffdc79.
Please could you file a bug report for this problem here:
https://sourceware.org/bugzilla/enter_bug.cgi?product=binutils
Having a bug report like this really helps us to track the bug
and ensure that it can be reviewed in the future, should it ever
come back.
$ ${LD} -o out.bin -T linker.ld lib1.a lib2.a
You have now shown how lib1.a and lib2.a are created. I assumed
that you did:
$ ar cr lib1.a test1.o test2.o
$ ar cr lib2.a test3.o
$ objdump -x out.bin | grep func
c000001e g F .text 0000000a func3
c000000f g F .text 0000000f func1
c0000000 g F .text 0000000f func2
you see that func1 and func2 are in .text rather than .init-text where
they should be.
Yes, this is a bug. Not sure of the exact cause, but maybe the
new code in commit b1eecf6f66a4a642 in scanning the sections in
reverse order rather than forward order.
Cheers
Nick