public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Alan Hayward <alan.hayward@arm.com>, gdb-patches@sourceware.org
Cc: nd@arm.com
Subject: Re: [PATCH v2 0/2] Aarch64: Fix segfault when casting dummy calls
Date: Tue, 09 Oct 2018 16:10:00 -0000	[thread overview]
Message-ID: <57873989-fc65-634f-c6f8-8c2a976e4f9f@redhat.com> (raw)
In-Reply-To: <20181001155255.14859-1-alan.hayward@arm.com>

On 10/01/2018 04:52 PM, Alan Hayward wrote:
> This is a reworking of a patch I posted in March.
> V1 had a long discussion which was then paused to wait for
> Pedro's IFUNC rewrite.
> 
> 
> Prevent the int cast in the following causing a segfault on aarch64:
> (gdb) b foo if (int)strcmp(name,"abc") == 0
> (gdb) run
> 
> 
> This is because to aarch64_push_dummy_call determines the return type
> of the function and then does not check for null pointer.
> 
> A null pointer for the return type means either 1) the call has a
> cast or 2) an error has occured.

I'd think that "1) the call has a cast" is not accurate.
If the called function has debug info, then GDB will know
it's return type.  The issue is that the called function may
not have debug information, and then GDB does not know
its return type (so its NULL), and then the only way to
call the function is to add the cast.  Right?

It kind of sounds like IFUNCs were a red herring then.  :-/

> You can see this in infcall.c:call_function_by_hand_dummy():
> 
>   CORE_ADDR funaddr = find_function_addr (function, &values_type, &ftype);
> 
>   if (values_type == NULL)
>     values_type = default_return_type;
>   if (values_type == NULL)
>     {
>       const char *name = get_function_name (funaddr,
> 					    name_buf, sizeof (name_buf));
>       error (_("'%s' has unknown return type; "
> 	       "cast the call to its declared return type"),
> 	     name);
>     }
> 
> In aarch64_push_dummy_call we do not have default_return_type, so cannot
> determine between the two cases.
> 
> (In addition, aarch64_push_dummy_call incorrectly resolves the return
> type for IFUNC).

Can you expand a bit on this IFUNC remark?


> However, aarch64_push_dummy_call only requires the return value in order
> to calculate lang_struct_return ... which has previously been calculated
> in the caller:
> 
>      This is slightly awkward, ideally the flag "lang_struct_return"
>      would be passed to the targets implementation of push_dummy_call.
>      Rather that change the target interface we call the language code
>      directly ourselves.
> 

Ah, nice, the solution was right there.  :-)

> The fix is simple:
> Patch 1: Update gdbarch interface to pass lang_struct_return.
> Patch 2: Remove incorrect code and use the passed in lang_struct_return.
> 

Since cover letters don't end up in git, this info should be
somehow migrated into the commit logs of the two patches.

Thanks,
Pedro Alves

  parent reply	other threads:[~2018-10-09 16:10 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-01 15:53 Alan Hayward
2018-10-01 15:53 ` [PATCH v2 1/2] Add lang_struct_return to _push_dummy_call Alan Hayward
2018-10-09 16:14   ` Pedro Alves
2018-10-10 11:54     ` Alan Hayward
2018-10-01 15:53 ` [PATCH v2 2/2] Aarch64: Fix segfault when casting dummy calls Alan Hayward
2018-10-09 16:15   ` Pedro Alves
2018-10-09  8:26 ` [PING][PATCH v2 0/2] " Alan Hayward
2018-10-09 16:10 ` Pedro Alves [this message]
2018-10-09 17:50   ` [PATCH " Alan Hayward
2018-10-10  8:23     ` Pedro Alves
2018-10-10 11:54       ` 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=57873989-fc65-634f-c6f8-8c2a976e4f9f@redhat.com \
    --to=palves@redhat.com \
    --cc=alan.hayward@arm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=nd@arm.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).