All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christopher Friedt <chrisfriedt@gmail.com>
To: qemu-devel@nongnu.org
Cc: Christopher Friedt <chrisfriedt@gmail.com>
Subject: [Qemu-devel] [RFC] qemu-system-arm: cortex-m gdb registers
Date: Mon, 14 Dec 2015 01:36:09 -0500	[thread overview]
Message-ID: <1450074970-28562-1-git-send-email-chrisfriedt@gmail.com> (raw)

At least for Cortex-M3 devices (but also M0, M0+, M4, ...), while
JTAG debugging using OpenOCD's built-in GDB server, the general purpose
register layout (i.e. `info reg' in GDB) should contain slightly more than
the usual ARM core registers.
    
The non-addressable core registers that appear in OpenOCD's listing are:
    
    r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp (r13), lr (r14),
    pc (r15), xpsr, primask, basepri, faultmask, and control.
    
These registers are well documented in the ARMv7M Architecture Reference
Manual.
    
This change addes preliminary support for those registers via a custom 
qXfer:features:read+ and XML response that follows the GNU convention
documented here [1] for org.gnu.gdb.arm.m-profile and
org.gnu.gdb.arm.m-system.
    
[1] https://goo.gl/NMxlC5

The default behaviour for non-cortex-m will be to mimic the original ARM
behaviour of referring the GDB client to an <xi:include href="arm-core.xml">.

A simple test environment for this patch is to compile and link the following
assembly fragment:

		.syntax unified
		.cpu cortex-m3

		.section .interp
		.word 0x20020000
		.word 0x9

		.text

		.global _start
		.thumb
		.thumb_func
		.type _start, %function
	_start:
		b _start
		.size _start, .-_start

Using the command below:

    arm-none-eabi-gcc -g -O0 -mthumb -march=armv7-m -Wl,-Ttext-segment,0 \
        -static -nostartfiles -o foo foo.S

Launch the resulting binary with qemu:

    qemu-system-arm -S -s -M netduino2 -nographic -kernel foo

Run gdb, attaching to the qemu's GDB server:

    arm-none-eabi-gdb foo
    (gdb) target remote localhost:1234
    Remote debugging using localhost:1234
    0x00000000 in _start ()
    (gdb) info all-registers
    r0             0x0	0
    r1             0x0	0
    r2             0x0	0
    r3             0x0	0
    r4             0x0	0
    r5             0x0	0
    r6             0x0	0
    r7             0x0	0
    r8             0x0	0
    r9             0x0	0
    r10            0x0	0
    r11            0x0	0
    r12            0x0	0
    sp             0xbffef7fc	0xbffef7fc
    lr             0x0	0
    pc             0x0	0x0 <_start>
    xpsr           0x40000000	1073741824
    msp            0xbffef7fc	0xbffef7fc
    psp            0x0	0x0 <_start>
    primask        0x0	0
    basepri        0x0	0
    faultmask      0x1	1
    control        0x0	0

The changes have been tested with other firmware images and also via Eclipse
Mars.

Christopher Friedt (1):
  qemu-system-arm: cortex-m gdb registers

 gdbstub.c            |  29 ++++---
 include/qom/cpu.h    |   1 +
 target-arm/cpu-qom.h |   4 +
 target-arm/cpu.c     |   5 +-
 target-arm/gdbstub.c | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 241 insertions(+), 13 deletions(-)

-- 
2.5.4 (Apple Git-61)

             reply	other threads:[~2015-12-14  6:36 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-14  6:36 Christopher Friedt [this message]
2015-12-14  6:36 ` [Qemu-devel] [RFC] qemu-system-arm: cortex-m gdb registers Christopher Friedt
2015-12-14  8:31   ` Peter Maydell
2015-12-14 13:07     ` Christopher Friedt
2015-12-14 13:14       ` Peter Maydell
2015-12-14 13:16         ` Christopher Friedt
2015-12-14 14:22           ` Christopher Friedt
2015-12-14 15:11             ` Peter Maydell
2015-12-14 15:56               ` Alex Bennée
2015-12-14 16:18                 ` Christopher Friedt
2015-12-16  0:16                   ` Christopher Friedt
2015-12-16 11:16                     ` Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1450074970-28562-1-git-send-email-chrisfriedt@gmail.com \
    --to=chrisfriedt@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.