From: Alan Hayward <Alan.Hayward@arm.com>
To: Pedro Alves <palves@redhat.com>
Cc: GDB Patches <gdb-patches@sourceware.org>, nd <nd@arm.com>
Subject: Re: [PATCH v3 3/3] Aarch64: Fix segfault when casting dummy calls
Date: Mon, 29 Oct 2018 14:56:00 -0000 [thread overview]
Message-ID: <A4931C82-E629-460E-989D-B67979448B8E@arm.com> (raw)
In-Reply-To: <862cf8f4-9491-a1eb-251e-6c7c1ffffa6c@redhat.com>
> On 29 Oct 2018, at 12:38, Pedro Alves <palves@redhat.com> wrote:
>
> On 10/29/2018 11:58 AM, Alan Hayward wrote:
>>
>>
>>> On 24 Oct 2018, at 16:14, Pedro Alves <palves@redhat.com> wrote:
>>>
>>>>
>>>>>
>>>>> And what does "to ensure FUNC resolving" mean too, btw?
>>>>> AFAICT, the only reason to use a shared library is to
>>>>> compile it with or without debug information, right?
>>>>> Come to think of it, you could instead eliminate the
>>>>> shared library and compile a separate .o file instead, right?
>>>>> That would simplify the testcase a bit and expose it to more
>>>>> targets.
>>>>>
>>>>
>>>> I could only get the bug to expose itself when using a .so
>>>>
>>>> If I do the following using current HEAD then the bug is not present:
>>>>
>>>> g++ -c condbreak-solib-main.cc -o condbreak-solib-main.o -fno-inline
>>>> g++ -c condbreak-solib-lib.cc -o condbreak-solib-lib.o -fno-inline
>>>> g++ condbreak-solib-main.o condbreak-solib-lib.o
>>>>
>>>> It causes the type of the return value to be detected as
>>>> TYPE_CODE_PTR->TYPE_CODE_INT.
>>>
>>> Huh. That's really strange. Where is that pointer coming from?
>>>
>>> What does "ptype cmp3" say for you?
>>>
>>> (gdb) b foo if (int)cmp3("abc") == 1
>>> Breakpoint 1 at 0x40048b
>>> (gdb) ptype cmp3
>>> type = <unknown return type> ()
>>> (gdb) whatis cmp3
>>> type = <text variable, no debug info>
>>>
>>
>> Yes, I get the same.
>>
>> Sounds to me like there might still be an issue in gdb? Or at least
>> a difference in the way the type is calculated.
>> This on it’s own is still a good fix, so I’ll send a new version.
>
> I think we should learn the answer to the "where is that pointer
> coming from" question. I'm really not understanding why the
> shared library makes a difference.
>
>>
>>
>>> I wonder if what you're looking at is actually the malloc call?
>>> GDB will call malloc to allocate space for the "abc" string in
>>> the inferior. Look at the backtrace, see where the call is coming
>>> from.
>>
>>
>> With the nodebug and debug shared library version:
>> (I need to run to main before I can set breakpoint on cmp3, otherwise
>> "Function "cmp3" not defined.”)
>>
>> But with all versions, when stopped at cmp3, I get:
>> (gdb) bt
>> #0 0x00000000004005d4 in cmp3(char const*) ()
>> #1 <function called from gdb>
>> #2 0x00000000004005a4 in foo() ()
>> #3 0x00000000004005bc in main ()
>
>
> That's a backtrace in the inferior. I meant instead for you to set
> a breakpoint on gdb's aarch64_push_dummy_call, figure out where the
> TYPE_CODE_PTR->TYPE_CODE_INT pointer comes from.
> With "b foo if (int)cmp3("abc") == 1", gdb will do two
> infcalls, one malloc call to allocate space for "abc"
> string, and then the call to cmp3.
>
A-ha! Now I understand why I get two calls into _push_dummy_call.
So to answer your question, the TYPE_CODE_PTR->TYPE_CODE_INT is the malloc call.
Then the next call to _push_dummy_call has a return type of 0, as expected.
This doesn’t segfault because it goes into language_pass_by_reference which
routes to default_pass_by_reference. The same as the C shared library version.
I’ve updated the test so it does {c,c++}*{debug nodebug}.
I can also update it to do both shared lib and non shared lib too. That should
cover everything.
Alan.
next prev parent reply other threads:[~2018-10-29 14:56 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-11 14:49 [PATCH v3 0/3] " Alan Hayward
2018-10-11 14:49 ` [PATCH v3 1/3] Use enum for return method for " Alan Hayward
2018-10-19 11:28 ` Pedro Alves
2018-10-11 14:49 ` [PATCH v3 3/3] Aarch64: Fix segfault when casting " Alan Hayward
2018-10-19 11:36 ` Pedro Alves
2018-10-23 16:08 ` Alan Hayward
2018-10-24 15:15 ` Pedro Alves
2018-10-29 11:58 ` Alan Hayward
[not found] ` <862cf8f4-9491-a1eb-251e-6c7c1ffffa6c@redhat.com>
2018-10-29 14:56 ` Alan Hayward [this message]
2018-10-29 18:13 ` Pedro Alves
2018-10-30 11:13 ` Alan Hayward
2018-10-30 16:31 ` Pedro Alves
2018-10-30 17:09 ` Alan Hayward
2018-10-30 17:40 ` Pedro Alves
2018-10-11 14:49 ` [PATCH v3 2/3] Pass return_method to _push_dummy_call Alan Hayward
2018-10-19 11:31 ` Pedro Alves
2018-10-18 9:50 ` [PING][PATCH v3 0/3] Aarch64: Fix segfault when casting dummy calls Alan Hayward
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=A4931C82-E629-460E-989D-B67979448B8E@arm.com \
--to=alan.hayward@arm.com \
--cc=gdb-patches@sourceware.org \
--cc=nd@arm.com \
--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