mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
scripts/gdb: support getting current task struct in UML
A running x86 UML kernel reports with architecture "i386:x86-64" as it is a sub-architecture. However, a difference with bare-metal x86 kernels is in how it manages tasks and the current task struct. To identify that the inferior is a UML kernel and not bare-metal, check for the existence of the UML specific symbol "cpu_tasks" which contains the current task struct. Link: https://lkml.kernel.org/r/b839d611e2906ccef2725c34d8e353fab35fe75e.1677469905.git.development@efficientek.com Signed-off-by: Glenn Washburn <development@efficientek.com> Reviewed-by: Jan Kiszka <jan.kiszka@siemens.com> Cc: Anton Ivanov <anton.ivanov@kot-begemot.co.uk> Cc: Johannes Berg <johannes@sipsolutions.net> Cc: Kieran Bingham <kbingham@kernel.org> Cc: Richard Weinberger <richard@nod.at> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
56fe487062
commit
6d51363d53
1 changed files with 8 additions and 2 deletions
|
@ -163,6 +163,12 @@ def get_current_task(cpu):
|
|||
task_ptr_type = task_type.get_type().pointer()
|
||||
|
||||
if utils.is_target_arch("x86"):
|
||||
if gdb.lookup_global_symbol("cpu_tasks"):
|
||||
# This is a UML kernel, which stores the current task
|
||||
# differently than other x86 sub architectures
|
||||
var_ptr = gdb.parse_and_eval("(struct task_struct *)cpu_tasks[0].task")
|
||||
return var_ptr.dereference()
|
||||
else:
|
||||
var_ptr = gdb.parse_and_eval("&pcpu_hot.current_task")
|
||||
return per_cpu(var_ptr, cpu).dereference()
|
||||
elif utils.is_target_arch("aarch64"):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue