a flexible gdb target description for processor...
TRANSCRIPT
A flexible GDB target description for processor diversity
Yao Qi
ENGINEERS AND DEVICESWORKING TOGETHER
GDB target description● GDB asks about the remote target <target>
<architecture>aarch64</architecture> <xi:include href="aarch64-core.xml"/> <xi:include href="aarch64-fpu.xml"/></target>
<feature name="org.gnu.gdb.aarch64.core"> <reg name="x0" bitsize="64"/></feature>
<feature name="org.gnu.gdb.aarch64.fpu"> <union id="aarch64v"> </union> <reg name="v0" bitsize="128" type="aarch64v" regnum="34"/></feature>
● Describe architecture variants, their registers and types, in XML,
● Added by Daniel Jacobowitz in 2006,2007,
● Used in many projects, like QEMU, OpenOCD,
● Appendix G Target Descriptions
ENGINEERS AND DEVICESWORKING TOGETHER
How does target description work
● Tells GDB what registers the remote target have, in a format of XML,● GDBserver manages regcache internally,● Pre-generate some builtin target descriptions used in native debugging,
ENGINEERS AND DEVICESWORKING TOGETHER
ShortcomingsTarget descriptions XML files xi:include target feature XML files,● More extensions and variants of computer architecture,● 3 optional target features can create 7 target descriptions. What if we have 4, 5
or more optional target features?
ENGINEERS AND DEVICESWORKING TOGETHER
Inflexible target descriptions: x86
ENGINEERS AND DEVICESWORKING TOGETHER
Shortcomings
*-tdep.c files have to #include “features/*.c” (manually)#include "features/i386/amd64-linux.c"#include "features/i386/amd64-avx-linux.c"#include "features/i386/amd64-mpx-linux.c"#include "features/i386/amd64-avx-mpx-linux.c"#include "features/i386/amd64-avx-avx512-linux.c"#include "features/i386/amd64-avx-mpx-avx512-pku-linux.c"
#include "features/i386/x32-linux.c"#include "features/i386/x32-avx-linux.c"#include "features/i386/x32-avx-avx512-linux.c"
xml_builtin is a map of all needed XML (target descriptions and target features) names and contentsextern const char *const xml_builtin[][2] = { { "i386-linux.xml", xml_feature_i386_linux_xml }, { "i386-avx-linux.xml", xml_feature_i386_avx_linux_xml }, { "i386-avx-avx512-linux.xml", xml_feature_i386_avx_avx512_linux_xml }, { "i386-avx-mpx-avx512-pku-linux.xml", xml_feature_i386_avx_mpx_avx512_pku_linux_xml }, { "i386-mmx-linux.xml", xml_feature_i386_mmx_linux_xml }, { "32bit-linux.xml", xml_feature_32bit_linux_xml }, { "i386-mpx-linux.xml", xml_feature_i386_mpx_linux_xml }, { "i386-avx-mpx-linux.xml", xml_feature_i386_avx_mpx_linux_xml }, { "32bit-core.xml", xml_feature_32bit_core_xml }, { "32bit-sse.xml", xml_feature_32bit_sse_xml }, { "32bit-avx.xml", xml_feature_32bit_avx_xml }, { "32bit-avx512.xml", xml_feature_32bit_avx512_xml }, { "32bit-mpx.xml", xml_feature_32bit_mpx_xml }, { "32bit-pkeys.xml", xml_feature_32bit_pkeys_xml }, { "amd64-linux.xml", xml_feature_amd64_linux_xml }, { "amd64-avx-linux.xml", xml_feature_amd64_avx_linux_xml }, { "amd64-avx-avx512.xml", xml_feature_amd64_avx_avx512_xml }, { "amd64-avx-mpx-avx512-pku-linux.xml", xml_feature_amd64_avx_mpx_avx512_pku_linux_xml }, { "64bit-linux.xml", xml_feature_64bit_linux_xml }, { "amd64-mpx-linux.xml", xml_feature_amd64_mpx_linux_xml }, { "amd64-avx-mpx-linux.xml", xml_feature_amd64_avx_mpx_linux_xml }, { "x32-linux.xml", xml_feature_x32_linux_xml }, { "x32-avx-linux.xml", xml_feature_x32_avx_linux_xml }, { "x32-avx-avx512-linux.xml", xml_feature_x32_avx_avx512_linux_xml }, { "64bit-core.xml", xml_feature_64bit_core_xml }, { "64bit-segments.xml", xml_feature_64bit_segments_xml }, { "64bit-sse.xml", xml_feature_64bit_sse_xml }, { "64bit-avx.xml", xml_feature_64bit_avx_xml }, { "64bit-avx512.xml", xml_feature_64bit_avx512_xml }, { "x32-core.xml", xml_feature_x32_core_xml }, { "64bit-mpx.xml", xml_feature_64bit_mpx_xml }, { "64bit-pkeys.xml", xml_feature_64bit_pkeys_xml }, { 0, 0 }};
ENGINEERS AND DEVICESWORKING TOGETHER
New design
● No change in GDB remote protocol and target description specification,● Flexible target description creation, ● GDBserver generates XML contents for GDB’s query, based on xml_builtin,
ENGINEERS AND DEVICESWORKING TOGETHER
Implementation● Start from x86 target descriptions
if (is_x32) regnum = create_feature_i386_x32_core (tdesc, regnum); else regnum = create_feature_i386_64bit_core (tdesc, regnum);
regnum = create_feature_i386_64bit_sse (tdesc, regnum); if (is_linux) regnum = create_feature_i386_64bit_linux (tdesc, regnum); regnum = create_feature_i386_64bit_segments (tdesc, regnum);
if (xcr0 & X86_XSTATE_AVX) regnum = create_feature_i386_64bit_avx (tdesc, regnum);
if ((xcr0 & X86_XSTATE_MPX) && !is_x32) regnum = create_feature_i386_64bit_mpx (tdesc, regnum);
if (xcr0 & X86_XSTATE_AVX512) regnum = create_feature_i386_64bit_avx512 (tdesc, regnum);
if ((xcr0 & X86_XSTATE_PKRU) && !is_x32) regnum = create_feature_i386_64bit_pkeys (tdesc, regnum);
● target descriptions collection
ENGINEERS AND DEVICESWORKING TOGETHER
Implementation● xml_builtin is only for target features
ENGINEERS AND DEVICESWORKING TOGETHER
DEMOhttp://people.linaro.org/~yao.qi/gdb/target-description/1.mp4
ENGINEERS AND DEVICESWORKING TOGETHER
TODO and future work● Convert the rest (non-x86) target
descriptions. Helps are needed.● Improve the XML generation in
GDBserver. GDBserver can only generate XML contents in the unit of target feature,
<target> <architecture>aarch64</architecture> <xi:include href="aarch64-core.xml"/> <xi:include href="aarch64-fpu.xml"/></target>
<target> <architecture>s390:31-bit</architecture> <xi:include href="s390-core64.xml"/> <xi:include href="s390-acr.xml"/> <xi:include href="s390-fpr.xml"/>
<feature name="org.gnu.gdb.s390.linux"> <reg name="orig_r2" bitsize="32" type="uint32" group="system"/> </feature></target>
ENGINEERS AND DEVICESWORKING TOGETHER
TODO and future work
● target description changes in the runtime,
○ QEMU, target switching between AArch64 and AArch32,
○ debugging Linux boot code, handling mode and bit width changes (16, 32 and 64),
○ MIPS: Handle run-time reconfigurable FPR size,
○ ARM SVE vector registers,
Thank You
#SFO17SFO17 keynotes and videos on: connect.linaro.orgFor further information: www.linaro.org