On Mon, Mar 20, 2017 at 01:35:04AM +0100, Mark Kettenis wrote:
> It turns out that pretty much all relevant aarch64 OSes use the same
> layout for transferring registers in their debug interfaces. Except
> for us. That doesn't make sense and would mean I'd have to do
> additional work in my lldb porting efforts.
>
> Diff below revises "struct reg" for amd64 to be compatible with what
> NetBSD provides. That just matches our naming conventions for struct
> reg better. The actual names are largely irrelevant as debuggers
> hardcode the layouts anyway to support cross-debugging.
>
> This struct isn't actually used yet, so these changes don't really
> have any ABI consequences. But once this is in, I'm planning on
> making core dumps and ptrace actually work on arm64.
>
> ok?
It looks like NetBSD just has a cross compiled toolchain
nothing that runs on actual hardware.
Given FreeBSD does I'd consider that more relevant, and it
has:
struct reg {
uint64_t x[30];
uint64_t lr;
uint64_t sp;
uint64_t elr;
uint32_t spsr;
};
struct fpreg {
__uint128_t fp_q[32];
uint32_t fp_sr;
uint32_t fp_cr;
};
>
>
> Index: arch/arm64/include/reg.h
> ===================================================================
> RCS file: /cvs/src/sys/arch/arm64/include/reg.h,v
> retrieving revision 1.1
> diff -u -p -r1.1 reg.h
> --- arch/arm64/include/reg.h 17 Dec 2016 23:38:33 -0000 1.1
> +++ arch/arm64/include/reg.h 20 Mar 2017 00:27:12 -0000
> @@ -19,11 +19,11 @@
> #define _MACHINE_REG_H_
>
> struct reg {
> - unsigned long x[30];
> - unsigned long x_sp;
> - unsigned long x_lr;
> - unsigned long x_pc;
> - unsigned long x_cpsr;
> + unsigned long r_reg[31];
> + unsigned long r_sp;
> + unsigned long r_pc;
> + unsigned long r_spsr;
> + unsigned long r_tpidr;
> };
>
> struct fpreg {
>