your change "bfd_find_nearest_line without debug info"
Alan Modra
amodra@gmail.com
Fri Oct 18 08:13:00 GMT 2013
On Fri, Oct 18, 2013 at 08:27:50AM +0100, Jan Beulich wrote:
> --- binutils-2.23.2/bfd/elflink.c
> +++ 2.23.2/bfd/elflink.c
> @@ -7457,6 +7457,7 @@ struct elf_outext_info
> bfd_boolean localsyms;
> bfd_boolean need_second_pass;
> bfd_boolean second_pass;
> + bfd_boolean file_sym_done;
> struct elf_final_link_info *flinfo;
> };
>
> @@ -8660,6 +8661,22 @@ elf_link_output_extsym (struct bfd_hash_
> || h->root.type == bfd_link_hash_defweak)
> && h->root.u.def.section->output_section != NULL))
> return TRUE;
> +
> + if (!eoinfo->file_sym_done
> + && (eoinfo->second_pass ? eoinfo->flinfo->filesym_count == 1
> + : eoinfo->flinfo->filesym_count > 1))
> + {
> + /* Output a FILE symbol so that following locals are not associated
> + with the wrong input file. */
> + memset (&sym, 0, sizeof (sym));
> + sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
> + sym.st_shndx = SHN_ABS;
> + if (!elf_link_output_sym (eoinfo->flinfo, NULL, &sym,
> + bfd_und_section_ptr, NULL))
> + return FALSE;
> +
> + eoinfo->file_sym_done = TRUE;
> + }
> }
> else
> {
> @@ -10907,17 +10924,6 @@ bfd_elf_final_link (bfd *abfd, struct bf
> }
> }
>
> - /* Output a FILE symbol so that following locals are not associated
> - with the wrong input file. */
> - memset (&elfsym, 0, sizeof (elfsym));
> - elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
> - elfsym.st_shndx = SHN_ABS;
> -
> - if (flinfo.filesym_count > 1
> - && !elf_link_output_sym (&flinfo, NULL, &elfsym,
> - bfd_und_section_ptr, NULL))
> - return FALSE;
> -
> /* Output any global symbols that got converted to local in a
> version script or due to symbol visibility. We do this in a
> separate step since ELF requires all local symbols to appear
> @@ -10929,15 +10935,11 @@ bfd_elf_final_link (bfd *abfd, struct bf
> eoinfo.localsyms = TRUE;
> eoinfo.need_second_pass = FALSE;
> eoinfo.second_pass = FALSE;
> + eoinfo.file_sym_done = FALSE;
> bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
> if (eoinfo.failed)
> return FALSE;
>
> - if (flinfo.filesym_count == 1
> - && !elf_link_output_sym (&flinfo, NULL, &elfsym,
> - bfd_und_section_ptr, NULL))
> - return FALSE;
> -
> if (eoinfo.need_second_pass)
> {
> eoinfo.second_pass = TRUE;
>
Looks good to me.
--
Alan Modra
Australia Development Lab, IBM
More information about the Binutils
mailing list