While investigating a crash, I came across the following code snippet and immediately recognized that the mov
instruction should actually be movq
to get the correct 64-bit register operation.
#elif defined(__x86_64__)
unsigned long rbp;
__asm__ volatile ("mov %%rbp, %0" : "=r" (rbp));
sp = (void **) rbp;
#else
Further to this, I also found documentation that claims that the rbp
register for x86-64 is general purpose and does not contain the address of the current frame. I have also found documentation that claims that rbp
does contain the address of the current frame. Can someone clarify?