Re: AArch64 calling convention in assembly code

"Richard Earnshaw (lists)" <[email protected]>
Newsgroups gmane.comp.lib.newlib,gmane.comp.gdb.devel
Message-ID <[email protected]>
On 01/08/18 14:28, Alexander Fedotov wrote:
>>> Pushing LR on the stack resolves a problem
> FP of course, not LR.
> So the correct code must be like this:
> 
> _cpu_init_hook:
>     stp        x29, x30, [sp, #-16]!
>     mov        x29, sp
>     bl        _init_vectors
>     bl        _flat_map
>     ldp        x29, x30, [sp], #16
>     ret
> 
> But still my point is that GDB should catch such an error and do not hang.
> 
> Alex
> 
> On Tue, Jul 31, 2018 at 9:34 PM, Alexander Fedotov <[email protected]> wrote:
>> 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.

X30 is LR.

All we really need is a CFI unwind record that GDB can understand.

R.

>>
>> 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.