https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81968

--- Comment #40 from ro at CeBiTec dot Uni-Bielefeld.DE <ro at CeBiTec dot 
Uni-Bielefeld.DE> ---
> --- Comment #39 from Richard Biener <rguenth at gcc dot gnu.org> ---
[...]
>> * On x86, of the previous 32 ld: fatal: has invalid sh_info errors, 16
>>   are now gone.
>> 
>>   However, I've many (1284 in g++.log) instances of
>> 
>> ld: warning: symbol .symtab[2] has invalid section index; ignored:
>>         (file /var/tmp//ccyttLYbdebugobjtem value=9);
>> 
>>   Those links end with
>> 
>> ld: fatal: file /var/tmp//ccyttLYbdebugobjtem: section
>> [6].rel.gnu.debuglto_.debug_info: has invalid sh_info: 9
>> 
>>   and ld SEGVing, again in the ld -r step.
>> 
>>   The warnings are from symtab entries like
>> 
>> Symbol Table Section:  .symtab
>>   index  value size  type bind oth ver shndx         name
>>     [0]      0    0  NOTY LOCL  D    0 UNDEF         
>>     [1]      0    0  FILE LOCL  D    0 ABS           pr42987_0.C
>>     [2]      0    0  NOTY LOCL  D    0 9             
>> 
>>   and section 9 doesn't exist, where the input object (cp_lto_pr42987_0.o)
>> has
>
> Just guessing that it maybe doesn't like NOTYPE on local defs?  I would

I don't think so.  With your patch, the affected symbols are SECT
instead of LOCL, otherwise no difference.

> expect that before the partial link step that section 9 would exist.

It does indeed as I mentioned (cp_lto_pr42987_0.o is the input object
corresponding to ccyttLYbdebugobjtem).

> Does
>
> Index: libiberty/simple-object-elf.c
> ===================================================================
> --- libiberty/simple-object-elf.c       (revision 256070)
> +++ libiberty/simple-object-elf.c       (working copy)
> @@ -1400,9 +1400,9 @@ simple_object_elf_copy_lto_debug_section
>                                            gnu_lto - strings);
>                           ELF_SET_FIELD (type_functions, ei_class, Sym,
>                                          ent, st_shndx, Elf_Half, SHN_UNDEF);
> +                         *st_info = ELF_ST_INFO (bind, STT_NOTYPE);
>                         }
>                       *st_other = other;
> -                     *st_info = ELF_ST_INFO (bind, STT_NOTYPE);
>                       ELF_SET_FIELD (type_functions, ei_class, Sym,
>                                      ent, st_value, Elf_Addr, 0);
>                       ELF_SET_FIELD (type_functions, ei_class, Sym,
>
> fix these errors?

Unfortunately not: it's really the section index pointing to the
non-existing (i.e. eliminated) .gnu.debuglto_.debug_info section.

        Rainer

Reply via email to