x

H.J. Lu hjl.tools@gmail.com
Mon Jan 18 00:40:58 GMT 2021


On Sun, Jan 17, 2021 at 4:28 PM Alan Modra <amodra@gmail.com> wrote:
>
> From 047fc1a199fd859df6f662f7ce47cf1e7bdf4e4d Mon Sep 17 00:00:00 2001
> From: Alan Modra <amodra@gmail.com>
> Date: Mon, 18 Jan 2021 09:38:22 +1030
> Subject: PR27198, segv in S_IS_WEAK
>
> This erroneous input
>  call (%rax)printf
> results in a NULL dereference.
>
> A nicer fix might be to parse "call (%rax)junk" as "call (%rax)" which
> is a variant of "call *%rax" missing the explicit indirection and with
> some extra parentheses, but I figure it's not worth bothering.
>
> OK?
>
>         PR 27198
>         * config/tc-i386.c (need_plt32_p): Return FALSE for NULL symbol.
>
> diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
> index a7d2ff1c1f9..b0140e1128a 100644
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -8628,6 +8628,9 @@ need_plt32_p (symbolS *s)
>    if (!object_64bit)
>      return FALSE;
>
> +  if (s == NULL)
> +    return FALSE;
> +
>    /* Weak or undefined symbol need PLT32 relocation.  */
>    if (S_IS_WEAK (s) || !S_IS_DEFINED (s))
>      return TRUE;
>

OK with a testcase to show that the assembler issues an error
message.

Thanks.


-- 
H.J.


More information about the Binutils mailing list