Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: yao@codesourcery.com (Yao Qi)
Cc: gdb-patches@sourceware.org
Subject: Re: [patch 2/3] Displaced stepping for 16-bit Thumb instructions
Date: Fri, 18 Feb 2011 12:18:00 -0000	[thread overview]
Message-ID: <201102181217.p1ICHKWK008179@d06av02.portsmouth.uk.ibm.com> (raw)
In-Reply-To: <4D5E0C48.7050002@codesourcery.com> from "Yao Qi" at Feb 18, 2011 02:06:00 PM

Yao Qi wrote:
> On 02/18/2011 03:22 AM, Ulrich Weigand wrote:
> > I don't think this is the right way to go.  You cannot have a mixture of
> > ARM and Thumb instructions in a single modinsn block, and if you have
> > Thumb instructions, they all need to be transfered in 16-bit chunks,
> > even the 32-bit Thumb2 instructions, to get the endian conversion right.
> 
> I don't have a mixture of ARM and Thumb instructions in a single modinsn
> block.  When displace stepping 16-bit instructions, modinsn[].insn.t is
> used to record 16-bit instructions and all instructions in copy area are
> 16-bit also.  In 32-bit case, modinsn[].insn.a is used, and all
> instructions in copy area are 32-bit.

I'm not sure if I understood you correctly, but 32-bit Thumb2 instructions
must be transfered in 2 16-bit chunks to get the endian conversion right,
just as is done everywhere else in arm-tdep.c.

But maybe this discussion can wait until we see the Thumb2 patch ...

> The reason I propose a union here is to try to avoid too-many byte
> operations during recording instructions and copying to copy area.  The
> union will waste some space in 16-bit instructions case, but IMO, it
> doesn't matter too much.

Are you talking about operations accessing the target, or computations
done on host?   If the former, the choice of data type for modinsns will
not affect that at all.   If the latter, I don't think there will be
any measurable difference either way ...
 
> I agree that we should a single flag for mode, and remove field size
> from struct insn.
> 
> The changes in `struct displaced_step_closure' is like this,
> 
>  -  unsigned long modinsn[DISPLACED_MODIFIED_INSNS];
>  +
>  +  unsigned short flag; /* indicates the mode of instructions in
> MODINSNS.  */
>  +    union
>  +    {
>  +      unsigned long a;
>  +      unsigned short t;
>  +    }modinsns[DISPLACED_MODIFIED_INSNS];
> 
> Do you agree on this proposed data structure?  We need an agreement on
> this basic data structure before I start to write/change the rest of
> patches.

Well, I just don't see the point.  The arm-tdep code usually does:

   dsc->modinsn[...] = <some integer expression>

Code generated from that will not be significantly different whether
the underlying type of dsc->modinsn is short, int, or long; on some
host platforms, having the destination type short will actually require
extra conversion steps ...

Because I don't see any actual performance benefit, I'd argue for keeping
the source code simple.

> I'll remove this chunk from my patch, and create another patch specific
> to this 'magic number' problem separately.
[snip]
> Yes, we've already known the mode.  We can use either
> tdep->arm_breakpoint or tdep->thumb_breakpoint directly.
[snip]
> `if (!dsc->wrote_to_pc)' guard that we will not follow branch in this
> case.  However, since we've known the mode, we can adjust pc directly,
> without bothering complicated arm_get_next_pc_raw.

OK, thanks!

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


  reply	other threads:[~2011-02-18 12:17 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-25 14:17 [patch 0/3] " 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 [this message]
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 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
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: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-27 22:11           ` Ulrich Weigand
2011-05-23 11:32         ` Yao Qi
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: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=201102181217.p1ICHKWK008179@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