1f1cd52d8SAlex Bennée# -*- coding: utf-8 -*- 2f1cd52d8SAlex Bennée# 3f1cd52d8SAlex Bennée# GDB debugging support, TCG status 4f1cd52d8SAlex Bennée# 5f1cd52d8SAlex Bennée# Copyright 2016 Linaro Ltd 6f1cd52d8SAlex Bennée# 7f1cd52d8SAlex Bennée# Authors: 8f1cd52d8SAlex Bennée# Alex Bennée <alex.bennee@linaro.org> 9f1cd52d8SAlex Bennée# 10*328eb60dSPaolo Bonzini# This work is licensed under the terms of the GNU GPL, version 2 or 11*328eb60dSPaolo Bonzini# later. See the COPYING file in the top-level directory. 12f1cd52d8SAlex Bennée 13f1cd52d8SAlex Bennée# 'qemu tcg-lock-status' -- display the TCG lock status across threads 14f1cd52d8SAlex Bennée 15f1cd52d8SAlex Bennéeimport gdb 16f1cd52d8SAlex Bennée 17f1cd52d8SAlex Bennéeclass TCGLockStatusCommand(gdb.Command): 18f1cd52d8SAlex Bennée '''Display TCG Execution Status''' 19f1cd52d8SAlex Bennée def __init__(self): 20f1cd52d8SAlex Bennée gdb.Command.__init__(self, 'qemu tcg-lock-status', gdb.COMMAND_DATA, 21f1cd52d8SAlex Bennée gdb.COMPLETE_NONE) 22f1cd52d8SAlex Bennée 23f1cd52d8SAlex Bennée def invoke(self, arg, from_tty): 24f1cd52d8SAlex Bennée gdb.write("Thread, BQL (iothread_mutex), Replay, Blocked?\n") 25f1cd52d8SAlex Bennée for thread in gdb.inferiors()[0].threads(): 26f1cd52d8SAlex Bennée thread.switch() 27f1cd52d8SAlex Bennée 28f1cd52d8SAlex Bennée iothread = gdb.parse_and_eval("iothread_locked") 29f1cd52d8SAlex Bennée replay = gdb.parse_and_eval("replay_locked") 30f1cd52d8SAlex Bennée 31f1cd52d8SAlex Bennée frame = gdb.selected_frame() 32f1cd52d8SAlex Bennée if frame.name() == "__lll_lock_wait": 33f1cd52d8SAlex Bennée frame.older().select() 34f1cd52d8SAlex Bennée mutex = gdb.parse_and_eval("mutex") 35f1cd52d8SAlex Bennée owner = gdb.parse_and_eval("mutex->__data.__owner") 36f1cd52d8SAlex Bennée blocked = ("__lll_lock_wait waiting on %s from %d" % 37f1cd52d8SAlex Bennée (mutex, owner)) 38f1cd52d8SAlex Bennée else: 39f1cd52d8SAlex Bennée blocked = "not blocked" 40f1cd52d8SAlex Bennée 41f1cd52d8SAlex Bennée gdb.write("%d/%d, %s, %s, %s\n" % (thread.num, thread.ptid[1], 42f1cd52d8SAlex Bennée iothread, replay, blocked)) 43