]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
riscv: align stack before calling _dl_init [BZ #28703]
authorAurelien Jarno <aurelien@aurel32.net>
Wed, 15 Dec 2021 23:06:28 +0000 (00:06 +0100)
committerAurelien Jarno <aurelien@aurel32.net>
Fri, 17 Dec 2021 19:29:34 +0000 (20:29 +0100)
Align the stack pointer to 128 bits during the call to _dl_init() as
specified by the RISC-V ABI [1]. This fixes the elf/tst-align2 test.

Fixes bug 28703.

[1] https://github.com/riscv-non-isa/riscv-elf-psabi-doc

sysdeps/riscv/dl-machine.h

index ce2b3c3875daf768926462b9d6ea1c240b5031a9..f457a41c70ef6b7762d537054b50c3fce28b4a89 100644 (file)
@@ -125,8 +125,14 @@ elf_machine_dynamic (void)
        sll a3, a1, " STRINGXP (PTRLOG) "\n\
        add a3, a3, a2\n\
        add a3, a3, " STRINGXP (SZREG) "\n\
+       # Stash the stack pointer in s1.\n\
+       mv s1, sp\n\
+       # Align stack to 128 bits for the _dl_init call.\n\
+       andi sp, sp,-16\n\
        # Call the function to run the initializers.\n\
        jal _dl_init\n\
+       # Restore the stack pointer for _start.\n\
+       mv sp, s1\n\
        # Pass our finalizer function to _start.\n\
        lla a0, _dl_fini\n\
        # Jump to the user entry point.\n\