On Tue, 27 Jun 2023 09:47:03 +0200 Thomas Huth <th...@redhat.com> wrote:
> start.S currently cannot be compiled with Clang 16 and binutils 2.40: > > ld: start.o(.text+0x8): misaligned symbol `__bss_start' (0xc1e5) for > relocation R_390_PC32DBL > > According to the built-in linker script of ld, the symbol __bss_start > can actually point *before* the .bss section and does not need to have > any alignment, so in certain situations (like when using the internal > assembler of Clang), the __bss_start symbol can indeed be unaligned > and thus it is not suitable for being used with the "larl" instruction > that needs an address that is at least aligned to halfwords. > The problem went unnoticed so far since binutils <= 2.39 did not > check the alignment, but starting with binutils 2.40, such unaligned > addresses are now refused. > > Fix it by using the real start address of the .bss section instead. > > Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2216662 > Reported-by: Miroslav Rezanina <mreza...@redhat.com> > Suggested-by: Nick Clifton <ni...@redhat.com> > Signed-off-by: Thomas Huth <th...@redhat.com> > --- > pc-bios/s390-ccw/start.S | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/pc-bios/s390-ccw/start.S b/pc-bios/s390-ccw/start.S > index 111dea261b..a63c4e3ff2 100644 > --- a/pc-bios/s390-ccw/start.S > +++ b/pc-bios/s390-ccw/start.S > @@ -18,7 +18,7 @@ _start: > larl %r15,stack + STACK_SIZE - 160 /* Set up stack */ > > /* clear bss */ > - larl %r2,__bss_start > + larl %r2,.bss > larl %r3,_end since we are here, do you have guarantees that _end is always correctly aligned? if so: Reviewed-by: Claudio Imbrenda <imbre...@linux.ibm.com> > slgr %r3,%r2 /* get sizeof bss */ > ltgr %r3,%r3 /* bss empty? */