Skip to content

Commit 18a5668

Browse files
committed
A bit more accurate gdb features advertisement
1 parent c36fa64 commit 18a5668

1 file changed

Lines changed: 22 additions & 18 deletions

File tree

qiling/debugger/gdb/gdb.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ def handle_q(subcmd: str) -> Reply:
378378

379379
if query == 'Supported':
380380
# list of supported features excluding the multithreading-related ones
381-
common = (
381+
features = [
382382
'BreakpointCommands+',
383383
'ConditionalBreakpoints+',
384384
'ConditionalTracepoints+',
@@ -408,23 +408,21 @@ def handle_q(subcmd: str) -> Reply:
408408
'multiprocess+',
409409
'no-resumed+',
410410
'qXfer:auxv:read+',
411-
'qXfer:exec-file:read+',
412411
'qXfer:features:read+',
413412
# 'qXfer:libraries-svr4:read+',
414413
# 'qXfer:osdata:read+',
415414
'qXfer:siginfo:read+',
416415
'qXfer:siginfo:write+',
417416
'qXfer:statictrace:read+',
418-
'qXfer:threads:read+',
419417
'qXfer:traceframe-info:read+',
420418
'swbreak+',
421419
'tracenz+',
422420
'vfork-events+'
423-
)
421+
]
424422

425423
# might or might not need for multi thread
426424
if self.ql.multithread:
427-
features = (
425+
features += [
428426
'PacketSize=47ff',
429427
'FastTracepoints+',
430428
'QThreadEvents+',
@@ -436,16 +434,26 @@ def handle_q(subcmd: str) -> Reply:
436434
'qXfer:btrace-conf:read+',
437435
'qXfer:btrace:read+',
438436
'vContSupported+'
439-
)
437+
]
440438

441439
else:
442-
features = (
440+
features += [
443441
'PacketSize=3fff',
444442
'qXfer:spu:read+',
445443
'qXfer:spu:write+'
446-
)
444+
]
445+
446+
# os dependent features
447+
if not self.ql.interpreter:
448+
# filesystem dependent features
449+
if hasattr(self.ql.os, 'path'):
450+
features.append('qXfer:exec-file:read+')
451+
452+
# process dependent features
453+
if hasattr(self.ql.os, 'pid'):
454+
features.append('qXfer:threads:read+')
447455

448-
return ';'.join(common + features)
456+
return ';'.join(features)
449457

450458
elif query == 'Xfer':
451459
feature, op, annex, params = data
@@ -462,15 +470,11 @@ def handle_q(subcmd: str) -> Reply:
462470
return f'{"l" if len(content) < length else "m"}{content}'
463471

464472
elif feature == 'threads' and op == 'read':
465-
if not self.ql.baremetal and hasattr(self.ql.os, 'pid'):
466-
content = '\r\n'.join((
467-
'<threads>',
468-
f'<thread id="{self.ql.os.pid}" core="1" name="{self.ql.targetname}"/>',
469-
'</threads>'
470-
))
471-
472-
else:
473-
content = ''
473+
content = '\r\n'.join((
474+
'<threads>',
475+
f'<thread id="{self.ql.os.pid}" core="1" name="{self.ql.targetname}"/>',
476+
'</threads>'
477+
))
474478

475479
return f'l{content}'
476480

0 commit comments

Comments
 (0)