1ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include <stdio.h>
2ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include <stddef.h>
3ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include <ucontext.h>
4ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include <asm/sigcontext.h>
5ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
6ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define UC(N,X) \
7ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  printf ("#define LINUX_UC_" N "_OFF\t0x%X\n", offsetof (ucontext_t, X))
8ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
9ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define SC(N,X) \
10ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  printf ("#define LINUX_SC_" N "_OFF\t0x%X\n", offsetof (struct sigcontext, X))
11ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
12ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxint
13ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxmain (void)
14ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux{
15ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  printf (
16ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux"/* Linux-specific definitions: */\n\n"
17ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
18ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux"/* Define various structure offsets to simplify cross-compilation.  */\n\n"
19ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
20ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux"/* Offsets for AArch64 Linux \"ucontext_t\":  */\n\n");
21ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
22ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  UC ("FLAGS", uc_flags);
23ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  UC ("LINK", uc_link);
24ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  UC ("STACK", uc_stack);
25ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  UC ("MCONTEXT", uc_mcontext);
26ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  UC ("SIGMASK", uc_sigmask);
27ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
28ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  printf ("\n/* Offsets for AArch64 Linux \"struct sigcontext\":  */\n\n");
29ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
30ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R0",  regs[0]);
31ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R1",  regs[1]);
32ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R2",  regs[2]);
33ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R3",  regs[3]);
34ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R4",  regs[4]);
35ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R5",  regs[5]);
36ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R6",  regs[6]);
37ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R7",  regs[7]);
38ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R8",  regs[8]);
39ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R9",  regs[9]);
40ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R10", regs[10]);
41ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R11", regs[11]);
42ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R12", regs[12]);
43ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R13", regs[13]);
44ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R14", regs[14]);
45ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R15", regs[15]);
46ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R16", regs[16]);
47ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R17", regs[17]);
48ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R18", regs[18]);
49ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R19", regs[19]);
50ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R20", regs[20]);
51ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R21", regs[21]);
52ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R22", regs[22]);
53ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R23", regs[23]);
54ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R24", regs[24]);
55ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R25", regs[25]);
56ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R26", regs[26]);
57ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R27", regs[27]);
58ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R28", regs[28]);
59ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R29", regs[29]);
60ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R30", regs[30]);
61ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("R31", regs[31]);
62ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
63ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("PC", pc);
64ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("SP", sp);
65ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("Fault", fault_address);
66ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  SC ("state", pstate);
67ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  return 0;
68ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux}
69