Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Glenn Washburn and committed by
Andrew Morton
6d51363d 56fe4870

+8 -2
+8 -2
scripts/gdb/linux/cpus.py
··· 163 163 task_ptr_type = task_type.get_type().pointer() 164 164 165 165 if utils.is_target_arch("x86"): 166 - var_ptr = gdb.parse_and_eval("&pcpu_hot.current_task") 167 - return per_cpu(var_ptr, cpu).dereference() 166 + if gdb.lookup_global_symbol("cpu_tasks"): 167 + # This is a UML kernel, which stores the current task 168 + # differently than other x86 sub architectures 169 + var_ptr = gdb.parse_and_eval("(struct task_struct *)cpu_tasks[0].task") 170 + return var_ptr.dereference() 171 + else: 172 + var_ptr = gdb.parse_and_eval("&pcpu_hot.current_task") 173 + return per_cpu(var_ptr, cpu).dereference() 168 174 elif utils.is_target_arch("aarch64"): 169 175 current_task_addr = gdb.parse_and_eval("$SP_EL0") 170 176 if (current_task_addr >> 63) != 0: