From: "Marcin Kościelnicki" <koriakin@0x04.net>
To: Pedro Alves <palves@redhat.com>, gdb-patches@sourceware.org
Cc: antoine.tremblay@ericsson.com
Subject: Re: [PATCH] [PR gdb/13808] gdb.trace: Pass tdesc selected in gdbserver to IPA.
Date: Thu, 25 Feb 2016 13:39:00 -0000 [thread overview]
Message-ID: <56CF03EF.3000200@0x04.net> (raw)
In-Reply-To: <56CEFCC5.8070109@redhat.com>
On 25/02/16 14:08, Pedro Alves wrote:
> On 02/21/2016 09:17 PM, Marcin KoÅcielnicki wrote:
>> If gdbserver and IPA are using different tdesc, they will disagree
>> about 'R' trace packet size. This results in mangled traces.
>>
>> To make sure they pick the same tdesc, gdbserver pokes the tdesc
>> (specified as an index in a target-specific list) into a global
>> variable in IPA. In theory, IPA could find out the tdesc on its
>> own, but that may be complex (in particular, I don't know how to
>> tell whether we have LAST_BREAK on s390 without messing with ptrace),
>> and we'd have to duplicate the logic.
>>
>> Tested on i386 and x86_64. On i386, it fixes two FAILs in ftrace.exp.
>> On x86_64, these failures have been KFAILed - one of them works now,
>> but the other now fails due to an unrelated reason (ugh).
>
> Thanks.
>
> I realized this grows each traceframe's size, probably several
> times fold on x86, given the size/number of vector registers.
> It'd be nice to avoid this.
>
> - One way would be to actually respect the ax's register masks.
>
> - Another way would be to trim recorded regblock sizes up until the
> last recordable register in the tdesc. So if when reading back the
> traceframe, the regblock is shorter than expected, just treat the
> missing registers as unavailable.
Both of these require changing trace frame format - currently the
regblock size is shared for all tracepoints in file (ie. both trap and
fast tracepoints), but #1 sounds like the way to go.
>
> BTW, do we print the not-actually-collected-in-fast-tracepoint registers
> as <unavailable>, or as zero's?
Zeros - there's no way in the trace frame format to mark them unavailable.
>
> It'd also be nice to be able to actually collect the now tdesc-accessible
> registers, but that runs into the register size problems discussed earlier.
> Plus, we probably wouldn't want to _always_ collect everything.
Well, they do work for trap tracepoints... but yeah.
>
> I haven't analyzed the actual traceframe size impact, but I guess we can
> consider those orthogonal optimization problems, as without this fix, things
> just don't work.
>
> One thing that wasn't super obvious in the patch is why do several different
> target descriptions in gdbserver map to a single description in the IPA?
They're basically the same tdesc's for different ABIs (i386 vs x32 vs
x64). Since IPA is single-ABI, it's not necessary for the enum to
encode the ABI. I'll add a comment to linux-x86-tdesc.h.
>
> I noticed several new functions with missing entry comment.
OK, will fix these.
>
>> +const struct target_desc *
>> +get_ipa_tdesc (int idx)
>> +{
>> + switch (idx) {
>> + case X86_TDESC_MMX: /* Should not happen. */
>
> ...
>
>> +const struct target_desc *
>> +get_ipa_tdesc (int idx)
>> +{
>> + switch (idx) {
>
> '{' goes on next line (and then reindent).
>
>
>
>> @@ -328,6 +332,14 @@ tracepoint_look_up_symbols (void)
>> }
>> }
>>
>> + /* Tell IPA about the correct tdesc. */
>> + if (write_inferior_integer (ipa_sym_addrs.addr_ipa_tdesc_idx,
>> + target_get_ipa_tdesc_idx ()))
>> + {
>> + internal_error (__FILE__, __LINE__,
>> + "Error setting ipa_tdesc_idx variable in lib");
>> + }
>
> Failure to write to the inferior should never be an internal error.
> The inferior might vanish, e.g., because it was SIGKILL'ed from
> outside gdbserver.
Fair enough. The file is littered with internal errors in such cases
though (I just copied one of them), what should be done for these?
>
>> +
>> agent_look_up_symbols (NULL);
>> }
>>
>
> Thanks,
> Pedro Alves
>
next prev parent reply other threads:[~2016-02-25 13:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-21 21:17 Marcin Kościelnicki
2016-02-23 15:19 ` Antoine Tremblay
2016-02-25 13:08 ` Pedro Alves
2016-02-25 13:39 ` Marcin Kościelnicki [this message]
2016-02-25 14:46 ` Pedro Alves
2016-02-25 15:39 ` Marcin Kościelnicki
[not found] ` <56CF2FEF.3090407@redhat.com>
2016-02-25 16:59 ` Marcin Kościelnicki
2016-03-02 15:50 ` Yao Qi
2016-03-02 16:21 ` [PATCH] [OBV] gdbserver: Only write ipa_tdesc_idx if agent is actually loaded Marcin Kościelnicki
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=56CF03EF.3000200@0x04.net \
--to=koriakin@0x04.net \
--cc=antoine.tremblay@ericsson.com \
--cc=gdb-patches@sourceware.org \
--cc=palves@redhat.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