This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH v2 05/15] Fix elf_gnu_ifunc_resolve_by_got buglet
- From: Simon Marchi <simark at simark dot ca>
- To: Pedro Alves <palves at redhat dot com>, gdb-patches at sourceware dot org
- Date: Sun, 1 Apr 2018 00:32:33 -0400
- Subject: Re: [PATCH v2 05/15] Fix elf_gnu_ifunc_resolve_by_got buglet
- References: <20180325191943.8246-1-palves@redhat.com> <20180325191943.8246-6-palves@redhat.com>
On 2018-03-25 03:19 PM, Pedro Alves wrote:
> The next patch will add a call to elf_gnu_ifunc_resolve_by_got that
> trips on a latent buglet -- the function is writing to its output
> parameter even if the address wasn't found, confusing the caller. The
> function's intro comment says:
>
> /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
> function NAME. If the address is found it is stored to *ADDR_P (if ADDR_P
> is not NULL) and the function returns 1. It returns 0 otherwise.
>
> So fix the function accordingly.
>
> gdb/ChangeLog:
> yyyy-mm-dd Pedro Alves <palves@redhat.com>
>
> * elfread.c (elf_gnu_ifunc_resolve_by_got): Don't write to *ADDR_P
> unless we actually resolved the ifunc.
> ---
> gdb/elfread.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/gdb/elfread.c b/gdb/elfread.c
> index 9ffbf99db6e..82ab3d891ce 100644
> --- a/gdb/elfread.c
> +++ b/gdb/elfread.c
> @@ -840,10 +840,12 @@ elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
> ¤t_target);
> addr = gdbarch_addr_bits_remove (gdbarch, addr);
>
> - if (addr_p)
> - *addr_p = addr;
> if (elf_gnu_ifunc_record_cache (name, addr))
> - return 1;
> + {
> + if (addr_p)
addr_p != NULL ?
Simon