[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:
Timo Kreuzer 2015-05-14 14:50:07 +00:00
parent 845ec2108d
commit 6212c824eb
4 changed files with 164 additions and 142 deletions

View file

@ -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

View file

@ -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 */

View file

@ -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 */

View file

@ -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 */