[PATCH] RISC-V: PR27584, surpress local and empty name symbols for nm.

Palmer Dabbelt palmer@dabbelt.com
Wed Apr 14 03:38:50 GMT 2021


On Tue, 13 Apr 2021 20:31:20 PDT (-0700), nelson.chu@sifive.com wrote:
> The local ".L0" symbol are usually generated to mark where the
> auipc instruction is, and clang also uses ".LBB" to do the same
> thing.  Besides, clang also uses the empty name symbols for label
> differences.  Arm surpress their mapping symbols by regarding them
> as special symbols, and MIPS surpress all local symbols.  Therefore,
> maybe RISC-V also need to surpress the local and empty name symbols
> for nm and related tools.  User can use "--special-syms" to show
> these surpressed symbols if they want.
>
> bfd/
>     * elfnn-riscv.c (riscv_elf_is_target_special_symbol): Added to
>     omit local and empty symbols since they usually generated to
>     mark the auipc instructions.
> ---
>  bfd/elfnn-riscv.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
> index 5e29278..a944b33 100644
> --- a/bfd/elfnn-riscv.c
> +++ b/bfd/elfnn-riscv.c
> @@ -5094,6 +5094,16 @@ riscv_elf_obj_attrs_arg_type (int tag)
>    return (tag & 1) != 0 ? ATTR_TYPE_FLAG_STR_VAL : ATTR_TYPE_FLAG_INT_VAL;
>  }
>
> +/* PR27584, Omit local and empty symbols since they usually generated
> +   for pcrel relocations.  */
> +
> +static bool
> +riscv_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
> +{
> +  return (!strcmp (sym->name, "")
> +	  || _bfd_elf_is_local_label_name (abfd, sym->name));
> +}
> +
>  #define TARGET_LITTLE_SYM			riscv_elfNN_vec
>  #define TARGET_LITTLE_NAME			"elfNN-littleriscv"
>  #define TARGET_BIG_SYM				riscv_elfNN_be_vec
> @@ -5106,6 +5116,7 @@ riscv_elf_obj_attrs_arg_type (int tag)
>  #define bfd_elfNN_bfd_reloc_type_lookup		riscv_reloc_type_lookup
>  #define bfd_elfNN_bfd_merge_private_bfd_data \
>    _bfd_riscv_elf_merge_private_bfd_data
> +#define bfd_elfNN_bfd_is_target_special_symbol	riscv_elf_is_target_special_symbol
>
>  #define elf_backend_copy_indirect_symbol	riscv_elf_copy_indirect_symbol
>  #define elf_backend_create_dynamic_sections	riscv_elf_create_dynamic_sections

LGTM.  IIRC we already suppress these elsewhere, so this is either a 
regression or we forgot to look at nm.

Thanks!


More information about the Binutils mailing list