From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: yao@codesourcery.com (Yao Qi)
Cc: gdb-patches@sourceware.org
Subject: Re: [try 2nd 4/8] Displaced stepping for Thumb 16-bit insn
Date: Tue, 10 May 2011 13:58:00 -0000 [thread overview]
Message-ID: <201105101358.p4ADw8D0029817@d06av02.portsmouth.uk.ibm.com> (raw)
In-Reply-To: <4DC2A4CE.5030407@codesourcery.com> from "Yao Qi" at May 05, 2011 09:23:26 PM
Yao Qi wrote:
> Support displaced stepping for Thumb 16-bit insns.
> * arm-tdep.c (THUMB_NOP) Define.
> (thumb_copy_unmodified_16bit): New.
> (thumb_copy_b, thumb_copy_bx_blx_reg): New.
> (thumb_copy_alu_reg): New.
> (arm_copy_svc): Move some common code to ...
> (copy_svc): ... here. New.
> (thumb_copy_svc): New.
> (install_pc_relative): New.
> (thumb_copy_pc_relative_16bit): New.
> (thumb_decode_pc_relative_16bit): New.
> (thumb_copy_16bit_ldr_literal): New.
> (thumb_copy_cbnz_cbz): New.
> (cleanup_pop_pc_16bit): New.
> (thumb_copy_pop_pc_16bit): New.
> (thumb_process_displaced_16bit_insn): New.
> (thumb_process_displaced_32bit_insn): New.
> (thumb_process_displaced_insn): process thumb instruction.
This is looking pretty good now, thanks. There is still one problem
that I noticed:
> +static int
> +thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, unsigned short insn1,
> + struct regcache *regs,
> + struct displaced_step_closure *dsc)
> +{
> + dsc->u.block.regmask = insn1 & 0x00ff;
> +
> + /* Rewrite instruction: POP {rX, rY, ...,rZ, PC}
> + to :
> +
> + (1) register list is not empty,
> + Prepare: tmp[0] <- r8,
> +
> + POP {rX}; PC is stored in rX
> + MOV r8, rX; finally, PC is stored in r8
> + POP {rX, rY, ...., rZ}
> +
> + Cleanup: PC <-r8, r8 <- tmp[0]
It seems this approach is actually incorrect. If you do a
POP {rX, rY, ..., rZ, PC}
the value at the SP gets restored into rX, the value at rX+4
into rY and so on, and the value at the highest address gets
restored into PC.
With your replacement sequence, it would appear that you
instead get the value at the *lowest* address (just SP)
restored into the PC ...
Apart from this, just a few minor issues:
> +/* Common copy routine for svc instruciton. */
>
> +static int
> +copy_svc (struct gdbarch *gdbarch, struct regcache *regs,
> + struct displaced_step_closure *dsc)
> +{
I guess to keep in sync with terminology in the rest of the file,
this really should be called install_svc ...
> + err = thumb_copy_unmodified_16bit (gdbarch, insn1,"shift/add/sub/mov/cmp",
Formatting: space after the comma (here and at a couple other places).
> + thumb_process_displaced_32bit_insn(gdbarch, insn1, insn2, regs, dsc);
> + }
> + else
> + thumb_process_displaced_16bit_insn(gdbarch, insn1, regs, dsc);
Formatting: space before (
Thanks,
Ulrich
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com
next prev parent reply other threads:[~2011-05-10 13:58 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-25 14:17 [patch 0/3] Displaced stepping for 16-bit Thumb instructions Yao Qi
2010-12-25 14:22 ` [patch 1/3] " Yao Qi
2011-02-17 19:09 ` Ulrich Weigand
2010-12-25 17:09 ` [patch 2/3] " Yao Qi
2011-02-17 19:46 ` Ulrich Weigand
2011-02-18 6:33 ` Yao Qi
2011-02-18 12:18 ` Ulrich Weigand
2011-02-21 7:41 ` Yao Qi
2011-02-21 20:14 ` Ulrich Weigand
2011-02-25 18:09 ` Yao Qi
2011-02-25 20:17 ` Ulrich Weigand
2011-02-26 14:07 ` Yao Qi
2011-02-28 17:37 ` Ulrich Weigand
2011-03-01 9:01 ` Yao Qi
2011-03-01 16:11 ` Ulrich Weigand
2010-12-25 17:54 ` [patch 3/3] " Yao Qi
2010-12-27 15:15 ` Yao Qi
2011-02-17 20:55 ` Ulrich Weigand
2011-02-18 7:30 ` Yao Qi
2011-02-18 13:25 ` Ulrich Weigand
2011-02-28 2:04 ` Displaced stepping 0003: " Yao Qi
2010-12-29 5:48 ` [patch 0/3] Displaced stepping " Yao Qi
2011-01-13 12:38 ` Yao Qi
2011-02-10 6:48 ` Ping 2 " Yao Qi
2011-02-26 17:50 ` Displaced stepping 0002: refactor and create some copy helpers Yao Qi
2011-02-28 17:53 ` Ulrich Weigand
2011-02-28 2:15 ` Displaced stepping 0004: wip: 32-bit Thumb instructions Yao Qi
2011-03-24 13:49 ` [try 2nd 0/8] Displaced stepping for " Yao Qi
2011-03-24 13:56 ` [try 2nd 1/8] Fix cleanup_branch to take Thumb into account Yao Qi
2011-04-06 20:46 ` Ulrich Weigand
2011-04-07 3:45 ` Yao Qi
2011-03-24 13:58 ` [try 2nd 2/8] Rename copy_* functions to arm_copy_* Yao Qi
2011-04-06 20:51 ` Ulrich Weigand
2011-04-07 8:02 ` Yao Qi
2011-04-19 9:07 ` Yao Qi
2011-04-26 17:09 ` Ulrich Weigand
2011-04-27 10:27 ` Yao Qi
2011-04-27 13:32 ` Ulrich Weigand
2011-04-28 5:05 ` Yao Qi
2011-03-24 14:01 ` [try 2nd 3/8] Refactor copy_svc_os Yao Qi
2011-04-06 20:55 ` Ulrich Weigand
2011-04-07 4:19 ` Yao Qi
2011-03-24 14:05 ` [try 2nd 5/8] Displaced stepping for Thumb 32-bit insns Yao Qi
2011-05-05 13:25 ` Yao Qi
2011-05-17 17:14 ` Ulrich Weigand
2011-05-23 11:32 ` Yao Qi
2011-05-23 11:32 ` Yao Qi
2011-05-27 22:11 ` Ulrich Weigand
2011-07-06 10:55 ` Yao Qi
2011-07-15 19:57 ` Ulrich Weigand
2011-07-18 9:26 ` Yao Qi
2011-03-24 14:05 ` [try 2nd 4/8] Displaced stepping for Thumb 16-bit insn Yao Qi
2011-05-05 13:24 ` Yao Qi
2011-05-10 13:58 ` Ulrich Weigand [this message]
2011-05-11 13:06 ` Yao Qi
2011-05-16 17:19 ` Ulrich Weigand
2011-05-17 14:29 ` Yao Qi
2011-05-17 17:20 ` Ulrich Weigand
2011-03-24 14:06 ` [try 2nd 6/8] Rename some functions to arm_* Yao Qi
2011-04-06 20:52 ` Ulrich Weigand
2011-04-07 4:26 ` Yao Qi
2011-03-24 14:11 ` [try 2nd 7/8] Test case Yao Qi
2011-05-05 13:26 ` Yao Qi
2011-05-11 13:15 ` [try 2nd 7/8] Test case: V3 Yao Qi
2011-05-17 17:24 ` Ulrich Weigand
2011-03-24 15:14 ` [try 2nd 8/8] NEWS Yao Qi
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=201105101358.p4ADw8D0029817@d06av02.portsmouth.uk.ibm.com \
--to=uweigand@de.ibm.com \
--cc=gdb-patches@sourceware.org \
--cc=yao@codesourcery.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox