Coverage Report

Created: 2026-03-10 08:46

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/binutils-gdb/bfd/elfxx-mips.h
Line
Count
Source
1
/* MIPS ELF specific backend routines.
2
   Copyright (C) 2002-2026 Free Software Foundation, Inc.
3
4
   This file is part of BFD, the Binary File Descriptor library.
5
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 3 of the License, or
9
   (at your option) any later version.
10
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19
   MA 02110-1301, USA.  */
20
21
#include "elf/common.h"
22
#include "elf/internal.h"
23
#include "elf/mips.h"
24
25
enum reloc_check
26
{
27
  check_std,
28
  check_inplace,
29
  check_shuffle
30
};
31
32
#ifndef MIPS_DEFAULT_R6
33
0
#define MIPS_DEFAULT_R6 0
34
#endif
35
36
struct ecoff_debug_info;
37
38
extern bool _bfd_mips_elf_mkobject
39
  (bfd *) ATTRIBUTE_HIDDEN;
40
extern bool _bfd_mips_elf_free_cached_info
41
  (bfd *) ATTRIBUTE_HIDDEN;
42
extern bool _bfd_mips_elf_new_section_hook
43
  (bfd *, asection *) ATTRIBUTE_HIDDEN;
44
extern void _bfd_mips_elf_symbol_processing
45
  (bfd *, asymbol *) ATTRIBUTE_HIDDEN;
46
extern unsigned int _bfd_mips_elf_eh_frame_address_size
47
  (bfd *, const asection *) ATTRIBUTE_HIDDEN;
48
extern bool _bfd_mips_elf_name_local_section_symbols
49
  (bfd *) ATTRIBUTE_HIDDEN;
50
extern bool _bfd_mips_elf_section_processing
51
  (bfd *, Elf_Internal_Shdr *) ATTRIBUTE_HIDDEN;
52
extern bool _bfd_mips_elf_section_from_shdr
53
  (bfd *, Elf_Internal_Shdr *, const char *, int) ATTRIBUTE_HIDDEN;
54
extern bool _bfd_mips_elf_fake_sections
55
  (bfd *, Elf_Internal_Shdr *, asection *) ATTRIBUTE_HIDDEN;
56
extern bool _bfd_mips_elf_section_from_bfd_section
57
  (bfd *, asection *, int *) ATTRIBUTE_HIDDEN;
58
extern bool _bfd_mips_elf_add_symbol_hook
59
  (bfd *, struct bfd_link_info *, Elf_Internal_Sym *,
60
   const char **, flagword *, asection **, bfd_vma *) ATTRIBUTE_HIDDEN;
61
extern int _bfd_mips_elf_link_output_symbol_hook
62
  (struct bfd_link_info *, const char *, Elf_Internal_Sym *,
63
   asection *, struct elf_link_hash_entry *) ATTRIBUTE_HIDDEN;
