#define ENABLE_FRAME_POINTER 1 #undef TRUE //#define TRUE 1 #undef FALSE //#define FALSE 0 //#include "kxarmunw.h" #ifdef _MSC_VER /* Globals */ GBLS __FuncStartLabel GBLS __FuncEpilog1StartLabel GBLS __FuncEpilog2StartLabel GBLS __FuncEpilog3StartLabel GBLS __FuncEpilog4StartLabel GBLS __FuncXDataLabel GBLS __FuncXDataPrologLabel GBLS __FuncXDataEpilog1Label GBLS __FuncXDataEpilog2Label GBLS __FuncXDataEpilog3Label GBLS __FuncXDataEpilog4Label GBLS __FuncXDataEndLabel GBLS __FuncEndLabel GBLS __FuncArea GBLS __FuncExceptionHandler MACRO __DeriveFunctionLabels $FuncName __FuncStartLabel SETS "|$FuncName|" __FuncEndLabel SETS "|$FuncName._end|" __FuncEpilog1StartLabel SETS "|$FuncName._epilog1_start|" __FuncEpilog2StartLabel SETS "|$FuncName._epilog2_start|" __FuncEpilog3StartLabel SETS "|$FuncName._epilog3_start|" __FuncEpilog4StartLabel SETS "|$FuncName._epilog4_start|" __FuncXDataLabel SETS "|$FuncName._xdata|" __FuncXDataPrologLabel SETS "|$FuncName._xdata_prolog|" __FuncXDataEpilog1Label SETS "|$FuncName._xdata_epilog1|" __FuncXDataEpilog2Label SETS "|$FuncName._xdata_epilog2|" __FuncXDataEpilog3Label SETS "|$FuncName._xdata_epilog3|" __FuncXDataEpilog4Label SETS "|$FuncName._xdata_epilog4|" __FuncXDataEndLabel SETS "|$FuncName._xdata_end|" MEND MACRO __ExportName $FuncName LCLS Name Name SETS "|$FuncName|" ALIGN 4 EXPORT $Name $Name MEND MACRO __ExportProc $FuncName LCLS Name Name SETS "|$FuncName|" ALIGN 4 EXPORT $Name $Name PROC MEND MACRO TEXTAREA #if defined(_CONTROL_FLOW_GUARD) AREA |.text|,ALIGN=4,CODE,READONLY #else AREA |.text|,ALIGN=2,CODE,READONLY #endif MEND MACRO DATAAREA AREA |.data|,DATA MEND MACRO RODATAAREA AREA |.rdata|,DATA,READONLY MEND MACRO NESTED_ENTRY $FuncName, $AreaName, $ExceptHandler __DeriveFunctionLabels $FuncName __FuncArea SETS "|.text|" IF "$AreaName" != "" __FuncArea SETS "$AreaName" ENDIF __FuncExceptionHandler SETS "" IF "$ExceptHandler" != "" __FuncExceptionHandler SETS "|$ExceptHandler|" ENDIF AREA $__FuncArea,CODE,READONLY __ExportProc $FuncName ROUT // __ResetUnwindState MEND // FIXME: this does not exist in native MACRO PROLOG_END /* Ignore for now */ MEND MACRO NESTED_END $FuncName $__FuncEndLabel LTORG ENDP //AREA |.pdata|,ALIGN=2,READONLY //DCD $__FuncStartLabel //RELOC 2 //DCD $__FuncXDataLabel //RELOC 2 //__EmitUnwindXData //AREA $__FuncArea,CODE,READONLY __FuncStartLabel SETS "" __FuncEndLabel SETS "" MEND MACRO LEAF_ENTRY $FuncName, $AreaName NESTED_ENTRY $FuncName, $AreaName MEND MACRO LEAF_END $FuncName NESTED_END $FuncName MEND MACRO LEAF_ENTRY_NO_PDATA $FuncName, $AreaName __DeriveFunctionLabels $FuncName __FuncArea SETS "|.text|" IF "$AreaName" != "" __FuncArea SETS "$AreaName" ENDIF AREA $__FuncArea,CODE,READONLY __ExportProc $FuncName ROUT MEND MACRO LEAF_END_NO_PDATA $FuncName $__FuncEndLabel LTORG ENDP __FuncStartLabel SETS "" __FuncEndLabel SETS "" MEND MACRO ALTERNATE_ENTRY $FuncName __ExportName $FuncName ROUT MEND #define CR 13 #define LF 10 #define NUL 0 #define ASCII dcb MACRO UNIMPLEMENTED $Name MEND #else /* Compatibility define */ #define EQU .equ .macro IMPORT Name /* Ignore */ .endm .macro EXPORT Name .global &Name .endm .macro TEXTAREA .section .text, "rx" #if defined(_CONTROL_FLOW_GUARD) .align 4 #else .align 2 #endif .endm .macro DATAAREA .section .data, "rw" .endm .macro RODATAAREA .section .rdata, "rw" .endm .macro NESTED_ENTRY Name FuncName .equ &Name PrologName .equ &Name&_Prolog FuncEndName .equ &Name&_end .global &FuncName .align 2 .func &FuncName &FuncName: .endm // FIXME: should go to kxarmunw.h .macro PROLOG_END \PrologName: .endm .macro NESTED_END Name &FuncEndName: .endfunc .endm .macro LEAF_ENTRY $FuncName, $AreaName NESTED_ENTRY $FuncName, $AreaName .endm .macro LEAF_END $FuncName NESTED_END $FuncName .endm /* Some "intrinsics", see http://codemachine.com/article_armasm.html */ .macro __debugbreak DCD 0xDEFE .endm .macro __assertfail DCD 0xDEFC .endm .macro __fastfail DCD 0xDEFB .endm .macro __rdpmccntr64 DCD 0xDEFA .endm .macro __debugservice DCD 0xDEFD .endm .macro __brkdiv0 DCD 0xDEF9 .endm #endif