Skip to content

Commit 2a73023

Browse files
committed
updated header parsing to load a string just after is_32bit byte, adapted tests to check correct behaviour
1 parent dd9cdb4 commit 2a73023

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

jitlog/objects.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,9 +345,10 @@ def read_python_source(file):
345345
return data
346346

347347
class TraceForest(object):
348-
def __init__(self, version, is_32bit=False):
348+
def __init__(self, version, is_32bit=False, machine=None):
349349
self.word_size = 4 if is_32bit else 8
350350
self.version = version
351+
self.machine = machine
351352
self.roots = []
352353
self.traces = {}
353354
self.addrs = {}

jitlog/parser.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import sys
22
from jitlog import constants as const, marks
33
from jitlog.objects import TraceForest
4+
from vmprof.binary import read_string
45
if sys.version_info[0] >= 3:
56
from io import StringIO
67
else:
@@ -27,7 +28,8 @@ def _parse_jitlog(fileobj):
2728
is_jit_log = fileobj.read(1) == const.MARK_JITLOG_HEADER
2829
version = ord(fileobj.read(1)) | (ord(fileobj.read(1)) << 8)
2930
is_32bit = ord(fileobj.read(1))
30-
forest = TraceForest(version, is_32bit)
31+
machine = read_string(fileobj, True)
32+
forest = TraceForest(version, is_32bit, machine)
3133
assert is_jit_log, "Missing header. Data might not be a jitlog!"
3234
assert version >= JITLOG_MIN_VERSION, \
3335
"Version does not match. Log is version %d%d is not satisfied" % \

jitlog/test/test_jitlog.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,17 +240,20 @@ def test_counter_points():
240240
assert len(d) == 2
241241

242242
def test_32bit_log_header():
243-
fobj = FileObj([const.MARK_JITLOG_HEADER+ b"\x01\x00\x01"])
243+
fobj = FileObj([const.MARK_JITLOG_HEADER+ b"\x01\x00\x01"+\
244+
encode_str('ppc64le')])
244245
forest = _parse_jitlog(fobj)
245246
assert forest.version == 1
246247
assert forest.word_size == 4
248+
assert forest.machine == 'ppc64le'
247249

248250
def test_32bit_read_trace():
249-
fobj = FileObj([const.MARK_JITLOG_HEADER+ b"\x01\x00\x01",
251+
fobj = FileObj([const.MARK_JITLOG_HEADER+ b"\x01\x00\x01"+encode_str('s390x'),
250252
const.MARK_START_TRACE, encode_le_u32(0x15), encode_str('loop'), encode_le_u32(0),
251253
])
252254
forest = _parse_jitlog(fobj)
253255
assert forest.version == 1
254256
assert forest.word_size == 4
255257
assert len(forest.traces) == 1
258+
assert forest.machine == 's390x'
256259

0 commit comments

Comments
 (0)