From: Yao Qi <yao@codesourcery.com>
To: Victor Kamensky <victor.kamensky@linaro.org>
Cc: <gdb-patches@sourceware.org>
Subject: Re: [PATCH 4/5] ARM: read_pieced_value do big endian processing only in case of valid gdb_regnum
Date: Wed, 22 Oct 2014 09:31:00 -0000 [thread overview]
Message-ID: <877fzsihdr.fsf@codesourcery.com> (raw)
In-Reply-To: <1413853021-4393-5-git-send-email-victor.kamensky@linaro.org> (Victor Kamensky's message of "Mon, 20 Oct 2014 17:57:00 -0700")
Victor Kamensky <victor.kamensky@linaro.org> writes:
Hi Victor,
Could you please add more details in the commit message? for example....
> During armv7b testing gdb.base/store.exp test was failling with
> 'GDB internal error'. It turns out that compiler generated DWARF
What is the 'GDB internal error'? Is it like this?
(gdb) PASS: gdb.base/store.exp: continue to wack_double
print l^M
gdb/regcache.c:178: internal-error: register_size: Assertion `regnum >= 0 && regnum < (gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch))' failed.^M
A problem internal to GDB has been detected,
We've seen this internal error on (armv5te big-endian) for a while.
> with non-existent register numbers. The compiler issue is present
> in both little endian (armv7) and big endian (armv7b) (it is
> separate issue). In both case gdbarch_dwarf2_reg_to_regnum returns
Is there any PR opened for the compiler issue? If there is, please
mention it in the commit message, otherwise, please describe the
mistakes in the compiler generated debug info, the snippet of
'readelf -wi' output, which shows the wrong register number, should be fine.
> -1 which is stored into gdb_regnum. But it cause severe problem
> only in big endian case because in read_pieced_value and
> write_pieced_value functions BFD_ENDIAN_BIG related processing
> happen regardless of gdb_regnum value, and in case of gdb_regnum=-1,
> it cause 'GDB internal error' and crash.
>
> Solution is to move BFD_ENDIAN_BIG related processing under
> (gdb_regnum != -1) branch of processing.
With your patch applied, the internal error is fixed. How does GDB
behave now? What is the output for 'print l'? In my case, it becomes:
print l^M
Unable to access DWARF register number 80^M
(gdb) FAIL: gdb.base/store.exp: upvar float l; print old l, expecting -1
> ---
> gdb/ChangeLog | 6 ++++++
> gdb/dwarf2loc.c | 30 +++++++++++++++---------------
> 2 files changed, 21 insertions(+), 15 deletions(-)
>
> diff --git a/gdb/ChangeLog b/gdb/ChangeLog
> index c32fb3f..6a735b8 100644
> --- a/gdb/ChangeLog
> +++ b/gdb/ChangeLog
> @@ -1,5 +1,11 @@
> 2014-10-13 Victor Kamensky <victor.kamensky@linaro.org>
>
> + * dwarf2loc.c (read_pieced_value): do BE processing only if
> + gdb_regnum is not -1.
s/do/Do. Looks you've fixed it in V2.
s/BE/big endian/ because BE isn't very clear here.
> + (write_pieced_value): Ditto.
> +
> +2014-10-13 Victor Kamensky <victor.kamensky@linaro.org>
> +
> * arm-tdep.c: (extract_arm_insn): use dbarch_byte_order_for_code
> to read arm instruction.
>
> diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
> index e347e59..fbe99bb 100644
> --- a/gdb/dwarf2loc.c
> +++ b/gdb/dwarf2loc.c
> @@ -1686,20 +1686,20 @@ read_pieced_value (struct value *v)
> int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.regno);
> int reg_offset = source_offset;
>
> - if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
> - && this_size < register_size (arch, gdb_regnum))
> - {
> - /* Big-endian, and we want less than full size. */
> - reg_offset = register_size (arch, gdb_regnum) - this_size;
> - /* We want the lower-order THIS_SIZE_BITS of the bytes
> - we extract from the register. */
> - source_offset_bits += 8 * this_size - this_size_bits;
> - }
> -
> if (gdb_regnum != -1)
> {
> int optim, unavail;
>
> + if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
> + && this_size < register_size (arch, gdb_regnum))
> + {
> + /* Big-endian, and we want less than full size. */
> + reg_offset = register_size (arch, gdb_regnum) - this_size;
> + /* We want the lower-order THIS_SIZE_BITS of the bytes
> + we extract from the register. */
> + source_offset_bits += 8 * this_size - this_size_bits;
> + }
> +
Nit: after the change, local variable 'reg_offset' is only used in the
"if (gdb_regnum != -1) {}" block, so we can move 'reg_offset' into that
block.
--
Yao (齐尧)
next prev parent reply other threads:[~2014-10-22 9:31 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-21 0:57 [PATCH 0/5] arm: set of big endian related fixes for armeb (v7) Victor Kamensky
2014-10-21 0:57 ` [PATCH 4/5] ARM: read_pieced_value do big endian processing only in case of valid gdb_regnum Victor Kamensky
2014-10-22 9:31 ` Yao Qi [this message]
2014-10-22 15:27 ` Victor Kamensky
2014-10-23 3:22 ` Yao Qi
2014-10-23 5:43 ` Victor Kamensky
2014-10-23 6:24 ` Yao Qi
2014-10-21 0:57 ` [PATCH 5/5] ARM: asm-source.exp link options in case of armv7b target Victor Kamensky
2014-10-24 6:10 ` Yao Qi
2014-10-24 6:35 ` Victor Kamensky
2014-10-24 6:38 ` Andrew Pinski
2014-10-24 8:57 ` Yao Qi
2014-10-24 17:11 ` Victor Kamensky
2014-10-21 0:57 ` [PATCH 2/5] ARM: extract_arm_insn function need to read instrs correctly in be8 case Victor Kamensky
2014-10-21 7:58 ` Yao Qi
2014-10-21 8:04 ` Yao Qi
2014-10-21 14:45 ` Victor Kamensky
2014-10-24 12:20 ` gdb/CONTRIBUTE Pedro Alves
2014-10-24 17:36 ` gdb/CONTRIBUTE Victor Kamensky
2014-10-21 0:57 ` [PATCH 3/5] ARM: arm_breakpoint should be little endian form in case for arm BE8 Victor Kamensky
2014-10-21 8:13 ` Yao Qi
2014-10-21 0:57 ` [PATCH 1/5] ARM: plt_size functions need to read instructions in right byte order Victor Kamensky
2014-10-21 1:12 ` [PATCH 0/5] arm: set of big endian related fixes for armeb (v7) Andrew Pinski
2014-10-21 5:22 ` Victor Kamensky
2014-10-21 7:39 ` Yao Qi
2014-10-22 5:39 ` Victor Kamensky
2014-10-22 9:36 ` 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=877fzsihdr.fsf@codesourcery.com \
--to=yao@codesourcery.com \
--cc=gdb-patches@sourceware.org \
--cc=victor.kamensky@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox