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]

[PATCH 1/2 v2] RISC-V: Support ELF attribute for gas and readelf


This patch implement RISC-V ELF attribute[1] support for assembler and readelf.

Patch tested with 4 different configuration: (rv32gc, rv64gc) x (newlib, glibc)

Change list:
  - Fix several typo.
  - Fix test failed case on linux target.
  - New testcase for testing handling unknown attribute: attribute-unknown.
  - New option -march-attr and -mno-arch-attr to control emit arch
attribute by default or not.
  - New configure option --enable-default-riscv-attribute to control
the default behavior of -m[no-]arch-attr.
    - Note: disable by default in non-bare-mental target
  - Change the prefix of attribute to Tag_RISCV_.
  - Adjust Tag value to following even/odd rule.
  - Remove NO_DEFAULT for y priv_spec, priv_spec_minor, priv_spec_revision,
unsigned_access and stack_align
  - .attribute arch must appear before any instruction.
   - Note: .attribute arch got higher priority than -march.
  - Add document for .attribute.

ChangeLog:
bfd/
        * elfnn-riscv.c (riscv_elf_obj_attrs_arg_type): New.
        (elf_backend_obj_attrs_vendor): Define.
        (elf_backend_obj_attrs_section_type): Likewise.
        (elf_backend_obj_attrs_section): Likewise.
        (elf_backend_obj_attrs_arg_type): Define as
        riscv_elf_obj_attrs_arg_type.
        * elfxx-riscv.c (riscv_estimate_digit): New.
        (riscv_estimate_arch_strlen1): Likewise.
        (riscv_estimate_arch_strlen): Likewise.
        (riscv_arch_str1): Likewise.
        (riscv_arch_str): Likewise.
        * elfxx-riscv.h (riscv_arch_str): Declare.
binutils/
        * readelf.c (get_riscv_section_type_name): New function.
        (get_section_type_name): Add handler for RISC-V.
        (riscv_attr_tag_t): Declare.
        (riscv_attr_tag): New.
        (display_riscv_attribute): New function.
        (process_attributes): Add handler for RISC-V.
        * testsuite/binutils-all/strip-3.d: Remove .riscv.attribute
        section.

gas/
        * config/tc-riscv.c (DEFAULT_RISCV_ATTR): Define to 0 if not defined.
        (riscv_set_options): Add `arch_attr` field.
        (riscv_opts): Set default value for arch_attr.
        (riscv_write_out_arch_attr): New.
        (riscv_set_public_attributes): Likewise.
        (riscv_md_end): Likewise.
        (riscv_convert_symbolic_attribute): Likewise.
        (s_riscv_attribute): Likewise.
        (explicit_arch_attr): Likewise.
        (riscv_pseudo_table): Add .attribute to the table.
        (options): Add OPTION_ARCH_ATTR and OPTION_NO_ARCH_ATTR
        enumeration constants.
        (md_longopts): Add `march-attr' and `mno-arch-attr' options.
        (md_parse_option): Handle the new options.
        (md_show_usage): Document the `march-attr' option.
        * config/tc-riscv.h (md_end): Define as riscv_md_end
        (riscv_md_end): Declare.
        (CONVERT_SYMBOLIC_ATTRIBUTE): Define as
        riscv_convert_symbolic_attribute.
        (riscv_convert_symbolic_attribute): Declare.
        (start_assemble): Declare.
        * testsuite/gas/elf/elf.exp: Adjust test case for section2.e.
        * testsuite/gas/elf/section2.e-riscv: New.
        * testsuite/gas/riscv/attribute-01.d: New test
        * testsuite/gas/riscv/attribute-02.d: Likewise.
        * testsuite/gas/riscv/attribute-03.d: Likewise.
        * testsuite/gas/riscv/attribute-04.d: Likewise.
        * testsuite/gas/riscv/attribute-04.s: Likewise.
        * testsuite/gas/riscv/attribute-05.d: Likewise.
        * testsuite/gas/riscv/attribute-05.s: Likewise.
        * testsuite/gas/riscv/attribute-06.d: Likewise.
        * testsuite/gas/riscv/attribute-06.s: Likewise.
        * testsuite/gas/riscv/attribute-07.d: Likewise.
        * testsuite/gas/riscv/attribute-07.s: Likewise.
        * testsuite/gas/riscv/attribute-08.d: Likewise.
        * testsuite/gas/riscv/attribute-08.s: Likewise.
        * testsuite/gas/riscv/attribute-unknown.d: Likewise.
        * testsuite/gas/riscv/attribute-unknown.s: Likewise.
        * testsuite/gas/riscv/empty.l: Likewise.
        * doc/c-riscv.texi (.attribute): Add documentation.
        * configure.ac (--enable-default-riscv-attribute): New options.
        * configure: Re-generate.
        * config.in: Re-generate.


include/
        * elf/riscv.h (SHT_RISCV_ATTRIBUTES): Define.
        (Tag_RISCV_arch): Likewise.
        (Tag_RISCV_priv_spec): Likewise.
        (Tag_RISCV_priv_spec_minor): Likewise.
        (Tag_RISCV_priv_spec_revision): Likewise.
        (Tag_RISCV_unaligned_access): Likewise.
        (Tag_RISCV_stack_align): Likewise.

[1] https://github.com/riscv/riscv-elf-psabi-doc/pulls/71

Attachment: 0001-RISC-V-Support-ELF-attribute-for-gas-and-readelf.patch
Description: Binary data


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