mirror of
https://github.com/reactos/reactos.git
synced 2025-07-09 21:07:52 +00:00
[NTOSKRNL] Fix compilation of some ARM assembler files
[NTDLL] Add missing ASM stubs for ARM svn path=/trunk/; revision=67715
This commit is contained in:
parent
845ec2108d
commit
6212c824eb
4 changed files with 164 additions and 142 deletions
|
@ -1,16 +1,31 @@
|
||||||
#include "../../../../ntoskrnl/include/internal/arm/asmmacro.S"
|
|
||||||
|
|
||||||
//
|
#include <ksarm.h>
|
||||||
// Exceptions
|
|
||||||
//
|
TEXTAREA
|
||||||
GENERATE_ARM_STUB LdrInitializeThunk
|
|
||||||
GENERATE_ARM_STUB RtlGetCallersAddress
|
LEAF_ENTRY LdrInitializeThunk
|
||||||
GENERATE_ARM_STUB RtlUnwind
|
__assertfail
|
||||||
GENERATE_ARM_STUB RtlDispatchException
|
bx lr
|
||||||
GENERATE_ARM_STUB RtlpGetStackLimits
|
LEAF_END LdrInitializeThunk
|
||||||
GENERATE_ARM_STUB DbgUserBreakPoint
|
|
||||||
GENERATE_ARM_STUB KiFastSystemCall
|
LEAF_ENTRY KiRaiseUserExceptionDispatcher
|
||||||
GENERATE_ARM_STUB KiFastSystemCallRet
|
__assertfail
|
||||||
GENERATE_ARM_STUB KiIntSystemCall
|
bx lr
|
||||||
GENERATE_ARM_STUB KiUserApcDispatcher
|
LEAF_END KiRaiseUserExceptionDispatcher
|
||||||
GENERATE_ARM_STUB RtlInitializeContext
|
|
||||||
|
LEAF_ENTRY KiUserApcDispatcher
|
||||||
|
__assertfail
|
||||||
|
bx lr
|
||||||
|
LEAF_END KiUserApcDispatcher
|
||||||
|
|
||||||
|
LEAF_ENTRY KiUserCallbackDispatcher
|
||||||
|
__assertfail
|
||||||
|
bx lr
|
||||||
|
LEAF_END KiUserCallbackDispatcher
|
||||||
|
|
||||||
|
LEAF_ENTRY KiUserExceptionDispatcher
|
||||||
|
__assertfail
|
||||||
|
bx lr
|
||||||
|
LEAF_END KiUserExceptionDispatcher
|
||||||
|
|
||||||
|
END
|
||||||
|
|
|
@ -6,40 +6,47 @@
|
||||||
* PROGRAMMERS: ReactOS Portable Systems Group
|
* PROGRAMMERS: ReactOS Portable Systems Group
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.title "ARM Kernel Entry Point"
|
#include <ksarm.h>
|
||||||
.include "ntoskrnl/include/internal/arm/kxarm.h"
|
|
||||||
.include "ntoskrnl/include/internal/arm/ksarm.h"
|
|
||||||
|
|
||||||
TEXTAREA
|
TEXTAREA
|
||||||
|
|
||||||
|
IMPORT KiInitializeSystem
|
||||||
|
|
||||||
NESTED_ENTRY KiSystemStartup
|
NESTED_ENTRY KiSystemStartup
|
||||||
PROLOG_END KiSystemStartup
|
PROLOG_END KiSystemStartup
|
||||||
|
|
||||||
/* Put us in FIQ mode, set IRQ stack */
|
/* Put us in FIQ mode, set IRQ stack */
|
||||||
b .
|
b .
|
||||||
mrs r3, cpsr
|
mrs r3, cpsr
|
||||||
orr r3, r1, #CPSR_FIQ_MODE
|
orr r3, r1, #CPSRM_FIQ
|
||||||
msr cpsr, r3
|
//msr cpsr, r3
|
||||||
ldr sp, [a1, #LpbInterruptStack]
|
msr cpsr_fc, r3
|
||||||
|
ldr sp, [a1, #LpbKernelStack]
|
||||||
|
|
||||||
/* Repeat for IRQ mode */
|
/* Repeat for IRQ mode */
|
||||||
msr cpsr_c, #CPSR_IRQ_MODE
|
mov r3, #CPSRM_INT
|
||||||
ldr sp, [a1, #LpbInterruptStack]
|
msr cpsr_c, r3
|
||||||
|
ldr sp, [a1, #LpbKernelStack]
|
||||||
|
|
||||||
/* Put us in ABORT mode and set the panic stack */
|
/* Put us in ABORT mode and set the panic stack */
|
||||||
msr cpsr_c, #CPSR_ABORT_MODE
|
mov r3, #CPSRM_ABT
|
||||||
ldr sp, [a1, #LpbPanicStack]
|
msr cpsr_c, r3
|
||||||
|
ldr sp, [a1, #LpbKernelStack]
|
||||||
|
|
||||||
/* Repeat for UND (Undefined) mode */
|
/* Repeat for UDF (Undefined) mode */
|
||||||
msr cpsr_c, #CPSR_UND_MODE
|
mov r3, #CPSRM_UDF
|
||||||
ldr sp, [a1, #LpbPanicStack]
|
msr cpsr_c, r3
|
||||||
|
ldr sp, [a1, #LpbKernelStack]
|
||||||
|
|
||||||
/* Put us into SVC (Supervisor) mode and set the kernel stack */
|
/* Put us into SVC (Supervisor) mode and set the kernel stack */
|
||||||
msr cpsr_c, #CPSR_SVC_MODE
|
mov r3, #CPSRM_SVC
|
||||||
|
msr cpsr_c, r3
|
||||||
ldr sp, [a1, #LpbKernelStack]
|
ldr sp, [a1, #LpbKernelStack]
|
||||||
|
|
||||||
/* Go to C code */
|
/* Go to C code */
|
||||||
b KiInitializeSystem
|
b KiInitializeSystem
|
||||||
|
|
||||||
ENTRY_END KiSystemStartup
|
NESTED_END KiSystemStartup
|
||||||
|
|
||||||
|
END
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -1,38 +1,18 @@
|
||||||
#include <internal/arm/asmmacro.S>
|
|
||||||
|
|
||||||
//
|
#include <ksarm.h>
|
||||||
// Exceptions
|
|
||||||
//
|
|
||||||
GENERATE_ARM_STUB _abnormal_termination
|
|
||||||
GENERATE_ARM_STUB _except_handler2
|
|
||||||
GENERATE_ARM_STUB _except_handler3
|
|
||||||
GENERATE_ARM_STUB _global_unwind2
|
|
||||||
GENERATE_ARM_STUB _local_unwind2
|
|
||||||
GENERATE_ARM_STUB RtlGetCallersAddress
|
|
||||||
GENERATE_ARM_STUB RtlUnwind
|
|
||||||
GENERATE_ARM_STUB RtlDispatchException
|
|
||||||
GENERATE_ARM_STUB RtlpGetStackLimits
|
|
||||||
GENERATE_ARM_STUB DbgBreakPointWithStatus
|
|
||||||
GENERATE_ARM_STUB KeRaiseUserException
|
|
||||||
GENERATE_ARM_STUB KdpGdbStubInit
|
|
||||||
|
|
||||||
//
|
|
||||||
// Driver ISRs
|
|
||||||
//
|
|
||||||
GENERATE_ARM_STUB KeConnectInterrupt
|
|
||||||
GENERATE_ARM_STUB KeDisconnectInterrupt
|
|
||||||
GENERATE_ARM_STUB KiPassiveRelease
|
|
||||||
GENERATE_ARM_STUB KiInterruptTemplate
|
|
||||||
GENERATE_ARM_STUB KiUnexpectedInterrupt
|
|
||||||
GENERATE_ARM_STUB KeInitializeInterrupt
|
|
||||||
GENERATE_ARM_STUB KeSynchronizeExecution
|
|
||||||
|
|
||||||
//
|
TEXTAREA
|
||||||
// User Mode Support
|
|
||||||
//
|
LEAF_ENTRY KeSwitchKernelStack
|
||||||
GENERATE_ARM_STUB KeSwitchKernelStack
|
__assertfail
|
||||||
GENERATE_ARM_STUB RtlCreateUserThread
|
bx lr
|
||||||
GENERATE_ARM_STUB RtlInitializeContext
|
LEAF_END KeSwitchKernelStack
|
||||||
GENERATE_ARM_STUB KeUserModeCallback
|
|
||||||
GENERATE_ARM_STUB KiCallUserMode
|
LEAF_ENTRY KiPassiveRelease
|
||||||
GENERATE_ARM_STUB NtCallbackReturn
|
__assertfail
|
||||||
|
bx lr
|
||||||
|
LEAF_END KiPassiveRelease
|
||||||
|
|
||||||
|
END
|
||||||
|
/* EOF */
|
||||||
|
|
|
@ -6,12 +6,18 @@
|
||||||
* PROGRAMMERS: ReactOS Portable Systems Group
|
* PROGRAMMERS: ReactOS Portable Systems Group
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.title "ARM Trap Dispatching and Handling"
|
#include <ksarm.h>
|
||||||
#include "ntoskrnl/include/internal/arm/kxarm.h"
|
|
||||||
.include "ntoskrnl/include/internal/arm/ksarm.h"
|
|
||||||
|
|
||||||
.global KiArmVectorTable
|
IMPORT KiUndefinedExceptionHandler
|
||||||
KiArmVectorTable:
|
IMPORT KiSoftwareInterruptHandler
|
||||||
|
IMPORT KiPrefetchAbortHandler
|
||||||
|
IMPORT KiDataAbortHandler
|
||||||
|
IMPORT KiInterruptHandler
|
||||||
|
|
||||||
|
TEXTAREA
|
||||||
|
|
||||||
|
EXPORT KiArmVectorTable
|
||||||
|
KiArmVectorTable
|
||||||
b . // Reset
|
b . // Reset
|
||||||
ldr pc, _KiUndefinedInstructionJump // Undefined Instruction
|
ldr pc, _KiUndefinedInstructionJump // Undefined Instruction
|
||||||
ldr pc, _KiSoftwareInterruptJump // Software Interrupt
|
ldr pc, _KiSoftwareInterruptJump // Software Interrupt
|
||||||
|
@ -21,116 +27,130 @@
|
||||||
ldr pc, _KiInterruptJump // Interrupt
|
ldr pc, _KiInterruptJump // Interrupt
|
||||||
ldr pc, _KiFastInterruptJump // Fast Interrupt
|
ldr pc, _KiFastInterruptJump // Fast Interrupt
|
||||||
|
|
||||||
_KiUndefinedInstructionJump: .word KiUndefinedInstructionException
|
_KiUndefinedInstructionJump DCD KiUndefinedInstructionException
|
||||||
_KiSoftwareInterruptJump: .word KiSoftwareInterruptException
|
_KiSoftwareInterruptJump DCD KiSoftwareInterruptException
|
||||||
_KiPrefetchAbortJump: .word KiPrefetchAbortException
|
_KiPrefetchAbortJump DCD KiPrefetchAbortException
|
||||||
_KiDataAbortJump: .word KiDataAbortException
|
_KiDataAbortJump DCD KiDataAbortException
|
||||||
_KiInterruptJump: .word KiInterruptException
|
_KiInterruptJump DCD KiInterruptException
|
||||||
_KiFastInterruptJump: .word KiFastInterruptException
|
_KiFastInterruptJump DCD KiFastInterruptException
|
||||||
|
|
||||||
|
// Might need to move these to a custom header, when used by HAL as well
|
||||||
|
|
||||||
|
MACRO
|
||||||
|
TRAP_PROLOG $Abort
|
||||||
|
__debugbreak
|
||||||
|
MEND
|
||||||
|
|
||||||
|
MACRO
|
||||||
|
SYSCALL_PROLOG $Abort
|
||||||
|
__debugbreak
|
||||||
|
MEND
|
||||||
|
|
||||||
|
MACRO
|
||||||
|
TRAP_EPILOG $SystemCall
|
||||||
|
__debugbreak
|
||||||
|
MEND
|
||||||
|
|
||||||
TEXTAREA
|
|
||||||
NESTED_ENTRY KiUndefinedInstructionException
|
NESTED_ENTRY KiUndefinedInstructionException
|
||||||
PROLOG_END KiUndefinedInstructionException
|
PROLOG_END KiUndefinedInstructionException
|
||||||
//
|
|
||||||
// Handle trap entry
|
/* Handle trap entry */
|
||||||
//
|
|
||||||
TRAP_PROLOG 0 // NotFromAbort
|
TRAP_PROLOG 0 // NotFromAbort
|
||||||
|
|
||||||
//
|
/* Call the C handler */
|
||||||
// Call the C handler
|
|
||||||
//
|
|
||||||
ldr lr, =KiExceptionExit
|
ldr lr, =KiExceptionExit
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
ldr pc, =KiUndefinedExceptionHandler
|
ldr pc, =KiUndefinedExceptionHandler
|
||||||
ENTRY_END KiUndefinedInstructionException
|
|
||||||
|
NESTED_END KiUndefinedInstructionException
|
||||||
|
|
||||||
|
|
||||||
NESTED_ENTRY KiSoftwareInterruptException
|
NESTED_ENTRY KiSoftwareInterruptException
|
||||||
PROLOG_END KiSoftwareInterruptException
|
PROLOG_END KiSoftwareInterruptException
|
||||||
//
|
|
||||||
// Handle trap entry
|
/* Handle trap entry */
|
||||||
//
|
|
||||||
SYSCALL_PROLOG
|
SYSCALL_PROLOG
|
||||||
|
|
||||||
//
|
/* Call the C handler */
|
||||||
// Call the C handler
|
|
||||||
//
|
|
||||||
ldr lr, =KiServiceExit
|
ldr lr, =KiServiceExit
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
ldr pc, =KiSoftwareInterruptHandler
|
ldr pc, =KiSoftwareInterruptHandler
|
||||||
ENTRY_END KiSoftwareInterruptException
|
|
||||||
|
NESTED_END KiSoftwareInterruptException
|
||||||
|
|
||||||
|
|
||||||
NESTED_ENTRY KiPrefetchAbortException
|
NESTED_ENTRY KiPrefetchAbortException
|
||||||
PROLOG_END KiPrefetchAbortException
|
PROLOG_END KiPrefetchAbortException
|
||||||
//
|
|
||||||
// Handle trap entry
|
/* Handle trap entry */
|
||||||
//
|
|
||||||
TRAP_PROLOG 0 // NotFromAbort
|
TRAP_PROLOG 0 // NotFromAbort
|
||||||
|
|
||||||
//
|
/* Call the C handler */
|
||||||
// Call the C handler
|
|
||||||
//
|
|
||||||
ldr lr, =KiExceptionExit
|
ldr lr, =KiExceptionExit
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
ldr pc, =KiPrefetchAbortHandler
|
ldr pc, =KiPrefetchAbortHandler
|
||||||
ENTRY_END KiPrefetchAbortException
|
|
||||||
|
NESTED_END KiPrefetchAbortException
|
||||||
|
|
||||||
|
|
||||||
NESTED_ENTRY KiDataAbortException
|
NESTED_ENTRY KiDataAbortException
|
||||||
PROLOG_END KiDataAbortException
|
PROLOG_END KiDataAbortException
|
||||||
//
|
|
||||||
// Handle trap entry
|
/* Handle trap entry */
|
||||||
//
|
|
||||||
TRAP_PROLOG 1 // FromAbort
|
TRAP_PROLOG 1 // FromAbort
|
||||||
|
|
||||||
//
|
/* Call the C handler */
|
||||||
// Call the C handler
|
|
||||||
//
|
|
||||||
ldr lr, =KiExceptionExit
|
ldr lr, =KiExceptionExit
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
ldr pc, =KiDataAbortHandler
|
ldr pc, =KiDataAbortHandler
|
||||||
ENTRY_END KiDataAbortException
|
|
||||||
|
NESTED_END KiDataAbortException
|
||||||
|
|
||||||
|
|
||||||
NESTED_ENTRY KiInterruptException
|
NESTED_ENTRY KiInterruptException
|
||||||
PROLOG_END KiInterruptException
|
PROLOG_END KiInterruptException
|
||||||
//
|
|
||||||
// Handle trap entry
|
/* Handle trap entry */
|
||||||
//
|
|
||||||
TRAP_PROLOG 0 // NotFromAbort
|
TRAP_PROLOG 0 // NotFromAbort
|
||||||
|
|
||||||
//
|
/* Call the C handler */
|
||||||
// Call the C handler
|
|
||||||
//
|
|
||||||
ldr lr, =KiExceptionExit
|
ldr lr, =KiExceptionExit
|
||||||
mov r0, sp
|
mov r0, sp
|
||||||
mov r1, #0
|
mov r1, #0
|
||||||
ldr pc, =KiInterruptHandler
|
ldr pc, =KiInterruptHandler
|
||||||
ENTRY_END KiInterruptException
|
|
||||||
|
NESTED_END KiInterruptException
|
||||||
|
|
||||||
|
|
||||||
NESTED_ENTRY KiFastInterruptException
|
NESTED_ENTRY KiFastInterruptException
|
||||||
PROLOG_END KiFastInterruptException
|
PROLOG_END KiFastInterruptException
|
||||||
//
|
|
||||||
// FIXME-PERF: Implement FIQ exception
|
// FIXME-PERF: Implement FIQ exception
|
||||||
//
|
__debugbreak
|
||||||
b .
|
|
||||||
ENTRY_END KiFastInterruptException
|
NESTED_END KiFastInterruptException
|
||||||
|
|
||||||
|
|
||||||
NESTED_ENTRY KiExceptionExit
|
NESTED_ENTRY KiExceptionExit
|
||||||
PROLOG_END KiExceptionExit
|
PROLOG_END KiExceptionExit
|
||||||
//
|
|
||||||
// Handle trap exit
|
/* Handle trap exit */
|
||||||
//
|
|
||||||
TRAP_EPILOG 0 // NotFromSystemCall
|
TRAP_EPILOG 0 // NotFromSystemCall
|
||||||
ENTRY_END KiExceptionExit
|
|
||||||
|
NESTED_END KiExceptionExit
|
||||||
|
|
||||||
NESTED_ENTRY KiServiceExit
|
NESTED_ENTRY KiServiceExit
|
||||||
PROLOG_END KiServiceExit
|
PROLOG_END KiServiceExit
|
||||||
//
|
|
||||||
// Handle trap exit
|
/* Handle trap exit */
|
||||||
//
|
|
||||||
TRAP_EPILOG 1 // FromSystemCall
|
TRAP_EPILOG 1 // FromSystemCall
|
||||||
ENTRY_END KiServiceExit
|
|
||||||
|
NESTED_END KiServiceExit
|
||||||
|
|
||||||
|
|
||||||
|
LEAF_ENTRY KiInterruptTemplate
|
||||||
|
DCD 0
|
||||||
|
LEAF_END KiInterruptTemplate
|
||||||
|
|
||||||
|
END
|
||||||
|
/* EOF */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue