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: your change "bfd_find_nearest_line without debug info"


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


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