Author: sginsberg Date: Mon Oct 12 17:11:56 2015 New Revision: 69515
URL: http://svn.reactos.org/svn/reactos?rev=69515&view=rev Log: [RTL] Merge DbgBreakPointWithStatus and RtlpBreakWithStatusInstruction together as one function (the latter is just a label for KD), and add new macro necessary for this (MASM very much wants "::" on a global label inside a PROC local scope). Timo, you are awesome.
Bonus: Complement HEX()'s awesomeness with the other explicit radix specifiers.
Modified: trunk/reactos/include/asm/asm.inc trunk/reactos/lib/rtl/i386/debug_asm.S
Modified: trunk/reactos/include/asm/asm.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/asm/asm.inc?rev=695... ============================================================================== --- trunk/reactos/include/asm/asm.inc [iso-8859-1] (original) +++ trunk/reactos/include/asm/asm.inc [iso-8859-1] Mon Oct 12 17:11:56 2015 @@ -21,10 +21,13 @@ ASSUME CS:NOTHING, DS:NOTHING, ES:NOTHING, FS:NOTHING, GS:NOTHING #endif
-/* Hex numbers need to be in 01ABh format */ +/* Explicit radix in MASM syntax */ +#define BIN(x) x##y +#define OCT(x) x##q +#define DEC(x) x##t #define HEX(x) 0##x##h
-/* Macro values need to be marked */ +/* Macro values need not be marked */ #define VAL(x) x
/* MASM/ML doesn't want explicit [rip] addressing */ @@ -49,6 +52,11 @@ %__current_function_name ENDP ENDM #define ENDFUNC .ENDP + +/* Global labels need an extra colon */ +GLOBAL_LABEL MACRO label + %label:: +ENDM
/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */ @@ -193,8 +201,11 @@
.altmacro
-/* Hex numbers need to be in 0x1AB format */ -#define HEX(y) 0x##y +/* Explicit radix in GAS syntax */ +#define BIN(x) 0b##x +#define OCT(x) 0##x +#define DEC(x) x +#define HEX(x) 0x##x
/* Macro values need to be marked */ #define VAL(x) \x @@ -226,6 +237,11 @@ /* MASM compatible PUBLIC */ .macro PUBLIC symbol .global \symbol +.endm + +/* No special marking of global labels */ +.macro GLOBAL_LABEL label + \label: .endm
/* Dummy ASSUME */
Modified: trunk/reactos/lib/rtl/i386/debug_asm.S URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/debug_asm.S?re... ============================================================================== --- trunk/reactos/lib/rtl/i386/debug_asm.S [iso-8859-1] (original) +++ trunk/reactos/lib/rtl/i386/debug_asm.S [iso-8859-1] Mon Oct 12 17:11:56 2015 @@ -8,48 +8,62 @@
#include <asm.inc>
-/* GLOBALS ****************************************************************/ - -PUBLIC _DbgBreakPoint@0 -PUBLIC _DbgBreakPointWithStatus@4 -PUBLIC _DbgUserBreakPoint@0 -PUBLIC _DebugService@20 -PUBLIC _DebugService2@12 -PUBLIC _DbgBreakPointNoBugCheck@0 -PUBLIC _RtlpBreakWithStatusInstruction@0 - /* FUNCTIONS ***************************************************************/
.code
+PUBLIC _DbgBreakPointNoBugCheck@0 FUNC _DbgBreakPointNoBugCheck@0 FPO 0, 0, 0, 0, 0, FRAME_FPO + + /* Do breakpoint */ int 3 ret + ENDFUNC
+ +PUBLIC _DbgUserBreakPoint@0 _DbgUserBreakPoint@0: +PUBLIC _DbgBreakPoint@0 FUNC _DbgBreakPoint@0 FPO 0, 0, 0, 0, 0, FRAME_FPO + + /* Do breakpoint */ int 3 ret + ENDFUNC
+ +PUBLIC _DbgBreakPointWithStatus@4 FUNC _DbgBreakPointWithStatus@4 FPO 0, 1, 0, 0, 0, FRAME_FPO + + /* Put Status in EAX */ mov eax, [esp+4] + +PUBLIC _RtlpBreakWithStatusInstruction@0 +GLOBAL_LABEL _RtlpBreakWithStatusInstruction@0 + + /* + * Do a "labeled" breakpoint -- the KD data block has a "BreakpointWithStatus" field + * pointing to this label, letting a debugger easily check that a breakpoint has occured here + * and thereby know that there is a Status for it to retrieve from EAX + * + * In other words, Status is passed as an argument directly to the debugger + */ + int 3 + ret 4 + ENDFUNC
-FUNC _RtlpBreakWithStatusInstruction@0 - FPO 0, 0, 0, 0, 0, FRAME_FPO - int 3 - ret 4 -ENDFUNC
+PUBLIC _DebugService2@12 FUNC _DebugService2@12 FPO 0, 3, 3, 0, 1, FRAME_NONFPO
- /* Setup the stack */ + /* Set up the stack */ push ebp mov ebp, esp
@@ -60,19 +74,22 @@ int HEX(2D) int 3
- /* Restore stack */ + /* Return */ pop ebp ret 12 + ENDFUNC
+ +PUBLIC _DebugService@20 FUNC _DebugService@20 FPO 0, 5, 3, 0, 1, FRAME_NONFPO
- /* Setup the stack */ + /* Set up the stack */ push ebp mov ebp, esp
- /* Save the registers */ + /* Save non-volatiles */ push ebx push edi
@@ -85,13 +102,14 @@ int HEX(2D) int 3
- /* Restore registers */ + /* Restore non-volatiles */ pop edi pop ebx
/* Return */ pop ebp ret 20 + ENDFUNC
END