64
extern bool _bfd_mips_elf_create_dynamic_sections
65
  (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
66
extern bool _bfd_mips_elf_check_relocs
67
  (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *)
68
  ATTRIBUTE_HIDDEN;
69
extern bool _bfd_mips_elf_adjust_dynamic_symbol
70
  (struct bfd_link_info *, struct elf_link_hash_entry *) ATTRIBUTE_HIDDEN;
71
extern bool _bfd_mips_elf_late_size_sections
72
  (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
73
extern int _bfd_mips_elf_relocate_section
74
  (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
75
   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **) ATTRIBUTE_HIDDEN;
76
extern bool _bfd_mips_elf_finish_dynamic_symbol
77
  (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
78
   Elf_Internal_Sym *) ATTRIBUTE_HIDDEN;
79
extern bool _bfd_mips_vxworks_finish_dynamic_symbol
80
  (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
81
   Elf_Internal_Sym *) ATTRIBUTE_HIDDEN;
82
extern bool _bfd_mips_elf_finish_dynamic_sections
83
  (bfd *, struct bfd_link_info *, bfd_byte *) ATTRIBUTE_HIDDEN;
84
extern bool _bfd_mips_elf_sort_relocs_p
85
  (asection *) ATTRIBUTE_HIDDEN;
86
extern void _bfd_mips_final_write_processing
87
  (bfd *) ATTRIBUTE_HIDDEN;
88
extern bool _bfd_mips_elf_final_write_processing
89
  (bfd *) ATTRIBUTE_HIDDEN;
90
extern int _bfd_mips_elf_additional_program_headers
91
  (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
92
extern bool _bfd_mips_elf_modify_segment_map
93
  (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
94
extern asection * _bfd_mips_elf_gc_mark_hook
95
  (asection *, struct bfd_link_info *, struct elf_reloc_cookie *,
96
   struct elf_link_hash_entry *, unsigned int) ATTRIBUTE_HIDDEN;
97
extern void _bfd_mips_elf_copy_indirect_symbol
98
  (struct bfd_link_info *, struct elf_link_hash_entry *,
99
   struct elf_link_hash_entry *) ATTRIBUTE_HIDDEN;
100
extern void _bfd_mips_elf_hide_symbol
101
  (struct bfd_link_info *, struct elf_link_hash_entry *, bool) ATTRIBUTE_HIDDEN;
102
extern bool _bfd_mips_elf_ignore_discarded_relocs
103
  (asection *) ATTRIBUTE_HIDDEN;
104
extern bool _bfd_mips_elf_is_target_special_symbol
105
  (bfd *abfd, asymbol *sym) ATTRIBUTE_HIDDEN;
106
extern bool _bfd_mips_elf_finalize_section_relocs
107
  (bfd *, asection *, arelent **, unsigned int) ATTRIBUTE_HIDDEN;
108
extern bool _bfd_mips_elf_find_nearest_line
109
  (bfd *, asymbol **, asection *, bfd_vma,
110
   const char **, const char **, unsigned int *, unsigned int *)
111
  ATTRIBUTE_HIDDEN;
112
#define _bfd_mips_elf_find_nearest_line_with_alt \
113
  _bfd_nosymbols_find_nearest_line_with_alt
114
extern bool _bfd_mips_elf_find_inliner_info
115
  (bfd *, const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
116
extern bool _bfd_mips_elf_set_section_contents
117
  (bfd *, asection *, const void *, file_ptr, bfd_size_type) ATTRIBUTE_HIDDEN;
118
extern bfd_byte *_bfd_elf_mips_get_relocated_section_contents
119
  (bfd *, struct bfd_link_info *, struct bfd_link_order *,
120
   bfd_byte *, bool, asymbol **) ATTRIBUTE_HIDDEN;
121
extern bool _bfd_mips_elf_relax_section
122
  (bfd *abfd, asection *sec, struct bfd_link_info *link_info,
123
   bool *again) ATTRIBUTE_HIDDEN;
124
extern struct bfd_link_hash_table *_bfd_mips_elf_link_hash_table_create
125
  (bfd *) ATTRIBUTE_HIDDEN;
126
extern struct bfd_link_hash_table *_bfd_mips_vxworks_link_hash_table_create
127
  (bfd *) ATTRIBUTE_HIDDEN;
128
extern bool _bfd_mips_elf_final_link
129
  (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
130
extern bool _bfd_mips_elf_merge_private_bfd_data
131
  (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
132
extern bool _bfd_mips_elf_set_private_flags
133
  (bfd *, flagword) ATTRIBUTE_HIDDEN;
134
extern const char * _bfd_mips_fp_abi_string
135
  (int) ATTRIBUTE_HIDDEN;
136
extern bool _bfd_mips_elf_print_private_bfd_data
137
  (bfd *, void *) ATTRIBUTE_HIDDEN;
138
extern bool _bfd_mips_elf_discard_info
139
  (bfd *, struct elf_reloc_cookie *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
140
extern bool _bfd_mips_elf_write_section
141
  (bfd *, struct bfd_link_info *, asection *, bfd_byte *) ATTRIBUTE_HIDDEN;
142
143
extern bool _bfd_mips_elf_read_ecoff_info
144
  (bfd *, asection *, struct ecoff_debug_info *) ATTRIBUTE_HIDDEN;
145
extern void _bfd_mips_elf_reloc_unshuffle
146
  (bfd *, int, bool, bfd_byte *) ATTRIBUTE_HIDDEN;
147
extern void _bfd_mips_elf_reloc_shuffle
148
  (bfd *, int, bool, bfd_byte *) ATTRIBUTE_HIDDEN;
149
extern bool _bfd_mips_reloc_offset_in_range
150
  (bfd *, asection *, arelent *, enum reloc_check) ATTRIBUTE_HIDDEN;
151
extern bfd_reloc_status_type _bfd_mips_elf_gprel16_with_gp
152
  (bfd *, asymbol *, arelent *, asection *, bool, void *, bfd_vma)
153
  ATTRIBUTE_HIDDEN;
154
extern bfd_reloc_status_type _bfd_mips_elf32_gprel16_reloc
155
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **)
156
  ATTRIBUTE_HIDDEN;
157
extern bfd_reloc_status_type _bfd_mips_elf_hi16_reloc
158
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **)
159
  ATTRIBUTE_HIDDEN;
160
extern bfd_reloc_status_type _bfd_mips_elf_got16_reloc
161
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **)
162
  ATTRIBUTE_HIDDEN;
163
extern bfd_reloc_status_type _bfd_mips_elf_lo16_reloc
164
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **)
165
  ATTRIBUTE_HIDDEN;
166
extern bfd_reloc_status_type _bfd_mips_elf_generic_reloc
167
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **)
168
  ATTRIBUTE_HIDDEN;
169
extern unsigned long _bfd_elf_mips_mach
170
  (flagword);
171
extern bfd_vma _bfd_mips_elf_sign_extend
172
  (bfd_vma, int) ATTRIBUTE_HIDDEN;
173
extern void _bfd_mips_elf_merge_symbol_attribute
174
  (struct elf_link_hash_entry *, unsigned int, bool, bool) ATTRIBUTE_HIDDEN;
175
extern char *_bfd_mips_elf_get_target_dtag
176
  (bfd_vma) ATTRIBUTE_HIDDEN;
177
extern bool _bfd_mips_elf_ignore_undef_symbol
178
  (struct elf_link_hash_entry *) ATTRIBUTE_HIDDEN;
179
extern void _bfd_mips_elf_use_plts_and_copy_relocs
180
  (struct bfd_link_info *);
181
extern void _bfd_mips_elf_linker_flags
182
  (struct bfd_link_info *, bool, bool, bool);
183
extern void _bfd_mips_elf_compact_branches
184
  (struct bfd_link_info *, bool);
185
extern bool _bfd_mips_elf_init_stubs
186
  (struct bfd_link_info *,
187
   asection *(*) (const char *, asection *, asection *));
188
extern bfd_vma _bfd_mips_elf_plt_sym_val
189
  (bfd_vma, const asection *, const arelent *rel) ATTRIBUTE_HIDDEN;
190
extern long _bfd_mips_elf_get_synthetic_symtab
191
  (bfd *, long, asymbol **, long, asymbol **, asymbol **) ATTRIBUTE_HIDDEN;
192
extern bool _bfd_mips_elf_gc_mark_extra_sections
193
  (struct bfd_link_info *, elf_gc_mark_hook_fn) ATTRIBUTE_HIDDEN;
194
extern bool _bfd_mips_init_file_header
195
  (bfd *abfd, struct bfd_link_info *link_info) ATTRIBUTE_HIDDEN;
196
197
extern const struct bfd_elf_special_section
198
  _bfd_mips_elf_special_sections [] ATTRIBUTE_HIDDEN;
199
200
extern bool _bfd_mips_elf_common_definition
201
  (Elf_Internal_Sym *) ATTRIBUTE_HIDDEN;
202
203
extern int _bfd_mips_elf_compact_eh_encoding
204
  (struct bfd_link_info *) ATTRIBUTE_HIDDEN;
205
extern int _bfd_mips_elf_cant_unwind_opcode
206
  (struct bfd_link_info *) ATTRIBUTE_HIDDEN;
207
208
extern void _bfd_mips_elf_record_xhash_symbol
209
  (struct elf_link_hash_entry *h, bfd_vma xlat_loc) ATTRIBUTE_HIDDEN;
210
211
/* MIPS ABI flags data access.  For the disassembler.  */
212
extern struct elf_internal_abiflags_v0 *bfd_mips_elf_get_abiflags (bfd *);
213
214
static inline bool
215
gprel16_reloc_p (unsigned int r_type)
216
124
{
217
124
  return (r_type == R_MIPS_GPREL16
218
121
    || r_type == R_MIPS16_GPREL
219
117
    || r_type == R_MICROMIPS_GPREL16
220
115
    || r_type == R_MICROMIPS_GPREL7_S2);
221
124
}
elf32-mips.c:gprel16_reloc_p
Line
Count
Source
216
56
{
217
56
  return (r_type == R_MIPS_GPREL16
218
56
    || r_type == R_MIPS16_GPREL
219
54
    || r_type == R_MICROMIPS_GPREL16
220
52
    || r_type == R_MICROMIPS_GPREL7_S2);
221
56
}
Unexecuted instantiation: elf64-mips.c:gprel16_reloc_p
elfn32-mips.c:gprel16_reloc_p
Line
Count
Source
216
68
{
217
68
  return (r_type == R_MIPS_GPREL16
218
65
    || r_type == R_MIPS16_GPREL
219
63
    || r_type == R_MICROMIPS_GPREL16
220
63
    || r_type == R_MICROMIPS_GPREL7_S2);
221
68
}
Unexecuted instantiation: elfxx-mips.c:gprel16_reloc_p
Unexecuted instantiation: mips-dis.c:gprel16_reloc_p
222
223
static inline bool
224
literal_reloc_p (int r_type)
225
65
{
226
65
  return r_type == R_MIPS_LITERAL || r_type == R_MICROMIPS_LITERAL;
227
65
}
elf32-mips.c:literal_reloc_p
Line
Count
Source
225
65
{
226
65
  return r_type == R_MIPS_LITERAL || r_type == R_MICROMIPS_LITERAL;
227
65
}
Unexecuted instantiation: elf64-mips.c:literal_reloc_p
Unexecuted instantiation: elfn32-mips.c:literal_reloc_p
Unexecuted instantiation: elfxx-mips.c:literal_reloc_p
Unexecuted instantiation: mips-dis.c:literal_reloc_p
228
229
#define elf_backend_common_definition   _bfd_mips_elf_common_definition
230
#define elf_backend_name_local_section_symbols \
231
  _bfd_mips_elf_name_local_section_symbols
232
#define elf_backend_special_sections _bfd_mips_elf_special_sections
233
#define elf_backend_eh_frame_address_size _bfd_mips_elf_eh_frame_address_size
234
#define elf_backend_merge_symbol_attribute  _bfd_mips_elf_merge_symbol_attribute
235
#define elf_backend_ignore_undef_symbol _bfd_mips_elf_ignore_undef_symbol
236
#define elf_backend_init_file_header _bfd_mips_init_file_header
237
#define elf_backend_compact_eh_encoding _bfd_mips_elf_compact_eh_encoding
238
#define elf_backend_cant_unwind_opcode _bfd_mips_elf_cant_unwind_opcode
239
#define elf_backend_record_xhash_symbol _bfd_mips_elf_record_xhash_symbol
240
#define elf_backend_always_renumber_dynsyms true