This is the mail archive of the mailing list for the binutils project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Help needed to track down bug: linking Linux kernel with gold creates unbootable kernel

Not identical, difference starts at byte 230: file format elf64-x86-64
+vmlinux.bfd: file format elf64-x86-64
It appears to be a difference in the address chosen for that global (and
other globals later on).

Although the placement of globals chosen from a library need not be identical, it would be comforting to verify that this is the only reason. Try changing the link command to remove all *.a (extract and specify each *.o explicitly). Then there should be no difference.

... there is also difference in padding:
gold uses 00 00 90 90 (add %al, (%rax) nop nop), while BFD uses 90 90 90
90 (4 nops).

That is a dispute over interpretation of the linker script: } :text=0x9090 The original spec was from the days when 2==sizeof(int), so padding was a 16-bit value, thus 0x9090 was all that mattered. Check the spec for an update regarding width of padding. In the meantime, try changing the script to } :text=0x90909090 which should remove this source of differences.

If I read that correctly it means it uses hardware pages with a pagesize
of 2MB for kernel text.


Since gold aligns only to 0x1000 perhaps the rodata ends up in the same
hardware page as the .text.

I think these are the relevant align commands from the ...

. = ALIGN((1 << 21));

It is a bug that gold does not propagate that alignment constraint to the .p_align.

If the hw pagesize is 2MB, then its not divisible, so its a bug.
Should I open a bugreport, or are there some patches to gold that I
could try?

Definitely open a bug report about ". = ALIGN((1 << 21));"

I think the .note difference is just due to gold embedding its version:
-Note section [ 2] '.notes' of 60 bytes at offset 0x3d2c58:
+Note section [ 2] '.notes' of 36 bytes at offset 0x5d1c58:
Owner Data size Type
- Linker version: gold 1.9
- Build ID: a865af685f5222cdc17a28ea4e49d58b2185bc05
+ Build ID: 07b53da4e169ad1079080043ad72384fb80d0ea3

Again, it would be comforting to make a test run with GNU_GOLD_VERSION omitted, to see if the .text becomes identical (except for Build ID) with ld.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]