x86_64: Use -Ttext-segment to avoid address collision
authorBen Hutchings <ben@decadent.org.uk>
Sat, 5 Jan 2019 20:59:33 +0000 (20:59 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 6 Jan 2019 19:33:01 +0000 (19:33 +0000)
Building klibc for x86_64 with binutils 2.31 adds an extra
.note.gnu.property section to klibc.so, the address of which is not
affected by the -Ttext option.  Loading a klibc executable then
fails with the following kernel log message:

9409 (sh.shared): Uhuuh, elf segment at 0000000000200000 requested but the memory is mapped already

I don't exactly see why this is happening, but it is triggered by the
new section and the collision can be avoided by passing -Ttext-segment
instead of -Ttext.  A similar change was applied to MIPS recently.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Gbp-Pq: Name x86_64-use-ttext-segment-to-avoid-address-collision.patch

usr/klibc/arch/x86_64/MCONFIG

index fbb6b94308638f32eb3ddea51b4b33863230a21d..606f041ca3b3120868c868ffbd4572ab6adbd864 100644 (file)
@@ -35,7 +35,7 @@ KLIBCLDFLAGS      = -m elf_x86_64
 # The old default was max-page-size=0x100000, but that also results
 # in a broken layout with binutils 2.30.  Since there's no
 # architectural page size betwen 4 KB and 2MB, set it to 4 KB.
-KLIBCSHAREDFLAGS     = -Ttext 0x00200200 -z max-page-size=0x1000
+KLIBCSHAREDFLAGS     = -Ttext-segment 0x00200000 -z max-page-size=0x1000
 
 # Asm includes for x86_64 are in the merged x86 tree
 KLIBCARCHINCFLAGS = -I$(KLIBCKERNELOBJ)/arch/x86/include