mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-28 20:44:26 +01:00
x86 asm: align stack to 16-bits for abort() call
Fixes the failing tests that called abort(). For coincidence, only native tests were failing. Asked at: https://stackoverflow.com/questions/56324948/why-does-calling-the-c-abort-function-from-an-x86-64-assembly-function-lead-to
This commit is contained in:
@@ -11998,6 +11998,8 @@ Examples:
|
|||||||
|
|
||||||
* link:lkmc/x86_64.h[] `ENTRY` and `EXIT`
|
* link:lkmc/x86_64.h[] `ENTRY` and `EXIT`
|
||||||
|
|
||||||
|
One important catch is that the stack must always be aligned to 16-bits before making calls: https://stackoverflow.com/questions/56324948/why-does-calling-the-c-abort-function-from-an-x86-64-assembly-function-lead-to
|
||||||
|
|
||||||
Bibliography:
|
Bibliography:
|
||||||
|
|
||||||
* https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI
|
* https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI
|
||||||
@@ -13434,7 +13436,7 @@ output:
|
|||||||
|
|
||||||
....
|
....
|
||||||
CPSR.M 0x3
|
CPSR.M 0x3
|
||||||
CPSR.M 0x3
|
CPSR.M 0xA
|
||||||
CPSR.M 0x3
|
CPSR.M 0x3
|
||||||
CurrentEL.EL 0x1
|
CurrentEL.EL 0x1
|
||||||
CurrentEL.EL 0x2
|
CurrentEL.EL 0x2
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
* https://github.com/cirosantilli/linux-kernel-module-cheat#x86_64-calling-convention
|
* https://github.com/cirosantilli/linux-kernel-module-cheat#x86_64-calling-convention
|
||||||
*/
|
*/
|
||||||
#define LKMC_EPILOGUE \
|
#define LKMC_EPILOGUE \
|
||||||
|
add $8, %rsp; \
|
||||||
pop %rbx; \
|
pop %rbx; \
|
||||||
pop %r12; \
|
pop %r12; \
|
||||||
pop %r13; \
|
pop %r13; \
|
||||||
@@ -56,6 +57,7 @@ main: \
|
|||||||
push %r13; \
|
push %r13; \
|
||||||
push %r12; \
|
push %r12; \
|
||||||
push %rbx; \
|
push %rbx; \
|
||||||
|
sub $8, %rsp; \
|
||||||
main_after_prologue: \
|
main_after_prologue: \
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user