Antoine Jacoutot:
> There's also sysutils/firmware/vmm:
>
> ===> Building for vmm-firmware-1.11.0p0
> The version of LD on this system (ld -nopie -znorelro) does not properly
> handle
> alignments. As a result, this project can not be built.
>From scripts/test-build.sh:
------------------->
# Test if ld's alignment handling is correct. This is a known problem
# with the linker that ships with Ubuntu 11.04.
cat - > $TMPFILE1 <<EOF
const char v1[] __attribute__((section(".text.v1"))) = "0123456789";
const char v2[] __attribute__((section(".text.v2"))) = "0123456789";
EOF
cat - > $TMPFILE1_ld <<EOF
SECTIONS
{
.mysection 0x88f0 : {
. = 0x10 ;
*(.text.v1)
. = 0x20 ;
*(.text.v2)
. = 0x30 ;
}
}
EOF
$CC -O -g -c $TMPFILE1 -o $TMPFILE1o > /dev/null 2>&1
...
$LD -T $TMPFILE1_ld $TMPFILE1o -o $TMPFILE2o > /dev/null 2>&1
...
<-------------------
ld: error: testcompile1.lds:4: unable to move location counter backward for:
.mysection
Does ld.lld treat the location counter assignments as absolute?
ld.bfd handles them as relative to the segment start address:
Hex dump of section '.mysection':
0x000088f0 00000000 00000000 00000000 00000000 ................
0x00008900 00000000 00003938 37363534 33323130 0123456789......
0x00008910 00000000 00003938 37363534 33323130 0123456789......
Since I have lld 7.0.0 at hand on FreeBSD, I checked whether it
fixes this problem, but in fact it adds another error:
ld.lld: error: testcompile1.lds:4: unable to move location counter backward
for: .mysection
ld.lld: error: section .mysection at 0x88F0 of size 0xFFFFFFFFFFFF7740 exceeds
available address space
> The problem may be the result of this LD bug report:
> http://sourceware.org/bugzilla/show_bug.cgi?id=12726
That's for GNU binutils 2.21. And it doesn't look applicable. The
.text.v1 and .text.v2 sections have size 0xb and alignment 1 in the
ELF header.
--
Christian "naddy" Weisgerber [email protected]