A flexible GDB target description for processor...

13
A flexible GDB target description for processor diversity Yao Qi

Transcript of A flexible GDB target description for processor...

Page 1: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

A flexible GDB target description for processor diversity

Yao Qi

Page 2: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

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

Page 3: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

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,

Page 4: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

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?

Page 5: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

ENGINEERS AND DEVICESWORKING TOGETHER

Inflexible target descriptions: x86

Page 6: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

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 }};

Page 7: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

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,

Page 8: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

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

Page 9: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

ENGINEERS AND DEVICESWORKING TOGETHER

Implementation● xml_builtin is only for target features

Page 10: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

ENGINEERS AND DEVICESWORKING TOGETHER

DEMOhttp://people.linaro.org/~yao.qi/gdb/target-description/1.mp4

Page 11: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

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>

Page 12: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

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,

Page 13: A flexible GDB target description for processor diversityconnect.linaro.org.s3.amazonaws.com/sfo17... · ENGINEERS AND DEVICES WORKING TOGETHER How does target description work Tells

Thank You

#SFO17SFO17 keynotes and videos on: connect.linaro.orgFor further information: www.linaro.org