Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenkxarm.h
Go to the documentation of this file.
00001 00002 .macro TEXTAREA 00003 .section .text, "rx" 00004 .align 2 00005 .endm 00006 00007 .macro NESTED_ENTRY Name 00008 .global &Name 00009 .align 2 00010 .func &Name 00011 &Name: 00012 .endm 00013 00014 .macro PROLOG_END Name 00015 prolog_&Name: 00016 .endm 00017 00018 .macro ENTRY_END Name 00019 end_&Name: 00020 .endfunc 00021 .endm 00022 00023 .macro TRAP_PROLOG Abort 00024 // 00025 // Fixup lr 00026 // 00027 .if \Abort 00028 sub lr, lr, #8 00029 .else 00030 sub lr, lr, #4 00031 .endif 00032 00033 // 00034 // Save the bottom 4 registers 00035 // 00036 stmdb sp, {r0-r3} 00037 00038 // 00039 // Save the abort lr, sp, spsr, cpsr 00040 // 00041 mov r0, lr 00042 mov r1, sp 00043 mrs r2, cpsr 00044 mrs r3, spsr 00045 00046 // 00047 // Switch to SVC mode 00048 // 00049 bic r2, r2, #CPSR_MODES 00050 orr r2, r2, #CPSR_SVC_MODE 00051 msr cpsr_c, r2 00052 00053 // 00054 // Save the SVC sp before we modify it 00055 // 00056 mov r2, sp 00057 00058 // 00059 // Make space for the trap frame 00060 // 00061 sub sp, sp, #TrapFrameLength 00062 00063 // 00064 // Save abt32 state 00065 // 00066 str r0, [sp, #TrPc] 00067 str lr, [sp, #TrSvcLr] 00068 str r2, [sp, #TrSvcSp] 00069 00070 // 00071 // Restore the saved SPSR 00072 // 00073 msr spsr_all, r3 00074 00075 // 00076 // Restore our 4 registers 00077 // 00078 ldmdb r1, {r0-r3} 00079 00080 // 00081 // Build trap frame 00082 // FIXME: Change to stmdb later 00083 // 00084 str r0, [sp, #TrR0] 00085 str r1, [sp, #TrR1] 00086 str r2, [sp, #TrR2] 00087 str r3, [sp, #TrR3] 00088 str r4, [sp, #TrR4] 00089 str r5, [sp, #TrR5] 00090 str r6, [sp, #TrR6] 00091 str r7, [sp, #TrR7] 00092 str r8, [sp, #TrR8] 00093 str r9, [sp, #TrR9] 00094 str r10, [sp, #TrR10] 00095 str r11, [sp, #TrR11] 00096 str r12, [sp, #TrR12] 00097 mov r12, sp 00098 add r12, r12, #TrUserSp 00099 stm r12, {sp, lr}^ 00100 mrs r0, spsr_all 00101 str r0, [sp, #TrSpsr] 00102 ldr r0, =0xBADB0D00 00103 str r0, [sp, #TrDbgArgMark] 00104 .endm 00105 00106 .macro SYSCALL_PROLOG 00107 // 00108 // Make space for the trap frame 00109 // 00110 sub sp, sp, #TrapFrameLength 00111 00112 // 00113 // Build trap frame 00114 // FIXME: Change to stmdb later 00115 // 00116 str r0, [sp, #TrR0] 00117 str r1, [sp, #TrR1] 00118 str r2, [sp, #TrR2] 00119 str r3, [sp, #TrR3] 00120 str r4, [sp, #TrR4] 00121 str r5, [sp, #TrR5] 00122 str r6, [sp, #TrR6] 00123 str r7, [sp, #TrR7] 00124 str r8, [sp, #TrR8] 00125 str r9, [sp, #TrR9] 00126 str r10, [sp, #TrR10] 00127 str r11, [sp, #TrR11] 00128 str r12, [sp, #TrR12] 00129 mov r12, sp 00130 add r12, r12, #TrUserSp 00131 stm r12, {sp, lr}^ 00132 str sp, [sp, #TrSvcSp] 00133 str lr, [sp, #TrPc] 00134 mrs r0, spsr_all 00135 str r0, [sp, #TrSpsr] 00136 ldr r0, =0xBADB0D00 00137 str r0, [sp, #TrDbgArgMark] 00138 .endm 00139 00140 .macro TRAP_EPILOG SystemCall 00141 // 00142 // ASSERT(TrapFrame->DbgArgMark == 0xBADB0D00) 00143 // 00144 ldr r0, [sp, #TrDbgArgMark] 00145 ldr r1, =0xBADB0D00 00146 cmp r0, r1 00147 bne 1f 00148 00149 // 00150 // Get the SPSR and restore it 00151 // 00152 ldr r0, [sp, #TrSpsr] 00153 msr spsr_all, r0 00154 00155 // 00156 // Restore the registers 00157 // FIXME: Use LDMIA later 00158 // 00159 mov r0, sp 00160 add r0, r0, #TrUserSp 00161 ldm r0, {sp, lr}^ 00162 ldr r0, [sp, #TrR0] 00163 ldr r1, [sp, #TrR1] 00164 ldr r2, [sp, #TrR2] 00165 ldr r3, [sp, #TrR3] 00166 ldr r4, [sp, #TrR4] 00167 ldr r5, [sp, #TrR5] 00168 ldr r6, [sp, #TrR6] 00169 ldr r7, [sp, #TrR7] 00170 ldr r8, [sp, #TrR8] 00171 ldr r9, [sp, #TrR9] 00172 ldr r10, [sp, #TrR10] 00173 ldr r11, [sp, #TrR11] 00174 ldr r12, [sp, #TrR12] 00175 00176 // 00177 // Restore program execution state 00178 // 00179 .if \SystemCall 00180 ldr lr, [sp, #TrPc] 00181 add sp, sp, #TrapFrameLength 00182 movs pc, lr 00183 .else 00184 add sp, sp, #TrSvcSp 00185 ldmia sp, {sp, lr, pc}^ 00186 .endif 00187 1: 00188 b . 00189 .endm Generated on Fri May 25 2012 04:35:35 for ReactOS by
1.7.6.1
|