xref: /llvm-project/lldb/test/Shell/Register/Inputs/x86-64-gp-write.cpp (revision 87aa9c9e4d41ed881453e2fab85b3d25f648bb55)
1*87aa9c9eSJonas Devlieghere #include <cinttypes>
2*87aa9c9eSJonas Devlieghere #include <cstdint>
3*87aa9c9eSJonas Devlieghere #include <cstdio>
4*87aa9c9eSJonas Devlieghere 
main()5*87aa9c9eSJonas Devlieghere int main() {
6*87aa9c9eSJonas Devlieghere   constexpr uint64_t fill = 0x0F0F0F0F0F0F0F0F;
7*87aa9c9eSJonas Devlieghere 
8*87aa9c9eSJonas Devlieghere   uint64_t rax, rbx, rcx, rdx, rsp, rbp, rsi, rdi;
9*87aa9c9eSJonas Devlieghere 
10*87aa9c9eSJonas Devlieghere   asm volatile(
11*87aa9c9eSJonas Devlieghere     // save rsp & rbp
12*87aa9c9eSJonas Devlieghere     "movq    %%rsp, %4\n\t"
13*87aa9c9eSJonas Devlieghere     "movq    %%rbp, %5\n\t"
14*87aa9c9eSJonas Devlieghere     "\n\t"
15*87aa9c9eSJonas Devlieghere     "movq    %8, %%rax\n\t"
16*87aa9c9eSJonas Devlieghere     "movq    %8, %%rbx\n\t"
17*87aa9c9eSJonas Devlieghere     "movq    %8, %%rcx\n\t"
18*87aa9c9eSJonas Devlieghere     "movq    %8, %%rdx\n\t"
19*87aa9c9eSJonas Devlieghere     "movq    %8, %%rsp\n\t"
20*87aa9c9eSJonas Devlieghere     "movq    %8, %%rbp\n\t"
21*87aa9c9eSJonas Devlieghere     "movq    %8, %%rsi\n\t"
22*87aa9c9eSJonas Devlieghere     "movq    %8, %%rdi\n\t"
23*87aa9c9eSJonas Devlieghere     "\n\t"
24*87aa9c9eSJonas Devlieghere     "int3\n\t"
25*87aa9c9eSJonas Devlieghere     "\n\t"
26*87aa9c9eSJonas Devlieghere     // swap saved & current rsp & rbp
27*87aa9c9eSJonas Devlieghere     "xchgq    %%rsp, %4\n\t"
28*87aa9c9eSJonas Devlieghere     "xchgq    %%rbp, %5\n\t"
29*87aa9c9eSJonas Devlieghere     : "=a"(rax), "=b"(rbx), "=c"(rcx), "=d"(rdx), "=r"(rsp), "=r"(rbp),
30*87aa9c9eSJonas Devlieghere       "=S"(rsi), "=D"(rdi)
31*87aa9c9eSJonas Devlieghere     : "g"(fill)
32*87aa9c9eSJonas Devlieghere     :
33*87aa9c9eSJonas Devlieghere   );
34*87aa9c9eSJonas Devlieghere 
35*87aa9c9eSJonas Devlieghere   printf("rax = 0x%016" PRIx64 "\n", rax);
36*87aa9c9eSJonas Devlieghere   printf("rbx = 0x%016" PRIx64 "\n", rbx);
37*87aa9c9eSJonas Devlieghere   printf("rcx = 0x%016" PRIx64 "\n", rcx);
38*87aa9c9eSJonas Devlieghere   printf("rdx = 0x%016" PRIx64 "\n", rdx);
39*87aa9c9eSJonas Devlieghere   printf("rsp = 0x%016" PRIx64 "\n", rsp);
40*87aa9c9eSJonas Devlieghere   printf("rbp = 0x%016" PRIx64 "\n", rbp);
41*87aa9c9eSJonas Devlieghere   printf("rsi = 0x%016" PRIx64 "\n", rsi);
42*87aa9c9eSJonas Devlieghere   printf("rdi = 0x%016" PRIx64 "\n", rdi);
43*87aa9c9eSJonas Devlieghere 
44*87aa9c9eSJonas Devlieghere   return 0;
45*87aa9c9eSJonas Devlieghere }
46