mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 02:05:57 +01:00
What was missing previously was implementing abort in baremetal. I had done that previously and forgotten to do this conversion!
37 lines
761 B
ArmAsm
37 lines
761 B
ArmAsm
#include <lkmc.h>
|
|
|
|
.global mystart
|
|
mystart:
|
|
/* = NEON setup */
|
|
mov x1, #(0x3 << 20)
|
|
msr cpacr_el1, x1
|
|
isb
|
|
|
|
/* Load the vector table. */
|
|
ldr x0, =lkmc_vector_table
|
|
msr vbar_el1, x0
|
|
|
|
/* Prepare the stack for main, mandatory for C code. */
|
|
ldr x0, =stack_top
|
|
mov sp, x0
|
|
|
|
/* https://github.com/cirosantilli/linux-kernel-module-cheat#magic-failure-string */
|
|
adr x0, lkmc_baremetal_on_exit_callback
|
|
bl on_exit
|
|
|
|
/* Run main. */
|
|
bl main
|
|
|
|
/* If main returns, exit. */
|
|
bl exit
|
|
|
|
LKMC_VECTOR_TABLE
|
|
|
|
/* Default trap handler. */
|
|
LKMC_WEAK(lkmc_vector_trap_handler)
|
|
ldr x0, =lkmc_vector_trap_handler_error
|
|
bl puts
|
|
bl abort
|
|
lkmc_vector_trap_handler_error:
|
|
.asciz "error: unexpected interrupt"
|