Skip to content

Commit 86eb2f8

Browse files
committed
autodebugger fixes
1 parent 2833fb1 commit 86eb2f8

1 file changed

Lines changed: 16 additions & 11 deletions

File tree

tools/autodebugger.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
ALLOW_POINTERS = False
1414
ALLOW_MISC = True
1515
MEMCPY = False
16+
MEMCPY2 = False
1617
NO_DLMALLOC = True
1718

1819
POSTAMBLE = '''
@@ -91,14 +92,17 @@
9192

9293
POSTAMBLE_NEW = '''
9394
@.emscripten.autodebug.str = private constant [10 x i8] c"AD:%d,%d\\0A\\00", align 1 ; [#uses=1]
95+
@.emscripten.autodebug.str.2 = private constant [13 x i8] c"AD:%d,%d,%d\\0A\\00", align 1 ; [#uses=1]
9496
@.emscripten.autodebug.str.f = private constant [11 x i8] c"AD:%d,%lf\\0A\\00", align 1 ; [#uses=1]
9597
9698
declare i32 @printf(i8*, ...)
9799
98100
; [#uses=1]
99101
define void @emscripten_autodebug_i64(i32 %line, i64 %value) {
100-
%1 = sitofp i64 %value to double
101-
%2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8]* @.emscripten.autodebug.str.f, i32 0, i32 0), i32 %line, double %1) ; [#uses=0]
102+
%1 = trunc i64 %value to i32
103+
%2 = lshr i64 %value, 32
104+
%3 = trunc i64 %2 to i32
105+
%4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.emscripten.autodebug.str.2, i32 0, i32 0), i32 %line, i32 %1, i32 %3) ; [#uses=0]
102106
ret void
103107
}
104108
@@ -256,20 +260,21 @@
256260
lines_added += 1
257261
continue
258262
if ALLOW_MISC:
259-
m = re.match(' %(?P<var>[\w_.]+) = (call|mul|add) (nsw )?(?P<type>i64|i32|i16|i8|float|double+) .*', lines[i])
263+
# call is risky - return values can be i32 (i8*) (i16)
264+
m = re.match(' %(?P<var>[\w_.]+) = (mul|add) (nsw )?(?P<type>i64|i32|i16|i8|float|double+) .*', lines[i])
260265
if m:
261266
index = i+1+lines_added
262267
lines[i] += '\n call void @emscripten_autodebug_%s(i32 %d, %s %%%s)' % (m.group('type'), index, m.group('type'), m.group('var'))
263268
lines_added += 1
264269
continue
265-
m = re.match(' call void @llvm\.memcpy\.p0i8\.p0i8\.i32\(i8\* %(?P<dst>[\w_.]+), i8\* %(?P<src>[\w_.]+), i32 8, i32 (?P<align>\d+),.*', lines[i])
266-
if m:
267-
index = i+1+lines_added
268-
lines[i] += '\n %%adpretemp%d = bitcast i8* %%%s to i64*' % (index, m.group('src')) + \
269-
'\n %%adtemp%d = load i64* %%adpretemp%d, align %s' % (index, index, m.group('align')) + \
270-
'\n call void @emscripten_autodebug_%s(i32 %d, %s %%adtemp%d)' % ('i64', index, 'i64', index)
271-
lines_added += 3
272-
continue
270+
if MEMCPY2:
271+
m = re.match(' call void @llvm\.memcpy\.p0i8\.p0i8\.i32\(i8\* %(?P<dst>[\w_.]+), i8\* %(?P<src>[\w_.]+), i32 8, i32 (?P<align>\d+),.*', lines[i])
272+
if m:
273+
index = i+1+lines_added
274+
lines[i] += '\n %%adtemp%d = load i8* %%%s, align 1' % (index, m.group('src')) + \
275+
'\n call void @emscripten_autodebug_i8(i32 %d, i8 %%adtemp%d)' % (index, index)
276+
lines_added += 3
277+
continue
273278

274279
finally:
275280
if len(pre) > 0:

0 commit comments

Comments
 (0)