This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/2] z/OS Support: Catching segfaults


On Sun, Jan 26, 2020 at 07:37:53PM +0800, David Lanzenörfer wrote:
> When handling the z/OS object files in F4SA format certain fields
> are blank which caused segfaults in ld during linking.

Where were the segfaults?  As far as I know, bfd_link_hash_lookup is
fine with an empty string,

> @@ -508,7 +508,7 @@ bfd_link_hash_lookup (struct bfd_link_hash_table *table,
>  {
>    struct bfd_link_hash_entry *ret;
>  
> -  if (table == NULL || string == NULL)
> +  if (table == NULL || string == NULL || string[0]=='\0' )

so this isn't OK.  The formatting is wrong too.

> --- a/ld/ldlang.c
> +++ b/ld/ldlang.c
> @@ -6521,6 +6521,8 @@ foreach_start_stop (void (*func) (struct bfd_link_hash_entry *))
>  static void
>  undef_start_stop (struct bfd_link_hash_entry *h)
>  {
> +  if (h==-1)
> +    return;
>    if (h->ldscript_def)
>      return;
>  
> @@ -6586,6 +6588,8 @@ lang_init_startof_sizeof (void)
>  static void
>  set_start_stop (struct bfd_link_hash_entry *h)
>  {
> +  if(h==-1)
> +    return;
>    if (h->ldscript_def
>        || h->type != bfd_link_hash_defined)
>      return;

These also are not OK.  You should prevent whatever caused an entry in
start_stop_syms[] from being -1, rather than papering over the problem
like this.

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]