(root)/
binutils-2.41/
bfd/
elfxx-riscv.h
       1  /* RISC-V ELF specific backend routines.
       2     Copyright (C) 2011-2023 Free Software Foundation, Inc.
       3  
       4     Contributed by Andrew Waterman (andrew@sifive.com).
       5     Based on MIPS target.
       6  
       7     This file is part of BFD, the Binary File Descriptor library.
       8  
       9     This program is free software; you can redistribute it and/or modify
      10     it under the terms of the GNU General Public License as published by
      11     the Free Software Foundation; either version 3 of the License, or
      12     (at your option) any later version.
      13  
      14     This program is distributed in the hope that it will be useful,
      15     but WITHOUT ANY WARRANTY; without even the implied warranty of
      16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17     GNU General Public License for more details.
      18  
      19     You should have received a copy of the GNU General Public License
      20     along with this program; see the file COPYING3. If not,
      21     see <http://www.gnu.org/licenses/>.  */
      22  
      23  #include "elf/common.h"
      24  #include "elf/internal.h"
      25  #include "opcode/riscv.h"
      26  #include "cpu-riscv.h"
      27  
      28  #define RISCV_UNKNOWN_VERSION -1
      29  
      30  struct riscv_elf_params
      31  {
      32    /* Whether to relax code sequences to GP-relative addressing.  */
      33    bool relax_gp;
      34  };
      35  
      36  extern void riscv_elf32_set_options (struct bfd_link_info *,
      37  				     struct riscv_elf_params *);
      38  extern void riscv_elf64_set_options (struct bfd_link_info *,
      39  				     struct riscv_elf_params *);
      40  
      41  extern reloc_howto_type *
      42  riscv_reloc_name_lookup (bfd *, const char *);
      43  
      44  extern reloc_howto_type *
      45  riscv_reloc_type_lookup (bfd *, bfd_reloc_code_real_type);
      46  
      47  extern reloc_howto_type *
      48  riscv_elf_rtype_to_howto (bfd *, unsigned int r_type);
      49  
      50  /* The information of architecture attribute.  */
      51  struct riscv_subset_t
      52  {
      53    const char *name;
      54    int major_version;
      55    int minor_version;
      56    struct riscv_subset_t *next;
      57  };
      58  
      59  typedef struct riscv_subset_t riscv_subset_t;
      60  
      61  typedef struct
      62  {
      63    riscv_subset_t *head;
      64    riscv_subset_t *tail;
      65    const char *arch_str;
      66  } riscv_subset_list_t;
      67  
      68  extern void
      69  riscv_release_subset_list (riscv_subset_list_t *);
      70  
      71  extern void
      72  riscv_add_subset (riscv_subset_list_t *,
      73  		  const char *,
      74  		  int, int);
      75  
      76  extern bool
      77  riscv_lookup_subset (const riscv_subset_list_t *,
      78  		     const char *,
      79  		     riscv_subset_t **);
      80  
      81  typedef struct
      82  {
      83    riscv_subset_list_t *subset_list;
      84    void (*error_handler) (const char *,
      85  			 ...) ATTRIBUTE_PRINTF_1;
      86    unsigned *xlen;
      87    enum riscv_spec_class *isa_spec;
      88    bool check_unknown_prefixed_ext;
      89  } riscv_parse_subset_t;
      90  
      91  extern bool
      92  riscv_parse_subset (riscv_parse_subset_t *,
      93  		    const char *);
      94  
      95  extern void
      96  riscv_release_subset_list (riscv_subset_list_t *);
      97  
      98  extern char *
      99  riscv_arch_str (unsigned, const riscv_subset_list_t *);
     100  
     101  extern size_t
     102  riscv_estimate_digit (unsigned);
     103  
     104  extern int
     105  riscv_compare_subsets (const char *, const char *);
     106  
     107  extern riscv_subset_list_t *
     108  riscv_copy_subset_list (riscv_subset_list_t *);
     109  
     110  extern bool
     111  riscv_update_subset (riscv_parse_subset_t *, const char *);
     112  
     113  extern bool
     114  riscv_subset_supports (riscv_parse_subset_t *, const char *);
     115  
     116  extern bool
     117  riscv_multi_subset_supports (riscv_parse_subset_t *, enum riscv_insn_class);
     118  
     119  extern const char *
     120  riscv_multi_subset_supports_ext (riscv_parse_subset_t *, enum riscv_insn_class);
     121  
     122  extern void
     123  bfd_elf32_riscv_set_data_segment_info (struct bfd_link_info *, int *);
     124  extern void
     125  bfd_elf64_riscv_set_data_segment_info (struct bfd_link_info *, int *);