about summary refs log tree commit diff stats
path: root/dwm.h
diff options
context:
space:
mode:
authorAnselm R. Garbe <arg@suckless.org>2007-02-19 11:22:47 +0100
committerAnselm R. Garbe <arg@suckless.org>2007-02-19 11:22:47 +0100
commitb61f91361c81b3c619ef6dac6e80e19a64d5fcf3 (patch)
tree0fa8dd118222e761ce837999e1d558e06aef826f /dwm.h
parent3167373512c562f8f040203d2ee29084c76d00a0 (diff)
downloaddwm-b61f91361c81b3c619ef6dac6e80e19a64d5fcf3.tar.gz
fixed configurerequest according to Jukkas complains
Diffstat (limited to 'dwm.h')
0 files changed, 0 insertions, 0 deletions
m <vc@akkartik.com> 2021-04-22 07:57:10 -0700 .' href='/akkartik/mu/commit/315stack-debug.subx?h=hlt&id=8bbf7ad4552856cfe27e41b55ab50663dd6365ec'>8bbf7ad4 ^
7b2d39b8 ^




8bbf7ad4 ^





7b2d39b8 ^

8bbf7ad4 ^


7b2d39b8 ^




4e70cac9 ^



































7b2d39b8 ^


8bbf7ad4 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123











                                              
                                       




























                                                                                         
                      







                         







                                                                                                       


                      




                                                                                                         





                                                                       

                 


                         




                        



































                                                     


                   
                 
# The stack shouldn't grow into the code area.

== code

check-stack:
    # . prologue
    55/push-ebp
    89/<- %ebp 4/r32/esp
    # . save registers
    50/push-eax
    #
    89/<- %eax 4/r32/esp
    3d/compare-eax-and 0x01000000/imm32
    {
      7f/jump-if-> break/disp8
      (abort "stack overflow")
    }
$check-stack:end:
    # . restore registers
    58/pop-to-eax
    # . epilogue
    89/<- %esp 5/r32/ebp
    5d/pop-to-ebp
    c3/return

show-stack-state:
    # . prologue
    55/push-ebp
    89/<- %ebp 4/r32/esp
    # . save registers
    50/push-eax
    51/push-ecx
    52/push-edx
    #
    89/<- %edx 4/r32/esp
    # save old cursor position
    (cursor-position 0)  # => eax, ecx
    # print at top-right
    (set-cursor-position 0 0x70 0)
    (draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0 %edx 0xf 0xc)
    # restore cursor position
    (set-cursor-position %eax %ecx)
$show-stack-state:end:
    # . restore registers
    5a/pop-to-edx
    59/pop-to-ecx
    58/pop-to-eax
    # . epilogue
    89/<- %esp 5/r32/ebp
    5d/pop-to-ebp
    c3/return

# Helper for debugging deeply recursive calls without logs or traces.
# Turn it on, insert calls in the right places, and you get a terse sense of
# important parts of the call stack. A poor sophont's stack trace.
debug-print:  # x: (addr array byte), fg: int, bg: int    # x is very short; usually a single character
    # . prologue
    55/push-ebp
    89/<- %ebp 4/r32/esp
    # . save registers
    50/push-eax
    51/push-ecx
    #
    {
      81 7/subop/compare *Really-debug-print 0/imm32/false
      74/jump-if-= break/disp8
      (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 *(ebp+8) *(ebp+0xc) *(ebp+0x10))
      # clear the screen and continue if we got too close to the bottom
      (cursor-position 0)  # => eax, ecx
      81 7/subop/compare %ecx 0x28/imm32
      75/jump-if-!= break/disp8
      (clear-screen 0)
      (set-cursor-position 0 0 0)
    }
$debug-print:end:
    # . restore registers
    59/pop-to-ecx
    58/pop-to-eax
    # . epilogue
    89/<- %esp 5/r32/ebp
    5d/pop-to-ebp
    c3/return

debug-print?:  # -> _/eax: boolean
    # . prologue
    55/push-ebp
    89/<- %ebp 4/r32/esp
    #
    8b/-> *Really-debug-print 0/r32/eax
$debug-print?:end:
    # . epilogue
    89/<- %esp 5/r32/ebp
    5d/pop-to-ebp
    c3/return

turn-on-debug-print:
    # . prologue
    55/push-ebp
    89/<- %ebp 4/r32/esp
    #
    c7 0/subop/copy *Really-debug-print 1/imm32/true
$turn-on-debug-print:end:
    # . epilogue
    89/<- %esp 5/r32/ebp
    5d/pop-to-ebp
    c3/return

turn-off-debug-print:
    # . prologue
    55/push-ebp
    89/<- %ebp 4/r32/esp
    #
    c7 0/subop/copy *Really-debug-print 0/imm32/false
$turn-off-debug-print:end:
    # . epilogue
    89/<- %esp 5/r32/ebp
    5d/pop-to-ebp
    c3/return

== data
Really-debug-print:
  0/imm32/false
#?   1/imm32/true