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=69…
==============================================================================
--- 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?r…
==============================================================================
--- 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