AArch64 calling convention in assembly code

Alexander Fedotov <[email protected]>
Newsgroups gmane.comp.lib.newlib,gmane.comp.gdb.bugs.general
Message-ID <CAN8C2CqGq4OUNXq5=ur87nqwVjYF-D6aAcVKGGB1pQT1S0b6Jg@mail.gmail.com>
Hello dear AArch64 maintainers
Please look into code snippet below from newlib/libgloss/aarch64/rdimon-aem-el3.

Seems to me this code violates AArch64 calling convention and actually
breaks debugging in GDB. GDB tries to unwind call stack and got
endless reentrancy...

FUNCTION (_cpu_init_hook):
    sub    sp, sp, #16
    str    x30, [sp, xzr]
    bl    _init_vectors
    bl    _flat_map
    ldr    x30, [sp, xzr]
    add    sp, sp, #16
    ret


We have couple of calls there (_init_vectors, _flat_map). If you'll
try to step into any subroutine you will found that GDB hangs and
can't step anymore.

Pushing LR on the stack resolves a problem.

So my message is that:
1. Current code in _cpu_init_hook is incorrect
2. GDB should handle this and do not hang

Alex
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.