1 /* RISC-V ELF specific backend routines. 2 Copyright (C) 2011-2020 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 26 extern reloc_howto_type * 27 riscv_reloc_name_lookup (bfd *, const char *); 28 29 extern reloc_howto_type * 30 riscv_reloc_type_lookup (bfd *, bfd_reloc_code_real_type); 31 32 extern reloc_howto_type * 33 riscv_elf_rtype_to_howto (bfd *, unsigned int r_type); 34 35 #define RISCV_DONT_CARE_VERSION -1 36 37 /* The information of architecture attribute. */ 38 struct riscv_subset_t 39 { 40 const char *name; 41 int major_version; 42 int minor_version; 43 struct riscv_subset_t *next; 44 }; 45 46 typedef struct riscv_subset_t riscv_subset_t; 47 48 typedef struct { 49 riscv_subset_t *head; 50 riscv_subset_t *tail; 51 } riscv_subset_list_t; 52 53 extern void 54 riscv_release_subset_list (riscv_subset_list_t *); 55 56 extern void 57 riscv_add_subset (riscv_subset_list_t *, 58 const char *, 59 int, int); 60 61 extern riscv_subset_t * 62 riscv_lookup_subset (const riscv_subset_list_t *, 63 const char *); 64 65 extern riscv_subset_t * 66 riscv_lookup_subset_version (const riscv_subset_list_t *, 67 const char *, 68 int, int); 69 70 typedef struct { 71 riscv_subset_list_t *subset_list; 72 void (*error_handler) (const char *, 73 ...) ATTRIBUTE_PRINTF_1; 74 unsigned *xlen; 75 } riscv_parse_subset_t; 76 77 extern bfd_boolean 78 riscv_parse_subset (riscv_parse_subset_t *, 79 const char *); 80 81 extern const char * 82 riscv_supported_std_ext (void); 83 84 extern void 85 riscv_release_subset_list (riscv_subset_list_t *); 86 87 extern char * 88 riscv_arch_str (unsigned, const riscv_subset_list_t *); 89