ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

kxarm.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.