Make the R_XSTORMY16_8 and R_XSTORMY16_16 relocs detect and complain about
[deliverable/binutils-gdb.git] / bfd / elfxx-mips.c
1 /* MIPS-specific support for ELF
2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003 Free Software Foundation, Inc.
4
5 Most of the information added by Ian Lance Taylor, Cygnus Support,
6 <ian@cygnus.com>.
7 N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
8 <mark@codesourcery.com>
9 Traditional MIPS targets support added by Koundinya.K, Dansk Data
10 Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
11
12 This file is part of BFD, the Binary File Descriptor library.
13
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
18
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with this program; if not, write to the Free Software
26 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
27
28 /* This file handles functionality common to the different MIPS ABI's. */
29
30 #include "bfd.h"
31 #include "sysdep.h"
32 #include "libbfd.h"
33 #include "libiberty.h"
34 #include "elf-bfd.h"
35 #include "elfxx-mips.h"
36 #include "elf/mips.h"
37
38 /* Get the ECOFF swapping routines. */
39 #include "coff/sym.h"
40 #include "coff/symconst.h"
41 #include "coff/ecoff.h"
42 #include "coff/mips.h"
43
44 #include "hashtab.h"
45
46 /* This structure is used to hold .got entries while estimating got
47 sizes. */
48 struct mips_got_entry
49 {
50 /* The input bfd in which the symbol is defined. */
51 bfd *abfd;
52 /* The index of the symbol, as stored in the relocation r_info, if
53 we have a local symbol; -1 otherwise. */
54 long symndx;
55 union
56 {
57 /* If abfd == NULL, an address that must be stored in the got. */
58 bfd_vma address;
59 /* If abfd != NULL && symndx != -1, the addend of the relocation
60 that should be added to the symbol value. */
61 bfd_vma addend;
62 /* If abfd != NULL && symndx == -1, the hash table entry
63 corresponding to a global symbol in the got (or, local, if
64 h->forced_local). */
65 struct mips_elf_link_hash_entry *h;
66 } d;
67 /* The offset from the beginning of the .got section to the entry
68 corresponding to this symbol+addend. If it's a global symbol
69 whose offset is yet to be decided, it's going to be -1. */
70 long gotidx;
71 };
72
73 /* This structure is used to hold .got information when linking. */
74
75 struct mips_got_info
76 {
77 /* The global symbol in the GOT with the lowest index in the dynamic
78 symbol table. */
79 struct elf_link_hash_entry *global_gotsym;
80 /* The number of global .got entries. */
81 unsigned int global_gotno;
82 /* The number of local .got entries. */
83 unsigned int local_gotno;
84 /* The number of local .got entries we have used. */
85 unsigned int assigned_gotno;
86 /* A hash table holding members of the got. */
87 struct htab *got_entries;
88 /* A hash table mapping input bfds to other mips_got_info. NULL
89 unless multi-got was necessary. */
90 struct htab *bfd2got;
91 /* In multi-got links, a pointer to the next got (err, rather, most
92 of the time, it points to the previous got). */
93 struct mips_got_info *next;
94 };
95
96 /* Map an input bfd to a got in a multi-got link. */
97
98 struct mips_elf_bfd2got_hash {
99 bfd *bfd;
100 struct mips_got_info *g;
101 };
102
103 /* Structure passed when traversing the bfd2got hash table, used to
104 create and merge bfd's gots. */
105
106 struct mips_elf_got_per_bfd_arg
107 {
108 /* A hashtable that maps bfds to gots. */
109 htab_t bfd2got;
110 /* The output bfd. */
111 bfd *obfd;
112 /* The link information. */
113 struct bfd_link_info *info;
114 /* A pointer to the primary got, i.e., the one that's going to get
115 the implicit relocations from DT_MIPS_LOCAL_GOTNO and
116 DT_MIPS_GOTSYM. */
117 struct mips_got_info *primary;
118 /* A non-primary got we're trying to merge with other input bfd's
119 gots. */
120 struct mips_got_info *current;
121 /* The maximum number of got entries that can be addressed with a
122 16-bit offset. */
123 unsigned int max_count;
124 /* The number of local and global entries in the primary got. */
125 unsigned int primary_count;
126 /* The number of local and global entries in the current got. */
127 unsigned int current_count;
128 };
129
130 /* Another structure used to pass arguments for got entries traversal. */
131
132 struct mips_elf_set_global_got_offset_arg
133 {
134 struct mips_got_info *g;
135 int value;
136 unsigned int needed_relocs;
137 struct bfd_link_info *info;
138 };
139
140 struct _mips_elf_section_data
141 {
142 struct bfd_elf_section_data elf;
143 union
144 {
145 struct mips_got_info *got_info;
146 bfd_byte *tdata;
147 } u;
148 };
149
150 #define mips_elf_section_data(sec) \
151 ((struct _mips_elf_section_data *) elf_section_data (sec))
152
153 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
154 the dynamic symbols. */
155
156 struct mips_elf_hash_sort_data
157 {
158 /* The symbol in the global GOT with the lowest dynamic symbol table
159 index. */
160 struct elf_link_hash_entry *low;
161 /* The least dynamic symbol table index corresponding to a symbol
162 with a GOT entry. */
163 long min_got_dynindx;
164 /* The greatest dynamic symbol table index corresponding to a symbol
165 with a GOT entry that is not referenced (e.g., a dynamic symbol
166 with dynamic relocations pointing to it from non-primary
167 GOTs). */
168 long max_unref_got_dynindx;
169 /* The greatest dynamic symbol table index not corresponding to a
170 symbol without a GOT entry. */
171 long max_non_got_dynindx;
172 };
173
174 /* The MIPS ELF linker needs additional information for each symbol in
175 the global hash table. */
176
177 struct mips_elf_link_hash_entry
178 {
179 struct elf_link_hash_entry root;
180
181 /* External symbol information. */
182 EXTR esym;
183
184 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
185 this symbol. */
186 unsigned int possibly_dynamic_relocs;
187
188 /* If the R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 reloc is against
189 a readonly section. */
190 bfd_boolean readonly_reloc;
191
192 /* The index of the first dynamic relocation (in the .rel.dyn
193 section) against this symbol. */
194 unsigned int min_dyn_reloc_index;
195
196 /* We must not create a stub for a symbol that has relocations
197 related to taking the function's address, i.e. any but
198 R_MIPS_CALL*16 ones -- see "MIPS ABI Supplement, 3rd Edition",
199 p. 4-20. */
200 bfd_boolean no_fn_stub;
201
202 /* If there is a stub that 32 bit functions should use to call this
203 16 bit function, this points to the section containing the stub. */
204 asection *fn_stub;
205
206 /* Whether we need the fn_stub; this is set if this symbol appears
207 in any relocs other than a 16 bit call. */
208 bfd_boolean need_fn_stub;
209
210 /* If there is a stub that 16 bit functions should use to call this
211 32 bit function, this points to the section containing the stub. */
212 asection *call_stub;
213
214 /* This is like the call_stub field, but it is used if the function
215 being called returns a floating point value. */
216 asection *call_fp_stub;
217
218 /* Are we forced local? .*/
219 bfd_boolean forced_local;
220 };
221
222 /* MIPS ELF linker hash table. */
223
224 struct mips_elf_link_hash_table
225 {
226 struct elf_link_hash_table root;
227 #if 0
228 /* We no longer use this. */
229 /* String section indices for the dynamic section symbols. */
230 bfd_size_type dynsym_sec_strindex[SIZEOF_MIPS_DYNSYM_SECNAMES];
231 #endif
232 /* The number of .rtproc entries. */
233 bfd_size_type procedure_count;
234 /* The size of the .compact_rel section (if SGI_COMPAT). */
235 bfd_size_type compact_rel_size;
236 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic
237 entry is set to the address of __rld_obj_head as in IRIX5. */
238 bfd_boolean use_rld_obj_head;
239 /* This is the value of the __rld_map or __rld_obj_head symbol. */
240 bfd_vma rld_value;
241 /* This is set if we see any mips16 stub sections. */
242 bfd_boolean mips16_stubs_seen;
243 };
244
245 /* Structure used to pass information to mips_elf_output_extsym. */
246
247 struct extsym_info
248 {
249 bfd *abfd;
250 struct bfd_link_info *info;
251 struct ecoff_debug_info *debug;
252 const struct ecoff_debug_swap *swap;
253 bfd_boolean failed;
254 };
255
256 /* The names of the runtime procedure table symbols used on IRIX5. */
257
258 static const char * const mips_elf_dynsym_rtproc_names[] =
259 {
260 "_procedure_table",
261 "_procedure_string_table",
262 "_procedure_table_size",
263 NULL
264 };
265
266 /* These structures are used to generate the .compact_rel section on
267 IRIX5. */
268
269 typedef struct
270 {
271 unsigned long id1; /* Always one? */
272 unsigned long num; /* Number of compact relocation entries. */
273 unsigned long id2; /* Always two? */
274 unsigned long offset; /* The file offset of the first relocation. */
275 unsigned long reserved0; /* Zero? */
276 unsigned long reserved1; /* Zero? */
277 } Elf32_compact_rel;
278
279 typedef struct
280 {
281 bfd_byte id1[4];
282 bfd_byte num[4];
283 bfd_byte id2[4];
284 bfd_byte offset[4];
285 bfd_byte reserved0[4];
286 bfd_byte reserved1[4];
287 } Elf32_External_compact_rel;
288
289 typedef struct
290 {
291 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
292 unsigned int rtype : 4; /* Relocation types. See below. */
293 unsigned int dist2to : 8;
294 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
295 unsigned long konst; /* KONST field. See below. */
296 unsigned long vaddr; /* VADDR to be relocated. */
297 } Elf32_crinfo;
298
299 typedef struct
300 {
301 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
302 unsigned int rtype : 4; /* Relocation types. See below. */
303 unsigned int dist2to : 8;
304 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
305 unsigned long konst; /* KONST field. See below. */
306 } Elf32_crinfo2;
307
308 typedef struct
309 {
310 bfd_byte info[4];
311 bfd_byte konst[4];
312 bfd_byte vaddr[4];
313 } Elf32_External_crinfo;
314
315 typedef struct
316 {
317 bfd_byte info[4];
318 bfd_byte konst[4];
319 } Elf32_External_crinfo2;
320
321 /* These are the constants used to swap the bitfields in a crinfo. */
322
323 #define CRINFO_CTYPE (0x1)
324 #define CRINFO_CTYPE_SH (31)
325 #define CRINFO_RTYPE (0xf)
326 #define CRINFO_RTYPE_SH (27)
327 #define CRINFO_DIST2TO (0xff)
328 #define CRINFO_DIST2TO_SH (19)
329 #define CRINFO_RELVADDR (0x7ffff)
330 #define CRINFO_RELVADDR_SH (0)
331
332 /* A compact relocation info has long (3 words) or short (2 words)
333 formats. A short format doesn't have VADDR field and relvaddr
334 fields contains ((VADDR - vaddr of the previous entry) >> 2). */
335 #define CRF_MIPS_LONG 1
336 #define CRF_MIPS_SHORT 0
337
338 /* There are 4 types of compact relocation at least. The value KONST
339 has different meaning for each type:
340
341 (type) (konst)
342 CT_MIPS_REL32 Address in data
343 CT_MIPS_WORD Address in word (XXX)
344 CT_MIPS_GPHI_LO GP - vaddr
345 CT_MIPS_JMPAD Address to jump
346 */
347
348 #define CRT_MIPS_REL32 0xa
349 #define CRT_MIPS_WORD 0xb
350 #define CRT_MIPS_GPHI_LO 0xc
351 #define CRT_MIPS_JMPAD 0xd
352
353 #define mips_elf_set_cr_format(x,format) ((x).ctype = (format))
354 #define mips_elf_set_cr_type(x,type) ((x).rtype = (type))
355 #define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v))
356 #define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2)
357 \f
358 /* The structure of the runtime procedure descriptor created by the
359 loader for use by the static exception system. */
360
361 typedef struct runtime_pdr {
362 bfd_vma adr; /* Memory address of start of procedure. */
363 long regmask; /* Save register mask. */
364 long regoffset; /* Save register offset. */
365 long fregmask; /* Save floating point register mask. */
366 long fregoffset; /* Save floating point register offset. */
367 long frameoffset; /* Frame size. */
368 short framereg; /* Frame pointer register. */
369 short pcreg; /* Offset or reg of return pc. */
370 long irpss; /* Index into the runtime string table. */
371 long reserved;
372 struct exception_info *exception_info;/* Pointer to exception array. */
373 } RPDR, *pRPDR;
374 #define cbRPDR sizeof (RPDR)
375 #define rpdNil ((pRPDR) 0)
376 \f
377 static struct bfd_hash_entry *mips_elf_link_hash_newfunc
378 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
379 static void ecoff_swap_rpdr_out
380 PARAMS ((bfd *, const RPDR *, struct rpdr_ext *));
381 static bfd_boolean mips_elf_create_procedure_table
382 PARAMS ((PTR, bfd *, struct bfd_link_info *, asection *,
383 struct ecoff_debug_info *));
384 static bfd_boolean mips_elf_check_mips16_stubs
385 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
386 static void bfd_mips_elf32_swap_gptab_in
387 PARAMS ((bfd *, const Elf32_External_gptab *, Elf32_gptab *));
388 static void bfd_mips_elf32_swap_gptab_out
389 PARAMS ((bfd *, const Elf32_gptab *, Elf32_External_gptab *));
390 static void bfd_elf32_swap_compact_rel_out
391 PARAMS ((bfd *, const Elf32_compact_rel *, Elf32_External_compact_rel *));
392 static void bfd_elf32_swap_crinfo_out
393 PARAMS ((bfd *, const Elf32_crinfo *, Elf32_External_crinfo *));
394 #if 0
395 static void bfd_mips_elf_swap_msym_in
396 PARAMS ((bfd *, const Elf32_External_Msym *, Elf32_Internal_Msym *));
397 #endif
398 static void bfd_mips_elf_swap_msym_out
399 PARAMS ((bfd *, const Elf32_Internal_Msym *, Elf32_External_Msym *));
400 static int sort_dynamic_relocs
401 PARAMS ((const void *, const void *));
402 static int sort_dynamic_relocs_64
403 PARAMS ((const void *, const void *));
404 static bfd_boolean mips_elf_output_extsym
405 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
406 static int gptab_compare PARAMS ((const void *, const void *));
407 static asection * mips_elf_rel_dyn_section PARAMS ((bfd *, bfd_boolean));
408 static asection * mips_elf_got_section PARAMS ((bfd *, bfd_boolean));
409 static struct mips_got_info *mips_elf_got_info
410 PARAMS ((bfd *, asection **));
411 static long mips_elf_get_global_gotsym_index PARAMS ((bfd *abfd));
412 static bfd_vma mips_elf_local_got_index
413 PARAMS ((bfd *, bfd *, struct bfd_link_info *, bfd_vma));
414 static bfd_vma mips_elf_global_got_index
415 PARAMS ((bfd *, bfd *, struct elf_link_hash_entry *));
416 static bfd_vma mips_elf_got_page
417 PARAMS ((bfd *, bfd *, struct bfd_link_info *, bfd_vma, bfd_vma *));
418 static bfd_vma mips_elf_got16_entry
419 PARAMS ((bfd *, bfd *, struct bfd_link_info *, bfd_vma, bfd_boolean));
420 static bfd_vma mips_elf_got_offset_from_index
421 PARAMS ((bfd *, bfd *, bfd *, bfd_vma));
422 static struct mips_got_entry *mips_elf_create_local_got_entry
423 PARAMS ((bfd *, bfd *, struct mips_got_info *, asection *, bfd_vma));
424 static bfd_boolean mips_elf_sort_hash_table
425 PARAMS ((struct bfd_link_info *, unsigned long));
426 static bfd_boolean mips_elf_sort_hash_table_f
427 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
428 static bfd_boolean mips_elf_record_local_got_symbol
429 PARAMS ((bfd *, long, bfd_vma, struct mips_got_info *));
430 static bfd_boolean mips_elf_record_global_got_symbol
431 PARAMS ((struct elf_link_hash_entry *, bfd *, struct bfd_link_info *,
432 struct mips_got_info *));
433 static const Elf_Internal_Rela *mips_elf_next_relocation
434 PARAMS ((bfd *, unsigned int, const Elf_Internal_Rela *,
435 const Elf_Internal_Rela *));
436 static bfd_boolean mips_elf_local_relocation_p
437 PARAMS ((bfd *, const Elf_Internal_Rela *, asection **, bfd_boolean));
438 static bfd_vma mips_elf_sign_extend PARAMS ((bfd_vma, int));
439 static bfd_boolean mips_elf_overflow_p PARAMS ((bfd_vma, int));
440 static bfd_vma mips_elf_high PARAMS ((bfd_vma));
441 static bfd_vma mips_elf_higher PARAMS ((bfd_vma));
442 static bfd_vma mips_elf_highest PARAMS ((bfd_vma));
443 static bfd_boolean mips_elf_create_compact_rel_section
444 PARAMS ((bfd *, struct bfd_link_info *));
445 static bfd_boolean mips_elf_create_got_section
446 PARAMS ((bfd *, struct bfd_link_info *, bfd_boolean));
447 static asection *mips_elf_create_msym_section
448 PARAMS ((bfd *));
449 static bfd_reloc_status_type mips_elf_calculate_relocation
450 PARAMS ((bfd *, bfd *, asection *, struct bfd_link_info *,
451 const Elf_Internal_Rela *, bfd_vma, reloc_howto_type *,
452 Elf_Internal_Sym *, asection **, bfd_vma *, const char **,
453 bfd_boolean *, bfd_boolean));
454 static bfd_vma mips_elf_obtain_contents
455 PARAMS ((reloc_howto_type *, const Elf_Internal_Rela *, bfd *, bfd_byte *));
456 static bfd_boolean mips_elf_perform_relocation
457 PARAMS ((struct bfd_link_info *, reloc_howto_type *,
458 const Elf_Internal_Rela *, bfd_vma, bfd *, asection *, bfd_byte *,
459 bfd_boolean));
460 static bfd_boolean mips_elf_stub_section_p
461 PARAMS ((bfd *, asection *));
462 static void mips_elf_allocate_dynamic_relocations
463 PARAMS ((bfd *, unsigned int));
464 static bfd_boolean mips_elf_create_dynamic_relocation
465 PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
466 struct mips_elf_link_hash_entry *, asection *,
467 bfd_vma, bfd_vma *, asection *));
468 static void mips_set_isa_flags PARAMS ((bfd *));
469 static INLINE char* elf_mips_abi_name PARAMS ((bfd *));
470 static void mips_elf_irix6_finish_dynamic_symbol
471 PARAMS ((bfd *, const char *, Elf_Internal_Sym *));
472 static bfd_boolean mips_mach_extends_p PARAMS ((unsigned long, unsigned long));
473 static bfd_boolean mips_32bit_flags_p PARAMS ((flagword));
474 static INLINE hashval_t mips_elf_hash_bfd_vma PARAMS ((bfd_vma));
475 static hashval_t mips_elf_got_entry_hash PARAMS ((const PTR));
476 static int mips_elf_got_entry_eq PARAMS ((const PTR, const PTR));
477
478 static bfd_boolean mips_elf_multi_got
479 PARAMS ((bfd *, struct bfd_link_info *, struct mips_got_info *,
480 asection *, bfd_size_type));
481 static hashval_t mips_elf_multi_got_entry_hash PARAMS ((const PTR));
482 static int mips_elf_multi_got_entry_eq PARAMS ((const PTR, const PTR));
483 static hashval_t mips_elf_bfd2got_entry_hash PARAMS ((const PTR));
484 static int mips_elf_bfd2got_entry_eq PARAMS ((const PTR, const PTR));
485 static int mips_elf_make_got_per_bfd PARAMS ((void **, void *));
486 static int mips_elf_merge_gots PARAMS ((void **, void *));
487 static int mips_elf_set_global_got_offset PARAMS ((void**, void *));
488 static int mips_elf_resolve_final_got_entry PARAMS ((void**, void *));
489 static void mips_elf_resolve_final_got_entries
490 PARAMS ((struct mips_got_info *));
491 static bfd_vma mips_elf_adjust_gp
492 PARAMS ((bfd *, struct mips_got_info *, bfd *));
493 static struct mips_got_info *mips_elf_got_for_ibfd
494 PARAMS ((struct mips_got_info *, bfd *));
495
496 /* This will be used when we sort the dynamic relocation records. */
497 static bfd *reldyn_sorting_bfd;
498
499 /* Nonzero if ABFD is using the N32 ABI. */
500
501 #define ABI_N32_P(abfd) \
502 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
503
504 /* Nonzero if ABFD is using the N64 ABI. */
505 #define ABI_64_P(abfd) \
506 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
507
508 /* Nonzero if ABFD is using NewABI conventions. */
509 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
510
511 /* The IRIX compatibility level we are striving for. */
512 #define IRIX_COMPAT(abfd) \
513 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
514
515 /* Whether we are trying to be compatible with IRIX at all. */
516 #define SGI_COMPAT(abfd) \
517 (IRIX_COMPAT (abfd) != ict_none)
518
519 /* The name of the options section. */
520 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
521 (ABI_64_P (abfd) ? ".MIPS.options" : ".options")
522
523 /* The name of the stub section. */
524 #define MIPS_ELF_STUB_SECTION_NAME(abfd) \
525 (ABI_64_P (abfd) ? ".MIPS.stubs" : ".stub")
526
527 /* The size of an external REL relocation. */
528 #define MIPS_ELF_REL_SIZE(abfd) \
529 (get_elf_backend_data (abfd)->s->sizeof_rel)
530
531 /* The size of an external dynamic table entry. */
532 #define MIPS_ELF_DYN_SIZE(abfd) \
533 (get_elf_backend_data (abfd)->s->sizeof_dyn)
534
535 /* The size of a GOT entry. */
536 #define MIPS_ELF_GOT_SIZE(abfd) \
537 (get_elf_backend_data (abfd)->s->arch_size / 8)
538
539 /* The size of a symbol-table entry. */
540 #define MIPS_ELF_SYM_SIZE(abfd) \
541 (get_elf_backend_data (abfd)->s->sizeof_sym)
542
543 /* The default alignment for sections, as a power of two. */
544 #define MIPS_ELF_LOG_FILE_ALIGN(abfd) \
545 (get_elf_backend_data (abfd)->s->file_align == 8 ? 3 : 2)
546
547 /* Get word-sized data. */
548 #define MIPS_ELF_GET_WORD(abfd, ptr) \
549 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
550
551 /* Put out word-sized data. */
552 #define MIPS_ELF_PUT_WORD(abfd, val, ptr) \
553 (ABI_64_P (abfd) \
554 ? bfd_put_64 (abfd, val, ptr) \
555 : bfd_put_32 (abfd, val, ptr))
556
557 /* Add a dynamic symbol table-entry. */
558 #ifdef BFD64
559 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
560 (ABI_64_P (elf_hash_table (info)->dynobj) \
561 ? bfd_elf64_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val) \
562 : bfd_elf32_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val))
563 #else
564 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
565 (ABI_64_P (elf_hash_table (info)->dynobj) \
566 ? (abort (), FALSE) \
567 : bfd_elf32_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val))
568 #endif
569
570 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \
571 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
572
573 /* Determine whether the internal relocation of index REL_IDX is REL
574 (zero) or RELA (non-zero). The assumption is that, if there are
575 two relocation sections for this section, one of them is REL and
576 the other is RELA. If the index of the relocation we're testing is
577 in range for the first relocation section, check that the external
578 relocation size is that for RELA. It is also assumed that, if
579 rel_idx is not in range for the first section, and this first
580 section contains REL relocs, then the relocation is in the second
581 section, that is RELA. */
582 #define MIPS_RELOC_RELA_P(abfd, sec, rel_idx) \
583 ((NUM_SHDR_ENTRIES (&elf_section_data (sec)->rel_hdr) \
584 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel \
585 > (bfd_vma)(rel_idx)) \
586 == (elf_section_data (sec)->rel_hdr.sh_entsize \
587 == (ABI_64_P (abfd) ? sizeof (Elf64_External_Rela) \
588 : sizeof (Elf32_External_Rela))))
589
590 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
591 from smaller values. Start with zero, widen, *then* decrement. */
592 #define MINUS_ONE (((bfd_vma)0) - 1)
593
594 /* The number of local .got entries we reserve. */
595 #define MIPS_RESERVED_GOTNO (2)
596
597 /* The offset of $gp from the beginning of the .got section. */
598 #define ELF_MIPS_GP_OFFSET(abfd) (0x7ff0)
599
600 /* The maximum size of the GOT for it to be addressable using 16-bit
601 offsets from $gp. */
602 #define MIPS_ELF_GOT_MAX_SIZE(abfd) (ELF_MIPS_GP_OFFSET(abfd) + 0x7fff)
603
604 /* Instructions which appear in a stub. For some reason the stub is
605 slightly different on an SGI system. */
606 #define STUB_LW(abfd) \
607 ((ABI_64_P (abfd) \
608 ? 0xdf998010 /* ld t9,0x8010(gp) */ \
609 : 0x8f998010)) /* lw t9,0x8010(gp) */
610 #define STUB_MOVE(abfd) \
611 (SGI_COMPAT (abfd) ? 0x03e07825 : 0x03e07821) /* move t7,ra */
612 #define STUB_JALR 0x0320f809 /* jal t9 */
613 #define STUB_LI16(abfd) \
614 (SGI_COMPAT (abfd) ? 0x34180000 : 0x24180000) /* ori t8,zero,0 */
615 #define MIPS_FUNCTION_STUB_SIZE (16)
616
617 /* The name of the dynamic interpreter. This is put in the .interp
618 section. */
619
620 #define ELF_DYNAMIC_INTERPRETER(abfd) \
621 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \
622 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \
623 : "/usr/lib/libc.so.1")
624
625 #ifdef BFD64
626 #define MNAME(bfd,pre,pos) \
627 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
628 #define ELF_R_SYM(bfd, i) \
629 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
630 #define ELF_R_TYPE(bfd, i) \
631 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
632 #define ELF_R_INFO(bfd, s, t) \
633 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
634 #else
635 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
636 #define ELF_R_SYM(bfd, i) \
637 (ELF32_R_SYM (i))
638 #define ELF_R_TYPE(bfd, i) \
639 (ELF32_R_TYPE (i))
640 #define ELF_R_INFO(bfd, s, t) \
641 (ELF32_R_INFO (s, t))
642 #endif
643 \f
644 /* The mips16 compiler uses a couple of special sections to handle
645 floating point arguments.
646
647 Section names that look like .mips16.fn.FNNAME contain stubs that
648 copy floating point arguments from the fp regs to the gp regs and
649 then jump to FNNAME. If any 32 bit function calls FNNAME, the
650 call should be redirected to the stub instead. If no 32 bit
651 function calls FNNAME, the stub should be discarded. We need to
652 consider any reference to the function, not just a call, because
653 if the address of the function is taken we will need the stub,
654 since the address might be passed to a 32 bit function.
655
656 Section names that look like .mips16.call.FNNAME contain stubs
657 that copy floating point arguments from the gp regs to the fp
658 regs and then jump to FNNAME. If FNNAME is a 32 bit function,
659 then any 16 bit function that calls FNNAME should be redirected
660 to the stub instead. If FNNAME is not a 32 bit function, the
661 stub should be discarded.
662
663 .mips16.call.fp.FNNAME sections are similar, but contain stubs
664 which call FNNAME and then copy the return value from the fp regs
665 to the gp regs. These stubs store the return value in $18 while
666 calling FNNAME; any function which might call one of these stubs
667 must arrange to save $18 around the call. (This case is not
668 needed for 32 bit functions that call 16 bit functions, because
669 16 bit functions always return floating point values in both
670 $f0/$f1 and $2/$3.)
671
672 Note that in all cases FNNAME might be defined statically.
673 Therefore, FNNAME is not used literally. Instead, the relocation
674 information will indicate which symbol the section is for.
675
676 We record any stubs that we find in the symbol table. */
677
678 #define FN_STUB ".mips16.fn."
679 #define CALL_STUB ".mips16.call."
680 #define CALL_FP_STUB ".mips16.call.fp."
681 \f
682 /* Look up an entry in a MIPS ELF linker hash table. */
683
684 #define mips_elf_link_hash_lookup(table, string, create, copy, follow) \
685 ((struct mips_elf_link_hash_entry *) \
686 elf_link_hash_lookup (&(table)->root, (string), (create), \
687 (copy), (follow)))
688
689 /* Traverse a MIPS ELF linker hash table. */
690
691 #define mips_elf_link_hash_traverse(table, func, info) \
692 (elf_link_hash_traverse \
693 (&(table)->root, \
694 (bfd_boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \
695 (info)))
696
697 /* Get the MIPS ELF linker hash table from a link_info structure. */
698
699 #define mips_elf_hash_table(p) \
700 ((struct mips_elf_link_hash_table *) ((p)->hash))
701
702 /* Create an entry in a MIPS ELF linker hash table. */
703
704 static struct bfd_hash_entry *
705 mips_elf_link_hash_newfunc (entry, table, string)
706 struct bfd_hash_entry *entry;
707 struct bfd_hash_table *table;
708 const char *string;
709 {
710 struct mips_elf_link_hash_entry *ret =
711 (struct mips_elf_link_hash_entry *) entry;
712
713 /* Allocate the structure if it has not already been allocated by a
714 subclass. */
715 if (ret == (struct mips_elf_link_hash_entry *) NULL)
716 ret = ((struct mips_elf_link_hash_entry *)
717 bfd_hash_allocate (table,
718 sizeof (struct mips_elf_link_hash_entry)));
719 if (ret == (struct mips_elf_link_hash_entry *) NULL)
720 return (struct bfd_hash_entry *) ret;
721
722 /* Call the allocation method of the superclass. */
723 ret = ((struct mips_elf_link_hash_entry *)
724 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
725 table, string));
726 if (ret != (struct mips_elf_link_hash_entry *) NULL)
727 {
728 /* Set local fields. */
729 memset (&ret->esym, 0, sizeof (EXTR));
730 /* We use -2 as a marker to indicate that the information has
731 not been set. -1 means there is no associated ifd. */
732 ret->esym.ifd = -2;
733 ret->possibly_dynamic_relocs = 0;
734 ret->readonly_reloc = FALSE;
735 ret->min_dyn_reloc_index = 0;
736 ret->no_fn_stub = FALSE;
737 ret->fn_stub = NULL;
738 ret->need_fn_stub = FALSE;
739 ret->call_stub = NULL;
740 ret->call_fp_stub = NULL;
741 ret->forced_local = FALSE;
742 }
743
744 return (struct bfd_hash_entry *) ret;
745 }
746
747 bfd_boolean
748 _bfd_mips_elf_new_section_hook (abfd, sec)
749 bfd *abfd;
750 asection *sec;
751 {
752 struct _mips_elf_section_data *sdata;
753 bfd_size_type amt = sizeof (*sdata);
754
755 sdata = (struct _mips_elf_section_data *) bfd_zalloc (abfd, amt);
756 if (sdata == NULL)
757 return FALSE;
758 sec->used_by_bfd = (PTR) sdata;
759
760 return _bfd_elf_new_section_hook (abfd, sec);
761 }
762 \f
763 /* Read ECOFF debugging information from a .mdebug section into a
764 ecoff_debug_info structure. */
765
766 bfd_boolean
767 _bfd_mips_elf_read_ecoff_info (abfd, section, debug)
768 bfd *abfd;
769 asection *section;
770 struct ecoff_debug_info *debug;
771 {
772 HDRR *symhdr;
773 const struct ecoff_debug_swap *swap;
774 char *ext_hdr = NULL;
775
776 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
777 memset (debug, 0, sizeof (*debug));
778
779 ext_hdr = (char *) bfd_malloc (swap->external_hdr_size);
780 if (ext_hdr == NULL && swap->external_hdr_size != 0)
781 goto error_return;
782
783 if (! bfd_get_section_contents (abfd, section, ext_hdr, (file_ptr) 0,
784 swap->external_hdr_size))
785 goto error_return;
786
787 symhdr = &debug->symbolic_header;
788 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
789
790 /* The symbolic header contains absolute file offsets and sizes to
791 read. */
792 #define READ(ptr, offset, count, size, type) \
793 if (symhdr->count == 0) \
794 debug->ptr = NULL; \
795 else \
796 { \
797 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
798 debug->ptr = (type) bfd_malloc (amt); \
799 if (debug->ptr == NULL) \
800 goto error_return; \
801 if (bfd_seek (abfd, (file_ptr) symhdr->offset, SEEK_SET) != 0 \
802 || bfd_bread (debug->ptr, amt, abfd) != amt) \
803 goto error_return; \
804 }
805
806 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
807 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, PTR);
808 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, PTR);
809 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, PTR);
810 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, PTR);
811 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
812 union aux_ext *);
813 READ (ss, cbSsOffset, issMax, sizeof (char), char *);
814 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
815 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, PTR);
816 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, PTR);
817 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, PTR);
818 #undef READ
819
820 debug->fdr = NULL;
821 debug->adjust = NULL;
822
823 return TRUE;
824
825 error_return:
826 if (ext_hdr != NULL)
827 free (ext_hdr);
828 if (debug->line != NULL)
829 free (debug->line);
830 if (debug->external_dnr != NULL)
831 free (debug->external_dnr);
832 if (debug->external_pdr != NULL)
833 free (debug->external_pdr);
834 if (debug->external_sym != NULL)
835 free (debug->external_sym);
836 if (debug->external_opt != NULL)
837 free (debug->external_opt);
838 if (debug->external_aux != NULL)
839 free (debug->external_aux);
840 if (debug->ss != NULL)
841 free (debug->ss);
842 if (debug->ssext != NULL)
843 free (debug->ssext);
844 if (debug->external_fdr != NULL)
845 free (debug->external_fdr);
846 if (debug->external_rfd != NULL)
847 free (debug->external_rfd);
848 if (debug->external_ext != NULL)
849 free (debug->external_ext);
850 return FALSE;
851 }
852 \f
853 /* Swap RPDR (runtime procedure table entry) for output. */
854
855 static void
856 ecoff_swap_rpdr_out (abfd, in, ex)
857 bfd *abfd;
858 const RPDR *in;
859 struct rpdr_ext *ex;
860 {
861 H_PUT_S32 (abfd, in->adr, ex->p_adr);
862 H_PUT_32 (abfd, in->regmask, ex->p_regmask);
863 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
864 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
865 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
866 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
867
868 H_PUT_16 (abfd, in->framereg, ex->p_framereg);
869 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
870
871 H_PUT_32 (abfd, in->irpss, ex->p_irpss);
872 #if 0 /* FIXME */
873 H_PUT_S32 (abfd, in->exception_info, ex->p_exception_info);
874 #endif
875 }
876
877 /* Create a runtime procedure table from the .mdebug section. */
878
879 static bfd_boolean
880 mips_elf_create_procedure_table (handle, abfd, info, s, debug)
881 PTR handle;
882 bfd *abfd;
883 struct bfd_link_info *info;
884 asection *s;
885 struct ecoff_debug_info *debug;
886 {
887 const struct ecoff_debug_swap *swap;
888 HDRR *hdr = &debug->symbolic_header;
889 RPDR *rpdr, *rp;
890 struct rpdr_ext *erp;
891 PTR rtproc;
892 struct pdr_ext *epdr;
893 struct sym_ext *esym;
894 char *ss, **sv;
895 char *str;
896 bfd_size_type size;
897 bfd_size_type count;
898 unsigned long sindex;
899 unsigned long i;
900 PDR pdr;
901 SYMR sym;
902 const char *no_name_func = _("static procedure (no name)");
903
904 epdr = NULL;
905 rpdr = NULL;
906 esym = NULL;
907 ss = NULL;
908 sv = NULL;
909
910 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
911
912 sindex = strlen (no_name_func) + 1;
913 count = hdr->ipdMax;
914 if (count > 0)
915 {
916 size = swap->external_pdr_size;
917
918 epdr = (struct pdr_ext *) bfd_malloc (size * count);
919 if (epdr == NULL)
920 goto error_return;
921
922 if (! _bfd_ecoff_get_accumulated_pdr (handle, (PTR) epdr))
923 goto error_return;
924
925 size = sizeof (RPDR);
926 rp = rpdr = (RPDR *) bfd_malloc (size * count);
927 if (rpdr == NULL)
928 goto error_return;
929
930 size = sizeof (char *);
931 sv = (char **) bfd_malloc (size * count);
932 if (sv == NULL)
933 goto error_return;
934
935 count = hdr->isymMax;
936 size = swap->external_sym_size;
937 esym = (struct sym_ext *) bfd_malloc (size * count);
938 if (esym == NULL)
939 goto error_return;
940
941 if (! _bfd_ecoff_get_accumulated_sym (handle, (PTR) esym))
942 goto error_return;
943
944 count = hdr->issMax;
945 ss = (char *) bfd_malloc (count);
946 if (ss == NULL)
947 goto error_return;
948 if (! _bfd_ecoff_get_accumulated_ss (handle, (PTR) ss))
949 goto error_return;
950
951 count = hdr->ipdMax;
952 for (i = 0; i < (unsigned long) count; i++, rp++)
953 {
954 (*swap->swap_pdr_in) (abfd, (PTR) (epdr + i), &pdr);
955 (*swap->swap_sym_in) (abfd, (PTR) &esym[pdr.isym], &sym);
956 rp->adr = sym.value;
957 rp->regmask = pdr.regmask;
958 rp->regoffset = pdr.regoffset;
959 rp->fregmask = pdr.fregmask;
960 rp->fregoffset = pdr.fregoffset;
961 rp->frameoffset = pdr.frameoffset;
962 rp->framereg = pdr.framereg;
963 rp->pcreg = pdr.pcreg;
964 rp->irpss = sindex;
965 sv[i] = ss + sym.iss;
966 sindex += strlen (sv[i]) + 1;
967 }
968 }
969
970 size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
971 size = BFD_ALIGN (size, 16);
972 rtproc = (PTR) bfd_alloc (abfd, size);
973 if (rtproc == NULL)
974 {
975 mips_elf_hash_table (info)->procedure_count = 0;
976 goto error_return;
977 }
978
979 mips_elf_hash_table (info)->procedure_count = count + 2;
980
981 erp = (struct rpdr_ext *) rtproc;
982 memset (erp, 0, sizeof (struct rpdr_ext));
983 erp++;
984 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
985 strcpy (str, no_name_func);
986 str += strlen (no_name_func) + 1;
987 for (i = 0; i < count; i++)
988 {
989 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
990 strcpy (str, sv[i]);
991 str += strlen (sv[i]) + 1;
992 }
993 H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
994
995 /* Set the size and contents of .rtproc section. */
996 s->_raw_size = size;
997 s->contents = (bfd_byte *) rtproc;
998
999 /* Skip this section later on (I don't think this currently
1000 matters, but someday it might). */
1001 s->link_order_head = (struct bfd_link_order *) NULL;
1002
1003 if (epdr != NULL)
1004 free (epdr);
1005 if (rpdr != NULL)
1006 free (rpdr);
1007 if (esym != NULL)
1008 free (esym);
1009 if (ss != NULL)
1010 free (ss);
1011 if (sv != NULL)
1012 free (sv);
1013
1014 return TRUE;
1015
1016 error_return:
1017 if (epdr != NULL)
1018 free (epdr);
1019 if (rpdr != NULL)
1020 free (rpdr);
1021 if (esym != NULL)
1022 free (esym);
1023 if (ss != NULL)
1024 free (ss);
1025 if (sv != NULL)
1026 free (sv);
1027 return FALSE;
1028 }
1029
1030 /* Check the mips16 stubs for a particular symbol, and see if we can
1031 discard them. */
1032
1033 static bfd_boolean
1034 mips_elf_check_mips16_stubs (h, data)
1035 struct mips_elf_link_hash_entry *h;
1036 PTR data ATTRIBUTE_UNUSED;
1037 {
1038 if (h->root.root.type == bfd_link_hash_warning)
1039 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1040
1041 if (h->fn_stub != NULL
1042 && ! h->need_fn_stub)
1043 {
1044 /* We don't need the fn_stub; the only references to this symbol
1045 are 16 bit calls. Clobber the size to 0 to prevent it from
1046 being included in the link. */
1047 h->fn_stub->_raw_size = 0;
1048 h->fn_stub->_cooked_size = 0;
1049 h->fn_stub->flags &= ~SEC_RELOC;
1050 h->fn_stub->reloc_count = 0;
1051 h->fn_stub->flags |= SEC_EXCLUDE;
1052 }
1053
1054 if (h->call_stub != NULL
1055 && h->root.other == STO_MIPS16)
1056 {
1057 /* We don't need the call_stub; this is a 16 bit function, so
1058 calls from other 16 bit functions are OK. Clobber the size
1059 to 0 to prevent it from being included in the link. */
1060 h->call_stub->_raw_size = 0;
1061 h->call_stub->_cooked_size = 0;
1062 h->call_stub->flags &= ~SEC_RELOC;
1063 h->call_stub->reloc_count = 0;
1064 h->call_stub->flags |= SEC_EXCLUDE;
1065 }
1066
1067 if (h->call_fp_stub != NULL
1068 && h->root.other == STO_MIPS16)
1069 {
1070 /* We don't need the call_stub; this is a 16 bit function, so
1071 calls from other 16 bit functions are OK. Clobber the size
1072 to 0 to prevent it from being included in the link. */
1073 h->call_fp_stub->_raw_size = 0;
1074 h->call_fp_stub->_cooked_size = 0;
1075 h->call_fp_stub->flags &= ~SEC_RELOC;
1076 h->call_fp_stub->reloc_count = 0;
1077 h->call_fp_stub->flags |= SEC_EXCLUDE;
1078 }
1079
1080 return TRUE;
1081 }
1082 \f
1083 bfd_reloc_status_type
1084 _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry, input_section,
1085 relocateable, data, gp)
1086 bfd *abfd;
1087 asymbol *symbol;
1088 arelent *reloc_entry;
1089 asection *input_section;
1090 bfd_boolean relocateable;
1091 PTR data;
1092 bfd_vma gp;
1093 {
1094 bfd_vma relocation;
1095 unsigned long insn;
1096 unsigned long val;
1097
1098 if (bfd_is_com_section (symbol->section))
1099 relocation = 0;
1100 else
1101 relocation = symbol->value;
1102
1103 relocation += symbol->section->output_section->vma;
1104 relocation += symbol->section->output_offset;
1105
1106 if (reloc_entry->address > input_section->_cooked_size)
1107 return bfd_reloc_outofrange;
1108
1109 insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
1110
1111 /* Set val to the offset into the section or symbol. */
1112 if (reloc_entry->howto->src_mask == 0)
1113 {
1114 /* This case occurs with the 64-bit MIPS ELF ABI. */
1115 val = reloc_entry->addend;
1116 }
1117 else
1118 {
1119 val = ((insn & 0xffff) + reloc_entry->addend) & 0xffff;
1120 if (val & 0x8000)
1121 val -= 0x10000;
1122 }
1123
1124 /* Adjust val for the final section location and GP value. If we
1125 are producing relocateable output, we don't want to do this for
1126 an external symbol. */
1127 if (! relocateable
1128 || (symbol->flags & BSF_SECTION_SYM) != 0)
1129 val += relocation - gp;
1130
1131 insn = (insn & ~0xffff) | (val & 0xffff);
1132 bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
1133
1134 if (relocateable)
1135 reloc_entry->address += input_section->output_offset;
1136
1137 else if ((long) val >= 0x8000 || (long) val < -0x8000)
1138 return bfd_reloc_overflow;
1139
1140 return bfd_reloc_ok;
1141 }
1142 \f
1143 /* Swap an entry in a .gptab section. Note that these routines rely
1144 on the equivalence of the two elements of the union. */
1145
1146 static void
1147 bfd_mips_elf32_swap_gptab_in (abfd, ex, in)
1148 bfd *abfd;
1149 const Elf32_External_gptab *ex;
1150 Elf32_gptab *in;
1151 {
1152 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
1153 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
1154 }
1155
1156 static void
1157 bfd_mips_elf32_swap_gptab_out (abfd, in, ex)
1158 bfd *abfd;
1159 const Elf32_gptab *in;
1160 Elf32_External_gptab *ex;
1161 {
1162 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
1163 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
1164 }
1165
1166 static void
1167 bfd_elf32_swap_compact_rel_out (abfd, in, ex)
1168 bfd *abfd;
1169 const Elf32_compact_rel *in;
1170 Elf32_External_compact_rel *ex;
1171 {
1172 H_PUT_32 (abfd, in->id1, ex->id1);
1173 H_PUT_32 (abfd, in->num, ex->num);
1174 H_PUT_32 (abfd, in->id2, ex->id2);
1175 H_PUT_32 (abfd, in->offset, ex->offset);
1176 H_PUT_32 (abfd, in->reserved0, ex->reserved0);
1177 H_PUT_32 (abfd, in->reserved1, ex->reserved1);
1178 }
1179
1180 static void
1181 bfd_elf32_swap_crinfo_out (abfd, in, ex)
1182 bfd *abfd;
1183 const Elf32_crinfo *in;
1184 Elf32_External_crinfo *ex;
1185 {
1186 unsigned long l;
1187
1188 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
1189 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
1190 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
1191 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
1192 H_PUT_32 (abfd, l, ex->info);
1193 H_PUT_32 (abfd, in->konst, ex->konst);
1194 H_PUT_32 (abfd, in->vaddr, ex->vaddr);
1195 }
1196
1197 #if 0
1198 /* Swap in an MSYM entry. */
1199
1200 static void
1201 bfd_mips_elf_swap_msym_in (abfd, ex, in)
1202 bfd *abfd;
1203 const Elf32_External_Msym *ex;
1204 Elf32_Internal_Msym *in;
1205 {
1206 in->ms_hash_value = H_GET_32 (abfd, ex->ms_hash_value);
1207 in->ms_info = H_GET_32 (abfd, ex->ms_info);
1208 }
1209 #endif
1210 /* Swap out an MSYM entry. */
1211
1212 static void
1213 bfd_mips_elf_swap_msym_out (abfd, in, ex)
1214 bfd *abfd;
1215 const Elf32_Internal_Msym *in;
1216 Elf32_External_Msym *ex;
1217 {
1218 H_PUT_32 (abfd, in->ms_hash_value, ex->ms_hash_value);
1219 H_PUT_32 (abfd, in->ms_info, ex->ms_info);
1220 }
1221 \f
1222 /* A .reginfo section holds a single Elf32_RegInfo structure. These
1223 routines swap this structure in and out. They are used outside of
1224 BFD, so they are globally visible. */
1225
1226 void
1227 bfd_mips_elf32_swap_reginfo_in (abfd, ex, in)
1228 bfd *abfd;
1229 const Elf32_External_RegInfo *ex;
1230 Elf32_RegInfo *in;
1231 {
1232 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
1233 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
1234 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
1235 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
1236 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
1237 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
1238 }
1239
1240 void
1241 bfd_mips_elf32_swap_reginfo_out (abfd, in, ex)
1242 bfd *abfd;
1243 const Elf32_RegInfo *in;
1244 Elf32_External_RegInfo *ex;
1245 {
1246 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
1247 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
1248 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
1249 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
1250 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
1251 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
1252 }
1253
1254 /* In the 64 bit ABI, the .MIPS.options section holds register
1255 information in an Elf64_Reginfo structure. These routines swap
1256 them in and out. They are globally visible because they are used
1257 outside of BFD. These routines are here so that gas can call them
1258 without worrying about whether the 64 bit ABI has been included. */
1259
1260 void
1261 bfd_mips_elf64_swap_reginfo_in (abfd, ex, in)
1262 bfd *abfd;
1263 const Elf64_External_RegInfo *ex;
1264 Elf64_Internal_RegInfo *in;
1265 {
1266 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
1267 in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
1268 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
1269 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
1270 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
1271 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
1272 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
1273 }
1274
1275 void
1276 bfd_mips_elf64_swap_reginfo_out (abfd, in, ex)
1277 bfd *abfd;
1278 const Elf64_Internal_RegInfo *in;
1279 Elf64_External_RegInfo *ex;
1280 {
1281 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
1282 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
1283 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
1284 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
1285 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
1286 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
1287 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
1288 }
1289
1290 /* Swap in an options header. */
1291
1292 void
1293 bfd_mips_elf_swap_options_in (abfd, ex, in)
1294 bfd *abfd;
1295 const Elf_External_Options *ex;
1296 Elf_Internal_Options *in;
1297 {
1298 in->kind = H_GET_8 (abfd, ex->kind);
1299 in->size = H_GET_8 (abfd, ex->size);
1300 in->section = H_GET_16 (abfd, ex->section);
1301 in->info = H_GET_32 (abfd, ex->info);
1302 }
1303
1304 /* Swap out an options header. */
1305
1306 void
1307 bfd_mips_elf_swap_options_out (abfd, in, ex)
1308 bfd *abfd;
1309 const Elf_Internal_Options *in;
1310 Elf_External_Options *ex;
1311 {
1312 H_PUT_8 (abfd, in->kind, ex->kind);
1313 H_PUT_8 (abfd, in->size, ex->size);
1314 H_PUT_16 (abfd, in->section, ex->section);
1315 H_PUT_32 (abfd, in->info, ex->info);
1316 }
1317 \f
1318 /* This function is called via qsort() to sort the dynamic relocation
1319 entries by increasing r_symndx value. */
1320
1321 static int
1322 sort_dynamic_relocs (arg1, arg2)
1323 const PTR arg1;
1324 const PTR arg2;
1325 {
1326 Elf_Internal_Rela int_reloc1;
1327 Elf_Internal_Rela int_reloc2;
1328
1329 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
1330 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
1331
1332 return ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
1333 }
1334
1335 /* Like sort_dynamic_relocs, but used for elf64 relocations. */
1336
1337 static int
1338 sort_dynamic_relocs_64 (arg1, arg2)
1339 const PTR arg1;
1340 const PTR arg2;
1341 {
1342 Elf_Internal_Rela int_reloc1[3];
1343 Elf_Internal_Rela int_reloc2[3];
1344
1345 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
1346 (reldyn_sorting_bfd, arg1, int_reloc1);
1347 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
1348 (reldyn_sorting_bfd, arg2, int_reloc2);
1349
1350 return (ELF64_R_SYM (int_reloc1[0].r_info)
1351 - ELF64_R_SYM (int_reloc2[0].r_info));
1352 }
1353
1354
1355 /* This routine is used to write out ECOFF debugging external symbol
1356 information. It is called via mips_elf_link_hash_traverse. The
1357 ECOFF external symbol information must match the ELF external
1358 symbol information. Unfortunately, at this point we don't know
1359 whether a symbol is required by reloc information, so the two
1360 tables may wind up being different. We must sort out the external
1361 symbol information before we can set the final size of the .mdebug
1362 section, and we must set the size of the .mdebug section before we
1363 can relocate any sections, and we can't know which symbols are
1364 required by relocation until we relocate the sections.
1365 Fortunately, it is relatively unlikely that any symbol will be
1366 stripped but required by a reloc. In particular, it can not happen
1367 when generating a final executable. */
1368
1369 static bfd_boolean
1370 mips_elf_output_extsym (h, data)
1371 struct mips_elf_link_hash_entry *h;
1372 PTR data;
1373 {
1374 struct extsym_info *einfo = (struct extsym_info *) data;
1375 bfd_boolean strip;
1376 asection *sec, *output_section;
1377
1378 if (h->root.root.type == bfd_link_hash_warning)
1379 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1380
1381 if (h->root.indx == -2)
1382 strip = FALSE;
1383 else if (((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1384 || (h->root.elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
1385 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
1386 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
1387 strip = TRUE;
1388 else if (einfo->info->strip == strip_all
1389 || (einfo->info->strip == strip_some
1390 && bfd_hash_lookup (einfo->info->keep_hash,
1391 h->root.root.root.string,
1392 FALSE, FALSE) == NULL))
1393 strip = TRUE;
1394 else
1395 strip = FALSE;
1396
1397 if (strip)
1398 return TRUE;
1399
1400 if (h->esym.ifd == -2)
1401 {
1402 h->esym.jmptbl = 0;
1403 h->esym.cobol_main = 0;
1404 h->esym.weakext = 0;
1405 h->esym.reserved = 0;
1406 h->esym.ifd = ifdNil;
1407 h->esym.asym.value = 0;
1408 h->esym.asym.st = stGlobal;
1409
1410 if (h->root.root.type == bfd_link_hash_undefined
1411 || h->root.root.type == bfd_link_hash_undefweak)
1412 {
1413 const char *name;
1414
1415 /* Use undefined class. Also, set class and type for some
1416 special symbols. */
1417 name = h->root.root.root.string;
1418 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
1419 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
1420 {
1421 h->esym.asym.sc = scData;
1422 h->esym.asym.st = stLabel;
1423 h->esym.asym.value = 0;
1424 }
1425 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
1426 {
1427 h->esym.asym.sc = scAbs;
1428 h->esym.asym.st = stLabel;
1429 h->esym.asym.value =
1430 mips_elf_hash_table (einfo->info)->procedure_count;
1431 }
1432 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
1433 {
1434 h->esym.asym.sc = scAbs;
1435 h->esym.asym.st = stLabel;
1436 h->esym.asym.value = elf_gp (einfo->abfd);
1437 }
1438 else
1439 h->esym.asym.sc = scUndefined;
1440 }
1441 else if (h->root.root.type != bfd_link_hash_defined
1442 && h->root.root.type != bfd_link_hash_defweak)
1443 h->esym.asym.sc = scAbs;
1444 else
1445 {
1446 const char *name;
1447
1448 sec = h->root.root.u.def.section;
1449 output_section = sec->output_section;
1450
1451 /* When making a shared library and symbol h is the one from
1452 the another shared library, OUTPUT_SECTION may be null. */
1453 if (output_section == NULL)
1454 h->esym.asym.sc = scUndefined;
1455 else
1456 {
1457 name = bfd_section_name (output_section->owner, output_section);
1458
1459 if (strcmp (name, ".text") == 0)
1460 h->esym.asym.sc = scText;
1461 else if (strcmp (name, ".data") == 0)
1462 h->esym.asym.sc = scData;
1463 else if (strcmp (name, ".sdata") == 0)
1464 h->esym.asym.sc = scSData;
1465 else if (strcmp (name, ".rodata") == 0
1466 || strcmp (name, ".rdata") == 0)
1467 h->esym.asym.sc = scRData;
1468 else if (strcmp (name, ".bss") == 0)
1469 h->esym.asym.sc = scBss;
1470 else if (strcmp (name, ".sbss") == 0)
1471 h->esym.asym.sc = scSBss;
1472 else if (strcmp (name, ".init") == 0)
1473 h->esym.asym.sc = scInit;
1474 else if (strcmp (name, ".fini") == 0)
1475 h->esym.asym.sc = scFini;
1476 else
1477 h->esym.asym.sc = scAbs;
1478 }
1479 }
1480
1481 h->esym.asym.reserved = 0;
1482 h->esym.asym.index = indexNil;
1483 }
1484
1485 if (h->root.root.type == bfd_link_hash_common)
1486 h->esym.asym.value = h->root.root.u.c.size;
1487 else if (h->root.root.type == bfd_link_hash_defined
1488 || h->root.root.type == bfd_link_hash_defweak)
1489 {
1490 if (h->esym.asym.sc == scCommon)
1491 h->esym.asym.sc = scBss;
1492 else if (h->esym.asym.sc == scSCommon)
1493 h->esym.asym.sc = scSBss;
1494
1495 sec = h->root.root.u.def.section;
1496 output_section = sec->output_section;
1497 if (output_section != NULL)
1498 h->esym.asym.value = (h->root.root.u.def.value
1499 + sec->output_offset
1500 + output_section->vma);
1501 else
1502 h->esym.asym.value = 0;
1503 }
1504 else if ((h->root.elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
1505 {
1506 struct mips_elf_link_hash_entry *hd = h;
1507 bfd_boolean no_fn_stub = h->no_fn_stub;
1508
1509 while (hd->root.root.type == bfd_link_hash_indirect)
1510 {
1511 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
1512 no_fn_stub = no_fn_stub || hd->no_fn_stub;
1513 }
1514
1515 if (!no_fn_stub)
1516 {
1517 /* Set type and value for a symbol with a function stub. */
1518 h->esym.asym.st = stProc;
1519 sec = hd->root.root.u.def.section;
1520 if (sec == NULL)
1521 h->esym.asym.value = 0;
1522 else
1523 {
1524 output_section = sec->output_section;
1525 if (output_section != NULL)
1526 h->esym.asym.value = (hd->root.plt.offset
1527 + sec->output_offset
1528 + output_section->vma);
1529 else
1530 h->esym.asym.value = 0;
1531 }
1532 #if 0 /* FIXME? */
1533 h->esym.ifd = 0;
1534 #endif
1535 }
1536 }
1537
1538 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
1539 h->root.root.root.string,
1540 &h->esym))
1541 {
1542 einfo->failed = TRUE;
1543 return FALSE;
1544 }
1545
1546 return TRUE;
1547 }
1548
1549 /* A comparison routine used to sort .gptab entries. */
1550
1551 static int
1552 gptab_compare (p1, p2)
1553 const PTR p1;
1554 const PTR p2;
1555 {
1556 const Elf32_gptab *a1 = (const Elf32_gptab *) p1;
1557 const Elf32_gptab *a2 = (const Elf32_gptab *) p2;
1558
1559 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
1560 }
1561 \f
1562 /* Functions to manage the got entry hash table. */
1563
1564 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
1565 hash number. */
1566
1567 static INLINE hashval_t
1568 mips_elf_hash_bfd_vma (addr)
1569 bfd_vma addr;
1570 {
1571 #ifdef BFD64
1572 return addr + (addr >> 32);
1573 #else
1574 return addr;
1575 #endif
1576 }
1577
1578 /* got_entries only match if they're identical, except for gotidx, so
1579 use all fields to compute the hash, and compare the appropriate
1580 union members. */
1581
1582 static hashval_t
1583 mips_elf_got_entry_hash (entry_)
1584 const PTR entry_;
1585 {
1586 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
1587
1588 return entry->symndx
1589 + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
1590 : entry->abfd->id
1591 + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend)
1592 : entry->d.h->root.root.root.hash));
1593 }
1594
1595 static int
1596 mips_elf_got_entry_eq (entry1, entry2)
1597 const PTR entry1;
1598 const PTR entry2;
1599 {
1600 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
1601 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
1602
1603 return e1->abfd == e2->abfd && e1->symndx == e2->symndx
1604 && (! e1->abfd ? e1->d.address == e2->d.address
1605 : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
1606 : e1->d.h == e2->d.h);
1607 }
1608
1609 /* multi_got_entries are still a match in the case of global objects,
1610 even if the input bfd in which they're referenced differs, so the
1611 hash computation and compare functions are adjusted
1612 accordingly. */
1613
1614 static hashval_t
1615 mips_elf_multi_got_entry_hash (entry_)
1616 const PTR entry_;
1617 {
1618 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
1619
1620 return entry->symndx
1621 + (! entry->abfd
1622 ? mips_elf_hash_bfd_vma (entry->d.address)
1623 : entry->symndx >= 0
1624 ? (entry->abfd->id
1625 + mips_elf_hash_bfd_vma (entry->d.addend))
1626 : entry->d.h->root.root.root.hash);
1627 }
1628
1629 static int
1630 mips_elf_multi_got_entry_eq (entry1, entry2)
1631 const PTR entry1;
1632 const PTR entry2;
1633 {
1634 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
1635 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
1636
1637 return e1->symndx == e2->symndx
1638 && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend
1639 : e1->abfd == NULL || e2->abfd == NULL
1640 ? e1->abfd == e2->abfd && e1->d.address == e2->d.address
1641 : e1->d.h == e2->d.h);
1642 }
1643 \f
1644 /* Returns the dynamic relocation section for DYNOBJ. */
1645
1646 static asection *
1647 mips_elf_rel_dyn_section (dynobj, create_p)
1648 bfd *dynobj;
1649 bfd_boolean create_p;
1650 {
1651 static const char dname[] = ".rel.dyn";
1652 asection *sreloc;
1653
1654 sreloc = bfd_get_section_by_name (dynobj, dname);
1655 if (sreloc == NULL && create_p)
1656 {
1657 sreloc = bfd_make_section (dynobj, dname);
1658 if (sreloc == NULL
1659 || ! bfd_set_section_flags (dynobj, sreloc,
1660 (SEC_ALLOC
1661 | SEC_LOAD
1662 | SEC_HAS_CONTENTS
1663 | SEC_IN_MEMORY
1664 | SEC_LINKER_CREATED
1665 | SEC_READONLY))
1666 || ! bfd_set_section_alignment (dynobj, sreloc,
1667 4))
1668 return NULL;
1669 }
1670 return sreloc;
1671 }
1672
1673 /* Returns the GOT section for ABFD. */
1674
1675 static asection *
1676 mips_elf_got_section (abfd, maybe_excluded)
1677 bfd *abfd;
1678 bfd_boolean maybe_excluded;
1679 {
1680 asection *sgot = bfd_get_section_by_name (abfd, ".got");
1681 if (sgot == NULL
1682 || (! maybe_excluded && (sgot->flags & SEC_EXCLUDE) != 0))
1683 return NULL;
1684 return sgot;
1685 }
1686
1687 /* Returns the GOT information associated with the link indicated by
1688 INFO. If SGOTP is non-NULL, it is filled in with the GOT
1689 section. */
1690
1691 static struct mips_got_info *
1692 mips_elf_got_info (abfd, sgotp)
1693 bfd *abfd;
1694 asection **sgotp;
1695 {
1696 asection *sgot;
1697 struct mips_got_info *g;
1698
1699 sgot = mips_elf_got_section (abfd, TRUE);
1700 BFD_ASSERT (sgot != NULL);
1701 BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
1702 g = mips_elf_section_data (sgot)->u.got_info;
1703 BFD_ASSERT (g != NULL);
1704
1705 if (sgotp)
1706 *sgotp = (sgot->flags & SEC_EXCLUDE) == 0 ? sgot : NULL;
1707
1708 return g;
1709 }
1710
1711 /* Obtain the lowest dynamic index of a symbol that was assigned a
1712 global GOT entry. */
1713 static long
1714 mips_elf_get_global_gotsym_index (abfd)
1715 bfd *abfd;
1716 {
1717 asection *sgot;
1718 struct mips_got_info *g;
1719
1720 if (abfd == NULL)
1721 return 0;
1722
1723 sgot = mips_elf_got_section (abfd, TRUE);
1724 if (sgot == NULL || mips_elf_section_data (sgot) == NULL)
1725 return 0;
1726
1727 g = mips_elf_section_data (sgot)->u.got_info;
1728 if (g == NULL || g->global_gotsym == NULL)
1729 return 0;
1730
1731 return g->global_gotsym->dynindx;
1732 }
1733
1734 /* Returns the GOT offset at which the indicated address can be found.
1735 If there is not yet a GOT entry for this value, create one. Returns
1736 -1 if no satisfactory GOT offset can be found. */
1737
1738 static bfd_vma
1739 mips_elf_local_got_index (abfd, ibfd, info, value)
1740 bfd *abfd, *ibfd;
1741 struct bfd_link_info *info;
1742 bfd_vma value;
1743 {
1744 asection *sgot;
1745 struct mips_got_info *g;
1746 struct mips_got_entry *entry;
1747
1748 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1749
1750 entry = mips_elf_create_local_got_entry (abfd, ibfd, g, sgot, value);
1751 if (entry)
1752 return entry->gotidx;
1753 else
1754 return MINUS_ONE;
1755 }
1756
1757 /* Returns the GOT index for the global symbol indicated by H. */
1758
1759 static bfd_vma
1760 mips_elf_global_got_index (abfd, ibfd, h)
1761 bfd *abfd, *ibfd;
1762 struct elf_link_hash_entry *h;
1763 {
1764 bfd_vma index;
1765 asection *sgot;
1766 struct mips_got_info *g, *gg;
1767 long global_got_dynindx = 0;
1768
1769 gg = g = mips_elf_got_info (abfd, &sgot);
1770 if (g->bfd2got && ibfd)
1771 {
1772 struct mips_got_entry e, *p;
1773
1774 BFD_ASSERT (h->dynindx >= 0);
1775
1776 g = mips_elf_got_for_ibfd (g, ibfd);
1777 if (g->next != gg)
1778 {
1779 e.abfd = ibfd;
1780 e.symndx = -1;
1781 e.d.h = (struct mips_elf_link_hash_entry *)h;
1782
1783 p = (struct mips_got_entry *) htab_find (g->got_entries, &e);
1784
1785 BFD_ASSERT (p->gotidx > 0);
1786 return p->gotidx;
1787 }
1788 }
1789
1790 if (gg->global_gotsym != NULL)
1791 global_got_dynindx = gg->global_gotsym->dynindx;
1792
1793 /* Once we determine the global GOT entry with the lowest dynamic
1794 symbol table index, we must put all dynamic symbols with greater
1795 indices into the GOT. That makes it easy to calculate the GOT
1796 offset. */
1797 BFD_ASSERT (h->dynindx >= global_got_dynindx);
1798 index = ((h->dynindx - global_got_dynindx + g->local_gotno)
1799 * MIPS_ELF_GOT_SIZE (abfd));
1800 BFD_ASSERT (index < sgot->_raw_size);
1801
1802 return index;
1803 }
1804
1805 /* Find a GOT entry that is within 32KB of the VALUE. These entries
1806 are supposed to be placed at small offsets in the GOT, i.e.,
1807 within 32KB of GP. Return the index into the GOT for this page,
1808 and store the offset from this entry to the desired address in
1809 OFFSETP, if it is non-NULL. */
1810
1811 static bfd_vma
1812 mips_elf_got_page (abfd, ibfd, info, value, offsetp)
1813 bfd *abfd, *ibfd;
1814 struct bfd_link_info *info;
1815 bfd_vma value;
1816 bfd_vma *offsetp;
1817 {
1818 asection *sgot;
1819 struct mips_got_info *g;
1820 bfd_vma index;
1821 struct mips_got_entry *entry;
1822
1823 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1824
1825 entry = mips_elf_create_local_got_entry (abfd, ibfd, g, sgot,
1826 (value + 0x8000)
1827 & (~(bfd_vma)0xffff));
1828
1829 if (!entry)
1830 return MINUS_ONE;
1831
1832 index = entry->gotidx;
1833
1834 if (offsetp)
1835 *offsetp = value - entry->d.address;
1836
1837 return index;
1838 }
1839
1840 /* Find a GOT entry whose higher-order 16 bits are the same as those
1841 for value. Return the index into the GOT for this entry. */
1842
1843 static bfd_vma
1844 mips_elf_got16_entry (abfd, ibfd, info, value, external)
1845 bfd *abfd, *ibfd;
1846 struct bfd_link_info *info;
1847 bfd_vma value;
1848 bfd_boolean external;
1849 {
1850 asection *sgot;
1851 struct mips_got_info *g;
1852 struct mips_got_entry *entry;
1853
1854 if (! external)
1855 {
1856 /* Although the ABI says that it is "the high-order 16 bits" that we
1857 want, it is really the %high value. The complete value is
1858 calculated with a `addiu' of a LO16 relocation, just as with a
1859 HI16/LO16 pair. */
1860 value = mips_elf_high (value) << 16;
1861 }
1862
1863 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1864
1865 entry = mips_elf_create_local_got_entry (abfd, ibfd, g, sgot, value);
1866 if (entry)
1867 return entry->gotidx;
1868 else
1869 return MINUS_ONE;
1870 }
1871
1872 /* Returns the offset for the entry at the INDEXth position
1873 in the GOT. */
1874
1875 static bfd_vma
1876 mips_elf_got_offset_from_index (dynobj, output_bfd, input_bfd, index)
1877 bfd *dynobj;
1878 bfd *output_bfd;
1879 bfd *input_bfd;
1880 bfd_vma index;
1881 {
1882 asection *sgot;
1883 bfd_vma gp;
1884 struct mips_got_info *g;
1885
1886 g = mips_elf_got_info (dynobj, &sgot);
1887 gp = _bfd_get_gp_value (output_bfd)
1888 + mips_elf_adjust_gp (output_bfd, g, input_bfd);
1889
1890 return sgot->output_section->vma + sgot->output_offset + index - gp;
1891 }
1892
1893 /* Create a local GOT entry for VALUE. Return the index of the entry,
1894 or -1 if it could not be created. */
1895
1896 static struct mips_got_entry *
1897 mips_elf_create_local_got_entry (abfd, ibfd, gg, sgot, value)
1898 bfd *abfd, *ibfd;
1899 struct mips_got_info *gg;
1900 asection *sgot;
1901 bfd_vma value;
1902 {
1903 struct mips_got_entry entry, **loc;
1904 struct mips_got_info *g;
1905
1906 entry.abfd = NULL;
1907 entry.symndx = -1;
1908 entry.d.address = value;
1909
1910 g = mips_elf_got_for_ibfd (gg, ibfd);
1911 if (g == NULL)
1912 {
1913 g = mips_elf_got_for_ibfd (gg, abfd);
1914 BFD_ASSERT (g != NULL);
1915 }
1916
1917 loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
1918 INSERT);
1919 if (*loc)
1920 return *loc;
1921
1922 entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
1923
1924 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
1925
1926 if (! *loc)
1927 return NULL;
1928
1929 memcpy (*loc, &entry, sizeof entry);
1930
1931 if (g->assigned_gotno >= g->local_gotno)
1932 {
1933 (*loc)->gotidx = -1;
1934 /* We didn't allocate enough space in the GOT. */
1935 (*_bfd_error_handler)
1936 (_("not enough GOT space for local GOT entries"));
1937 bfd_set_error (bfd_error_bad_value);
1938 return NULL;
1939 }
1940
1941 MIPS_ELF_PUT_WORD (abfd, value,
1942 (sgot->contents + entry.gotidx));
1943
1944 return *loc;
1945 }
1946
1947 /* Sort the dynamic symbol table so that symbols that need GOT entries
1948 appear towards the end. This reduces the amount of GOT space
1949 required. MAX_LOCAL is used to set the number of local symbols
1950 known to be in the dynamic symbol table. During
1951 _bfd_mips_elf_size_dynamic_sections, this value is 1. Afterward, the
1952 section symbols are added and the count is higher. */
1953
1954 static bfd_boolean
1955 mips_elf_sort_hash_table (info, max_local)
1956 struct bfd_link_info *info;
1957 unsigned long max_local;
1958 {
1959 struct mips_elf_hash_sort_data hsd;
1960 struct mips_got_info *g;
1961 bfd *dynobj;
1962
1963 dynobj = elf_hash_table (info)->dynobj;
1964
1965 g = mips_elf_got_info (dynobj, NULL);
1966
1967 hsd.low = NULL;
1968 hsd.max_unref_got_dynindx =
1969 hsd.min_got_dynindx = elf_hash_table (info)->dynsymcount
1970 /* In the multi-got case, assigned_gotno of the master got_info
1971 indicate the number of entries that aren't referenced in the
1972 primary GOT, but that must have entries because there are
1973 dynamic relocations that reference it. Since they aren't
1974 referenced, we move them to the end of the GOT, so that they
1975 don't prevent other entries that are referenced from getting
1976 too large offsets. */
1977 - (g->next ? g->assigned_gotno : 0);
1978 hsd.max_non_got_dynindx = max_local;
1979 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
1980 elf_hash_table (info)),
1981 mips_elf_sort_hash_table_f,
1982 &hsd);
1983
1984 /* There should have been enough room in the symbol table to
1985 accommodate both the GOT and non-GOT symbols. */
1986 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
1987 BFD_ASSERT ((unsigned long)hsd.max_unref_got_dynindx
1988 <= elf_hash_table (info)->dynsymcount);
1989
1990 /* Now we know which dynamic symbol has the lowest dynamic symbol
1991 table index in the GOT. */
1992 g->global_gotsym = hsd.low;
1993
1994 return TRUE;
1995 }
1996
1997 /* If H needs a GOT entry, assign it the highest available dynamic
1998 index. Otherwise, assign it the lowest available dynamic
1999 index. */
2000
2001 static bfd_boolean
2002 mips_elf_sort_hash_table_f (h, data)
2003 struct mips_elf_link_hash_entry *h;
2004 PTR data;
2005 {
2006 struct mips_elf_hash_sort_data *hsd
2007 = (struct mips_elf_hash_sort_data *) data;
2008
2009 if (h->root.root.type == bfd_link_hash_warning)
2010 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
2011
2012 /* Symbols without dynamic symbol table entries aren't interesting
2013 at all. */
2014 if (h->root.dynindx == -1)
2015 return TRUE;
2016
2017 /* Global symbols that need GOT entries that are not explicitly
2018 referenced are marked with got offset 2. Those that are
2019 referenced get a 1, and those that don't need GOT entries get
2020 -1. */
2021 if (h->root.got.offset == 2)
2022 {
2023 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
2024 hsd->low = (struct elf_link_hash_entry *) h;
2025 h->root.dynindx = hsd->max_unref_got_dynindx++;
2026 }
2027 else if (h->root.got.offset != 1)
2028 h->root.dynindx = hsd->max_non_got_dynindx++;
2029 else
2030 {
2031 h->root.dynindx = --hsd->min_got_dynindx;
2032 hsd->low = (struct elf_link_hash_entry *) h;
2033 }
2034
2035 return TRUE;
2036 }
2037
2038 /* If H is a symbol that needs a global GOT entry, but has a dynamic
2039 symbol table index lower than any we've seen to date, record it for
2040 posterity. */
2041
2042 static bfd_boolean
2043 mips_elf_record_global_got_symbol (h, abfd, info, g)
2044 struct elf_link_hash_entry *h;
2045 bfd *abfd;
2046 struct bfd_link_info *info;
2047 struct mips_got_info *g;
2048 {
2049 struct mips_got_entry entry, **loc;
2050
2051 /* A global symbol in the GOT must also be in the dynamic symbol
2052 table. */
2053 if (h->dynindx == -1)
2054 {
2055 switch (ELF_ST_VISIBILITY (h->other))
2056 {
2057 case STV_INTERNAL:
2058 case STV_HIDDEN:
2059 _bfd_mips_elf_hide_symbol (info, h, TRUE);
2060 break;
2061 }
2062 if (!bfd_elf32_link_record_dynamic_symbol (info, h))
2063 return FALSE;
2064 }
2065
2066 entry.abfd = abfd;
2067 entry.symndx = -1;
2068 entry.d.h = (struct mips_elf_link_hash_entry *) h;
2069
2070 loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
2071 INSERT);
2072
2073 /* If we've already marked this entry as needing GOT space, we don't
2074 need to do it again. */
2075 if (*loc)
2076 return TRUE;
2077
2078 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
2079
2080 if (! *loc)
2081 return FALSE;
2082
2083 entry.gotidx = -1;
2084 memcpy (*loc, &entry, sizeof entry);
2085
2086 if (h->got.offset != MINUS_ONE)
2087 return TRUE;
2088
2089 /* By setting this to a value other than -1, we are indicating that
2090 there needs to be a GOT entry for H. Avoid using zero, as the
2091 generic ELF copy_indirect_symbol tests for <= 0. */
2092 h->got.offset = 1;
2093
2094 return TRUE;
2095 }
2096
2097 /* Reserve space in G for a GOT entry containing the value of symbol
2098 SYMNDX in input bfd ABDF, plus ADDEND. */
2099
2100 static bfd_boolean
2101 mips_elf_record_local_got_symbol (abfd, symndx, addend, g)
2102 bfd *abfd;
2103 long symndx;
2104 bfd_vma addend;
2105 struct mips_got_info *g;
2106 {
2107 struct mips_got_entry entry, **loc;
2108
2109 entry.abfd = abfd;
2110 entry.symndx = symndx;
2111 entry.d.addend = addend;
2112 loc = (struct mips_got_entry **)
2113 htab_find_slot (g->got_entries, &entry, INSERT);
2114
2115 if (*loc)
2116 return TRUE;
2117
2118 entry.gotidx = g->local_gotno++;
2119
2120 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
2121
2122 if (! *loc)
2123 return FALSE;
2124
2125 memcpy (*loc, &entry, sizeof entry);
2126
2127 return TRUE;
2128 }
2129 \f
2130 /* Compute the hash value of the bfd in a bfd2got hash entry. */
2131
2132 static hashval_t
2133 mips_elf_bfd2got_entry_hash (entry_)
2134 const PTR entry_;
2135 {
2136 const struct mips_elf_bfd2got_hash *entry
2137 = (struct mips_elf_bfd2got_hash *)entry_;
2138
2139 return entry->bfd->id;
2140 }
2141
2142 /* Check whether two hash entries have the same bfd. */
2143
2144 static int
2145 mips_elf_bfd2got_entry_eq (entry1, entry2)
2146 const PTR entry1;
2147 const PTR entry2;
2148 {
2149 const struct mips_elf_bfd2got_hash *e1
2150 = (const struct mips_elf_bfd2got_hash *)entry1;
2151 const struct mips_elf_bfd2got_hash *e2
2152 = (const struct mips_elf_bfd2got_hash *)entry2;
2153
2154 return e1->bfd == e2->bfd;
2155 }
2156
2157 /* In a multi-got link, determine the GOT to be used for IBDF. G must
2158 be the master GOT data. */
2159
2160 static struct mips_got_info *
2161 mips_elf_got_for_ibfd (g, ibfd)
2162 struct mips_got_info *g;
2163 bfd *ibfd;
2164 {
2165 struct mips_elf_bfd2got_hash e, *p;
2166
2167 if (! g->bfd2got)
2168 return g;
2169
2170 e.bfd = ibfd;
2171 p = (struct mips_elf_bfd2got_hash *) htab_find (g->bfd2got, &e);
2172 return p ? p->g : NULL;
2173 }
2174
2175 /* Create one separate got for each bfd that has entries in the global
2176 got, such that we can tell how many local and global entries each
2177 bfd requires. */
2178
2179 static int
2180 mips_elf_make_got_per_bfd (entryp, p)
2181 void **entryp;
2182 void *p;
2183 {
2184 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
2185 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
2186 htab_t bfd2got = arg->bfd2got;
2187 struct mips_got_info *g;
2188 struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
2189 void **bfdgotp;
2190
2191 /* Find the got_info for this GOT entry's input bfd. Create one if
2192 none exists. */
2193 bfdgot_entry.bfd = entry->abfd;
2194 bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
2195 bfdgot = (struct mips_elf_bfd2got_hash *)*bfdgotp;
2196
2197 if (bfdgot != NULL)
2198 g = bfdgot->g;
2199 else
2200 {
2201 bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
2202 (arg->obfd, sizeof (struct mips_elf_bfd2got_hash));
2203
2204 if (bfdgot == NULL)
2205 {
2206 arg->obfd = 0;
2207 return 0;
2208 }
2209
2210 *bfdgotp = bfdgot;
2211
2212 bfdgot->bfd = entry->abfd;
2213 bfdgot->g = g = (struct mips_got_info *)
2214 bfd_alloc (arg->obfd, sizeof (struct mips_got_info));
2215 if (g == NULL)
2216 {
2217 arg->obfd = 0;
2218 return 0;
2219 }
2220
2221 g->global_gotsym = NULL;
2222 g->global_gotno = 0;
2223 g->local_gotno = 0;
2224 g->assigned_gotno = -1;
2225 g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
2226 mips_elf_multi_got_entry_eq,
2227 (htab_del) NULL);
2228 if (g->got_entries == NULL)
2229 {
2230 arg->obfd = 0;
2231 return 0;
2232 }
2233
2234 g->bfd2got = NULL;
2235 g->next = NULL;
2236 }
2237
2238 /* Insert the GOT entry in the bfd's got entry hash table. */
2239 entryp = htab_find_slot (g->got_entries, entry, INSERT);
2240 if (*entryp != NULL)
2241 return 1;
2242
2243 *entryp = entry;
2244
2245 if (entry->symndx >= 0 || entry->d.h->forced_local)
2246 ++g->local_gotno;
2247 else
2248 ++g->global_gotno;
2249
2250 return 1;
2251 }
2252
2253 /* Attempt to merge gots of different input bfds. Try to use as much
2254 as possible of the primary got, since it doesn't require explicit
2255 dynamic relocations, but don't use bfds that would reference global
2256 symbols out of the addressable range. Failing the primary got,
2257 attempt to merge with the current got, or finish the current got
2258 and then make make the new got current. */
2259
2260 static int
2261 mips_elf_merge_gots (bfd2got_, p)
2262 void **bfd2got_;
2263 void *p;
2264 {
2265 struct mips_elf_bfd2got_hash *bfd2got
2266 = (struct mips_elf_bfd2got_hash *)*bfd2got_;
2267 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
2268 unsigned int lcount = bfd2got->g->local_gotno;
2269 unsigned int gcount = bfd2got->g->global_gotno;
2270 unsigned int maxcnt = arg->max_count;
2271
2272 /* If we don't have a primary GOT and this is not too big, use it as
2273 a starting point for the primary GOT. */
2274 if (! arg->primary && lcount + gcount <= maxcnt)
2275 {
2276 arg->primary = bfd2got->g;
2277 arg->primary_count = lcount + gcount;
2278 }
2279 /* If it looks like we can merge this bfd's entries with those of
2280 the primary, merge them. The heuristics is conservative, but we
2281 don't have to squeeze it too hard. */
2282 else if (arg->primary
2283 && (arg->primary_count + lcount + gcount) <= maxcnt)
2284 {
2285 struct mips_got_info *g = bfd2got->g;
2286 int old_lcount = arg->primary->local_gotno;
2287 int old_gcount = arg->primary->global_gotno;
2288
2289 bfd2got->g = arg->primary;
2290
2291 htab_traverse (g->got_entries,
2292 mips_elf_make_got_per_bfd,
2293 arg);
2294 if (arg->obfd == NULL)
2295 return 0;
2296
2297 htab_delete (g->got_entries);
2298 /* We don't have to worry about releasing memory of the actual
2299 got entries, since they're all in the master got_entries hash
2300 table anyway. */
2301
2302 BFD_ASSERT (old_lcount + lcount == arg->primary->local_gotno);
2303 BFD_ASSERT (old_gcount + gcount >= arg->primary->global_gotno);
2304
2305 arg->primary_count = arg->primary->local_gotno
2306 + arg->primary->global_gotno;
2307 }
2308 /* If we can merge with the last-created got, do it. */
2309 else if (arg->current
2310 && arg->current_count + lcount + gcount <= maxcnt)
2311 {
2312 struct mips_got_info *g = bfd2got->g;
2313 int old_lcount = arg->current->local_gotno;
2314 int old_gcount = arg->current->global_gotno;
2315
2316 bfd2got->g = arg->current;
2317
2318 htab_traverse (g->got_entries,
2319 mips_elf_make_got_per_bfd,
2320 arg);
2321 if (arg->obfd == NULL)
2322 return 0;
2323
2324 htab_delete (g->got_entries);
2325
2326 BFD_ASSERT (old_lcount + lcount == arg->current->local_gotno);
2327 BFD_ASSERT (old_gcount + gcount >= arg->current->global_gotno);
2328
2329 arg->current_count = arg->current->local_gotno
2330 + arg->current->global_gotno;
2331 }
2332 /* Well, we couldn't merge, so create a new GOT. Don't check if it
2333 fits; if it turns out that it doesn't, we'll get relocation
2334 overflows anyway. */
2335 else
2336 {
2337 bfd2got->g->next = arg->current;
2338 arg->current = bfd2got->g;
2339
2340 arg->current_count = lcount + gcount;
2341 }
2342
2343 return 1;
2344 }
2345
2346 /* If passed a NULL mips_got_info in the argument, set the marker used
2347 to tell whether a global symbol needs a got entry (in the primary
2348 got) to the given VALUE.
2349
2350 If passed a pointer G to a mips_got_info in the argument (it must
2351 not be the primary GOT), compute the offset from the beginning of
2352 the (primary) GOT section to the entry in G corresponding to the
2353 global symbol. G's assigned_gotno must contain the index of the
2354 first available global GOT entry in G. VALUE must contain the size
2355 of a GOT entry in bytes. For each global GOT entry that requires a
2356 dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
2357 marked as not elligible for lazy resolution through a function
2358 stub. */
2359 static int
2360 mips_elf_set_global_got_offset (entryp, p)
2361 void **entryp;
2362 void *p;
2363 {
2364 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
2365 struct mips_elf_set_global_got_offset_arg *arg
2366 = (struct mips_elf_set_global_got_offset_arg *)p;
2367 struct mips_got_info *g = arg->g;
2368
2369 if (entry->abfd != NULL && entry->symndx == -1
2370 && entry->d.h->root.dynindx != -1)
2371 {
2372 if (g)
2373 {
2374 BFD_ASSERT (g->global_gotsym == NULL);
2375
2376 entry->gotidx = arg->value * (long) g->assigned_gotno++;
2377 /* We can't do lazy update of GOT entries for
2378 non-primary GOTs since the PLT entries don't use the
2379 right offsets, so punt at it for now. */
2380 entry->d.h->no_fn_stub = TRUE;
2381 if (arg->info->shared
2382 || (elf_hash_table (arg->info)->dynamic_sections_created
2383 && ((entry->d.h->root.elf_link_hash_flags
2384 & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
2385 && ((entry->d.h->root.elf_link_hash_flags
2386 & ELF_LINK_HASH_DEF_REGULAR) == 0)))
2387 ++arg->needed_relocs;
2388 }
2389 else
2390 entry->d.h->root.got.offset = arg->value;
2391 }
2392
2393 return 1;
2394 }
2395
2396 /* Follow indirect and warning hash entries so that each got entry
2397 points to the final symbol definition. P must point to a pointer
2398 to the hash table we're traversing. Since this traversal may
2399 modify the hash table, we set this pointer to NULL to indicate
2400 we've made a potentially-destructive change to the hash table, so
2401 the traversal must be restarted. */
2402 static int
2403 mips_elf_resolve_final_got_entry (entryp, p)
2404 void **entryp;
2405 void *p;
2406 {
2407 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
2408 htab_t got_entries = *(htab_t *)p;
2409
2410 if (entry->abfd != NULL && entry->symndx == -1)
2411 {
2412 struct mips_elf_link_hash_entry *h = entry->d.h;
2413
2414 while (h->root.root.type == bfd_link_hash_indirect
2415 || h->root.root.type == bfd_link_hash_warning)
2416 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
2417
2418 if (entry->d.h == h)
2419 return 1;
2420
2421 entry->d.h = h;
2422
2423 /* If we can't find this entry with the new bfd hash, re-insert
2424 it, and get the traversal restarted. */
2425 if (! htab_find (got_entries, entry))
2426 {
2427 htab_clear_slot (got_entries, entryp);
2428 entryp = htab_find_slot (got_entries, entry, INSERT);
2429 if (! *entryp)
2430 *entryp = entry;
2431 /* Abort the traversal, since the whole table may have
2432 moved, and leave it up to the parent to restart the
2433 process. */
2434 *(htab_t *)p = NULL;
2435 return 0;
2436 }
2437 /* We might want to decrement the global_gotno count, but it's
2438 either too early or too late for that at this point. */
2439 }
2440
2441 return 1;
2442 }
2443
2444 /* Turn indirect got entries in a got_entries table into their final
2445 locations. */
2446 static void
2447 mips_elf_resolve_final_got_entries (g)
2448 struct mips_got_info *g;
2449 {
2450 htab_t got_entries;
2451
2452 do
2453 {
2454 got_entries = g->got_entries;
2455
2456 htab_traverse (got_entries,
2457 mips_elf_resolve_final_got_entry,
2458 &got_entries);
2459 }
2460 while (got_entries == NULL);
2461 }
2462
2463 /* Return the offset of an input bfd IBFD's GOT from the beginning of
2464 the primary GOT. */
2465 static bfd_vma
2466 mips_elf_adjust_gp (abfd, g, ibfd)
2467 bfd *abfd;
2468 struct mips_got_info *g;
2469 bfd *ibfd;
2470 {
2471 if (g->bfd2got == NULL)
2472 return 0;
2473
2474 g = mips_elf_got_for_ibfd (g, ibfd);
2475 if (! g)
2476 return 0;
2477
2478 BFD_ASSERT (g->next);
2479
2480 g = g->next;
2481
2482 return (g->local_gotno + g->global_gotno) * MIPS_ELF_GOT_SIZE (abfd);
2483 }
2484
2485 /* Turn a single GOT that is too big for 16-bit addressing into
2486 a sequence of GOTs, each one 16-bit addressable. */
2487
2488 static bfd_boolean
2489 mips_elf_multi_got (abfd, info, g, got, pages)
2490 bfd *abfd;
2491 struct bfd_link_info *info;
2492 struct mips_got_info *g;
2493 asection *got;
2494 bfd_size_type pages;
2495 {
2496 struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
2497 struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
2498 struct mips_got_info *gg;
2499 unsigned int assign;
2500
2501 g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
2502 mips_elf_bfd2got_entry_eq,
2503 (htab_del) NULL);
2504 if (g->bfd2got == NULL)
2505 return FALSE;
2506
2507 got_per_bfd_arg.bfd2got = g->bfd2got;
2508 got_per_bfd_arg.obfd = abfd;
2509 got_per_bfd_arg.info = info;
2510
2511 /* Count how many GOT entries each input bfd requires, creating a
2512 map from bfd to got info while at that. */
2513 mips_elf_resolve_final_got_entries (g);
2514 htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
2515 if (got_per_bfd_arg.obfd == NULL)
2516 return FALSE;
2517
2518 got_per_bfd_arg.current = NULL;
2519 got_per_bfd_arg.primary = NULL;
2520 /* Taking out PAGES entries is a worst-case estimate. We could
2521 compute the maximum number of pages that each separate input bfd
2522 uses, but it's probably not worth it. */
2523 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (abfd)
2524 / MIPS_ELF_GOT_SIZE (abfd))
2525 - MIPS_RESERVED_GOTNO - pages);
2526
2527 /* Try to merge the GOTs of input bfds together, as long as they
2528 don't seem to exceed the maximum GOT size, choosing one of them
2529 to be the primary GOT. */
2530 htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
2531 if (got_per_bfd_arg.obfd == NULL)
2532 return FALSE;
2533
2534 /* If we find any suitable primary GOT, create an empty one. */
2535 if (got_per_bfd_arg.primary == NULL)
2536 {
2537 g->next = (struct mips_got_info *)
2538 bfd_alloc (abfd, sizeof (struct mips_got_info));
2539 if (g->next == NULL)
2540 return FALSE;
2541
2542 g->next->global_gotsym = NULL;
2543 g->next->global_gotno = 0;
2544 g->next->local_gotno = 0;
2545 g->next->assigned_gotno = 0;
2546 g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
2547 mips_elf_multi_got_entry_eq,
2548 (htab_del) NULL);
2549 if (g->next->got_entries == NULL)
2550 return FALSE;
2551 g->next->bfd2got = NULL;
2552 }
2553 else
2554 g->next = got_per_bfd_arg.primary;
2555 g->next->next = got_per_bfd_arg.current;
2556
2557 /* GG is now the master GOT, and G is the primary GOT. */
2558 gg = g;
2559 g = g->next;
2560
2561 /* Map the output bfd to the primary got. That's what we're going
2562 to use for bfds that use GOT16 or GOT_PAGE relocations that we
2563 didn't mark in check_relocs, and we want a quick way to find it.
2564 We can't just use gg->next because we're going to reverse the
2565 list. */
2566 {
2567 struct mips_elf_bfd2got_hash *bfdgot;
2568 void **bfdgotp;
2569
2570 bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
2571 (abfd, sizeof (struct mips_elf_bfd2got_hash));
2572
2573 if (bfdgot == NULL)
2574 return FALSE;
2575
2576 bfdgot->bfd = abfd;
2577 bfdgot->g = g;
2578 bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
2579
2580 BFD_ASSERT (*bfdgotp == NULL);
2581 *bfdgotp = bfdgot;
2582 }
2583
2584 /* The IRIX dynamic linker requires every symbol that is referenced
2585 in a dynamic relocation to be present in the primary GOT, so
2586 arrange for them to appear after those that are actually
2587 referenced.
2588
2589 GNU/Linux could very well do without it, but it would slow down
2590 the dynamic linker, since it would have to resolve every dynamic
2591 symbol referenced in other GOTs more than once, without help from
2592 the cache. Also, knowing that every external symbol has a GOT
2593 helps speed up the resolution of local symbols too, so GNU/Linux
2594 follows IRIX's practice.
2595
2596 The number 2 is used by mips_elf_sort_hash_table_f to count
2597 global GOT symbols that are unreferenced in the primary GOT, with
2598 an initial dynamic index computed from gg->assigned_gotno, where
2599 the number of unreferenced global entries in the primary GOT is
2600 preserved. */
2601 if (1)
2602 {
2603 gg->assigned_gotno = gg->global_gotno - g->global_gotno;
2604 g->global_gotno = gg->global_gotno;
2605 set_got_offset_arg.value = 2;
2606 }
2607 else
2608 {
2609 /* This could be used for dynamic linkers that don't optimize
2610 symbol resolution while applying relocations so as to use
2611 primary GOT entries or assuming the symbol is locally-defined.
2612 With this code, we assign lower dynamic indices to global
2613 symbols that are not referenced in the primary GOT, so that
2614 their entries can be omitted. */
2615 gg->assigned_gotno = 0;
2616 set_got_offset_arg.value = -1;
2617 }
2618
2619 /* Reorder dynamic symbols as described above (which behavior
2620 depends on the setting of VALUE). */
2621 set_got_offset_arg.g = NULL;
2622 htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
2623 &set_got_offset_arg);
2624 set_got_offset_arg.value = 1;
2625 htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
2626 &set_got_offset_arg);
2627 if (! mips_elf_sort_hash_table (info, 1))
2628 return FALSE;
2629
2630 /* Now go through the GOTs assigning them offset ranges.
2631 [assigned_gotno, local_gotno[ will be set to the range of local
2632 entries in each GOT. We can then compute the end of a GOT by
2633 adding local_gotno to global_gotno. We reverse the list and make
2634 it circular since then we'll be able to quickly compute the
2635 beginning of a GOT, by computing the end of its predecessor. To
2636 avoid special cases for the primary GOT, while still preserving
2637 assertions that are valid for both single- and multi-got links,
2638 we arrange for the main got struct to have the right number of
2639 global entries, but set its local_gotno such that the initial
2640 offset of the primary GOT is zero. Remember that the primary GOT
2641 will become the last item in the circular linked list, so it
2642 points back to the master GOT. */
2643 gg->local_gotno = -g->global_gotno;
2644 gg->global_gotno = g->global_gotno;
2645 assign = 0;
2646 gg->next = gg;
2647
2648 do
2649 {
2650 struct mips_got_info *gn;
2651
2652 assign += MIPS_RESERVED_GOTNO;
2653 g->assigned_gotno = assign;
2654 g->local_gotno += assign + pages;
2655 assign = g->local_gotno + g->global_gotno;
2656
2657 /* Take g out of the direct list, and push it onto the reversed
2658 list that gg points to. */
2659 gn = g->next;
2660 g->next = gg->next;
2661 gg->next = g;
2662 g = gn;
2663 }
2664 while (g);
2665
2666 got->_raw_size = (gg->next->local_gotno
2667 + gg->next->global_gotno) * MIPS_ELF_GOT_SIZE (abfd);
2668
2669 return TRUE;
2670 }
2671
2672 \f
2673 /* Returns the first relocation of type r_type found, beginning with
2674 RELOCATION. RELEND is one-past-the-end of the relocation table. */
2675
2676 static const Elf_Internal_Rela *
2677 mips_elf_next_relocation (abfd, r_type, relocation, relend)
2678 bfd *abfd ATTRIBUTE_UNUSED;
2679 unsigned int r_type;
2680 const Elf_Internal_Rela *relocation;
2681 const Elf_Internal_Rela *relend;
2682 {
2683 /* According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must be
2684 immediately following. However, for the IRIX6 ABI, the next
2685 relocation may be a composed relocation consisting of several
2686 relocations for the same address. In that case, the R_MIPS_LO16
2687 relocation may occur as one of these. We permit a similar
2688 extension in general, as that is useful for GCC. */
2689 while (relocation < relend)
2690 {
2691 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type)
2692 return relocation;
2693
2694 ++relocation;
2695 }
2696
2697 /* We didn't find it. */
2698 bfd_set_error (bfd_error_bad_value);
2699 return NULL;
2700 }
2701
2702 /* Return whether a relocation is against a local symbol. */
2703
2704 static bfd_boolean
2705 mips_elf_local_relocation_p (input_bfd, relocation, local_sections,
2706 check_forced)
2707 bfd *input_bfd;
2708 const Elf_Internal_Rela *relocation;
2709 asection **local_sections;
2710 bfd_boolean check_forced;
2711 {
2712 unsigned long r_symndx;
2713 Elf_Internal_Shdr *symtab_hdr;
2714 struct mips_elf_link_hash_entry *h;
2715 size_t extsymoff;
2716
2717 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
2718 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2719 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
2720
2721 if (r_symndx < extsymoff)
2722 return TRUE;
2723 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
2724 return TRUE;
2725
2726 if (check_forced)
2727 {
2728 /* Look up the hash table to check whether the symbol
2729 was forced local. */
2730 h = (struct mips_elf_link_hash_entry *)
2731 elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
2732 /* Find the real hash-table entry for this symbol. */
2733 while (h->root.root.type == bfd_link_hash_indirect
2734 || h->root.root.type == bfd_link_hash_warning)
2735 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
2736 if ((h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
2737 return TRUE;
2738 }
2739
2740 return FALSE;
2741 }
2742 \f
2743 /* Sign-extend VALUE, which has the indicated number of BITS. */
2744
2745 static bfd_vma
2746 mips_elf_sign_extend (value, bits)
2747 bfd_vma value;
2748 int bits;
2749 {
2750 if (value & ((bfd_vma) 1 << (bits - 1)))
2751 /* VALUE is negative. */
2752 value |= ((bfd_vma) - 1) << bits;
2753
2754 return value;
2755 }
2756
2757 /* Return non-zero if the indicated VALUE has overflowed the maximum
2758 range expressable by a signed number with the indicated number of
2759 BITS. */
2760
2761 static bfd_boolean
2762 mips_elf_overflow_p (value, bits)
2763 bfd_vma value;
2764 int bits;
2765 {
2766 bfd_signed_vma svalue = (bfd_signed_vma) value;
2767
2768 if (svalue > (1 << (bits - 1)) - 1)
2769 /* The value is too big. */
2770 return TRUE;
2771 else if (svalue < -(1 << (bits - 1)))
2772 /* The value is too small. */
2773 return TRUE;
2774
2775 /* All is well. */
2776 return FALSE;
2777 }
2778
2779 /* Calculate the %high function. */
2780
2781 static bfd_vma
2782 mips_elf_high (value)
2783 bfd_vma value;
2784 {
2785 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
2786 }
2787
2788 /* Calculate the %higher function. */
2789
2790 static bfd_vma
2791 mips_elf_higher (value)
2792 bfd_vma value ATTRIBUTE_UNUSED;
2793 {
2794 #ifdef BFD64
2795 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
2796 #else
2797 abort ();
2798 return (bfd_vma) -1;
2799 #endif
2800 }
2801
2802 /* Calculate the %highest function. */
2803
2804 static bfd_vma
2805 mips_elf_highest (value)
2806 bfd_vma value ATTRIBUTE_UNUSED;
2807 {
2808 #ifdef BFD64
2809 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
2810 #else
2811 abort ();
2812 return (bfd_vma) -1;
2813 #endif
2814 }
2815 \f
2816 /* Create the .compact_rel section. */
2817
2818 static bfd_boolean
2819 mips_elf_create_compact_rel_section (abfd, info)
2820 bfd *abfd;
2821 struct bfd_link_info *info ATTRIBUTE_UNUSED;
2822 {
2823 flagword flags;
2824 register asection *s;
2825
2826 if (bfd_get_section_by_name (abfd, ".compact_rel") == NULL)
2827 {
2828 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
2829 | SEC_READONLY);
2830
2831 s = bfd_make_section (abfd, ".compact_rel");
2832 if (s == NULL
2833 || ! bfd_set_section_flags (abfd, s, flags)
2834 || ! bfd_set_section_alignment (abfd, s,
2835 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
2836 return FALSE;
2837
2838 s->_raw_size = sizeof (Elf32_External_compact_rel);
2839 }
2840
2841 return TRUE;
2842 }
2843
2844 /* Create the .got section to hold the global offset table. */
2845
2846 static bfd_boolean
2847 mips_elf_create_got_section (abfd, info, maybe_exclude)
2848 bfd *abfd;
2849 struct bfd_link_info *info;
2850 bfd_boolean maybe_exclude;
2851 {
2852 flagword flags;
2853 register asection *s;
2854 struct elf_link_hash_entry *h;
2855 struct bfd_link_hash_entry *bh;
2856 struct mips_got_info *g;
2857 bfd_size_type amt;
2858
2859 /* This function may be called more than once. */
2860 s = mips_elf_got_section (abfd, TRUE);
2861 if (s)
2862 {
2863 if (! maybe_exclude)
2864 s->flags &= ~SEC_EXCLUDE;
2865 return TRUE;
2866 }
2867
2868 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
2869 | SEC_LINKER_CREATED);
2870
2871 if (maybe_exclude)
2872 flags |= SEC_EXCLUDE;
2873
2874 s = bfd_make_section (abfd, ".got");
2875 if (s == NULL
2876 || ! bfd_set_section_flags (abfd, s, flags)
2877 || ! bfd_set_section_alignment (abfd, s, 4))
2878 return FALSE;
2879
2880 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
2881 linker script because we don't want to define the symbol if we
2882 are not creating a global offset table. */
2883 bh = NULL;
2884 if (! (_bfd_generic_link_add_one_symbol
2885 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
2886 (bfd_vma) 0, (const char *) NULL, FALSE,
2887 get_elf_backend_data (abfd)->collect, &bh)))
2888 return FALSE;
2889
2890 h = (struct elf_link_hash_entry *) bh;
2891 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
2892 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2893 h->type = STT_OBJECT;
2894
2895 if (info->shared
2896 && ! bfd_elf32_link_record_dynamic_symbol (info, h))
2897 return FALSE;
2898
2899 amt = sizeof (struct mips_got_info);
2900 g = (struct mips_got_info *) bfd_alloc (abfd, amt);
2901 if (g == NULL)
2902 return FALSE;
2903 g->global_gotsym = NULL;
2904 g->local_gotno = MIPS_RESERVED_GOTNO;
2905 g->assigned_gotno = MIPS_RESERVED_GOTNO;
2906 g->bfd2got = NULL;
2907 g->next = NULL;
2908 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2909 mips_elf_got_entry_eq,
2910 (htab_del) NULL);
2911 if (g->got_entries == NULL)
2912 return FALSE;
2913 mips_elf_section_data (s)->u.got_info = g;
2914 mips_elf_section_data (s)->elf.this_hdr.sh_flags
2915 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
2916
2917 return TRUE;
2918 }
2919
2920 /* Returns the .msym section for ABFD, creating it if it does not
2921 already exist. Returns NULL to indicate error. */
2922
2923 static asection *
2924 mips_elf_create_msym_section (abfd)
2925 bfd *abfd;
2926 {
2927 asection *s;
2928
2929 s = bfd_get_section_by_name (abfd, ".msym");
2930 if (!s)
2931 {
2932 s = bfd_make_section (abfd, ".msym");
2933 if (!s
2934 || !bfd_set_section_flags (abfd, s,
2935 SEC_ALLOC
2936 | SEC_LOAD
2937 | SEC_HAS_CONTENTS
2938 | SEC_LINKER_CREATED
2939 | SEC_READONLY)
2940 || !bfd_set_section_alignment (abfd, s,
2941 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
2942 return NULL;
2943 }
2944
2945 return s;
2946 }
2947 \f
2948 /* Calculate the value produced by the RELOCATION (which comes from
2949 the INPUT_BFD). The ADDEND is the addend to use for this
2950 RELOCATION; RELOCATION->R_ADDEND is ignored.
2951
2952 The result of the relocation calculation is stored in VALUEP.
2953 REQUIRE_JALXP indicates whether or not the opcode used with this
2954 relocation must be JALX.
2955
2956 This function returns bfd_reloc_continue if the caller need take no
2957 further action regarding this relocation, bfd_reloc_notsupported if
2958 something goes dramatically wrong, bfd_reloc_overflow if an
2959 overflow occurs, and bfd_reloc_ok to indicate success. */
2960
2961 static bfd_reloc_status_type
2962 mips_elf_calculate_relocation (abfd, input_bfd, input_section, info,
2963 relocation, addend, howto, local_syms,
2964 local_sections, valuep, namep,
2965 require_jalxp, save_addend)
2966 bfd *abfd;
2967 bfd *input_bfd;
2968 asection *input_section;
2969 struct bfd_link_info *info;
2970 const Elf_Internal_Rela *relocation;
2971 bfd_vma addend;
2972 reloc_howto_type *howto;
2973 Elf_Internal_Sym *local_syms;
2974 asection **local_sections;
2975 bfd_vma *valuep;
2976 const char **namep;
2977 bfd_boolean *require_jalxp;
2978 bfd_boolean save_addend;
2979 {
2980 /* The eventual value we will return. */
2981 bfd_vma value;
2982 /* The address of the symbol against which the relocation is
2983 occurring. */
2984 bfd_vma symbol = 0;
2985 /* The final GP value to be used for the relocatable, executable, or
2986 shared object file being produced. */
2987 bfd_vma gp = MINUS_ONE;
2988 /* The place (section offset or address) of the storage unit being
2989 relocated. */
2990 bfd_vma p;
2991 /* The value of GP used to create the relocatable object. */
2992 bfd_vma gp0 = MINUS_ONE;
2993 /* The offset into the global offset table at which the address of
2994 the relocation entry symbol, adjusted by the addend, resides
2995 during execution. */
2996 bfd_vma g = MINUS_ONE;
2997 /* The section in which the symbol referenced by the relocation is
2998 located. */
2999 asection *sec = NULL;
3000 struct mips_elf_link_hash_entry *h = NULL;
3001 /* TRUE if the symbol referred to by this relocation is a local
3002 symbol. */
3003 bfd_boolean local_p, was_local_p;
3004 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */
3005 bfd_boolean gp_disp_p = FALSE;
3006 Elf_Internal_Shdr *symtab_hdr;
3007 size_t extsymoff;
3008 unsigned long r_symndx;
3009 int r_type;
3010 /* TRUE if overflow occurred during the calculation of the
3011 relocation value. */
3012 bfd_boolean overflowed_p;
3013 /* TRUE if this relocation refers to a MIPS16 function. */
3014 bfd_boolean target_is_16_bit_code_p = FALSE;
3015
3016 /* Parse the relocation. */
3017 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
3018 r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
3019 p = (input_section->output_section->vma
3020 + input_section->output_offset
3021 + relocation->r_offset);
3022
3023 /* Assume that there will be no overflow. */
3024 overflowed_p = FALSE;
3025
3026 /* Figure out whether or not the symbol is local, and get the offset
3027 used in the array of hash table entries. */
3028 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
3029 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
3030 local_sections, FALSE);
3031 was_local_p = local_p;
3032 if (! elf_bad_symtab (input_bfd))
3033 extsymoff = symtab_hdr->sh_info;
3034 else
3035 {
3036 /* The symbol table does not follow the rule that local symbols
3037 must come before globals. */
3038 extsymoff = 0;
3039 }
3040
3041 /* Figure out the value of the symbol. */
3042 if (local_p)
3043 {
3044 Elf_Internal_Sym *sym;
3045
3046 sym = local_syms + r_symndx;
3047 sec = local_sections[r_symndx];
3048
3049 symbol = sec->output_section->vma + sec->output_offset;
3050 if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
3051 || (sec->flags & SEC_MERGE))
3052 symbol += sym->st_value;
3053 if ((sec->flags & SEC_MERGE)
3054 && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
3055 {
3056 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
3057 addend -= symbol;
3058 addend += sec->output_section->vma + sec->output_offset;
3059 }
3060
3061 /* MIPS16 text labels should be treated as odd. */
3062 if (sym->st_other == STO_MIPS16)
3063 ++symbol;
3064
3065 /* Record the name of this symbol, for our caller. */
3066 *namep = bfd_elf_string_from_elf_section (input_bfd,
3067 symtab_hdr->sh_link,
3068 sym->st_name);
3069 if (*namep == '\0')
3070 *namep = bfd_section_name (input_bfd, sec);
3071
3072 target_is_16_bit_code_p = (sym->st_other == STO_MIPS16);
3073 }
3074 else
3075 {
3076 /* For global symbols we look up the symbol in the hash-table. */
3077 h = ((struct mips_elf_link_hash_entry *)
3078 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
3079 /* Find the real hash-table entry for this symbol. */
3080 while (h->root.root.type == bfd_link_hash_indirect
3081 || h->root.root.type == bfd_link_hash_warning)
3082 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3083
3084 /* Record the name of this symbol, for our caller. */
3085 *namep = h->root.root.root.string;
3086
3087 /* See if this is the special _gp_disp symbol. Note that such a
3088 symbol must always be a global symbol. */
3089 if (strcmp (h->root.root.root.string, "_gp_disp") == 0
3090 && ! NEWABI_P (input_bfd))
3091 {
3092 /* Relocations against _gp_disp are permitted only with
3093 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
3094 if (r_type != R_MIPS_HI16 && r_type != R_MIPS_LO16)
3095 return bfd_reloc_notsupported;
3096
3097 gp_disp_p = TRUE;
3098 }
3099 /* If this symbol is defined, calculate its address. Note that
3100 _gp_disp is a magic symbol, always implicitly defined by the
3101 linker, so it's inappropriate to check to see whether or not
3102 its defined. */
3103 else if ((h->root.root.type == bfd_link_hash_defined
3104 || h->root.root.type == bfd_link_hash_defweak)
3105 && h->root.root.u.def.section)
3106 {
3107 sec = h->root.root.u.def.section;
3108 if (sec->output_section)
3109 symbol = (h->root.root.u.def.value
3110 + sec->output_section->vma
3111 + sec->output_offset);
3112 else
3113 symbol = h->root.root.u.def.value;
3114 }
3115 else if (h->root.root.type == bfd_link_hash_undefweak)
3116 /* We allow relocations against undefined weak symbols, giving
3117 it the value zero, so that you can undefined weak functions
3118 and check to see if they exist by looking at their
3119 addresses. */
3120 symbol = 0;
3121 else if (info->shared
3122 && !info->no_undefined
3123 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
3124 symbol = 0;
3125 else if (strcmp (h->root.root.root.string, "_DYNAMIC_LINK") == 0 ||
3126 strcmp (h->root.root.root.string, "_DYNAMIC_LINKING") == 0)
3127 {
3128 /* If this is a dynamic link, we should have created a
3129 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
3130 in in _bfd_mips_elf_create_dynamic_sections.
3131 Otherwise, we should define the symbol with a value of 0.
3132 FIXME: It should probably get into the symbol table
3133 somehow as well. */
3134 BFD_ASSERT (! info->shared);
3135 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
3136 symbol = 0;
3137 }
3138 else
3139 {
3140 if (! ((*info->callbacks->undefined_symbol)
3141 (info, h->root.root.root.string, input_bfd,
3142 input_section, relocation->r_offset,
3143 (!info->shared || info->no_undefined
3144 || ELF_ST_VISIBILITY (h->root.other)))))
3145 return bfd_reloc_undefined;
3146 symbol = 0;
3147 }
3148
3149 target_is_16_bit_code_p = (h->root.other == STO_MIPS16);
3150 }
3151
3152 /* If this is a 32- or 64-bit call to a 16-bit function with a stub, we
3153 need to redirect the call to the stub, unless we're already *in*
3154 a stub. */
3155 if (r_type != R_MIPS16_26 && !info->relocateable
3156 && ((h != NULL && h->fn_stub != NULL)
3157 || (local_p && elf_tdata (input_bfd)->local_stubs != NULL
3158 && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
3159 && !mips_elf_stub_section_p (input_bfd, input_section))
3160 {
3161 /* This is a 32- or 64-bit call to a 16-bit function. We should
3162 have already noticed that we were going to need the
3163 stub. */
3164 if (local_p)
3165 sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
3166 else
3167 {
3168 BFD_ASSERT (h->need_fn_stub);
3169 sec = h->fn_stub;
3170 }
3171
3172 symbol = sec->output_section->vma + sec->output_offset;
3173 }
3174 /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
3175 need to redirect the call to the stub. */
3176 else if (r_type == R_MIPS16_26 && !info->relocateable
3177 && h != NULL
3178 && (h->call_stub != NULL || h->call_fp_stub != NULL)
3179 && !target_is_16_bit_code_p)
3180 {
3181 /* If both call_stub and call_fp_stub are defined, we can figure
3182 out which one to use by seeing which one appears in the input
3183 file. */
3184 if (h->call_stub != NULL && h->call_fp_stub != NULL)
3185 {
3186 asection *o;
3187
3188 sec = NULL;
3189 for (o = input_bfd->sections; o != NULL; o = o->next)
3190 {
3191 if (strncmp (bfd_get_section_name (input_bfd, o),
3192 CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
3193 {
3194 sec = h->call_fp_stub;
3195 break;
3196 }
3197 }
3198 if (sec == NULL)
3199 sec = h->call_stub;
3200 }
3201 else if (h->call_stub != NULL)
3202 sec = h->call_stub;
3203 else
3204 sec = h->call_fp_stub;
3205
3206 BFD_ASSERT (sec->_raw_size > 0);
3207 symbol = sec->output_section->vma + sec->output_offset;
3208 }
3209
3210 /* Calls from 16-bit code to 32-bit code and vice versa require the
3211 special jalx instruction. */
3212 *require_jalxp = (!info->relocateable
3213 && (((r_type == R_MIPS16_26) && !target_is_16_bit_code_p)
3214 || ((r_type == R_MIPS_26) && target_is_16_bit_code_p)));
3215
3216 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
3217 local_sections, TRUE);
3218
3219 /* If we haven't already determined the GOT offset, or the GP value,
3220 and we're going to need it, get it now. */
3221 switch (r_type)
3222 {
3223 case R_MIPS_GOT_PAGE:
3224 case R_MIPS_GOT_OFST:
3225 /* If this symbol got a global GOT entry, we have to decay
3226 GOT_PAGE/GOT_OFST to GOT_DISP/addend. */
3227 local_p = local_p || ! h
3228 || (h->root.dynindx
3229 < mips_elf_get_global_gotsym_index (elf_hash_table (info)
3230 ->dynobj));
3231 if (local_p || r_type == R_MIPS_GOT_OFST)
3232 break;
3233 /* Fall through. */
3234
3235 case R_MIPS_CALL16:
3236 case R_MIPS_GOT16:
3237 case R_MIPS_GOT_DISP:
3238 case R_MIPS_GOT_HI16:
3239 case R_MIPS_CALL_HI16:
3240 case R_MIPS_GOT_LO16:
3241 case R_MIPS_CALL_LO16:
3242 /* Find the index into the GOT where this value is located. */
3243 if (!local_p)
3244 {
3245 /* GOT_PAGE may take a non-zero addend, that is ignored in a
3246 GOT_PAGE relocation that decays to GOT_DISP because the
3247 symbol turns out to be global. The addend is then added
3248 as GOT_OFST. */
3249 BFD_ASSERT (addend == 0 || r_type == R_MIPS_GOT_PAGE);
3250 g = mips_elf_global_got_index (elf_hash_table (info)->dynobj,
3251 input_bfd,
3252 (struct elf_link_hash_entry *) h);
3253 if (! elf_hash_table(info)->dynamic_sections_created
3254 || (info->shared
3255 && (info->symbolic || h->root.dynindx == -1)
3256 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
3257 {
3258 /* This is a static link or a -Bsymbolic link. The
3259 symbol is defined locally, or was forced to be local.
3260 We must initialize this entry in the GOT. */
3261 bfd *tmpbfd = elf_hash_table (info)->dynobj;
3262 asection *sgot = mips_elf_got_section (tmpbfd, FALSE);
3263 MIPS_ELF_PUT_WORD (tmpbfd, symbol, sgot->contents + g);
3264 }
3265 }
3266 else if (r_type == R_MIPS_GOT16 || r_type == R_MIPS_CALL16)
3267 /* There's no need to create a local GOT entry here; the
3268 calculation for a local GOT16 entry does not involve G. */
3269 break;
3270 else
3271 {
3272 g = mips_elf_local_got_index (abfd, input_bfd,
3273 info, symbol + addend);
3274 if (g == MINUS_ONE)
3275 return bfd_reloc_outofrange;
3276 }
3277
3278 /* Convert GOT indices to actual offsets. */
3279 g = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
3280 abfd, input_bfd, g);
3281 break;
3282
3283 case R_MIPS_HI16:
3284 case R_MIPS_LO16:
3285 case R_MIPS16_GPREL:
3286 case R_MIPS_GPREL16:
3287 case R_MIPS_GPREL32:
3288 case R_MIPS_LITERAL:
3289 gp0 = _bfd_get_gp_value (input_bfd);
3290 gp = _bfd_get_gp_value (abfd);
3291 if (elf_hash_table (info)->dynobj)
3292 gp += mips_elf_adjust_gp (abfd,
3293 mips_elf_got_info
3294 (elf_hash_table (info)->dynobj, NULL),
3295 input_bfd);
3296 break;
3297
3298 default:
3299 break;
3300 }
3301
3302 /* Figure out what kind of relocation is being performed. */
3303 switch (r_type)
3304 {
3305 case R_MIPS_NONE:
3306 return bfd_reloc_continue;
3307
3308 case R_MIPS_16:
3309 value = symbol + mips_elf_sign_extend (addend, 16);
3310 overflowed_p = mips_elf_overflow_p (value, 16);
3311 break;
3312
3313 case R_MIPS_32:
3314 case R_MIPS_REL32:
3315 case R_MIPS_64:
3316 if ((info->shared
3317 || (elf_hash_table (info)->dynamic_sections_created
3318 && h != NULL
3319 && ((h->root.elf_link_hash_flags
3320 & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
3321 && ((h->root.elf_link_hash_flags
3322 & ELF_LINK_HASH_DEF_REGULAR) == 0)))
3323 && r_symndx != 0
3324 && (input_section->flags & SEC_ALLOC) != 0)
3325 {
3326 /* If we're creating a shared library, or this relocation is
3327 against a symbol in a shared library, then we can't know
3328 where the symbol will end up. So, we create a relocation
3329 record in the output, and leave the job up to the dynamic
3330 linker. */
3331 value = addend;
3332 if (!mips_elf_create_dynamic_relocation (abfd,
3333 info,
3334 relocation,
3335 h,
3336 sec,
3337 symbol,
3338 &value,
3339 input_section))
3340 return bfd_reloc_undefined;
3341 }
3342 else
3343 {
3344 if (r_type != R_MIPS_REL32)
3345 value = symbol + addend;
3346 else
3347 value = addend;
3348 }
3349 value &= howto->dst_mask;
3350 break;
3351
3352 case R_MIPS_PC32:
3353 case R_MIPS_PC64:
3354 case R_MIPS_GNU_REL_LO16:
3355 value = symbol + addend - p;
3356 value &= howto->dst_mask;
3357 break;
3358
3359 case R_MIPS_GNU_REL16_S2:
3360 value = symbol + mips_elf_sign_extend (addend << 2, 18) - p;
3361 overflowed_p = mips_elf_overflow_p (value, 18);
3362 value = (value >> 2) & howto->dst_mask;
3363 break;
3364
3365 case R_MIPS_GNU_REL_HI16:
3366 /* Instead of subtracting 'p' here, we should be subtracting the
3367 equivalent value for the LO part of the reloc, since the value
3368 here is relative to that address. Because that's not easy to do,
3369 we adjust 'addend' in _bfd_mips_elf_relocate_section(). See also
3370 the comment there for more information. */
3371 value = mips_elf_high (addend + symbol - p);
3372 value &= howto->dst_mask;
3373 break;
3374
3375 case R_MIPS16_26:
3376 /* The calculation for R_MIPS16_26 is just the same as for an
3377 R_MIPS_26. It's only the storage of the relocated field into
3378 the output file that's different. That's handled in
3379 mips_elf_perform_relocation. So, we just fall through to the
3380 R_MIPS_26 case here. */
3381 case R_MIPS_26:
3382 if (local_p)
3383 value = (((addend << 2) | ((p + 4) & 0xf0000000)) + symbol) >> 2;
3384 else
3385 value = (mips_elf_sign_extend (addend << 2, 28) + symbol) >> 2;
3386 value &= howto->dst_mask;
3387 break;
3388
3389 case R_MIPS_HI16:
3390 if (!gp_disp_p)
3391 {
3392 value = mips_elf_high (addend + symbol);
3393 value &= howto->dst_mask;
3394 }
3395 else
3396 {
3397 value = mips_elf_high (addend + gp - p);
3398 overflowed_p = mips_elf_overflow_p (value, 16);
3399 }
3400 break;
3401
3402 case R_MIPS_LO16:
3403 if (!gp_disp_p)
3404 value = (symbol + addend) & howto->dst_mask;
3405 else
3406 {
3407 value = addend + gp - p + 4;
3408 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
3409 for overflow. But, on, say, IRIX5, relocations against
3410 _gp_disp are normally generated from the .cpload
3411 pseudo-op. It generates code that normally looks like
3412 this:
3413
3414 lui $gp,%hi(_gp_disp)
3415 addiu $gp,$gp,%lo(_gp_disp)
3416 addu $gp,$gp,$t9
3417
3418 Here $t9 holds the address of the function being called,
3419 as required by the MIPS ELF ABI. The R_MIPS_LO16
3420 relocation can easily overflow in this situation, but the
3421 R_MIPS_HI16 relocation will handle the overflow.
3422 Therefore, we consider this a bug in the MIPS ABI, and do
3423 not check for overflow here. */
3424 }
3425 break;
3426
3427 case R_MIPS_LITERAL:
3428 /* Because we don't merge literal sections, we can handle this
3429 just like R_MIPS_GPREL16. In the long run, we should merge
3430 shared literals, and then we will need to additional work
3431 here. */
3432
3433 /* Fall through. */
3434
3435 case R_MIPS16_GPREL:
3436 /* The R_MIPS16_GPREL performs the same calculation as
3437 R_MIPS_GPREL16, but stores the relocated bits in a different
3438 order. We don't need to do anything special here; the
3439 differences are handled in mips_elf_perform_relocation. */
3440 case R_MIPS_GPREL16:
3441 /* Only sign-extend the addend if it was extracted from the
3442 instruction. If the addend was separate, leave it alone,
3443 otherwise we may lose significant bits. */
3444 if (howto->partial_inplace)
3445 addend = mips_elf_sign_extend (addend, 16);
3446 value = symbol + addend - gp;
3447 /* If the symbol was local, any earlier relocatable links will
3448 have adjusted its addend with the gp offset, so compensate
3449 for that now. Don't do it for symbols forced local in this
3450 link, though, since they won't have had the gp offset applied
3451 to them before. */
3452 if (was_local_p)
3453 value += gp0;
3454 overflowed_p = mips_elf_overflow_p (value, 16);
3455 break;
3456
3457 case R_MIPS_GOT16:
3458 case R_MIPS_CALL16:
3459 if (local_p)
3460 {
3461 bfd_boolean forced;
3462
3463 /* The special case is when the symbol is forced to be local. We
3464 need the full address in the GOT since no R_MIPS_LO16 relocation
3465 follows. */
3466 forced = ! mips_elf_local_relocation_p (input_bfd, relocation,
3467 local_sections, FALSE);
3468 value = mips_elf_got16_entry (abfd, input_bfd, info,
3469 symbol + addend, forced);
3470 if (value == MINUS_ONE)
3471 return bfd_reloc_outofrange;
3472 value
3473 = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
3474 abfd, input_bfd, value);
3475 overflowed_p = mips_elf_overflow_p (value, 16);
3476 break;
3477 }
3478
3479 /* Fall through. */
3480
3481 case R_MIPS_GOT_DISP:
3482 got_disp:
3483 value = g;
3484 overflowed_p = mips_elf_overflow_p (value, 16);
3485 break;
3486
3487 case R_MIPS_GPREL32:
3488 value = (addend + symbol + gp0 - gp);
3489 if (!save_addend)
3490 value &= howto->dst_mask;
3491 break;
3492
3493 case R_MIPS_PC16:
3494 value = mips_elf_sign_extend (addend, 16) + symbol - p;
3495 overflowed_p = mips_elf_overflow_p (value, 16);
3496 break;
3497
3498 case R_MIPS_GOT_HI16:
3499 case R_MIPS_CALL_HI16:
3500 /* We're allowed to handle these two relocations identically.
3501 The dynamic linker is allowed to handle the CALL relocations
3502 differently by creating a lazy evaluation stub. */
3503 value = g;
3504 value = mips_elf_high (value);
3505 value &= howto->dst_mask;
3506 break;
3507
3508 case R_MIPS_GOT_LO16:
3509 case R_MIPS_CALL_LO16:
3510 value = g & howto->dst_mask;
3511 break;
3512
3513 case R_MIPS_GOT_PAGE:
3514 /* GOT_PAGE relocations that reference non-local symbols decay
3515 to GOT_DISP. The corresponding GOT_OFST relocation decays to
3516 0. */
3517 if (! local_p)
3518 goto got_disp;
3519 value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
3520 if (value == MINUS_ONE)
3521 return bfd_reloc_outofrange;
3522 value = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
3523 abfd, input_bfd, value);
3524 overflowed_p = mips_elf_overflow_p (value, 16);
3525 break;
3526
3527 case R_MIPS_GOT_OFST:
3528 if (local_p)
3529 mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
3530 else
3531 value = addend;
3532 overflowed_p = mips_elf_overflow_p (value, 16);
3533 break;
3534
3535 case R_MIPS_SUB:
3536 value = symbol - addend;
3537 value &= howto->dst_mask;
3538 break;
3539
3540 case R_MIPS_HIGHER:
3541 value = mips_elf_higher (addend + symbol);
3542 value &= howto->dst_mask;
3543 break;
3544
3545 case R_MIPS_HIGHEST:
3546 value = mips_elf_highest (addend + symbol);
3547 value &= howto->dst_mask;
3548 break;
3549
3550 case R_MIPS_SCN_DISP:
3551 value = symbol + addend - sec->output_offset;
3552 value &= howto->dst_mask;
3553 break;
3554
3555 case R_MIPS_PJUMP:
3556 case R_MIPS_JALR:
3557 /* Both of these may be ignored. R_MIPS_JALR is an optimization
3558 hint; we could improve performance by honoring that hint. */
3559 return bfd_reloc_continue;
3560
3561 case R_MIPS_GNU_VTINHERIT:
3562 case R_MIPS_GNU_VTENTRY:
3563 /* We don't do anything with these at present. */
3564 return bfd_reloc_continue;
3565
3566 default:
3567 /* An unrecognized relocation type. */
3568 return bfd_reloc_notsupported;
3569 }
3570
3571 /* Store the VALUE for our caller. */
3572 *valuep = value;
3573 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
3574 }
3575
3576 /* Obtain the field relocated by RELOCATION. */
3577
3578 static bfd_vma
3579 mips_elf_obtain_contents (howto, relocation, input_bfd, contents)
3580 reloc_howto_type *howto;
3581 const Elf_Internal_Rela *relocation;
3582 bfd *input_bfd;
3583 bfd_byte *contents;
3584 {
3585 bfd_vma x;
3586 bfd_byte *location = contents + relocation->r_offset;
3587
3588 /* Obtain the bytes. */
3589 x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
3590
3591 if ((ELF_R_TYPE (input_bfd, relocation->r_info) == R_MIPS16_26
3592 || ELF_R_TYPE (input_bfd, relocation->r_info) == R_MIPS16_GPREL)
3593 && bfd_little_endian (input_bfd))
3594 /* The two 16-bit words will be reversed on a little-endian system.
3595 See mips_elf_perform_relocation for more details. */
3596 x = (((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16));
3597
3598 return x;
3599 }
3600
3601 /* It has been determined that the result of the RELOCATION is the
3602 VALUE. Use HOWTO to place VALUE into the output file at the
3603 appropriate position. The SECTION is the section to which the
3604 relocation applies. If REQUIRE_JALX is TRUE, then the opcode used
3605 for the relocation must be either JAL or JALX, and it is
3606 unconditionally converted to JALX.
3607
3608 Returns FALSE if anything goes wrong. */
3609
3610 static bfd_boolean
3611 mips_elf_perform_relocation (info, howto, relocation, value, input_bfd,
3612 input_section, contents, require_jalx)
3613 struct bfd_link_info *info;
3614 reloc_howto_type *howto;
3615 const Elf_Internal_Rela *relocation;
3616 bfd_vma value;
3617 bfd *input_bfd;
3618 asection *input_section;
3619 bfd_byte *contents;
3620 bfd_boolean require_jalx;
3621 {
3622 bfd_vma x;
3623 bfd_byte *location;
3624 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
3625
3626 /* Figure out where the relocation is occurring. */
3627 location = contents + relocation->r_offset;
3628
3629 /* Obtain the current value. */
3630 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
3631
3632 /* Clear the field we are setting. */
3633 x &= ~howto->dst_mask;
3634
3635 /* If this is the R_MIPS16_26 relocation, we must store the
3636 value in a funny way. */
3637 if (r_type == R_MIPS16_26)
3638 {
3639 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
3640 Most mips16 instructions are 16 bits, but these instructions
3641 are 32 bits.
3642
3643 The format of these instructions is:
3644
3645 +--------------+--------------------------------+
3646 ! JALX ! X! Imm 20:16 ! Imm 25:21 !
3647 +--------------+--------------------------------+
3648 ! Immediate 15:0 !
3649 +-----------------------------------------------+
3650
3651 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
3652 Note that the immediate value in the first word is swapped.
3653
3654 When producing a relocateable object file, R_MIPS16_26 is
3655 handled mostly like R_MIPS_26. In particular, the addend is
3656 stored as a straight 26-bit value in a 32-bit instruction.
3657 (gas makes life simpler for itself by never adjusting a
3658 R_MIPS16_26 reloc to be against a section, so the addend is
3659 always zero). However, the 32 bit instruction is stored as 2
3660 16-bit values, rather than a single 32-bit value. In a
3661 big-endian file, the result is the same; in a little-endian
3662 file, the two 16-bit halves of the 32 bit value are swapped.
3663 This is so that a disassembler can recognize the jal
3664 instruction.
3665
3666 When doing a final link, R_MIPS16_26 is treated as a 32 bit
3667 instruction stored as two 16-bit values. The addend A is the
3668 contents of the targ26 field. The calculation is the same as
3669 R_MIPS_26. When storing the calculated value, reorder the
3670 immediate value as shown above, and don't forget to store the
3671 value as two 16-bit values.
3672
3673 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
3674 defined as
3675
3676 big-endian:
3677 +--------+----------------------+
3678 | | |
3679 | | targ26-16 |
3680 |31 26|25 0|
3681 +--------+----------------------+
3682
3683 little-endian:
3684 +----------+------+-------------+
3685 | | | |
3686 | sub1 | | sub2 |
3687 |0 9|10 15|16 31|
3688 +----------+--------------------+
3689 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
3690 ((sub1 << 16) | sub2)).
3691
3692 When producing a relocateable object file, the calculation is
3693 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
3694 When producing a fully linked file, the calculation is
3695 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
3696 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff) */
3697
3698 if (!info->relocateable)
3699 /* Shuffle the bits according to the formula above. */
3700 value = (((value & 0x1f0000) << 5)
3701 | ((value & 0x3e00000) >> 5)
3702 | (value & 0xffff));
3703 }
3704 else if (r_type == R_MIPS16_GPREL)
3705 {
3706 /* R_MIPS16_GPREL is used for GP-relative addressing in mips16
3707 mode. A typical instruction will have a format like this:
3708
3709 +--------------+--------------------------------+
3710 ! EXTEND ! Imm 10:5 ! Imm 15:11 !
3711 +--------------+--------------------------------+
3712 ! Major ! rx ! ry ! Imm 4:0 !
3713 +--------------+--------------------------------+
3714
3715 EXTEND is the five bit value 11110. Major is the instruction
3716 opcode.
3717
3718 This is handled exactly like R_MIPS_GPREL16, except that the
3719 addend is retrieved and stored as shown in this diagram; that
3720 is, the Imm fields above replace the V-rel16 field.
3721
3722 All we need to do here is shuffle the bits appropriately. As
3723 above, the two 16-bit halves must be swapped on a
3724 little-endian system. */
3725 value = (((value & 0x7e0) << 16)
3726 | ((value & 0xf800) << 5)
3727 | (value & 0x1f));
3728 }
3729
3730 /* Set the field. */
3731 x |= (value & howto->dst_mask);
3732
3733 /* If required, turn JAL into JALX. */
3734 if (require_jalx)
3735 {
3736 bfd_boolean ok;
3737 bfd_vma opcode = x >> 26;
3738 bfd_vma jalx_opcode;
3739
3740 /* Check to see if the opcode is already JAL or JALX. */
3741 if (r_type == R_MIPS16_26)
3742 {
3743 ok = ((opcode == 0x6) || (opcode == 0x7));
3744 jalx_opcode = 0x7;
3745 }
3746 else
3747 {
3748 ok = ((opcode == 0x3) || (opcode == 0x1d));
3749 jalx_opcode = 0x1d;
3750 }
3751
3752 /* If the opcode is not JAL or JALX, there's a problem. */
3753 if (!ok)
3754 {
3755 (*_bfd_error_handler)
3756 (_("%s: %s+0x%lx: jump to stub routine which is not jal"),
3757 bfd_archive_filename (input_bfd),
3758 input_section->name,
3759 (unsigned long) relocation->r_offset);
3760 bfd_set_error (bfd_error_bad_value);
3761 return FALSE;
3762 }
3763
3764 /* Make this the JALX opcode. */
3765 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
3766 }
3767
3768 /* Swap the high- and low-order 16 bits on little-endian systems
3769 when doing a MIPS16 relocation. */
3770 if ((r_type == R_MIPS16_GPREL || r_type == R_MIPS16_26)
3771 && bfd_little_endian (input_bfd))
3772 x = (((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16));
3773
3774 /* Put the value into the output. */
3775 bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
3776 return TRUE;
3777 }
3778
3779 /* Returns TRUE if SECTION is a MIPS16 stub section. */
3780
3781 static bfd_boolean
3782 mips_elf_stub_section_p (abfd, section)
3783 bfd *abfd ATTRIBUTE_UNUSED;
3784 asection *section;
3785 {
3786 const char *name = bfd_get_section_name (abfd, section);
3787
3788 return (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0
3789 || strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0
3790 || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0);
3791 }
3792 \f
3793 /* Add room for N relocations to the .rel.dyn section in ABFD. */
3794
3795 static void
3796 mips_elf_allocate_dynamic_relocations (abfd, n)
3797 bfd *abfd;
3798 unsigned int n;
3799 {
3800 asection *s;
3801
3802 s = mips_elf_rel_dyn_section (abfd, FALSE);
3803 BFD_ASSERT (s != NULL);
3804
3805 if (s->_raw_size == 0)
3806 {
3807 /* Make room for a null element. */
3808 s->_raw_size += MIPS_ELF_REL_SIZE (abfd);
3809 ++s->reloc_count;
3810 }
3811 s->_raw_size += n * MIPS_ELF_REL_SIZE (abfd);
3812 }
3813
3814 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL
3815 is the original relocation, which is now being transformed into a
3816 dynamic relocation. The ADDENDP is adjusted if necessary; the
3817 caller should store the result in place of the original addend. */
3818
3819 static bfd_boolean
3820 mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
3821 symbol, addendp, input_section)
3822 bfd *output_bfd;
3823 struct bfd_link_info *info;
3824 const Elf_Internal_Rela *rel;
3825 struct mips_elf_link_hash_entry *h;
3826 asection *sec;
3827 bfd_vma symbol;
3828 bfd_vma *addendp;
3829 asection *input_section;
3830 {
3831 Elf_Internal_Rela outrel[3];
3832 bfd_boolean skip;
3833 asection *sreloc;
3834 bfd *dynobj;
3835 int r_type;
3836
3837 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
3838 dynobj = elf_hash_table (info)->dynobj;
3839 sreloc = mips_elf_rel_dyn_section (dynobj, FALSE);
3840 BFD_ASSERT (sreloc != NULL);
3841 BFD_ASSERT (sreloc->contents != NULL);
3842 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
3843 < sreloc->_raw_size);
3844
3845 skip = FALSE;
3846 outrel[0].r_offset =
3847 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
3848 outrel[1].r_offset =
3849 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
3850 outrel[2].r_offset =
3851 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
3852
3853 #if 0
3854 /* We begin by assuming that the offset for the dynamic relocation
3855 is the same as for the original relocation. We'll adjust this
3856 later to reflect the correct output offsets. */
3857 if (elf_section_data (input_section)->sec_info_type != ELF_INFO_TYPE_STABS)
3858 {
3859 outrel[1].r_offset = rel[1].r_offset;
3860 outrel[2].r_offset = rel[2].r_offset;
3861 }
3862 else
3863 {
3864 /* Except that in a stab section things are more complex.
3865 Because we compress stab information, the offset given in the
3866 relocation may not be the one we want; we must let the stabs
3867 machinery tell us the offset. */
3868 outrel[1].r_offset = outrel[0].r_offset;
3869 outrel[2].r_offset = outrel[0].r_offset;
3870 /* If we didn't need the relocation at all, this value will be
3871 -1. */
3872 if (outrel[0].r_offset == (bfd_vma) -1)
3873 skip = TRUE;
3874 }
3875 #endif
3876
3877 if (outrel[0].r_offset == (bfd_vma) -1
3878 || outrel[0].r_offset == (bfd_vma) -2)
3879 skip = TRUE;
3880
3881 /* If we've decided to skip this relocation, just output an empty
3882 record. Note that R_MIPS_NONE == 0, so that this call to memset
3883 is a way of setting R_TYPE to R_MIPS_NONE. */
3884 if (skip)
3885 memset (outrel, 0, sizeof (Elf_Internal_Rela) * 3);
3886 else
3887 {
3888 long indx;
3889
3890 /* We must now calculate the dynamic symbol table index to use
3891 in the relocation. */
3892 if (h != NULL
3893 && (! info->symbolic || (h->root.elf_link_hash_flags
3894 & ELF_LINK_HASH_DEF_REGULAR) == 0))
3895 {
3896 indx = h->root.dynindx;
3897 /* h->root.dynindx may be -1 if this symbol was marked to
3898 become local. */
3899 if (indx == -1)
3900 indx = 0;
3901 }
3902 else
3903 {
3904 if (sec != NULL && bfd_is_abs_section (sec))
3905 indx = 0;
3906 else if (sec == NULL || sec->owner == NULL)
3907 {
3908 bfd_set_error (bfd_error_bad_value);
3909 return FALSE;
3910 }
3911 else
3912 {
3913 indx = elf_section_data (sec->output_section)->dynindx;
3914 if (indx == 0)
3915 abort ();
3916 }
3917
3918 /* Instead of generating a relocation using the section
3919 symbol, we may as well make it a fully relative
3920 relocation. We want to avoid generating relocations to
3921 local symbols because we used to generate them
3922 incorrectly, without adding the original symbol value,
3923 which is mandated by the ABI for section symbols. In
3924 order to give dynamic loaders and applications time to
3925 phase out the incorrect use, we refrain from emitting
3926 section-relative relocations. It's not like they're
3927 useful, after all. This should be a bit more efficient
3928 as well. */
3929 indx = 0;
3930 }
3931
3932 /* If the relocation was previously an absolute relocation and
3933 this symbol will not be referred to by the relocation, we must
3934 adjust it by the value we give it in the dynamic symbol table.
3935 Otherwise leave the job up to the dynamic linker. */
3936 if (!indx && r_type != R_MIPS_REL32)
3937 *addendp += symbol;
3938
3939 /* The relocation is always an REL32 relocation because we don't
3940 know where the shared library will wind up at load-time. */
3941 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
3942 R_MIPS_REL32);
3943 /* For strict adherence to the ABI specification, we should
3944 generate a R_MIPS_64 relocation record by itself before the
3945 _REL32/_64 record as well, such that the addend is read in as
3946 a 64-bit value (REL32 is a 32-bit relocation, after all).
3947 However, since none of the existing ELF64 MIPS dynamic
3948 loaders seems to care, we don't waste space with these
3949 artificial relocations. If this turns out to not be true,
3950 mips_elf_allocate_dynamic_relocation() should be tweaked so
3951 as to make room for a pair of dynamic relocations per
3952 invocation if ABI_64_P, and here we should generate an
3953 additional relocation record with R_MIPS_64 by itself for a
3954 NULL symbol before this relocation record. */
3955 outrel[1].r_info = ELF_R_INFO (output_bfd, (unsigned long) 0,
3956 ABI_64_P (output_bfd)
3957 ? R_MIPS_64
3958 : R_MIPS_NONE);
3959 outrel[2].r_info = ELF_R_INFO (output_bfd, (unsigned long) 0,
3960 R_MIPS_NONE);
3961
3962 /* Adjust the output offset of the relocation to reference the
3963 correct location in the output file. */
3964 outrel[0].r_offset += (input_section->output_section->vma
3965 + input_section->output_offset);
3966 outrel[1].r_offset += (input_section->output_section->vma
3967 + input_section->output_offset);
3968 outrel[2].r_offset += (input_section->output_section->vma
3969 + input_section->output_offset);
3970 }
3971
3972 /* Put the relocation back out. We have to use the special
3973 relocation outputter in the 64-bit case since the 64-bit
3974 relocation format is non-standard. */
3975 if (ABI_64_P (output_bfd))
3976 {
3977 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3978 (output_bfd, &outrel[0],
3979 (sreloc->contents
3980 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
3981 }
3982 else
3983 bfd_elf32_swap_reloc_out
3984 (output_bfd, &outrel[0],
3985 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
3986
3987 /* Record the index of the first relocation referencing H. This
3988 information is later emitted in the .msym section. */
3989 if (h != NULL
3990 && (h->min_dyn_reloc_index == 0
3991 || sreloc->reloc_count < h->min_dyn_reloc_index))
3992 h->min_dyn_reloc_index = sreloc->reloc_count;
3993
3994 /* We've now added another relocation. */
3995 ++sreloc->reloc_count;
3996
3997 /* Make sure the output section is writable. The dynamic linker
3998 will be writing to it. */
3999 elf_section_data (input_section->output_section)->this_hdr.sh_flags
4000 |= SHF_WRITE;
4001
4002 /* On IRIX5, make an entry of compact relocation info. */
4003 if (! skip && IRIX_COMPAT (output_bfd) == ict_irix5)
4004 {
4005 asection *scpt = bfd_get_section_by_name (dynobj, ".compact_rel");
4006 bfd_byte *cr;
4007
4008 if (scpt)
4009 {
4010 Elf32_crinfo cptrel;
4011
4012 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
4013 cptrel.vaddr = (rel->r_offset
4014 + input_section->output_section->vma
4015 + input_section->output_offset);
4016 if (r_type == R_MIPS_REL32)
4017 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
4018 else
4019 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
4020 mips_elf_set_cr_dist2to (cptrel, 0);
4021 cptrel.konst = *addendp;
4022
4023 cr = (scpt->contents
4024 + sizeof (Elf32_External_compact_rel));
4025 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
4026 ((Elf32_External_crinfo *) cr
4027 + scpt->reloc_count));
4028 ++scpt->reloc_count;
4029 }
4030 }
4031
4032 return TRUE;
4033 }
4034 \f
4035 /* Return the MACH for a MIPS e_flags value. */
4036
4037 unsigned long
4038 _bfd_elf_mips_mach (flags)
4039 flagword flags;
4040 {
4041 switch (flags & EF_MIPS_MACH)
4042 {
4043 case E_MIPS_MACH_3900:
4044 return bfd_mach_mips3900;
4045
4046 case E_MIPS_MACH_4010:
4047 return bfd_mach_mips4010;
4048
4049 case E_MIPS_MACH_4100:
4050 return bfd_mach_mips4100;
4051
4052 case E_MIPS_MACH_4111:
4053 return bfd_mach_mips4111;
4054
4055 case E_MIPS_MACH_4120:
4056 return bfd_mach_mips4120;
4057
4058 case E_MIPS_MACH_4650:
4059 return bfd_mach_mips4650;
4060
4061 case E_MIPS_MACH_5400:
4062 return bfd_mach_mips5400;
4063
4064 case E_MIPS_MACH_5500:
4065 return bfd_mach_mips5500;
4066
4067 case E_MIPS_MACH_SB1:
4068 return bfd_mach_mips_sb1;
4069
4070 default:
4071 switch (flags & EF_MIPS_ARCH)
4072 {
4073 default:
4074 case E_MIPS_ARCH_1:
4075 return bfd_mach_mips3000;
4076 break;
4077
4078 case E_MIPS_ARCH_2:
4079 return bfd_mach_mips6000;
4080 break;
4081
4082 case E_MIPS_ARCH_3:
4083 return bfd_mach_mips4000;
4084 break;
4085
4086 case E_MIPS_ARCH_4:
4087 return bfd_mach_mips8000;
4088 break;
4089
4090 case E_MIPS_ARCH_5:
4091 return bfd_mach_mips5;
4092 break;
4093
4094 case E_MIPS_ARCH_32:
4095 return bfd_mach_mipsisa32;
4096 break;
4097
4098 case E_MIPS_ARCH_64:
4099 return bfd_mach_mipsisa64;
4100 break;
4101
4102 case E_MIPS_ARCH_32R2:
4103 return bfd_mach_mipsisa32r2;
4104 break;
4105 }
4106 }
4107
4108 return 0;
4109 }
4110
4111 /* Return printable name for ABI. */
4112
4113 static INLINE char *
4114 elf_mips_abi_name (abfd)
4115 bfd *abfd;
4116 {
4117 flagword flags;
4118
4119 flags = elf_elfheader (abfd)->e_flags;
4120 switch (flags & EF_MIPS_ABI)
4121 {
4122 case 0:
4123 if (ABI_N32_P (abfd))
4124 return "N32";
4125 else if (ABI_64_P (abfd))
4126 return "64";
4127 else
4128 return "none";
4129 case E_MIPS_ABI_O32:
4130 return "O32";
4131 case E_MIPS_ABI_O64:
4132 return "O64";
4133 case E_MIPS_ABI_EABI32:
4134 return "EABI32";
4135 case E_MIPS_ABI_EABI64:
4136 return "EABI64";
4137 default:
4138 return "unknown abi";
4139 }
4140 }
4141 \f
4142 /* MIPS ELF uses two common sections. One is the usual one, and the
4143 other is for small objects. All the small objects are kept
4144 together, and then referenced via the gp pointer, which yields
4145 faster assembler code. This is what we use for the small common
4146 section. This approach is copied from ecoff.c. */
4147 static asection mips_elf_scom_section;
4148 static asymbol mips_elf_scom_symbol;
4149 static asymbol *mips_elf_scom_symbol_ptr;
4150
4151 /* MIPS ELF also uses an acommon section, which represents an
4152 allocated common symbol which may be overridden by a
4153 definition in a shared library. */
4154 static asection mips_elf_acom_section;
4155 static asymbol mips_elf_acom_symbol;
4156 static asymbol *mips_elf_acom_symbol_ptr;
4157
4158 /* Handle the special MIPS section numbers that a symbol may use.
4159 This is used for both the 32-bit and the 64-bit ABI. */
4160
4161 void
4162 _bfd_mips_elf_symbol_processing (abfd, asym)
4163 bfd *abfd;
4164 asymbol *asym;
4165 {
4166 elf_symbol_type *elfsym;
4167
4168 elfsym = (elf_symbol_type *) asym;
4169 switch (elfsym->internal_elf_sym.st_shndx)
4170 {
4171 case SHN_MIPS_ACOMMON:
4172 /* This section is used in a dynamically linked executable file.
4173 It is an allocated common section. The dynamic linker can
4174 either resolve these symbols to something in a shared
4175 library, or it can just leave them here. For our purposes,
4176 we can consider these symbols to be in a new section. */
4177 if (mips_elf_acom_section.name == NULL)
4178 {
4179 /* Initialize the acommon section. */
4180 mips_elf_acom_section.name = ".acommon";
4181 mips_elf_acom_section.flags = SEC_ALLOC;
4182 mips_elf_acom_section.output_section = &mips_elf_acom_section;
4183 mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
4184 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
4185 mips_elf_acom_symbol.name = ".acommon";
4186 mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
4187 mips_elf_acom_symbol.section = &mips_elf_acom_section;
4188 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
4189 }
4190 asym->section = &mips_elf_acom_section;
4191 break;
4192
4193 case SHN_COMMON:
4194 /* Common symbols less than the GP size are automatically
4195 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
4196 if (asym->value > elf_gp_size (abfd)
4197 || IRIX_COMPAT (abfd) == ict_irix6)
4198 break;
4199 /* Fall through. */
4200 case SHN_MIPS_SCOMMON:
4201 if (mips_elf_scom_section.name == NULL)
4202 {
4203 /* Initialize the small common section. */
4204 mips_elf_scom_section.name = ".scommon";
4205 mips_elf_scom_section.flags = SEC_IS_COMMON;
4206 mips_elf_scom_section.output_section = &mips_elf_scom_section;
4207 mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
4208 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
4209 mips_elf_scom_symbol.name = ".scommon";
4210 mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
4211 mips_elf_scom_symbol.section = &mips_elf_scom_section;
4212 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
4213 }
4214 asym->section = &mips_elf_scom_section;
4215 asym->value = elfsym->internal_elf_sym.st_size;
4216 break;
4217
4218 case SHN_MIPS_SUNDEFINED:
4219 asym->section = bfd_und_section_ptr;
4220 break;
4221
4222 #if 0 /* for SGI_COMPAT */
4223 case SHN_MIPS_TEXT:
4224 asym->section = mips_elf_text_section_ptr;
4225 break;
4226
4227 case SHN_MIPS_DATA:
4228 asym->section = mips_elf_data_section_ptr;
4229 break;
4230 #endif
4231 }
4232 }
4233 \f
4234 /* Work over a section just before writing it out. This routine is
4235 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
4236 sections that need the SHF_MIPS_GPREL flag by name; there has to be
4237 a better way. */
4238
4239 bfd_boolean
4240 _bfd_mips_elf_section_processing (abfd, hdr)
4241 bfd *abfd;
4242 Elf_Internal_Shdr *hdr;
4243 {
4244 if (hdr->sh_type == SHT_MIPS_REGINFO
4245 && hdr->sh_size > 0)
4246 {
4247 bfd_byte buf[4];
4248
4249 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
4250 BFD_ASSERT (hdr->contents == NULL);
4251
4252 if (bfd_seek (abfd,
4253 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
4254 SEEK_SET) != 0)
4255 return FALSE;
4256 H_PUT_32 (abfd, elf_gp (abfd), buf);
4257 if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
4258 return FALSE;
4259 }
4260
4261 if (hdr->sh_type == SHT_MIPS_OPTIONS
4262 && hdr->bfd_section != NULL
4263 && mips_elf_section_data (hdr->bfd_section) != NULL
4264 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
4265 {
4266 bfd_byte *contents, *l, *lend;
4267
4268 /* We stored the section contents in the tdata field in the
4269 set_section_contents routine. We save the section contents
4270 so that we don't have to read them again.
4271 At this point we know that elf_gp is set, so we can look
4272 through the section contents to see if there is an
4273 ODK_REGINFO structure. */
4274
4275 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
4276 l = contents;
4277 lend = contents + hdr->sh_size;
4278 while (l + sizeof (Elf_External_Options) <= lend)
4279 {
4280 Elf_Internal_Options intopt;
4281
4282 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
4283 &intopt);
4284 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
4285 {
4286 bfd_byte buf[8];
4287
4288 if (bfd_seek (abfd,
4289 (hdr->sh_offset
4290 + (l - contents)
4291 + sizeof (Elf_External_Options)
4292 + (sizeof (Elf64_External_RegInfo) - 8)),
4293 SEEK_SET) != 0)
4294 return FALSE;
4295 H_PUT_64 (abfd, elf_gp (abfd), buf);
4296 if (bfd_bwrite (buf, (bfd_size_type) 8, abfd) != 8)
4297 return FALSE;
4298 }
4299 else if (intopt.kind == ODK_REGINFO)
4300 {
4301 bfd_byte buf[4];
4302
4303 if (bfd_seek (abfd,
4304 (hdr->sh_offset
4305 + (l - contents)
4306 + sizeof (Elf_External_Options)
4307 + (sizeof (Elf32_External_RegInfo) - 4)),
4308 SEEK_SET) != 0)
4309 return FALSE;
4310 H_PUT_32 (abfd, elf_gp (abfd), buf);
4311 if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
4312 return FALSE;
4313 }
4314 l += intopt.size;
4315 }
4316 }
4317
4318 if (hdr->bfd_section != NULL)
4319 {
4320 const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
4321
4322 if (strcmp (name, ".sdata") == 0
4323 || strcmp (name, ".lit8") == 0
4324 || strcmp (name, ".lit4") == 0)
4325 {
4326 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4327 hdr->sh_type = SHT_PROGBITS;
4328 }
4329 else if (strcmp (name, ".sbss") == 0)
4330 {
4331 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4332 hdr->sh_type = SHT_NOBITS;
4333 }
4334 else if (strcmp (name, ".srdata") == 0)
4335 {
4336 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
4337 hdr->sh_type = SHT_PROGBITS;
4338 }
4339 else if (strcmp (name, ".compact_rel") == 0)
4340 {
4341 hdr->sh_flags = 0;
4342 hdr->sh_type = SHT_PROGBITS;
4343 }
4344 else if (strcmp (name, ".rtproc") == 0)
4345 {
4346 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
4347 {
4348 unsigned int adjust;
4349
4350 adjust = hdr->sh_size % hdr->sh_addralign;
4351 if (adjust != 0)
4352 hdr->sh_size += hdr->sh_addralign - adjust;
4353 }
4354 }
4355 }
4356
4357 return TRUE;
4358 }
4359
4360 /* Handle a MIPS specific section when reading an object file. This
4361 is called when elfcode.h finds a section with an unknown type.
4362 This routine supports both the 32-bit and 64-bit ELF ABI.
4363
4364 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
4365 how to. */
4366
4367 bfd_boolean
4368 _bfd_mips_elf_section_from_shdr (abfd, hdr, name)
4369 bfd *abfd;
4370 Elf_Internal_Shdr *hdr;
4371 const char *name;
4372 {
4373 flagword flags = 0;
4374
4375 /* There ought to be a place to keep ELF backend specific flags, but
4376 at the moment there isn't one. We just keep track of the
4377 sections by their name, instead. Fortunately, the ABI gives
4378 suggested names for all the MIPS specific sections, so we will
4379 probably get away with this. */
4380 switch (hdr->sh_type)
4381 {
4382 case SHT_MIPS_LIBLIST:
4383 if (strcmp (name, ".liblist") != 0)
4384 return FALSE;
4385 break;
4386 case SHT_MIPS_MSYM:
4387 if (strcmp (name, ".msym") != 0)
4388 return FALSE;
4389 break;
4390 case SHT_MIPS_CONFLICT:
4391 if (strcmp (name, ".conflict") != 0)
4392 return FALSE;
4393 break;
4394 case SHT_MIPS_GPTAB:
4395 if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) != 0)
4396 return FALSE;
4397 break;
4398 case SHT_MIPS_UCODE:
4399 if (strcmp (name, ".ucode") != 0)
4400 return FALSE;
4401 break;
4402 case SHT_MIPS_DEBUG:
4403 if (strcmp (name, ".mdebug") != 0)
4404 return FALSE;
4405 flags = SEC_DEBUGGING;
4406 break;
4407 case SHT_MIPS_REGINFO:
4408 if (strcmp (name, ".reginfo") != 0
4409 || hdr->sh_size != sizeof (Elf32_External_RegInfo))
4410 return FALSE;
4411 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
4412 break;
4413 case SHT_MIPS_IFACE:
4414 if (strcmp (name, ".MIPS.interfaces") != 0)
4415 return FALSE;
4416 break;
4417 case SHT_MIPS_CONTENT:
4418 if (strncmp (name, ".MIPS.content", sizeof ".MIPS.content" - 1) != 0)
4419 return FALSE;
4420 break;
4421 case SHT_MIPS_OPTIONS:
4422 if (strcmp (name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) != 0)
4423 return FALSE;
4424 break;
4425 case SHT_MIPS_DWARF:
4426 if (strncmp (name, ".debug_", sizeof ".debug_" - 1) != 0)
4427 return FALSE;
4428 break;
4429 case SHT_MIPS_SYMBOL_LIB:
4430 if (strcmp (name, ".MIPS.symlib") != 0)
4431 return FALSE;
4432 break;
4433 case SHT_MIPS_EVENTS:
4434 if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) != 0
4435 && strncmp (name, ".MIPS.post_rel",
4436 sizeof ".MIPS.post_rel" - 1) != 0)
4437 return FALSE;
4438 break;
4439 default:
4440 return FALSE;
4441 }
4442
4443 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
4444 return FALSE;
4445
4446 if (flags)
4447 {
4448 if (! bfd_set_section_flags (abfd, hdr->bfd_section,
4449 (bfd_get_section_flags (abfd,
4450 hdr->bfd_section)
4451 | flags)))
4452 return FALSE;
4453 }
4454
4455 /* FIXME: We should record sh_info for a .gptab section. */
4456
4457 /* For a .reginfo section, set the gp value in the tdata information
4458 from the contents of this section. We need the gp value while
4459 processing relocs, so we just get it now. The .reginfo section
4460 is not used in the 64-bit MIPS ELF ABI. */
4461 if (hdr->sh_type == SHT_MIPS_REGINFO)
4462 {
4463 Elf32_External_RegInfo ext;
4464 Elf32_RegInfo s;
4465
4466 if (! bfd_get_section_contents (abfd, hdr->bfd_section, (PTR) &ext,
4467 (file_ptr) 0,
4468 (bfd_size_type) sizeof ext))
4469 return FALSE;
4470 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
4471 elf_gp (abfd) = s.ri_gp_value;
4472 }
4473
4474 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
4475 set the gp value based on what we find. We may see both
4476 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
4477 they should agree. */
4478 if (hdr->sh_type == SHT_MIPS_OPTIONS)
4479 {
4480 bfd_byte *contents, *l, *lend;
4481
4482 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
4483 if (contents == NULL)
4484 return FALSE;
4485 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
4486 (file_ptr) 0, hdr->sh_size))
4487 {
4488 free (contents);
4489 return FALSE;
4490 }
4491 l = contents;
4492 lend = contents + hdr->sh_size;
4493 while (l + sizeof (Elf_External_Options) <= lend)
4494 {
4495 Elf_Internal_Options intopt;
4496
4497 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
4498 &intopt);
4499 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
4500 {
4501 Elf64_Internal_RegInfo intreg;
4502
4503 bfd_mips_elf64_swap_reginfo_in
4504 (abfd,
4505 ((Elf64_External_RegInfo *)
4506 (l + sizeof (Elf_External_Options))),
4507 &intreg);
4508 elf_gp (abfd) = intreg.ri_gp_value;
4509 }
4510 else if (intopt.kind == ODK_REGINFO)
4511 {
4512 Elf32_RegInfo intreg;
4513
4514 bfd_mips_elf32_swap_reginfo_in
4515 (abfd,
4516 ((Elf32_External_RegInfo *)
4517 (l + sizeof (Elf_External_Options))),
4518 &intreg);
4519 elf_gp (abfd) = intreg.ri_gp_value;
4520 }
4521 l += intopt.size;
4522 }
4523 free (contents);
4524 }
4525
4526 return TRUE;
4527 }
4528
4529 /* Set the correct type for a MIPS ELF section. We do this by the
4530 section name, which is a hack, but ought to work. This routine is
4531 used by both the 32-bit and the 64-bit ABI. */
4532
4533 bfd_boolean
4534 _bfd_mips_elf_fake_sections (abfd, hdr, sec)
4535 bfd *abfd;
4536 Elf_Internal_Shdr *hdr;
4537 asection *sec;
4538 {
4539 register const char *name;
4540
4541 name = bfd_get_section_name (abfd, sec);
4542
4543 if (strcmp (name, ".liblist") == 0)
4544 {
4545 hdr->sh_type = SHT_MIPS_LIBLIST;
4546 hdr->sh_info = sec->_raw_size / sizeof (Elf32_Lib);
4547 /* The sh_link field is set in final_write_processing. */
4548 }
4549 else if (strcmp (name, ".conflict") == 0)
4550 hdr->sh_type = SHT_MIPS_CONFLICT;
4551 else if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0)
4552 {
4553 hdr->sh_type = SHT_MIPS_GPTAB;
4554 hdr->sh_entsize = sizeof (Elf32_External_gptab);
4555 /* The sh_info field is set in final_write_processing. */
4556 }
4557 else if (strcmp (name, ".ucode") == 0)
4558 hdr->sh_type = SHT_MIPS_UCODE;
4559 else if (strcmp (name, ".mdebug") == 0)
4560 {
4561 hdr->sh_type = SHT_MIPS_DEBUG;
4562 /* In a shared object on IRIX 5.3, the .mdebug section has an
4563 entsize of 0. FIXME: Does this matter? */
4564 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
4565 hdr->sh_entsize = 0;
4566 else
4567 hdr->sh_entsize = 1;
4568 }
4569 else if (strcmp (name, ".reginfo") == 0)
4570 {
4571 hdr->sh_type = SHT_MIPS_REGINFO;
4572 /* In a shared object on IRIX 5.3, the .reginfo section has an
4573 entsize of 0x18. FIXME: Does this matter? */
4574 if (SGI_COMPAT (abfd))
4575 {
4576 if ((abfd->flags & DYNAMIC) != 0)
4577 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
4578 else
4579 hdr->sh_entsize = 1;
4580 }
4581 else
4582 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
4583 }
4584 else if (SGI_COMPAT (abfd)
4585 && (strcmp (name, ".hash") == 0
4586 || strcmp (name, ".dynamic") == 0
4587 || strcmp (name, ".dynstr") == 0))
4588 {
4589 if (SGI_COMPAT (abfd))
4590 hdr->sh_entsize = 0;
4591 #if 0
4592 /* This isn't how the IRIX6 linker behaves. */
4593 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
4594 #endif
4595 }
4596 else if (strcmp (name, ".got") == 0
4597 || strcmp (name, ".srdata") == 0
4598 || strcmp (name, ".sdata") == 0
4599 || strcmp (name, ".sbss") == 0
4600 || strcmp (name, ".lit4") == 0
4601 || strcmp (name, ".lit8") == 0)
4602 hdr->sh_flags |= SHF_MIPS_GPREL;
4603 else if (strcmp (name, ".MIPS.interfaces") == 0)
4604 {
4605 hdr->sh_type = SHT_MIPS_IFACE;
4606 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
4607 }
4608 else if (strncmp (name, ".MIPS.content", strlen (".MIPS.content")) == 0)
4609 {
4610 hdr->sh_type = SHT_MIPS_CONTENT;
4611 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
4612 /* The sh_info field is set in final_write_processing. */
4613 }
4614 else if (strcmp (name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
4615 {
4616 hdr->sh_type = SHT_MIPS_OPTIONS;
4617 hdr->sh_entsize = 1;
4618 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
4619 }
4620 else if (strncmp (name, ".debug_", sizeof ".debug_" - 1) == 0)
4621 hdr->sh_type = SHT_MIPS_DWARF;
4622 else if (strcmp (name, ".MIPS.symlib") == 0)
4623 {
4624 hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
4625 /* The sh_link and sh_info fields are set in
4626 final_write_processing. */
4627 }
4628 else if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0
4629 || strncmp (name, ".MIPS.post_rel",
4630 sizeof ".MIPS.post_rel" - 1) == 0)
4631 {
4632 hdr->sh_type = SHT_MIPS_EVENTS;
4633 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
4634 /* The sh_link field is set in final_write_processing. */
4635 }
4636 else if (strcmp (name, ".msym") == 0)
4637 {
4638 hdr->sh_type = SHT_MIPS_MSYM;
4639 hdr->sh_flags |= SHF_ALLOC;
4640 hdr->sh_entsize = 8;
4641 }
4642
4643 /* The generic elf_fake_sections will set up REL_HDR using the
4644 default kind of relocations. But, we may actually need both
4645 kinds of relocations, so we set up the second header here.
4646
4647 This is not necessary for the O32 ABI since that only uses Elf32_Rel
4648 relocations (cf. System V ABI, MIPS RISC Processor Supplement,
4649 3rd Edition, p. 4-17). It breaks the IRIX 5/6 32-bit ld, since one
4650 of the resulting empty .rela.<section> sections starts with
4651 sh_offset == object size, and ld doesn't allow that. While the check
4652 is arguably bogus for empty or SHT_NOBITS sections, it can easily be
4653 avoided by not emitting those useless sections in the first place. */
4654 if (! SGI_COMPAT (abfd) && ! NEWABI_P(abfd)
4655 && (sec->flags & SEC_RELOC) != 0)
4656 {
4657 struct bfd_elf_section_data *esd;
4658 bfd_size_type amt = sizeof (Elf_Internal_Shdr);
4659
4660 esd = elf_section_data (sec);
4661 BFD_ASSERT (esd->rel_hdr2 == NULL);
4662 esd->rel_hdr2 = (Elf_Internal_Shdr *) bfd_zalloc (abfd, amt);
4663 if (!esd->rel_hdr2)
4664 return FALSE;
4665 _bfd_elf_init_reloc_shdr (abfd, esd->rel_hdr2, sec, !sec->use_rela_p);
4666 }
4667
4668 return TRUE;
4669 }
4670
4671 /* Given a BFD section, try to locate the corresponding ELF section
4672 index. This is used by both the 32-bit and the 64-bit ABI.
4673 Actually, it's not clear to me that the 64-bit ABI supports these,
4674 but for non-PIC objects we will certainly want support for at least
4675 the .scommon section. */
4676
4677 bfd_boolean
4678 _bfd_mips_elf_section_from_bfd_section (abfd, sec, retval)
4679 bfd *abfd ATTRIBUTE_UNUSED;
4680 asection *sec;
4681 int *retval;
4682 {
4683 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
4684 {
4685 *retval = SHN_MIPS_SCOMMON;
4686 return TRUE;
4687 }
4688 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
4689 {
4690 *retval = SHN_MIPS_ACOMMON;
4691 return TRUE;
4692 }
4693 return FALSE;
4694 }
4695 \f
4696 /* Hook called by the linker routine which adds symbols from an object
4697 file. We must handle the special MIPS section numbers here. */
4698
4699 bfd_boolean
4700 _bfd_mips_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
4701 bfd *abfd;
4702 struct bfd_link_info *info;
4703 const Elf_Internal_Sym *sym;
4704 const char **namep;
4705 flagword *flagsp ATTRIBUTE_UNUSED;
4706 asection **secp;
4707 bfd_vma *valp;
4708 {
4709 if (SGI_COMPAT (abfd)
4710 && (abfd->flags & DYNAMIC) != 0
4711 && strcmp (*namep, "_rld_new_interface") == 0)
4712 {
4713 /* Skip IRIX5 rld entry name. */
4714 *namep = NULL;
4715 return TRUE;
4716 }
4717
4718 switch (sym->st_shndx)
4719 {
4720 case SHN_COMMON:
4721 /* Common symbols less than the GP size are automatically
4722 treated as SHN_MIPS_SCOMMON symbols. */
4723 if (sym->st_size > elf_gp_size (abfd)
4724 || IRIX_COMPAT (abfd) == ict_irix6)
4725 break;
4726 /* Fall through. */
4727 case SHN_MIPS_SCOMMON:
4728 *secp = bfd_make_section_old_way (abfd, ".scommon");
4729 (*secp)->flags |= SEC_IS_COMMON;
4730 *valp = sym->st_size;
4731 break;
4732
4733 case SHN_MIPS_TEXT:
4734 /* This section is used in a shared object. */
4735 if (elf_tdata (abfd)->elf_text_section == NULL)
4736 {
4737 asymbol *elf_text_symbol;
4738 asection *elf_text_section;
4739 bfd_size_type amt = sizeof (asection);
4740
4741 elf_text_section = bfd_zalloc (abfd, amt);
4742 if (elf_text_section == NULL)
4743 return FALSE;
4744
4745 amt = sizeof (asymbol);
4746 elf_text_symbol = bfd_zalloc (abfd, amt);
4747 if (elf_text_symbol == NULL)
4748 return FALSE;
4749
4750 /* Initialize the section. */
4751
4752 elf_tdata (abfd)->elf_text_section = elf_text_section;
4753 elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
4754
4755 elf_text_section->symbol = elf_text_symbol;
4756 elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
4757
4758 elf_text_section->name = ".text";
4759 elf_text_section->flags = SEC_NO_FLAGS;
4760 elf_text_section->output_section = NULL;
4761 elf_text_section->owner = abfd;
4762 elf_text_symbol->name = ".text";
4763 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
4764 elf_text_symbol->section = elf_text_section;
4765 }
4766 /* This code used to do *secp = bfd_und_section_ptr if
4767 info->shared. I don't know why, and that doesn't make sense,
4768 so I took it out. */
4769 *secp = elf_tdata (abfd)->elf_text_section;
4770 break;
4771
4772 case SHN_MIPS_ACOMMON:
4773 /* Fall through. XXX Can we treat this as allocated data? */
4774 case SHN_MIPS_DATA:
4775 /* This section is used in a shared object. */
4776 if (elf_tdata (abfd)->elf_data_section == NULL)
4777 {
4778 asymbol *elf_data_symbol;
4779 asection *elf_data_section;
4780 bfd_size_type amt = sizeof (asection);
4781
4782 elf_data_section = bfd_zalloc (abfd, amt);
4783 if (elf_data_section == NULL)
4784 return FALSE;
4785
4786 amt = sizeof (asymbol);
4787 elf_data_symbol = bfd_zalloc (abfd, amt);
4788 if (elf_data_symbol == NULL)
4789 return FALSE;
4790
4791 /* Initialize the section. */
4792
4793 elf_tdata (abfd)->elf_data_section = elf_data_section;
4794 elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
4795
4796 elf_data_section->symbol = elf_data_symbol;
4797 elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
4798
4799 elf_data_section->name = ".data";
4800 elf_data_section->flags = SEC_NO_FLAGS;
4801 elf_data_section->output_section = NULL;
4802 elf_data_section->owner = abfd;
4803 elf_data_symbol->name = ".data";
4804 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
4805 elf_data_symbol->section = elf_data_section;
4806 }
4807 /* This code used to do *secp = bfd_und_section_ptr if
4808 info->shared. I don't know why, and that doesn't make sense,
4809 so I took it out. */
4810 *secp = elf_tdata (abfd)->elf_data_section;
4811 break;
4812
4813 case SHN_MIPS_SUNDEFINED:
4814 *secp = bfd_und_section_ptr;
4815 break;
4816 }
4817
4818 if (SGI_COMPAT (abfd)
4819 && ! info->shared
4820 && info->hash->creator == abfd->xvec
4821 && strcmp (*namep, "__rld_obj_head") == 0)
4822 {
4823 struct elf_link_hash_entry *h;
4824 struct bfd_link_hash_entry *bh;
4825
4826 /* Mark __rld_obj_head as dynamic. */
4827 bh = NULL;
4828 if (! (_bfd_generic_link_add_one_symbol
4829 (info, abfd, *namep, BSF_GLOBAL, *secp,
4830 (bfd_vma) *valp, (const char *) NULL, FALSE,
4831 get_elf_backend_data (abfd)->collect, &bh)))
4832 return FALSE;
4833
4834 h = (struct elf_link_hash_entry *) bh;
4835 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4836 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4837 h->type = STT_OBJECT;
4838
4839 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
4840 return FALSE;
4841
4842 mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
4843 }
4844
4845 /* If this is a mips16 text symbol, add 1 to the value to make it
4846 odd. This will cause something like .word SYM to come up with
4847 the right value when it is loaded into the PC. */
4848 if (sym->st_other == STO_MIPS16)
4849 ++*valp;
4850
4851 return TRUE;
4852 }
4853
4854 /* This hook function is called before the linker writes out a global
4855 symbol. We mark symbols as small common if appropriate. This is
4856 also where we undo the increment of the value for a mips16 symbol. */
4857
4858 bfd_boolean
4859 _bfd_mips_elf_link_output_symbol_hook (abfd, info, name, sym, input_sec)
4860 bfd *abfd ATTRIBUTE_UNUSED;
4861 struct bfd_link_info *info ATTRIBUTE_UNUSED;
4862 const char *name ATTRIBUTE_UNUSED;
4863 Elf_Internal_Sym *sym;
4864 asection *input_sec;
4865 {
4866 /* If we see a common symbol, which implies a relocatable link, then
4867 if a symbol was small common in an input file, mark it as small
4868 common in the output file. */
4869 if (sym->st_shndx == SHN_COMMON
4870 && strcmp (input_sec->name, ".scommon") == 0)
4871 sym->st_shndx = SHN_MIPS_SCOMMON;
4872
4873 if (sym->st_other == STO_MIPS16
4874 && (sym->st_value & 1) != 0)
4875 --sym->st_value;
4876
4877 return TRUE;
4878 }
4879 \f
4880 /* Functions for the dynamic linker. */
4881
4882 /* Create dynamic sections when linking against a dynamic object. */
4883
4884 bfd_boolean
4885 _bfd_mips_elf_create_dynamic_sections (abfd, info)
4886 bfd *abfd;
4887 struct bfd_link_info *info;
4888 {
4889 struct elf_link_hash_entry *h;
4890 struct bfd_link_hash_entry *bh;
4891 flagword flags;
4892 register asection *s;
4893 const char * const *namep;
4894
4895 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4896 | SEC_LINKER_CREATED | SEC_READONLY);
4897
4898 /* Mips ABI requests the .dynamic section to be read only. */
4899 s = bfd_get_section_by_name (abfd, ".dynamic");
4900 if (s != NULL)
4901 {
4902 if (! bfd_set_section_flags (abfd, s, flags))
4903 return FALSE;
4904 }
4905
4906 /* We need to create .got section. */
4907 if (! mips_elf_create_got_section (abfd, info, FALSE))
4908 return FALSE;
4909
4910 if (! mips_elf_rel_dyn_section (elf_hash_table (info)->dynobj, TRUE))
4911 return FALSE;
4912
4913 /* Create the .msym section on IRIX6. It is used by the dynamic
4914 linker to speed up dynamic relocations, and to avoid computing
4915 the ELF hash for symbols. */
4916 if (IRIX_COMPAT (abfd) == ict_irix6
4917 && !mips_elf_create_msym_section (abfd))
4918 return FALSE;
4919
4920 /* Create .stub section. */
4921 if (bfd_get_section_by_name (abfd,
4922 MIPS_ELF_STUB_SECTION_NAME (abfd)) == NULL)
4923 {
4924 s = bfd_make_section (abfd, MIPS_ELF_STUB_SECTION_NAME (abfd));
4925 if (s == NULL
4926 || ! bfd_set_section_flags (abfd, s, flags | SEC_CODE)
4927 || ! bfd_set_section_alignment (abfd, s,
4928 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4929 return FALSE;
4930 }
4931
4932 if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
4933 && !info->shared
4934 && bfd_get_section_by_name (abfd, ".rld_map") == NULL)
4935 {
4936 s = bfd_make_section (abfd, ".rld_map");
4937 if (s == NULL
4938 || ! bfd_set_section_flags (abfd, s, flags &~ (flagword) SEC_READONLY)
4939 || ! bfd_set_section_alignment (abfd, s,
4940 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4941 return FALSE;
4942 }
4943
4944 /* On IRIX5, we adjust add some additional symbols and change the
4945 alignments of several sections. There is no ABI documentation
4946 indicating that this is necessary on IRIX6, nor any evidence that
4947 the linker takes such action. */
4948 if (IRIX_COMPAT (abfd) == ict_irix5)
4949 {
4950 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
4951 {
4952 bh = NULL;
4953 if (! (_bfd_generic_link_add_one_symbol
4954 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr,
4955 (bfd_vma) 0, (const char *) NULL, FALSE,
4956 get_elf_backend_data (abfd)->collect, &bh)))
4957 return FALSE;
4958
4959 h = (struct elf_link_hash_entry *) bh;
4960 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4961 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4962 h->type = STT_SECTION;
4963
4964 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
4965 return FALSE;
4966 }
4967
4968 /* We need to create a .compact_rel section. */
4969 if (SGI_COMPAT (abfd))
4970 {
4971 if (!mips_elf_create_compact_rel_section (abfd, info))
4972 return FALSE;
4973 }
4974
4975 /* Change alignments of some sections. */
4976 s = bfd_get_section_by_name (abfd, ".hash");
4977 if (s != NULL)
4978 bfd_set_section_alignment (abfd, s, 4);
4979 s = bfd_get_section_by_name (abfd, ".dynsym");
4980 if (s != NULL)
4981 bfd_set_section_alignment (abfd, s, 4);
4982 s = bfd_get_section_by_name (abfd, ".dynstr");
4983 if (s != NULL)
4984 bfd_set_section_alignment (abfd, s, 4);
4985 s = bfd_get_section_by_name (abfd, ".reginfo");
4986 if (s != NULL)
4987 bfd_set_section_alignment (abfd, s, 4);
4988 s = bfd_get_section_by_name (abfd, ".dynamic");
4989 if (s != NULL)
4990 bfd_set_section_alignment (abfd, s, 4);
4991 }
4992
4993 if (!info->shared)
4994 {
4995 const char *name;
4996
4997 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
4998 bh = NULL;
4999 if (!(_bfd_generic_link_add_one_symbol
5000 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr,
5001 (bfd_vma) 0, (const char *) NULL, FALSE,
5002 get_elf_backend_data (abfd)->collect, &bh)))
5003 return FALSE;
5004
5005 h = (struct elf_link_hash_entry *) bh;
5006 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
5007 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
5008 h->type = STT_SECTION;
5009
5010 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
5011 return FALSE;
5012
5013 if (! mips_elf_hash_table (info)->use_rld_obj_head)
5014 {
5015 /* __rld_map is a four byte word located in the .data section
5016 and is filled in by the rtld to contain a pointer to
5017 the _r_debug structure. Its symbol value will be set in
5018 _bfd_mips_elf_finish_dynamic_symbol. */
5019 s = bfd_get_section_by_name (abfd, ".rld_map");
5020 BFD_ASSERT (s != NULL);
5021
5022 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
5023 bh = NULL;
5024 if (!(_bfd_generic_link_add_one_symbol
5025 (info, abfd, name, BSF_GLOBAL, s,
5026 (bfd_vma) 0, (const char *) NULL, FALSE,
5027 get_elf_backend_data (abfd)->collect, &bh)))
5028 return FALSE;
5029
5030 h = (struct elf_link_hash_entry *) bh;
5031 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
5032 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
5033 h->type = STT_OBJECT;
5034
5035 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
5036 return FALSE;
5037 }
5038 }
5039
5040 return TRUE;
5041 }
5042 \f
5043 /* Look through the relocs for a section during the first phase, and
5044 allocate space in the global offset table. */
5045
5046 bfd_boolean
5047 _bfd_mips_elf_check_relocs (abfd, info, sec, relocs)
5048 bfd *abfd;
5049 struct bfd_link_info *info;
5050 asection *sec;
5051 const Elf_Internal_Rela *relocs;
5052 {
5053 const char *name;
5054 bfd *dynobj;
5055 Elf_Internal_Shdr *symtab_hdr;
5056 struct elf_link_hash_entry **sym_hashes;
5057 struct mips_got_info *g;
5058 size_t extsymoff;
5059 const Elf_Internal_Rela *rel;
5060 const Elf_Internal_Rela *rel_end;
5061 asection *sgot;
5062 asection *sreloc;
5063 struct elf_backend_data *bed;
5064
5065 if (info->relocateable)
5066 return TRUE;
5067
5068 dynobj = elf_hash_table (info)->dynobj;
5069 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5070 sym_hashes = elf_sym_hashes (abfd);
5071 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
5072
5073 /* Check for the mips16 stub sections. */
5074
5075 name = bfd_get_section_name (abfd, sec);
5076 if (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0)
5077 {
5078 unsigned long r_symndx;
5079
5080 /* Look at the relocation information to figure out which symbol
5081 this is for. */
5082
5083 r_symndx = ELF_R_SYM (abfd, relocs->r_info);
5084
5085 if (r_symndx < extsymoff
5086 || sym_hashes[r_symndx - extsymoff] == NULL)
5087 {
5088 asection *o;
5089
5090 /* This stub is for a local symbol. This stub will only be
5091 needed if there is some relocation in this BFD, other
5092 than a 16 bit function call, which refers to this symbol. */
5093 for (o = abfd->sections; o != NULL; o = o->next)
5094 {
5095 Elf_Internal_Rela *sec_relocs;
5096 const Elf_Internal_Rela *r, *rend;
5097
5098 /* We can ignore stub sections when looking for relocs. */
5099 if ((o->flags & SEC_RELOC) == 0
5100 || o->reloc_count == 0
5101 || strncmp (bfd_get_section_name (abfd, o), FN_STUB,
5102 sizeof FN_STUB - 1) == 0
5103 || strncmp (bfd_get_section_name (abfd, o), CALL_STUB,
5104 sizeof CALL_STUB - 1) == 0
5105 || strncmp (bfd_get_section_name (abfd, o), CALL_FP_STUB,
5106 sizeof CALL_FP_STUB - 1) == 0)
5107 continue;
5108
5109 sec_relocs = (MNAME(abfd,_bfd_elf,link_read_relocs)
5110 (abfd, o, (PTR) NULL,
5111 (Elf_Internal_Rela *) NULL,
5112 info->keep_memory));
5113 if (sec_relocs == NULL)
5114 return FALSE;
5115
5116 rend = sec_relocs + o->reloc_count;
5117 for (r = sec_relocs; r < rend; r++)
5118 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
5119 && ELF_R_TYPE (abfd, r->r_info) != R_MIPS16_26)
5120 break;
5121
5122 if (elf_section_data (o)->relocs != sec_relocs)
5123 free (sec_relocs);
5124
5125 if (r < rend)
5126 break;
5127 }
5128
5129 if (o == NULL)
5130 {
5131 /* There is no non-call reloc for this stub, so we do
5132 not need it. Since this function is called before
5133 the linker maps input sections to output sections, we
5134 can easily discard it by setting the SEC_EXCLUDE
5135 flag. */
5136 sec->flags |= SEC_EXCLUDE;
5137 return TRUE;
5138 }
5139
5140 /* Record this stub in an array of local symbol stubs for
5141 this BFD. */
5142 if (elf_tdata (abfd)->local_stubs == NULL)
5143 {
5144 unsigned long symcount;
5145 asection **n;
5146 bfd_size_type amt;
5147
5148 if (elf_bad_symtab (abfd))
5149 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
5150 else
5151 symcount = symtab_hdr->sh_info;
5152 amt = symcount * sizeof (asection *);
5153 n = (asection **) bfd_zalloc (abfd, amt);
5154 if (n == NULL)
5155 return FALSE;
5156 elf_tdata (abfd)->local_stubs = n;
5157 }
5158
5159 elf_tdata (abfd)->local_stubs[r_symndx] = sec;
5160
5161 /* We don't need to set mips16_stubs_seen in this case.
5162 That flag is used to see whether we need to look through
5163 the global symbol table for stubs. We don't need to set
5164 it here, because we just have a local stub. */
5165 }
5166 else
5167 {
5168 struct mips_elf_link_hash_entry *h;
5169
5170 h = ((struct mips_elf_link_hash_entry *)
5171 sym_hashes[r_symndx - extsymoff]);
5172
5173 /* H is the symbol this stub is for. */
5174
5175 h->fn_stub = sec;
5176 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
5177 }
5178 }
5179 else if (strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0
5180 || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
5181 {
5182 unsigned long r_symndx;
5183 struct mips_elf_link_hash_entry *h;
5184 asection **loc;
5185
5186 /* Look at the relocation information to figure out which symbol
5187 this is for. */
5188
5189 r_symndx = ELF_R_SYM (abfd, relocs->r_info);
5190
5191 if (r_symndx < extsymoff
5192 || sym_hashes[r_symndx - extsymoff] == NULL)
5193 {
5194 /* This stub was actually built for a static symbol defined
5195 in the same file. We assume that all static symbols in
5196 mips16 code are themselves mips16, so we can simply
5197 discard this stub. Since this function is called before
5198 the linker maps input sections to output sections, we can
5199 easily discard it by setting the SEC_EXCLUDE flag. */
5200 sec->flags |= SEC_EXCLUDE;
5201 return TRUE;
5202 }
5203
5204 h = ((struct mips_elf_link_hash_entry *)
5205 sym_hashes[r_symndx - extsymoff]);
5206
5207 /* H is the symbol this stub is for. */
5208
5209 if (strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
5210 loc = &h->call_fp_stub;
5211 else
5212 loc = &h->call_stub;
5213
5214 /* If we already have an appropriate stub for this function, we
5215 don't need another one, so we can discard this one. Since
5216 this function is called before the linker maps input sections
5217 to output sections, we can easily discard it by setting the
5218 SEC_EXCLUDE flag. We can also discard this section if we
5219 happen to already know that this is a mips16 function; it is
5220 not necessary to check this here, as it is checked later, but
5221 it is slightly faster to check now. */
5222 if (*loc != NULL || h->root.other == STO_MIPS16)
5223 {
5224 sec->flags |= SEC_EXCLUDE;
5225 return TRUE;
5226 }
5227
5228 *loc = sec;
5229 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
5230 }
5231
5232 if (dynobj == NULL)
5233 {
5234 sgot = NULL;
5235 g = NULL;
5236 }
5237 else
5238 {
5239 sgot = mips_elf_got_section (dynobj, FALSE);
5240 if (sgot == NULL)
5241 g = NULL;
5242 else
5243 {
5244 BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
5245 g = mips_elf_section_data (sgot)->u.got_info;
5246 BFD_ASSERT (g != NULL);
5247 }
5248 }
5249
5250 sreloc = NULL;
5251 bed = get_elf_backend_data (abfd);
5252 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
5253 for (rel = relocs; rel < rel_end; ++rel)
5254 {
5255 unsigned long r_symndx;
5256 unsigned int r_type;
5257 struct elf_link_hash_entry *h;
5258
5259 r_symndx = ELF_R_SYM (abfd, rel->r_info);
5260 r_type = ELF_R_TYPE (abfd, rel->r_info);
5261
5262 if (r_symndx < extsymoff)
5263 h = NULL;
5264 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
5265 {
5266 (*_bfd_error_handler)
5267 (_("%s: Malformed reloc detected for section %s"),
5268 bfd_archive_filename (abfd), name);
5269 bfd_set_error (bfd_error_bad_value);
5270 return FALSE;
5271 }
5272 else
5273 {
5274 h = sym_hashes[r_symndx - extsymoff];
5275
5276 /* This may be an indirect symbol created because of a version. */
5277 if (h != NULL)
5278 {
5279 while (h->root.type == bfd_link_hash_indirect)
5280 h = (struct elf_link_hash_entry *) h->root.u.i.link;
5281 }
5282 }
5283
5284 /* Some relocs require a global offset table. */
5285 if (dynobj == NULL || sgot == NULL)
5286 {
5287 switch (r_type)
5288 {
5289 case R_MIPS_GOT16:
5290 case R_MIPS_CALL16:
5291 case R_MIPS_CALL_HI16:
5292 case R_MIPS_CALL_LO16:
5293 case R_MIPS_GOT_HI16:
5294 case R_MIPS_GOT_LO16:
5295 case R_MIPS_GOT_PAGE:
5296 case R_MIPS_GOT_OFST:
5297 case R_MIPS_GOT_DISP:
5298 if (dynobj == NULL)
5299 elf_hash_table (info)->dynobj = dynobj = abfd;
5300 if (! mips_elf_create_got_section (dynobj, info, FALSE))
5301 return FALSE;
5302 g = mips_elf_got_info (dynobj, &sgot);
5303 break;
5304
5305 case R_MIPS_32:
5306 case R_MIPS_REL32:
5307 case R_MIPS_64:
5308 if (dynobj == NULL
5309 && (info->shared || h != NULL)
5310 && (sec->flags & SEC_ALLOC) != 0)
5311 elf_hash_table (info)->dynobj = dynobj = abfd;
5312 break;
5313
5314 default:
5315 break;
5316 }
5317 }
5318
5319 if (!h && (r_type == R_MIPS_CALL_LO16
5320 || r_type == R_MIPS_GOT_LO16
5321 || r_type == R_MIPS_GOT_DISP))
5322 {
5323 /* We may need a local GOT entry for this relocation. We
5324 don't count R_MIPS_GOT_PAGE because we can estimate the
5325 maximum number of pages needed by looking at the size of
5326 the segment. Similar comments apply to R_MIPS_GOT16 and
5327 R_MIPS_CALL16. We don't count R_MIPS_GOT_HI16, or
5328 R_MIPS_CALL_HI16 because these are always followed by an
5329 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */
5330 if (! mips_elf_record_local_got_symbol (abfd, r_symndx,
5331 rel->r_addend, g))
5332 return FALSE;
5333 }
5334
5335 switch (r_type)
5336 {
5337 case R_MIPS_CALL16:
5338 if (h == NULL)
5339 {
5340 (*_bfd_error_handler)
5341 (_("%s: CALL16 reloc at 0x%lx not against global symbol"),
5342 bfd_archive_filename (abfd), (unsigned long) rel->r_offset);
5343 bfd_set_error (bfd_error_bad_value);
5344 return FALSE;
5345 }
5346 /* Fall through. */
5347
5348 case R_MIPS_CALL_HI16:
5349 case R_MIPS_CALL_LO16:
5350 if (h != NULL)
5351 {
5352 /* This symbol requires a global offset table entry. */
5353 if (! mips_elf_record_global_got_symbol (h, abfd, info, g))
5354 return FALSE;
5355
5356 /* We need a stub, not a plt entry for the undefined
5357 function. But we record it as if it needs plt. See
5358 elf_adjust_dynamic_symbol in elflink.h. */
5359 h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
5360 h->type = STT_FUNC;
5361 }
5362 break;
5363
5364 case R_MIPS_GOT_PAGE:
5365 /* If this is a global, overridable symbol, GOT_PAGE will
5366 decay to GOT_DISP, so we'll need a GOT entry for it. */
5367 if (h == NULL)
5368 break;
5369 else
5370 {
5371 struct mips_elf_link_hash_entry *hmips =
5372 (struct mips_elf_link_hash_entry *) h;
5373
5374 while (hmips->root.root.type == bfd_link_hash_indirect
5375 || hmips->root.root.type == bfd_link_hash_warning)
5376 hmips = (struct mips_elf_link_hash_entry *)
5377 hmips->root.root.u.i.link;
5378
5379 if ((hmips->root.root.type == bfd_link_hash_defined
5380 || hmips->root.root.type == bfd_link_hash_defweak)
5381 && hmips->root.root.u.def.section
5382 && ! (info->shared && ! info->symbolic
5383 && ! (hmips->root.elf_link_hash_flags
5384 & ELF_LINK_FORCED_LOCAL))
5385 /* If we've encountered any other relocation
5386 referencing the symbol, we'll have marked it as
5387 dynamic, and, even though we might be able to get
5388 rid of the GOT entry should we know for sure all
5389 previous relocations were GOT_PAGE ones, at this
5390 point we can't tell, so just keep using the
5391 symbol as dynamic. This is very important in the
5392 multi-got case, since we don't decide whether to
5393 decay GOT_PAGE to GOT_DISP on a per-GOT basis: if
5394 the symbol is dynamic, we'll need a GOT entry for
5395 every GOT in which the symbol is referenced with
5396 a GOT_PAGE relocation. */
5397 && hmips->root.dynindx == -1)
5398 break;
5399 }
5400 /* Fall through. */
5401
5402 case R_MIPS_GOT16:
5403 case R_MIPS_GOT_HI16:
5404 case R_MIPS_GOT_LO16:
5405 case R_MIPS_GOT_DISP:
5406 /* This symbol requires a global offset table entry. */
5407 if (h && ! mips_elf_record_global_got_symbol (h, abfd, info, g))
5408 return FALSE;
5409 break;
5410
5411 case R_MIPS_32:
5412 case R_MIPS_REL32:
5413 case R_MIPS_64:
5414 if ((info->shared || h != NULL)
5415 && (sec->flags & SEC_ALLOC) != 0)
5416 {
5417 if (sreloc == NULL)
5418 {
5419 sreloc = mips_elf_rel_dyn_section (dynobj, TRUE);
5420 if (sreloc == NULL)
5421 return FALSE;
5422 }
5423 #define MIPS_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
5424 if (info->shared)
5425 {
5426 /* When creating a shared object, we must copy these
5427 reloc types into the output file as R_MIPS_REL32
5428 relocs. We make room for this reloc in the
5429 .rel.dyn reloc section. */
5430 mips_elf_allocate_dynamic_relocations (dynobj, 1);
5431 if ((sec->flags & MIPS_READONLY_SECTION)
5432 == MIPS_READONLY_SECTION)
5433 /* We tell the dynamic linker that there are
5434 relocations against the text segment. */
5435 info->flags |= DF_TEXTREL;
5436 }
5437 else
5438 {
5439 struct mips_elf_link_hash_entry *hmips;
5440
5441 /* We only need to copy this reloc if the symbol is
5442 defined in a dynamic object. */
5443 hmips = (struct mips_elf_link_hash_entry *) h;
5444 ++hmips->possibly_dynamic_relocs;
5445 if ((sec->flags & MIPS_READONLY_SECTION)
5446 == MIPS_READONLY_SECTION)
5447 /* We need it to tell the dynamic linker if there
5448 are relocations against the text segment. */
5449 hmips->readonly_reloc = TRUE;
5450 }
5451
5452 /* Even though we don't directly need a GOT entry for
5453 this symbol, a symbol must have a dynamic symbol
5454 table index greater that DT_MIPS_GOTSYM if there are
5455 dynamic relocations against it. */
5456 if (h != NULL)
5457 {
5458 if (dynobj == NULL)
5459 elf_hash_table (info)->dynobj = dynobj = abfd;
5460 if (! mips_elf_create_got_section (dynobj, info, TRUE))
5461 return FALSE;
5462 g = mips_elf_got_info (dynobj, &sgot);
5463 if (! mips_elf_record_global_got_symbol (h, abfd, info, g))
5464 return FALSE;
5465 }
5466 }
5467
5468 if (SGI_COMPAT (abfd))
5469 mips_elf_hash_table (info)->compact_rel_size +=
5470 sizeof (Elf32_External_crinfo);
5471 break;
5472
5473 case R_MIPS_26:
5474 case R_MIPS_GPREL16:
5475 case R_MIPS_LITERAL:
5476 case R_MIPS_GPREL32:
5477 if (SGI_COMPAT (abfd))
5478 mips_elf_hash_table (info)->compact_rel_size +=
5479 sizeof (Elf32_External_crinfo);
5480 break;
5481
5482 /* This relocation describes the C++ object vtable hierarchy.
5483 Reconstruct it for later use during GC. */
5484 case R_MIPS_GNU_VTINHERIT:
5485 if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
5486 return FALSE;
5487 break;
5488
5489 /* This relocation describes which C++ vtable entries are actually
5490 used. Record for later use during GC. */
5491 case R_MIPS_GNU_VTENTRY:
5492 if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_offset))
5493 return FALSE;
5494 break;
5495
5496 default:
5497 break;
5498 }
5499
5500 /* We must not create a stub for a symbol that has relocations
5501 related to taking the function's address. */
5502 switch (r_type)
5503 {
5504 default:
5505 if (h != NULL)
5506 {
5507 struct mips_elf_link_hash_entry *mh;
5508
5509 mh = (struct mips_elf_link_hash_entry *) h;
5510 mh->no_fn_stub = TRUE;
5511 }
5512 break;
5513 case R_MIPS_CALL16:
5514 case R_MIPS_CALL_HI16:
5515 case R_MIPS_CALL_LO16:
5516 break;
5517 }
5518
5519 /* If this reloc is not a 16 bit call, and it has a global
5520 symbol, then we will need the fn_stub if there is one.
5521 References from a stub section do not count. */
5522 if (h != NULL
5523 && r_type != R_MIPS16_26
5524 && strncmp (bfd_get_section_name (abfd, sec), FN_STUB,
5525 sizeof FN_STUB - 1) != 0
5526 && strncmp (bfd_get_section_name (abfd, sec), CALL_STUB,
5527 sizeof CALL_STUB - 1) != 0
5528 && strncmp (bfd_get_section_name (abfd, sec), CALL_FP_STUB,
5529 sizeof CALL_FP_STUB - 1) != 0)
5530 {
5531 struct mips_elf_link_hash_entry *mh;
5532
5533 mh = (struct mips_elf_link_hash_entry *) h;
5534 mh->need_fn_stub = TRUE;
5535 }
5536 }
5537
5538 return TRUE;
5539 }
5540 \f
5541 bfd_boolean
5542 _bfd_mips_relax_section (abfd, sec, link_info, again)
5543 bfd *abfd;
5544 asection *sec;
5545 struct bfd_link_info *link_info;
5546 bfd_boolean *again;
5547 {
5548 Elf_Internal_Rela *internal_relocs;
5549 Elf_Internal_Rela *irel, *irelend;
5550 Elf_Internal_Shdr *symtab_hdr;
5551 bfd_byte *contents = NULL;
5552 bfd_byte *free_contents = NULL;
5553 size_t extsymoff;
5554 bfd_boolean changed_contents = FALSE;
5555 bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
5556 Elf_Internal_Sym *isymbuf = NULL;
5557
5558 /* We are not currently changing any sizes, so only one pass. */
5559 *again = FALSE;
5560
5561 if (link_info->relocateable)
5562 return TRUE;
5563
5564 internal_relocs = (MNAME(abfd,_bfd_elf,link_read_relocs)
5565 (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
5566 link_info->keep_memory));
5567 if (internal_relocs == NULL)
5568 return TRUE;
5569
5570 irelend = internal_relocs + sec->reloc_count
5571 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
5572 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5573 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
5574
5575 for (irel = internal_relocs; irel < irelend; irel++)
5576 {
5577 bfd_vma symval;
5578 bfd_signed_vma sym_offset;
5579 unsigned int r_type;
5580 unsigned long r_symndx;
5581 asection *sym_sec;
5582 unsigned long instruction;
5583
5584 /* Turn jalr into bgezal, and jr into beq, if they're marked
5585 with a JALR relocation, that indicate where they jump to.
5586 This saves some pipeline bubbles. */
5587 r_type = ELF_R_TYPE (abfd, irel->r_info);
5588 if (r_type != R_MIPS_JALR)
5589 continue;
5590
5591 r_symndx = ELF_R_SYM (abfd, irel->r_info);
5592 /* Compute the address of the jump target. */
5593 if (r_symndx >= extsymoff)
5594 {
5595 struct mips_elf_link_hash_entry *h
5596 = ((struct mips_elf_link_hash_entry *)
5597 elf_sym_hashes (abfd) [r_symndx - extsymoff]);
5598
5599 while (h->root.root.type == bfd_link_hash_indirect
5600 || h->root.root.type == bfd_link_hash_warning)
5601 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5602
5603 /* If a symbol is undefined, or if it may be overridden,
5604 skip it. */
5605 if (! ((h->root.root.type == bfd_link_hash_defined
5606 || h->root.root.type == bfd_link_hash_defweak)
5607 && h->root.root.u.def.section)
5608 || (link_info->shared && ! link_info->symbolic
5609 && ! (h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL)))
5610 continue;
5611
5612 sym_sec = h->root.root.u.def.section;
5613 if (sym_sec->output_section)
5614 symval = (h->root.root.u.def.value
5615 + sym_sec->output_section->vma
5616 + sym_sec->output_offset);
5617 else
5618 symval = h->root.root.u.def.value;
5619 }
5620 else
5621 {
5622 Elf_Internal_Sym *isym;
5623
5624 /* Read this BFD's symbols if we haven't done so already. */
5625 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
5626 {
5627 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
5628 if (isymbuf == NULL)
5629 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
5630 symtab_hdr->sh_info, 0,
5631 NULL, NULL, NULL);
5632 if (isymbuf == NULL)
5633 goto relax_return;
5634 }
5635
5636 isym = isymbuf + r_symndx;
5637 if (isym->st_shndx == SHN_UNDEF)
5638 continue;
5639 else if (isym->st_shndx == SHN_ABS)
5640 sym_sec = bfd_abs_section_ptr;
5641 else if (isym->st_shndx == SHN_COMMON)
5642 sym_sec = bfd_com_section_ptr;
5643 else
5644 sym_sec
5645 = bfd_section_from_elf_index (abfd, isym->st_shndx);
5646 symval = isym->st_value
5647 + sym_sec->output_section->vma
5648 + sym_sec->output_offset;
5649 }
5650
5651 /* Compute branch offset, from delay slot of the jump to the
5652 branch target. */
5653 sym_offset = (symval + irel->r_addend)
5654 - (sec_start + irel->r_offset + 4);
5655
5656 /* Branch offset must be properly aligned. */
5657 if ((sym_offset & 3) != 0)
5658 continue;
5659
5660 sym_offset >>= 2;
5661
5662 /* Check that it's in range. */
5663 if (sym_offset < -0x8000 || sym_offset >= 0x8000)
5664 continue;
5665
5666 /* Get the section contents if we haven't done so already. */
5667 if (contents == NULL)
5668 {
5669 /* Get cached copy if it exists. */
5670 if (elf_section_data (sec)->this_hdr.contents != NULL)
5671 contents = elf_section_data (sec)->this_hdr.contents;
5672 else
5673 {
5674 contents = (bfd_byte *) bfd_malloc (sec->_raw_size);
5675 if (contents == NULL)
5676 goto relax_return;
5677
5678 free_contents = contents;
5679 if (! bfd_get_section_contents (abfd, sec, contents,
5680 (file_ptr) 0, sec->_raw_size))
5681 goto relax_return;
5682 }
5683 }
5684
5685 instruction = bfd_get_32 (abfd, contents + irel->r_offset);
5686
5687 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */
5688 if ((instruction & 0xfc1fffff) == 0x0000f809)
5689 instruction = 0x04110000;
5690 /* If it was jr <reg>, turn it into b <target>. */
5691 else if ((instruction & 0xfc1fffff) == 0x00000008)
5692 instruction = 0x10000000;
5693 else
5694 continue;
5695
5696 instruction |= (sym_offset & 0xffff);
5697 bfd_put_32 (abfd, instruction, contents + irel->r_offset);
5698 changed_contents = TRUE;
5699 }
5700
5701 if (contents != NULL
5702 && elf_section_data (sec)->this_hdr.contents != contents)
5703 {
5704 if (!changed_contents && !link_info->keep_memory)
5705 free (contents);
5706 else
5707 {
5708 /* Cache the section contents for elf_link_input_bfd. */
5709 elf_section_data (sec)->this_hdr.contents = contents;
5710 }
5711 }
5712 return TRUE;
5713
5714 relax_return:
5715 if (free_contents != NULL)
5716 free (free_contents);
5717 return FALSE;
5718 }
5719 \f
5720 /* Adjust a symbol defined by a dynamic object and referenced by a
5721 regular object. The current definition is in some section of the
5722 dynamic object, but we're not including those sections. We have to
5723 change the definition to something the rest of the link can
5724 understand. */
5725
5726 bfd_boolean
5727 _bfd_mips_elf_adjust_dynamic_symbol (info, h)
5728 struct bfd_link_info *info;
5729 struct elf_link_hash_entry *h;
5730 {
5731 bfd *dynobj;
5732 struct mips_elf_link_hash_entry *hmips;
5733 asection *s;
5734
5735 dynobj = elf_hash_table (info)->dynobj;
5736
5737 /* Make sure we know what is going on here. */
5738 BFD_ASSERT (dynobj != NULL
5739 && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
5740 || h->weakdef != NULL
5741 || ((h->elf_link_hash_flags
5742 & ELF_LINK_HASH_DEF_DYNAMIC) != 0
5743 && (h->elf_link_hash_flags
5744 & ELF_LINK_HASH_REF_REGULAR) != 0
5745 && (h->elf_link_hash_flags
5746 & ELF_LINK_HASH_DEF_REGULAR) == 0)));
5747
5748 /* If this symbol is defined in a dynamic object, we need to copy
5749 any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output
5750 file. */
5751 hmips = (struct mips_elf_link_hash_entry *) h;
5752 if (! info->relocateable
5753 && hmips->possibly_dynamic_relocs != 0
5754 && (h->root.type == bfd_link_hash_defweak
5755 || (h->elf_link_hash_flags
5756 & ELF_LINK_HASH_DEF_REGULAR) == 0))
5757 {
5758 mips_elf_allocate_dynamic_relocations (dynobj,
5759 hmips->possibly_dynamic_relocs);
5760 if (hmips->readonly_reloc)
5761 /* We tell the dynamic linker that there are relocations
5762 against the text segment. */
5763 info->flags |= DF_TEXTREL;
5764 }
5765
5766 /* For a function, create a stub, if allowed. */
5767 if (! hmips->no_fn_stub
5768 && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
5769 {
5770 if (! elf_hash_table (info)->dynamic_sections_created)
5771 return TRUE;
5772
5773 /* If this symbol is not defined in a regular file, then set
5774 the symbol to the stub location. This is required to make
5775 function pointers compare as equal between the normal
5776 executable and the shared library. */
5777 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
5778 {
5779 /* We need .stub section. */
5780 s = bfd_get_section_by_name (dynobj,
5781 MIPS_ELF_STUB_SECTION_NAME (dynobj));
5782 BFD_ASSERT (s != NULL);
5783
5784 h->root.u.def.section = s;
5785 h->root.u.def.value = s->_raw_size;
5786
5787 /* XXX Write this stub address somewhere. */
5788 h->plt.offset = s->_raw_size;
5789
5790 /* Make room for this stub code. */
5791 s->_raw_size += MIPS_FUNCTION_STUB_SIZE;
5792
5793 /* The last half word of the stub will be filled with the index
5794 of this symbol in .dynsym section. */
5795 return TRUE;
5796 }
5797 }
5798 else if ((h->type == STT_FUNC)
5799 && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0)
5800 {
5801 /* This will set the entry for this symbol in the GOT to 0, and
5802 the dynamic linker will take care of this. */
5803 h->root.u.def.value = 0;
5804 return TRUE;
5805 }
5806
5807 /* If this is a weak symbol, and there is a real definition, the
5808 processor independent code will have arranged for us to see the
5809 real definition first, and we can just use the same value. */
5810 if (h->weakdef != NULL)
5811 {
5812 BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
5813 || h->weakdef->root.type == bfd_link_hash_defweak);
5814 h->root.u.def.section = h->weakdef->root.u.def.section;
5815 h->root.u.def.value = h->weakdef->root.u.def.value;
5816 return TRUE;
5817 }
5818
5819 /* This is a reference to a symbol defined by a dynamic object which
5820 is not a function. */
5821
5822 return TRUE;
5823 }
5824 \f
5825 /* This function is called after all the input files have been read,
5826 and the input sections have been assigned to output sections. We
5827 check for any mips16 stub sections that we can discard. */
5828
5829 bfd_boolean
5830 _bfd_mips_elf_always_size_sections (output_bfd, info)
5831 bfd *output_bfd;
5832 struct bfd_link_info *info;
5833 {
5834 asection *ri;
5835
5836 bfd *dynobj;
5837 asection *s;
5838 struct mips_got_info *g;
5839 int i;
5840 bfd_size_type loadable_size = 0;
5841 bfd_size_type local_gotno;
5842 bfd *sub;
5843
5844 /* The .reginfo section has a fixed size. */
5845 ri = bfd_get_section_by_name (output_bfd, ".reginfo");
5846 if (ri != NULL)
5847 bfd_set_section_size (output_bfd, ri,
5848 (bfd_size_type) sizeof (Elf32_External_RegInfo));
5849
5850 if (! (info->relocateable
5851 || ! mips_elf_hash_table (info)->mips16_stubs_seen))
5852 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
5853 mips_elf_check_mips16_stubs,
5854 (PTR) NULL);
5855
5856 dynobj = elf_hash_table (info)->dynobj;
5857 if (dynobj == NULL)
5858 /* Relocatable links don't have it. */
5859 return TRUE;
5860
5861 g = mips_elf_got_info (dynobj, &s);
5862 if (s == NULL)
5863 return TRUE;
5864
5865 /* Calculate the total loadable size of the output. That
5866 will give us the maximum number of GOT_PAGE entries
5867 required. */
5868 for (sub = info->input_bfds; sub; sub = sub->link_next)
5869 {
5870 asection *subsection;
5871
5872 for (subsection = sub->sections;
5873 subsection;
5874 subsection = subsection->next)
5875 {
5876 if ((subsection->flags & SEC_ALLOC) == 0)
5877 continue;
5878 loadable_size += ((subsection->_raw_size + 0xf)
5879 &~ (bfd_size_type) 0xf);
5880 }
5881 }
5882
5883 /* There has to be a global GOT entry for every symbol with
5884 a dynamic symbol table index of DT_MIPS_GOTSYM or
5885 higher. Therefore, it make sense to put those symbols
5886 that need GOT entries at the end of the symbol table. We
5887 do that here. */
5888 if (! mips_elf_sort_hash_table (info, 1))
5889 return FALSE;
5890
5891 if (g->global_gotsym != NULL)
5892 i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
5893 else
5894 /* If there are no global symbols, or none requiring
5895 relocations, then GLOBAL_GOTSYM will be NULL. */
5896 i = 0;
5897
5898 /* In the worst case, we'll get one stub per dynamic symbol, plus
5899 one to account for the dummy entry at the end required by IRIX
5900 rld. */
5901 loadable_size += MIPS_FUNCTION_STUB_SIZE * (i + 1);
5902
5903 /* Assume there are two loadable segments consisting of
5904 contiguous sections. Is 5 enough? */
5905 local_gotno = (loadable_size >> 16) + 5;
5906
5907 g->local_gotno += local_gotno;
5908 s->_raw_size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
5909
5910 g->global_gotno = i;
5911 s->_raw_size += i * MIPS_ELF_GOT_SIZE (output_bfd);
5912
5913 if (s->_raw_size > MIPS_ELF_GOT_MAX_SIZE (output_bfd)
5914 && ! mips_elf_multi_got (output_bfd, info, g, s, local_gotno))
5915 return FALSE;
5916
5917 return TRUE;
5918 }
5919
5920 /* Set the sizes of the dynamic sections. */
5921
5922 bfd_boolean
5923 _bfd_mips_elf_size_dynamic_sections (output_bfd, info)
5924 bfd *output_bfd;
5925 struct bfd_link_info *info;
5926 {
5927 bfd *dynobj;
5928 asection *s;
5929 bfd_boolean reltext;
5930
5931 dynobj = elf_hash_table (info)->dynobj;
5932 BFD_ASSERT (dynobj != NULL);
5933
5934 if (elf_hash_table (info)->dynamic_sections_created)
5935 {
5936 /* Set the contents of the .interp section to the interpreter. */
5937 if (! info->shared)
5938 {
5939 s = bfd_get_section_by_name (dynobj, ".interp");
5940 BFD_ASSERT (s != NULL);
5941 s->_raw_size
5942 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
5943 s->contents
5944 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
5945 }
5946 }
5947
5948 /* The check_relocs and adjust_dynamic_symbol entry points have
5949 determined the sizes of the various dynamic sections. Allocate
5950 memory for them. */
5951 reltext = FALSE;
5952 for (s = dynobj->sections; s != NULL; s = s->next)
5953 {
5954 const char *name;
5955 bfd_boolean strip;
5956
5957 /* It's OK to base decisions on the section name, because none
5958 of the dynobj section names depend upon the input files. */
5959 name = bfd_get_section_name (dynobj, s);
5960
5961 if ((s->flags & SEC_LINKER_CREATED) == 0)
5962 continue;
5963
5964 strip = FALSE;
5965
5966 if (strncmp (name, ".rel", 4) == 0)
5967 {
5968 if (s->_raw_size == 0)
5969 {
5970 /* We only strip the section if the output section name
5971 has the same name. Otherwise, there might be several
5972 input sections for this output section. FIXME: This
5973 code is probably not needed these days anyhow, since
5974 the linker now does not create empty output sections. */
5975 if (s->output_section != NULL
5976 && strcmp (name,
5977 bfd_get_section_name (s->output_section->owner,
5978 s->output_section)) == 0)
5979 strip = TRUE;
5980 }
5981 else
5982 {
5983 const char *outname;
5984 asection *target;
5985
5986 /* If this relocation section applies to a read only
5987 section, then we probably need a DT_TEXTREL entry.
5988 If the relocation section is .rel.dyn, we always
5989 assert a DT_TEXTREL entry rather than testing whether
5990 there exists a relocation to a read only section or
5991 not. */
5992 outname = bfd_get_section_name (output_bfd,
5993 s->output_section);
5994 target = bfd_get_section_by_name (output_bfd, outname + 4);
5995 if ((target != NULL
5996 && (target->flags & SEC_READONLY) != 0
5997 && (target->flags & SEC_ALLOC) != 0)
5998 || strcmp (outname, ".rel.dyn") == 0)
5999 reltext = TRUE;
6000
6001 /* We use the reloc_count field as a counter if we need
6002 to copy relocs into the output file. */
6003 if (strcmp (name, ".rel.dyn") != 0)
6004 s->reloc_count = 0;
6005
6006 /* If combreloc is enabled, elf_link_sort_relocs() will
6007 sort relocations, but in a different way than we do,
6008 and before we're done creating relocations. Also, it
6009 will move them around between input sections'
6010 relocation's contents, so our sorting would be
6011 broken, so don't let it run. */
6012 info->combreloc = 0;
6013 }
6014 }
6015 else if (strncmp (name, ".got", 4) == 0)
6016 {
6017 /* _bfd_mips_elf_always_size_sections() has already done
6018 most of the work, but some symbols may have been mapped
6019 to versions that we must now resolve in the got_entries
6020 hash tables. */
6021 struct mips_got_info *gg = mips_elf_got_info (dynobj, NULL);
6022 struct mips_got_info *g = gg;
6023 struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
6024 unsigned int needed_relocs = 0;
6025
6026 if (gg->next)
6027 {
6028 set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (output_bfd);
6029 set_got_offset_arg.info = info;
6030
6031 mips_elf_resolve_final_got_entries (gg);
6032 for (g = gg->next; g && g->next != gg; g = g->next)
6033 {
6034 unsigned int save_assign;
6035
6036 mips_elf_resolve_final_got_entries (g);
6037
6038 /* Assign offsets to global GOT entries. */
6039 save_assign = g->assigned_gotno;
6040 g->assigned_gotno = g->local_gotno;
6041 set_got_offset_arg.g = g;
6042 set_got_offset_arg.needed_relocs = 0;
6043 htab_traverse (g->got_entries,
6044 mips_elf_set_global_got_offset,
6045 &set_got_offset_arg);
6046 needed_relocs += set_got_offset_arg.needed_relocs;
6047 BFD_ASSERT (g->assigned_gotno - g->local_gotno
6048 <= g->global_gotno);
6049
6050 g->assigned_gotno = save_assign;
6051 if (info->shared)
6052 {
6053 needed_relocs += g->local_gotno - g->assigned_gotno;
6054 BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
6055 + g->next->global_gotno
6056 + MIPS_RESERVED_GOTNO);
6057 }
6058 }
6059
6060 if (needed_relocs)
6061 mips_elf_allocate_dynamic_relocations (dynobj, needed_relocs);
6062 }
6063 }
6064 else if (strcmp (name, MIPS_ELF_STUB_SECTION_NAME (output_bfd)) == 0)
6065 {
6066 /* IRIX rld assumes that the function stub isn't at the end
6067 of .text section. So put a dummy. XXX */
6068 s->_raw_size += MIPS_FUNCTION_STUB_SIZE;
6069 }
6070 else if (! info->shared
6071 && ! mips_elf_hash_table (info)->use_rld_obj_head
6072 && strncmp (name, ".rld_map", 8) == 0)
6073 {
6074 /* We add a room for __rld_map. It will be filled in by the
6075 rtld to contain a pointer to the _r_debug structure. */
6076 s->_raw_size += 4;
6077 }
6078 else if (SGI_COMPAT (output_bfd)
6079 && strncmp (name, ".compact_rel", 12) == 0)
6080 s->_raw_size += mips_elf_hash_table (info)->compact_rel_size;
6081 else if (strcmp (name, ".msym") == 0)
6082 s->_raw_size = (sizeof (Elf32_External_Msym)
6083 * (elf_hash_table (info)->dynsymcount
6084 + bfd_count_sections (output_bfd)));
6085 else if (strncmp (name, ".init", 5) != 0)
6086 {
6087 /* It's not one of our sections, so don't allocate space. */
6088 continue;
6089 }
6090
6091 if (strip)
6092 {
6093 _bfd_strip_section_from_output (info, s);
6094 continue;
6095 }
6096
6097 /* Allocate memory for the section contents. */
6098 s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->_raw_size);
6099 if (s->contents == NULL && s->_raw_size != 0)
6100 {
6101 bfd_set_error (bfd_error_no_memory);
6102 return FALSE;
6103 }
6104 }
6105
6106 if (elf_hash_table (info)->dynamic_sections_created)
6107 {
6108 /* Add some entries to the .dynamic section. We fill in the
6109 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
6110 must add the entries now so that we get the correct size for
6111 the .dynamic section. The DT_DEBUG entry is filled in by the
6112 dynamic linker and used by the debugger. */
6113 if (! info->shared)
6114 {
6115 /* SGI object has the equivalence of DT_DEBUG in the
6116 DT_MIPS_RLD_MAP entry. */
6117 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
6118 return FALSE;
6119 if (!SGI_COMPAT (output_bfd))
6120 {
6121 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
6122 return FALSE;
6123 }
6124 }
6125 else
6126 {
6127 /* Shared libraries on traditional mips have DT_DEBUG. */
6128 if (!SGI_COMPAT (output_bfd))
6129 {
6130 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
6131 return FALSE;
6132 }
6133 }
6134
6135 if (reltext && SGI_COMPAT (output_bfd))
6136 info->flags |= DF_TEXTREL;
6137
6138 if ((info->flags & DF_TEXTREL) != 0)
6139 {
6140 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
6141 return FALSE;
6142 }
6143
6144 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
6145 return FALSE;
6146
6147 if (mips_elf_rel_dyn_section (dynobj, FALSE))
6148 {
6149 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
6150 return FALSE;
6151
6152 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
6153 return FALSE;
6154
6155 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
6156 return FALSE;
6157 }
6158
6159 if (SGI_COMPAT (output_bfd))
6160 {
6161 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_CONFLICTNO, 0))
6162 return FALSE;
6163 }
6164
6165 if (SGI_COMPAT (output_bfd))
6166 {
6167 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LIBLISTNO, 0))
6168 return FALSE;
6169 }
6170
6171 if (bfd_get_section_by_name (dynobj, ".conflict") != NULL)
6172 {
6173 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_CONFLICT, 0))
6174 return FALSE;
6175
6176 s = bfd_get_section_by_name (dynobj, ".liblist");
6177 BFD_ASSERT (s != NULL);
6178
6179 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LIBLIST, 0))
6180 return FALSE;
6181 }
6182
6183 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
6184 return FALSE;
6185
6186 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
6187 return FALSE;
6188
6189 #if 0
6190 /* Time stamps in executable files are a bad idea. */
6191 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_TIME_STAMP, 0))
6192 return FALSE;
6193 #endif
6194
6195 #if 0 /* FIXME */
6196 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_ICHECKSUM, 0))
6197 return FALSE;
6198 #endif
6199
6200 #if 0 /* FIXME */
6201 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_IVERSION, 0))
6202 return FALSE;
6203 #endif
6204
6205 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
6206 return FALSE;
6207
6208 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
6209 return FALSE;
6210
6211 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
6212 return FALSE;
6213
6214 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
6215 return FALSE;
6216
6217 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
6218 return FALSE;
6219
6220 if (IRIX_COMPAT (dynobj) == ict_irix5
6221 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
6222 return FALSE;
6223
6224 if (IRIX_COMPAT (dynobj) == ict_irix6
6225 && (bfd_get_section_by_name
6226 (dynobj, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
6227 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
6228 return FALSE;
6229
6230 if (bfd_get_section_by_name (dynobj, ".msym")
6231 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_MSYM, 0))
6232 return FALSE;
6233 }
6234
6235 return TRUE;
6236 }
6237 \f
6238 /* Relocate a MIPS ELF section. */
6239
6240 bfd_boolean
6241 _bfd_mips_elf_relocate_section (output_bfd, info, input_bfd, input_section,
6242 contents, relocs, local_syms, local_sections)
6243 bfd *output_bfd;
6244 struct bfd_link_info *info;
6245 bfd *input_bfd;
6246 asection *input_section;
6247 bfd_byte *contents;
6248 Elf_Internal_Rela *relocs;
6249 Elf_Internal_Sym *local_syms;
6250 asection **local_sections;
6251 {
6252 Elf_Internal_Rela *rel;
6253 const Elf_Internal_Rela *relend;
6254 bfd_vma addend = 0;
6255 bfd_boolean use_saved_addend_p = FALSE;
6256 struct elf_backend_data *bed;
6257
6258 bed = get_elf_backend_data (output_bfd);
6259 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
6260 for (rel = relocs; rel < relend; ++rel)
6261 {
6262 const char *name;
6263 bfd_vma value;
6264 reloc_howto_type *howto;
6265 bfd_boolean require_jalx;
6266 /* TRUE if the relocation is a RELA relocation, rather than a
6267 REL relocation. */
6268 bfd_boolean rela_relocation_p = TRUE;
6269 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6270 const char * msg = (const char *) NULL;
6271
6272 /* Find the relocation howto for this relocation. */
6273 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
6274 {
6275 /* Some 32-bit code uses R_MIPS_64. In particular, people use
6276 64-bit code, but make sure all their addresses are in the
6277 lowermost or uppermost 32-bit section of the 64-bit address
6278 space. Thus, when they use an R_MIPS_64 they mean what is
6279 usually meant by R_MIPS_32, with the exception that the
6280 stored value is sign-extended to 64 bits. */
6281 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
6282
6283 /* On big-endian systems, we need to lie about the position
6284 of the reloc. */
6285 if (bfd_big_endian (input_bfd))
6286 rel->r_offset += 4;
6287 }
6288 else
6289 /* NewABI defaults to RELA relocations. */
6290 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type,
6291 NEWABI_P (input_bfd)
6292 && (MIPS_RELOC_RELA_P
6293 (input_bfd, input_section,
6294 rel - relocs)));
6295
6296 if (!use_saved_addend_p)
6297 {
6298 Elf_Internal_Shdr *rel_hdr;
6299
6300 /* If these relocations were originally of the REL variety,
6301 we must pull the addend out of the field that will be
6302 relocated. Otherwise, we simply use the contents of the
6303 RELA relocation. To determine which flavor or relocation
6304 this is, we depend on the fact that the INPUT_SECTION's
6305 REL_HDR is read before its REL_HDR2. */
6306 rel_hdr = &elf_section_data (input_section)->rel_hdr;
6307 if ((size_t) (rel - relocs)
6308 >= (NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel))
6309 rel_hdr = elf_section_data (input_section)->rel_hdr2;
6310 if (rel_hdr->sh_entsize == MIPS_ELF_REL_SIZE (input_bfd))
6311 {
6312 /* Note that this is a REL relocation. */
6313 rela_relocation_p = FALSE;
6314
6315 /* Get the addend, which is stored in the input file. */
6316 addend = mips_elf_obtain_contents (howto, rel, input_bfd,
6317 contents);
6318 addend &= howto->src_mask;
6319 addend <<= howto->rightshift;
6320
6321 /* For some kinds of relocations, the ADDEND is a
6322 combination of the addend stored in two different
6323 relocations. */
6324 if (r_type == R_MIPS_HI16
6325 || r_type == R_MIPS_GNU_REL_HI16
6326 || (r_type == R_MIPS_GOT16
6327 && mips_elf_local_relocation_p (input_bfd, rel,
6328 local_sections, FALSE)))
6329 {
6330 bfd_vma l;
6331 const Elf_Internal_Rela *lo16_relocation;
6332 reloc_howto_type *lo16_howto;
6333 unsigned int lo;
6334
6335 /* The combined value is the sum of the HI16 addend,
6336 left-shifted by sixteen bits, and the LO16
6337 addend, sign extended. (Usually, the code does
6338 a `lui' of the HI16 value, and then an `addiu' of
6339 the LO16 value.)
6340
6341 Scan ahead to find a matching LO16 relocation. */
6342 if (r_type == R_MIPS_GNU_REL_HI16)
6343 lo = R_MIPS_GNU_REL_LO16;
6344 else
6345 lo = R_MIPS_LO16;
6346 lo16_relocation = mips_elf_next_relocation (input_bfd, lo,
6347 rel, relend);
6348 if (lo16_relocation == NULL)
6349 return FALSE;
6350
6351 /* Obtain the addend kept there. */
6352 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, lo, FALSE);
6353 l = mips_elf_obtain_contents (lo16_howto, lo16_relocation,
6354 input_bfd, contents);
6355 l &= lo16_howto->src_mask;
6356 l <<= lo16_howto->rightshift;
6357 l = mips_elf_sign_extend (l, 16);
6358
6359 addend <<= 16;
6360
6361 /* Compute the combined addend. */
6362 addend += l;
6363
6364 /* If PC-relative, subtract the difference between the
6365 address of the LO part of the reloc and the address of
6366 the HI part. The relocation is relative to the LO
6367 part, but mips_elf_calculate_relocation() doesn't
6368 know its address or the difference from the HI part, so
6369 we subtract that difference here. See also the
6370 comment in mips_elf_calculate_relocation(). */
6371 if (r_type == R_MIPS_GNU_REL_HI16)
6372 addend -= (lo16_relocation->r_offset - rel->r_offset);
6373 }
6374 else if (r_type == R_MIPS16_GPREL)
6375 {
6376 /* The addend is scrambled in the object file. See
6377 mips_elf_perform_relocation for details on the
6378 format. */
6379 addend = (((addend & 0x1f0000) >> 5)
6380 | ((addend & 0x7e00000) >> 16)
6381 | (addend & 0x1f));
6382 }
6383 }
6384 else
6385 addend = rel->r_addend;
6386 }
6387
6388 if (info->relocateable)
6389 {
6390 Elf_Internal_Sym *sym;
6391 unsigned long r_symndx;
6392
6393 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
6394 && bfd_big_endian (input_bfd))
6395 rel->r_offset -= 4;
6396
6397 /* Since we're just relocating, all we need to do is copy
6398 the relocations back out to the object file, unless
6399 they're against a section symbol, in which case we need
6400 to adjust by the section offset, or unless they're GP
6401 relative in which case we need to adjust by the amount
6402 that we're adjusting GP in this relocateable object. */
6403
6404 if (! mips_elf_local_relocation_p (input_bfd, rel, local_sections,
6405 FALSE))
6406 /* There's nothing to do for non-local relocations. */
6407 continue;
6408
6409 if (r_type == R_MIPS16_GPREL
6410 || r_type == R_MIPS_GPREL16
6411 || r_type == R_MIPS_GPREL32
6412 || r_type == R_MIPS_LITERAL)
6413 addend -= (_bfd_get_gp_value (output_bfd)
6414 - _bfd_get_gp_value (input_bfd));
6415
6416 r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
6417 sym = local_syms + r_symndx;
6418 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
6419 /* Adjust the addend appropriately. */
6420 addend += local_sections[r_symndx]->output_offset;
6421
6422 if (howto->partial_inplace)
6423 {
6424 /* If the relocation is for a R_MIPS_HI16 or R_MIPS_GOT16,
6425 then we only want to write out the high-order 16 bits.
6426 The subsequent R_MIPS_LO16 will handle the low-order bits.
6427 */
6428 if (r_type == R_MIPS_HI16 || r_type == R_MIPS_GOT16
6429 || r_type == R_MIPS_GNU_REL_HI16)
6430 addend = mips_elf_high (addend);
6431 else if (r_type == R_MIPS_HIGHER)
6432 addend = mips_elf_higher (addend);
6433 else if (r_type == R_MIPS_HIGHEST)
6434 addend = mips_elf_highest (addend);
6435 }
6436
6437 if (rela_relocation_p)
6438 /* If this is a RELA relocation, just update the addend.
6439 We have to cast away constness for REL. */
6440 rel->r_addend = addend;
6441 else
6442 {
6443 /* Otherwise, we have to write the value back out. Note
6444 that we use the source mask, rather than the
6445 destination mask because the place to which we are
6446 writing will be source of the addend in the final
6447 link. */
6448 addend >>= howto->rightshift;
6449 addend &= howto->src_mask;
6450
6451 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
6452 /* See the comment above about using R_MIPS_64 in the 32-bit
6453 ABI. Here, we need to update the addend. It would be
6454 possible to get away with just using the R_MIPS_32 reloc
6455 but for endianness. */
6456 {
6457 bfd_vma sign_bits;
6458 bfd_vma low_bits;
6459 bfd_vma high_bits;
6460
6461 if (addend & ((bfd_vma) 1 << 31))
6462 #ifdef BFD64
6463 sign_bits = ((bfd_vma) 1 << 32) - 1;
6464 #else
6465 sign_bits = -1;
6466 #endif
6467 else
6468 sign_bits = 0;
6469
6470 /* If we don't know that we have a 64-bit type,
6471 do two separate stores. */
6472 if (bfd_big_endian (input_bfd))
6473 {
6474 /* Store the sign-bits (which are most significant)
6475 first. */
6476 low_bits = sign_bits;
6477 high_bits = addend;
6478 }
6479 else
6480 {
6481 low_bits = addend;
6482 high_bits = sign_bits;
6483 }
6484 bfd_put_32 (input_bfd, low_bits,
6485 contents + rel->r_offset);
6486 bfd_put_32 (input_bfd, high_bits,
6487 contents + rel->r_offset + 4);
6488 continue;
6489 }
6490
6491 if (! mips_elf_perform_relocation (info, howto, rel, addend,
6492 input_bfd, input_section,
6493 contents, FALSE))
6494 return FALSE;
6495 }
6496
6497 /* Go on to the next relocation. */
6498 continue;
6499 }
6500
6501 /* In the N32 and 64-bit ABIs there may be multiple consecutive
6502 relocations for the same offset. In that case we are
6503 supposed to treat the output of each relocation as the addend
6504 for the next. */
6505 if (rel + 1 < relend
6506 && rel->r_offset == rel[1].r_offset
6507 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
6508 use_saved_addend_p = TRUE;
6509 else
6510 use_saved_addend_p = FALSE;
6511
6512 addend >>= howto->rightshift;
6513
6514 /* Figure out what value we are supposed to relocate. */
6515 switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
6516 input_section, info, rel,
6517 addend, howto, local_syms,
6518 local_sections, &value,
6519 &name, &require_jalx,
6520 use_saved_addend_p))
6521 {
6522 case bfd_reloc_continue:
6523 /* There's nothing to do. */
6524 continue;
6525
6526 case bfd_reloc_undefined:
6527 /* mips_elf_calculate_relocation already called the
6528 undefined_symbol callback. There's no real point in
6529 trying to perform the relocation at this point, so we
6530 just skip ahead to the next relocation. */
6531 continue;
6532
6533 case bfd_reloc_notsupported:
6534 msg = _("internal error: unsupported relocation error");
6535 info->callbacks->warning
6536 (info, msg, name, input_bfd, input_section, rel->r_offset);
6537 return FALSE;
6538
6539 case bfd_reloc_overflow:
6540 if (use_saved_addend_p)
6541 /* Ignore overflow until we reach the last relocation for
6542 a given location. */
6543 ;
6544 else
6545 {
6546 BFD_ASSERT (name != NULL);
6547 if (! ((*info->callbacks->reloc_overflow)
6548 (info, name, howto->name, (bfd_vma) 0,
6549 input_bfd, input_section, rel->r_offset)))
6550 return FALSE;
6551 }
6552 break;
6553
6554 case bfd_reloc_ok:
6555 break;
6556
6557 default:
6558 abort ();
6559 break;
6560 }
6561
6562 /* If we've got another relocation for the address, keep going
6563 until we reach the last one. */
6564 if (use_saved_addend_p)
6565 {
6566 addend = value;
6567 continue;
6568 }
6569
6570 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
6571 /* See the comment above about using R_MIPS_64 in the 32-bit
6572 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
6573 that calculated the right value. Now, however, we
6574 sign-extend the 32-bit result to 64-bits, and store it as a
6575 64-bit value. We are especially generous here in that we
6576 go to extreme lengths to support this usage on systems with
6577 only a 32-bit VMA. */
6578 {
6579 bfd_vma sign_bits;
6580 bfd_vma low_bits;
6581 bfd_vma high_bits;
6582
6583 if (value & ((bfd_vma) 1 << 31))
6584 #ifdef BFD64
6585 sign_bits = ((bfd_vma) 1 << 32) - 1;
6586 #else
6587 sign_bits = -1;
6588 #endif
6589 else
6590 sign_bits = 0;
6591
6592 /* If we don't know that we have a 64-bit type,
6593 do two separate stores. */
6594 if (bfd_big_endian (input_bfd))
6595 {
6596 /* Undo what we did above. */
6597 rel->r_offset -= 4;
6598 /* Store the sign-bits (which are most significant)
6599 first. */
6600 low_bits = sign_bits;
6601 high_bits = value;
6602 }
6603 else
6604 {
6605 low_bits = value;
6606 high_bits = sign_bits;
6607 }
6608 bfd_put_32 (input_bfd, low_bits,
6609 contents + rel->r_offset);
6610 bfd_put_32 (input_bfd, high_bits,
6611 contents + rel->r_offset + 4);
6612 continue;
6613 }
6614
6615 /* Actually perform the relocation. */
6616 if (! mips_elf_perform_relocation (info, howto, rel, value,
6617 input_bfd, input_section,
6618 contents, require_jalx))
6619 return FALSE;
6620 }
6621
6622 return TRUE;
6623 }
6624 \f
6625 /* If NAME is one of the special IRIX6 symbols defined by the linker,
6626 adjust it appropriately now. */
6627
6628 static void
6629 mips_elf_irix6_finish_dynamic_symbol (abfd, name, sym)
6630 bfd *abfd ATTRIBUTE_UNUSED;
6631 const char *name;
6632 Elf_Internal_Sym *sym;
6633 {
6634 /* The linker script takes care of providing names and values for
6635 these, but we must place them into the right sections. */
6636 static const char* const text_section_symbols[] = {
6637 "_ftext",
6638 "_etext",
6639 "__dso_displacement",
6640 "__elf_header",
6641 "__program_header_table",
6642 NULL
6643 };
6644
6645 static const char* const data_section_symbols[] = {
6646 "_fdata",
6647 "_edata",
6648 "_end",
6649 "_fbss",
6650 NULL
6651 };
6652
6653 const char* const *p;
6654 int i;
6655
6656 for (i = 0; i < 2; ++i)
6657 for (p = (i == 0) ? text_section_symbols : data_section_symbols;
6658 *p;
6659 ++p)
6660 if (strcmp (*p, name) == 0)
6661 {
6662 /* All of these symbols are given type STT_SECTION by the
6663 IRIX6 linker. */
6664 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6665
6666 /* The IRIX linker puts these symbols in special sections. */
6667 if (i == 0)
6668 sym->st_shndx = SHN_MIPS_TEXT;
6669 else
6670 sym->st_shndx = SHN_MIPS_DATA;
6671
6672 break;
6673 }
6674 }
6675
6676 /* Finish up dynamic symbol handling. We set the contents of various
6677 dynamic sections here. */
6678
6679 bfd_boolean
6680 _bfd_mips_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
6681 bfd *output_bfd;
6682 struct bfd_link_info *info;
6683 struct elf_link_hash_entry *h;
6684 Elf_Internal_Sym *sym;
6685 {
6686 bfd *dynobj;
6687 bfd_vma gval;
6688 asection *sgot;
6689 asection *smsym;
6690 struct mips_got_info *g, *gg;
6691 const char *name;
6692 struct mips_elf_link_hash_entry *mh;
6693
6694 dynobj = elf_hash_table (info)->dynobj;
6695 gval = sym->st_value;
6696 mh = (struct mips_elf_link_hash_entry *) h;
6697
6698 if (h->plt.offset != (bfd_vma) -1)
6699 {
6700 asection *s;
6701 bfd_byte stub[MIPS_FUNCTION_STUB_SIZE];
6702
6703 /* This symbol has a stub. Set it up. */
6704
6705 BFD_ASSERT (h->dynindx != -1);
6706
6707 s = bfd_get_section_by_name (dynobj,
6708 MIPS_ELF_STUB_SECTION_NAME (dynobj));
6709 BFD_ASSERT (s != NULL);
6710
6711 /* FIXME: Can h->dynindex be more than 64K? */
6712 if (h->dynindx & 0xffff0000)
6713 return FALSE;
6714
6715 /* Fill the stub. */
6716 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub);
6717 bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + 4);
6718 bfd_put_32 (output_bfd, STUB_JALR, stub + 8);
6719 bfd_put_32 (output_bfd, STUB_LI16 (output_bfd) + h->dynindx, stub + 12);
6720
6721 BFD_ASSERT (h->plt.offset <= s->_raw_size);
6722 memcpy (s->contents + h->plt.offset, stub, MIPS_FUNCTION_STUB_SIZE);
6723
6724 /* Mark the symbol as undefined. plt.offset != -1 occurs
6725 only for the referenced symbol. */
6726 sym->st_shndx = SHN_UNDEF;
6727
6728 /* The run-time linker uses the st_value field of the symbol
6729 to reset the global offset table entry for this external
6730 to its stub address when unlinking a shared object. */
6731 gval = s->output_section->vma + s->output_offset + h->plt.offset;
6732 sym->st_value = gval;
6733 }
6734
6735 BFD_ASSERT (h->dynindx != -1
6736 || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0);
6737
6738 sgot = mips_elf_got_section (dynobj, FALSE);
6739 BFD_ASSERT (sgot != NULL);
6740 BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
6741 g = mips_elf_section_data (sgot)->u.got_info;
6742 BFD_ASSERT (g != NULL);
6743
6744 /* Run through the global symbol table, creating GOT entries for all
6745 the symbols that need them. */
6746 if (g->global_gotsym != NULL
6747 && h->dynindx >= g->global_gotsym->dynindx)
6748 {
6749 bfd_vma offset;
6750 bfd_vma value;
6751
6752 if (sym->st_value)
6753 value = sym->st_value;
6754 else
6755 {
6756 /* For an entity defined in a shared object, this will be
6757 NULL. (For functions in shared objects for
6758 which we have created stubs, ST_VALUE will be non-NULL.
6759 That's because such the functions are now no longer defined
6760 in a shared object.) */
6761
6762 if ((info->shared && h->root.type == bfd_link_hash_undefined)
6763 || h->root.type == bfd_link_hash_undefweak)
6764 value = 0;
6765 else
6766 value = h->root.u.def.value;
6767 }
6768 offset = mips_elf_global_got_index (dynobj, output_bfd, h);
6769 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
6770 }
6771
6772 if (g->next && h->dynindx != -1)
6773 {
6774 struct mips_got_entry e, *p;
6775 bfd_vma offset;
6776 bfd_vma value;
6777 Elf_Internal_Rela rel[3];
6778 bfd_vma addend = 0;
6779
6780 gg = g;
6781
6782 e.abfd = output_bfd;
6783 e.symndx = -1;
6784 e.d.h = (struct mips_elf_link_hash_entry *)h;
6785
6786 if (info->shared
6787 || h->root.type == bfd_link_hash_undefined
6788 || h->root.type == bfd_link_hash_undefweak)
6789 value = 0;
6790 else if (sym->st_value)
6791 value = sym->st_value;
6792 else
6793 value = h->root.u.def.value;
6794
6795 memset (rel, 0, sizeof (rel));
6796 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
6797
6798 for (g = g->next; g->next != gg; g = g->next)
6799 {
6800 if (g->got_entries
6801 && (p = (struct mips_got_entry *) htab_find (g->got_entries,
6802 &e)))
6803 {
6804 offset = p->gotidx;
6805 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
6806
6807 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
6808
6809 if ((info->shared
6810 || (elf_hash_table (info)->dynamic_sections_created
6811 && p->d.h != NULL
6812 && ((p->d.h->root.elf_link_hash_flags
6813 & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
6814 && ((p->d.h->root.elf_link_hash_flags
6815 & ELF_LINK_HASH_DEF_REGULAR) == 0)))
6816 && ! (mips_elf_create_dynamic_relocation
6817 (output_bfd, info, rel,
6818 e.d.h, NULL, value, &addend, sgot)))
6819 return FALSE;
6820 BFD_ASSERT (addend == 0);
6821 }
6822 }
6823 }
6824
6825 /* Create a .msym entry, if appropriate. */
6826 smsym = bfd_get_section_by_name (dynobj, ".msym");
6827 if (smsym)
6828 {
6829 Elf32_Internal_Msym msym;
6830
6831 msym.ms_hash_value = bfd_elf_hash (h->root.root.string);
6832 /* It is undocumented what the `1' indicates, but IRIX6 uses
6833 this value. */
6834 msym.ms_info = ELF32_MS_INFO (mh->min_dyn_reloc_index, 1);
6835 bfd_mips_elf_swap_msym_out
6836 (dynobj, &msym,
6837 ((Elf32_External_Msym *) smsym->contents) + h->dynindx);
6838 }
6839
6840 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
6841 name = h->root.root.string;
6842 if (strcmp (name, "_DYNAMIC") == 0
6843 || strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0)
6844 sym->st_shndx = SHN_ABS;
6845 else if (strcmp (name, "_DYNAMIC_LINK") == 0
6846 || strcmp (name, "_DYNAMIC_LINKING") == 0)
6847 {
6848 sym->st_shndx = SHN_ABS;
6849 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6850 sym->st_value = 1;
6851 }
6852 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
6853 {
6854 sym->st_shndx = SHN_ABS;
6855 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6856 sym->st_value = elf_gp (output_bfd);
6857 }
6858 else if (SGI_COMPAT (output_bfd))
6859 {
6860 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
6861 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
6862 {
6863 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6864 sym->st_other = STO_PROTECTED;
6865 sym->st_value = 0;
6866 sym->st_shndx = SHN_MIPS_DATA;
6867 }
6868 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
6869 {
6870 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6871 sym->st_other = STO_PROTECTED;
6872 sym->st_value = mips_elf_hash_table (info)->procedure_count;
6873 sym->st_shndx = SHN_ABS;
6874 }
6875 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
6876 {
6877 if (h->type == STT_FUNC)
6878 sym->st_shndx = SHN_MIPS_TEXT;
6879 else if (h->type == STT_OBJECT)
6880 sym->st_shndx = SHN_MIPS_DATA;
6881 }
6882 }
6883
6884 /* Handle the IRIX6-specific symbols. */
6885 if (IRIX_COMPAT (output_bfd) == ict_irix6)
6886 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
6887
6888 if (! info->shared)
6889 {
6890 if (! mips_elf_hash_table (info)->use_rld_obj_head
6891 && (strcmp (name, "__rld_map") == 0
6892 || strcmp (name, "__RLD_MAP") == 0))
6893 {
6894 asection *s = bfd_get_section_by_name (dynobj, ".rld_map");
6895 BFD_ASSERT (s != NULL);
6896 sym->st_value = s->output_section->vma + s->output_offset;
6897 bfd_put_32 (output_bfd, (bfd_vma) 0, s->contents);
6898 if (mips_elf_hash_table (info)->rld_value == 0)
6899 mips_elf_hash_table (info)->rld_value = sym->st_value;
6900 }
6901 else if (mips_elf_hash_table (info)->use_rld_obj_head
6902 && strcmp (name, "__rld_obj_head") == 0)
6903 {
6904 /* IRIX6 does not use a .rld_map section. */
6905 if (IRIX_COMPAT (output_bfd) == ict_irix5
6906 || IRIX_COMPAT (output_bfd) == ict_none)
6907 BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map")
6908 != NULL);
6909 mips_elf_hash_table (info)->rld_value = sym->st_value;
6910 }
6911 }
6912
6913 /* If this is a mips16 symbol, force the value to be even. */
6914 if (sym->st_other == STO_MIPS16
6915 && (sym->st_value & 1) != 0)
6916 --sym->st_value;
6917
6918 return TRUE;
6919 }
6920
6921 /* Finish up the dynamic sections. */
6922
6923 bfd_boolean
6924 _bfd_mips_elf_finish_dynamic_sections (output_bfd, info)
6925 bfd *output_bfd;
6926 struct bfd_link_info *info;
6927 {
6928 bfd *dynobj;
6929 asection *sdyn;
6930 asection *sgot;
6931 struct mips_got_info *gg, *g;
6932
6933 dynobj = elf_hash_table (info)->dynobj;
6934
6935 sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
6936
6937 sgot = mips_elf_got_section (dynobj, FALSE);
6938 if (sgot == NULL)
6939 gg = g = NULL;
6940 else
6941 {
6942 BFD_ASSERT (mips_elf_section_data (sgot) != NULL);
6943 gg = mips_elf_section_data (sgot)->u.got_info;
6944 BFD_ASSERT (gg != NULL);
6945 g = mips_elf_got_for_ibfd (gg, output_bfd);
6946 BFD_ASSERT (g != NULL);
6947 }
6948
6949 if (elf_hash_table (info)->dynamic_sections_created)
6950 {
6951 bfd_byte *b;
6952
6953 BFD_ASSERT (sdyn != NULL);
6954 BFD_ASSERT (g != NULL);
6955
6956 for (b = sdyn->contents;
6957 b < sdyn->contents + sdyn->_raw_size;
6958 b += MIPS_ELF_DYN_SIZE (dynobj))
6959 {
6960 Elf_Internal_Dyn dyn;
6961 const char *name;
6962 size_t elemsize;
6963 asection *s;
6964 bfd_boolean swap_out_p;
6965
6966 /* Read in the current dynamic entry. */
6967 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
6968
6969 /* Assume that we're going to modify it and write it out. */
6970 swap_out_p = TRUE;
6971
6972 switch (dyn.d_tag)
6973 {
6974 case DT_RELENT:
6975 s = mips_elf_rel_dyn_section (dynobj, FALSE);
6976 BFD_ASSERT (s != NULL);
6977 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
6978 break;
6979
6980 case DT_STRSZ:
6981 /* Rewrite DT_STRSZ. */
6982 dyn.d_un.d_val =
6983 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6984 break;
6985
6986 case DT_PLTGOT:
6987 name = ".got";
6988 goto get_vma;
6989 case DT_MIPS_CONFLICT:
6990 name = ".conflict";
6991 goto get_vma;
6992 case DT_MIPS_LIBLIST:
6993 name = ".liblist";
6994 get_vma:
6995 s = bfd_get_section_by_name (output_bfd, name);
6996 BFD_ASSERT (s != NULL);
6997 dyn.d_un.d_ptr = s->vma;
6998 break;
6999
7000 case DT_MIPS_RLD_VERSION:
7001 dyn.d_un.d_val = 1; /* XXX */
7002 break;
7003
7004 case DT_MIPS_FLAGS:
7005 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
7006 break;
7007
7008 case DT_MIPS_CONFLICTNO:
7009 name = ".conflict";
7010 elemsize = sizeof (Elf32_Conflict);
7011 goto set_elemno;
7012
7013 case DT_MIPS_LIBLISTNO:
7014 name = ".liblist";
7015 elemsize = sizeof (Elf32_Lib);
7016 set_elemno:
7017 s = bfd_get_section_by_name (output_bfd, name);
7018 if (s != NULL)
7019 {
7020 if (s->_cooked_size != 0)
7021 dyn.d_un.d_val = s->_cooked_size / elemsize;
7022 else
7023 dyn.d_un.d_val = s->_raw_size / elemsize;
7024 }
7025 else
7026 dyn.d_un.d_val = 0;
7027 break;
7028
7029 case DT_MIPS_TIME_STAMP:
7030 time ((time_t *) &dyn.d_un.d_val);
7031 break;
7032
7033 case DT_MIPS_ICHECKSUM:
7034 /* XXX FIXME: */
7035 swap_out_p = FALSE;
7036 break;
7037
7038 case DT_MIPS_IVERSION:
7039 /* XXX FIXME: */
7040 swap_out_p = FALSE;
7041 break;
7042
7043 case DT_MIPS_BASE_ADDRESS:
7044 s = output_bfd->sections;
7045 BFD_ASSERT (s != NULL);
7046 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
7047 break;
7048
7049 case DT_MIPS_LOCAL_GOTNO:
7050 dyn.d_un.d_val = g->local_gotno;
7051 break;
7052
7053 case DT_MIPS_UNREFEXTNO:
7054 /* The index into the dynamic symbol table which is the
7055 entry of the first external symbol that is not
7056 referenced within the same object. */
7057 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
7058 break;
7059
7060 case DT_MIPS_GOTSYM:
7061 if (gg->global_gotsym)
7062 {
7063 dyn.d_un.d_val = gg->global_gotsym->dynindx;
7064 break;
7065 }
7066 /* In case if we don't have global got symbols we default
7067 to setting DT_MIPS_GOTSYM to the same value as
7068 DT_MIPS_SYMTABNO, so we just fall through. */
7069
7070 case DT_MIPS_SYMTABNO:
7071 name = ".dynsym";
7072 elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
7073 s = bfd_get_section_by_name (output_bfd, name);
7074 BFD_ASSERT (s != NULL);
7075
7076 if (s->_cooked_size != 0)
7077 dyn.d_un.d_val = s->_cooked_size / elemsize;
7078 else
7079 dyn.d_un.d_val = s->_raw_size / elemsize;
7080 break;
7081
7082 case DT_MIPS_HIPAGENO:
7083 dyn.d_un.d_val = g->local_gotno - MIPS_RESERVED_GOTNO;
7084 break;
7085
7086 case DT_MIPS_RLD_MAP:
7087 dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value;
7088 break;
7089
7090 case DT_MIPS_OPTIONS:
7091 s = (bfd_get_section_by_name
7092 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
7093 dyn.d_un.d_ptr = s->vma;
7094 break;
7095
7096 case DT_MIPS_MSYM:
7097 s = (bfd_get_section_by_name (output_bfd, ".msym"));
7098 dyn.d_un.d_ptr = s->vma;
7099 break;
7100
7101 default:
7102 swap_out_p = FALSE;
7103 break;
7104 }
7105
7106 if (swap_out_p)
7107 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
7108 (dynobj, &dyn, b);
7109 }
7110 }
7111
7112 /* The first entry of the global offset table will be filled at
7113 runtime. The second entry will be used by some runtime loaders.
7114 This isn't the case of IRIX rld. */
7115 if (sgot != NULL && sgot->_raw_size > 0)
7116 {
7117 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
7118 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000,
7119 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
7120 }
7121
7122 if (sgot != NULL)
7123 elf_section_data (sgot->output_section)->this_hdr.sh_entsize
7124 = MIPS_ELF_GOT_SIZE (output_bfd);
7125
7126 /* Generate dynamic relocations for the non-primary gots. */
7127 if (gg != NULL && gg->next)
7128 {
7129 Elf_Internal_Rela rel[3];
7130 bfd_vma addend = 0;
7131
7132 memset (rel, 0, sizeof (rel));
7133 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
7134
7135 for (g = gg->next; g->next != gg; g = g->next)
7136 {
7137 bfd_vma index = g->next->local_gotno + g->next->global_gotno;
7138
7139 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents
7140 + index++ * MIPS_ELF_GOT_SIZE (output_bfd));
7141 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000, sgot->contents
7142 + index++ * MIPS_ELF_GOT_SIZE (output_bfd));
7143
7144 if (! info->shared)
7145 continue;
7146
7147 while (index < g->assigned_gotno)
7148 {
7149 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
7150 = index++ * MIPS_ELF_GOT_SIZE (output_bfd);
7151 if (!(mips_elf_create_dynamic_relocation
7152 (output_bfd, info, rel, NULL,
7153 bfd_abs_section_ptr,
7154 0, &addend, sgot)))
7155 return FALSE;
7156 BFD_ASSERT (addend == 0);
7157 }
7158 }
7159 }
7160
7161 {
7162 asection *smsym;
7163 asection *s;
7164 Elf32_compact_rel cpt;
7165
7166 /* ??? The section symbols for the output sections were set up in
7167 _bfd_elf_final_link. SGI sets the STT_NOTYPE attribute for these
7168 symbols. Should we do so? */
7169
7170 smsym = bfd_get_section_by_name (dynobj, ".msym");
7171 if (smsym != NULL)
7172 {
7173 Elf32_Internal_Msym msym;
7174
7175 msym.ms_hash_value = 0;
7176 msym.ms_info = ELF32_MS_INFO (0, 1);
7177
7178 for (s = output_bfd->sections; s != NULL; s = s->next)
7179 {
7180 long dynindx = elf_section_data (s)->dynindx;
7181
7182 bfd_mips_elf_swap_msym_out
7183 (output_bfd, &msym,
7184 (((Elf32_External_Msym *) smsym->contents)
7185 + dynindx));
7186 }
7187 }
7188
7189 if (SGI_COMPAT (output_bfd))
7190 {
7191 /* Write .compact_rel section out. */
7192 s = bfd_get_section_by_name (dynobj, ".compact_rel");
7193 if (s != NULL)
7194 {
7195 cpt.id1 = 1;
7196 cpt.num = s->reloc_count;
7197 cpt.id2 = 2;
7198 cpt.offset = (s->output_section->filepos
7199 + sizeof (Elf32_External_compact_rel));
7200 cpt.reserved0 = 0;
7201 cpt.reserved1 = 0;
7202 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
7203 ((Elf32_External_compact_rel *)
7204 s->contents));
7205
7206 /* Clean up a dummy stub function entry in .text. */
7207 s = bfd_get_section_by_name (dynobj,
7208 MIPS_ELF_STUB_SECTION_NAME (dynobj));
7209 if (s != NULL)
7210 {
7211 file_ptr dummy_offset;
7212
7213 BFD_ASSERT (s->_raw_size >= MIPS_FUNCTION_STUB_SIZE);
7214 dummy_offset = s->_raw_size - MIPS_FUNCTION_STUB_SIZE;
7215 memset (s->contents + dummy_offset, 0,
7216 MIPS_FUNCTION_STUB_SIZE);
7217 }
7218 }
7219 }
7220
7221 /* We need to sort the entries of the dynamic relocation section. */
7222
7223 s = mips_elf_rel_dyn_section (dynobj, FALSE);
7224
7225 if (s != NULL
7226 && s->_raw_size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
7227 {
7228 reldyn_sorting_bfd = output_bfd;
7229
7230 if (ABI_64_P (output_bfd))
7231 qsort ((Elf64_External_Rel *) s->contents + 1,
7232 (size_t) s->reloc_count - 1,
7233 sizeof (Elf64_Mips_External_Rel), sort_dynamic_relocs_64);
7234 else
7235 qsort ((Elf32_External_Rel *) s->contents + 1,
7236 (size_t) s->reloc_count - 1,
7237 sizeof (Elf32_External_Rel), sort_dynamic_relocs);
7238 }
7239 }
7240
7241 return TRUE;
7242 }
7243
7244
7245 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */
7246
7247 static void
7248 mips_set_isa_flags (abfd)
7249 bfd *abfd;
7250 {
7251 flagword val;
7252
7253 switch (bfd_get_mach (abfd))
7254 {
7255 default:
7256 case bfd_mach_mips3000:
7257 val = E_MIPS_ARCH_1;
7258 break;
7259
7260 case bfd_mach_mips3900:
7261 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
7262 break;
7263
7264 case bfd_mach_mips6000:
7265 val = E_MIPS_ARCH_2;
7266 break;
7267
7268 case bfd_mach_mips4000:
7269 case bfd_mach_mips4300:
7270 case bfd_mach_mips4400:
7271 case bfd_mach_mips4600:
7272 val = E_MIPS_ARCH_3;
7273 break;
7274
7275 case bfd_mach_mips4010:
7276 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
7277 break;
7278
7279 case bfd_mach_mips4100:
7280 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
7281 break;
7282
7283 case bfd_mach_mips4111:
7284 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
7285 break;
7286
7287 case bfd_mach_mips4120:
7288 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
7289 break;
7290
7291 case bfd_mach_mips4650:
7292 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
7293 break;
7294
7295 case bfd_mach_mips5400:
7296 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
7297 break;
7298
7299 case bfd_mach_mips5500:
7300 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
7301 break;
7302
7303 case bfd_mach_mips5000:
7304 case bfd_mach_mips8000:
7305 case bfd_mach_mips10000:
7306 case bfd_mach_mips12000:
7307 val = E_MIPS_ARCH_4;
7308 break;
7309
7310 case bfd_mach_mips5:
7311 val = E_MIPS_ARCH_5;
7312 break;
7313
7314 case bfd_mach_mips_sb1:
7315 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
7316 break;
7317
7318 case bfd_mach_mipsisa32:
7319 val = E_MIPS_ARCH_32;
7320 break;
7321
7322 case bfd_mach_mipsisa64:
7323 val = E_MIPS_ARCH_64;
7324 break;
7325
7326 case bfd_mach_mipsisa32r2:
7327 val = E_MIPS_ARCH_32R2;
7328 break;
7329 }
7330 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
7331 elf_elfheader (abfd)->e_flags |= val;
7332
7333 }
7334
7335
7336 /* The final processing done just before writing out a MIPS ELF object
7337 file. This gets the MIPS architecture right based on the machine
7338 number. This is used by both the 32-bit and the 64-bit ABI. */
7339
7340 void
7341 _bfd_mips_elf_final_write_processing (abfd, linker)
7342 bfd *abfd;
7343 bfd_boolean linker ATTRIBUTE_UNUSED;
7344 {
7345 unsigned int i;
7346 Elf_Internal_Shdr **hdrpp;
7347 const char *name;
7348 asection *sec;
7349
7350 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
7351 is nonzero. This is for compatibility with old objects, which used
7352 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */
7353 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
7354 mips_set_isa_flags (abfd);
7355
7356 /* Set the sh_info field for .gptab sections and other appropriate
7357 info for each special section. */
7358 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
7359 i < elf_numsections (abfd);
7360 i++, hdrpp++)
7361 {
7362 switch ((*hdrpp)->sh_type)
7363 {
7364 case SHT_MIPS_MSYM:
7365 case SHT_MIPS_LIBLIST:
7366 sec = bfd_get_section_by_name (abfd, ".dynstr");
7367 if (sec != NULL)
7368 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
7369 break;
7370
7371 case SHT_MIPS_GPTAB:
7372 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
7373 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
7374 BFD_ASSERT (name != NULL
7375 && strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0);
7376 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
7377 BFD_ASSERT (sec != NULL);
7378 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
7379 break;
7380
7381 case SHT_MIPS_CONTENT:
7382 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
7383 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
7384 BFD_ASSERT (name != NULL
7385 && strncmp (name, ".MIPS.content",
7386 sizeof ".MIPS.content" - 1) == 0);
7387 sec = bfd_get_section_by_name (abfd,
7388 name + sizeof ".MIPS.content" - 1);
7389 BFD_ASSERT (sec != NULL);
7390 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
7391 break;
7392
7393 case SHT_MIPS_SYMBOL_LIB:
7394 sec = bfd_get_section_by_name (abfd, ".dynsym");
7395 if (sec != NULL)
7396 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
7397 sec = bfd_get_section_by_name (abfd, ".liblist");
7398 if (sec != NULL)
7399 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
7400 break;
7401
7402 case SHT_MIPS_EVENTS:
7403 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
7404 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
7405 BFD_ASSERT (name != NULL);
7406 if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0)
7407 sec = bfd_get_section_by_name (abfd,
7408 name + sizeof ".MIPS.events" - 1);
7409 else
7410 {
7411 BFD_ASSERT (strncmp (name, ".MIPS.post_rel",
7412 sizeof ".MIPS.post_rel" - 1) == 0);
7413 sec = bfd_get_section_by_name (abfd,
7414 (name
7415 + sizeof ".MIPS.post_rel" - 1));
7416 }
7417 BFD_ASSERT (sec != NULL);
7418 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
7419 break;
7420
7421 }
7422 }
7423 }
7424 \f
7425 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
7426 segments. */
7427
7428 int
7429 _bfd_mips_elf_additional_program_headers (abfd)
7430 bfd *abfd;
7431 {
7432 asection *s;
7433 int ret = 0;
7434
7435 /* See if we need a PT_MIPS_REGINFO segment. */
7436 s = bfd_get_section_by_name (abfd, ".reginfo");
7437 if (s && (s->flags & SEC_LOAD))
7438 ++ret;
7439
7440 /* See if we need a PT_MIPS_OPTIONS segment. */
7441 if (IRIX_COMPAT (abfd) == ict_irix6
7442 && bfd_get_section_by_name (abfd,
7443 MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
7444 ++ret;
7445
7446 /* See if we need a PT_MIPS_RTPROC segment. */
7447 if (IRIX_COMPAT (abfd) == ict_irix5
7448 && bfd_get_section_by_name (abfd, ".dynamic")
7449 && bfd_get_section_by_name (abfd, ".mdebug"))
7450 ++ret;
7451
7452 return ret;
7453 }
7454
7455 /* Modify the segment map for an IRIX5 executable. */
7456
7457 bfd_boolean
7458 _bfd_mips_elf_modify_segment_map (abfd)
7459 bfd *abfd;
7460 {
7461 asection *s;
7462 struct elf_segment_map *m, **pm;
7463 bfd_size_type amt;
7464
7465 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
7466 segment. */
7467 s = bfd_get_section_by_name (abfd, ".reginfo");
7468 if (s != NULL && (s->flags & SEC_LOAD) != 0)
7469 {
7470 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
7471 if (m->p_type == PT_MIPS_REGINFO)
7472 break;
7473 if (m == NULL)
7474 {
7475 amt = sizeof *m;
7476 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
7477 if (m == NULL)
7478 return FALSE;
7479
7480 m->p_type = PT_MIPS_REGINFO;
7481 m->count = 1;
7482 m->sections[0] = s;
7483
7484 /* We want to put it after the PHDR and INTERP segments. */
7485 pm = &elf_tdata (abfd)->segment_map;
7486 while (*pm != NULL
7487 && ((*pm)->p_type == PT_PHDR
7488 || (*pm)->p_type == PT_INTERP))
7489 pm = &(*pm)->next;
7490
7491 m->next = *pm;
7492 *pm = m;
7493 }
7494 }
7495
7496 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
7497 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
7498 PT_OPTIONS segment immediately following the program header
7499 table. */
7500 if (NEWABI_P (abfd)
7501 /* On non-IRIX6 new abi, we'll have already created a segment
7502 for this section, so don't create another. I'm not sure this
7503 is not also the case for IRIX 6, but I can't test it right
7504 now. */
7505 && IRIX_COMPAT (abfd) == ict_irix6)
7506 {
7507 for (s = abfd->sections; s; s = s->next)
7508 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
7509 break;
7510
7511 if (s)
7512 {
7513 struct elf_segment_map *options_segment;
7514
7515 /* Usually, there's a program header table. But, sometimes
7516 there's not (like when running the `ld' testsuite). So,
7517 if there's no program header table, we just put the
7518 options segment at the end. */
7519 for (pm = &elf_tdata (abfd)->segment_map;
7520 *pm != NULL;
7521 pm = &(*pm)->next)
7522 if ((*pm)->p_type == PT_PHDR)
7523 break;
7524
7525 amt = sizeof (struct elf_segment_map);
7526 options_segment = bfd_zalloc (abfd, amt);
7527 options_segment->next = *pm;
7528 options_segment->p_type = PT_MIPS_OPTIONS;
7529 options_segment->p_flags = PF_R;
7530 options_segment->p_flags_valid = TRUE;
7531 options_segment->count = 1;
7532 options_segment->sections[0] = s;
7533 *pm = options_segment;
7534 }
7535 }
7536 else
7537 {
7538 if (IRIX_COMPAT (abfd) == ict_irix5)
7539 {
7540 /* If there are .dynamic and .mdebug sections, we make a room
7541 for the RTPROC header. FIXME: Rewrite without section names. */
7542 if (bfd_get_section_by_name (abfd, ".interp") == NULL
7543 && bfd_get_section_by_name (abfd, ".dynamic") != NULL
7544 && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
7545 {
7546 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
7547 if (m->p_type == PT_MIPS_RTPROC)
7548 break;
7549 if (m == NULL)
7550 {
7551 amt = sizeof *m;
7552 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
7553 if (m == NULL)
7554 return FALSE;
7555
7556 m->p_type = PT_MIPS_RTPROC;
7557
7558 s = bfd_get_section_by_name (abfd, ".rtproc");
7559 if (s == NULL)
7560 {
7561 m->count = 0;
7562 m->p_flags = 0;
7563 m->p_flags_valid = 1;
7564 }
7565 else
7566 {
7567 m->count = 1;
7568 m->sections[0] = s;
7569 }
7570
7571 /* We want to put it after the DYNAMIC segment. */
7572 pm = &elf_tdata (abfd)->segment_map;
7573 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
7574 pm = &(*pm)->next;
7575 if (*pm != NULL)
7576 pm = &(*pm)->next;
7577
7578 m->next = *pm;
7579 *pm = m;
7580 }
7581 }
7582 }
7583 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
7584 .dynstr, .dynsym, and .hash sections, and everything in
7585 between. */
7586 for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
7587 pm = &(*pm)->next)
7588 if ((*pm)->p_type == PT_DYNAMIC)
7589 break;
7590 m = *pm;
7591 if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
7592 {
7593 /* For a normal mips executable the permissions for the PT_DYNAMIC
7594 segment are read, write and execute. We do that here since
7595 the code in elf.c sets only the read permission. This matters
7596 sometimes for the dynamic linker. */
7597 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
7598 {
7599 m->p_flags = PF_R | PF_W | PF_X;
7600 m->p_flags_valid = 1;
7601 }
7602 }
7603 if (m != NULL
7604 && m->count == 1 && strcmp (m->sections[0]->name, ".dynamic") == 0)
7605 {
7606 static const char *sec_names[] =
7607 {
7608 ".dynamic", ".dynstr", ".dynsym", ".hash"
7609 };
7610 bfd_vma low, high;
7611 unsigned int i, c;
7612 struct elf_segment_map *n;
7613
7614 low = 0xffffffff;
7615 high = 0;
7616 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
7617 {
7618 s = bfd_get_section_by_name (abfd, sec_names[i]);
7619 if (s != NULL && (s->flags & SEC_LOAD) != 0)
7620 {
7621 bfd_size_type sz;
7622
7623 if (low > s->vma)
7624 low = s->vma;
7625 sz = s->_cooked_size;
7626 if (sz == 0)
7627 sz = s->_raw_size;
7628 if (high < s->vma + sz)
7629 high = s->vma + sz;
7630 }
7631 }
7632
7633 c = 0;
7634 for (s = abfd->sections; s != NULL; s = s->next)
7635 if ((s->flags & SEC_LOAD) != 0
7636 && s->vma >= low
7637 && ((s->vma
7638 + (s->_cooked_size !=
7639 0 ? s->_cooked_size : s->_raw_size)) <= high))
7640 ++c;
7641
7642 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
7643 n = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
7644 if (n == NULL)
7645 return FALSE;
7646 *n = *m;
7647 n->count = c;
7648
7649 i = 0;
7650 for (s = abfd->sections; s != NULL; s = s->next)
7651 {
7652 if ((s->flags & SEC_LOAD) != 0
7653 && s->vma >= low
7654 && ((s->vma
7655 + (s->_cooked_size != 0 ?
7656 s->_cooked_size : s->_raw_size)) <= high))
7657 {
7658 n->sections[i] = s;
7659 ++i;
7660 }
7661 }
7662
7663 *pm = n;
7664 }
7665 }
7666
7667 return TRUE;
7668 }
7669 \f
7670 /* Return the section that should be marked against GC for a given
7671 relocation. */
7672
7673 asection *
7674 _bfd_mips_elf_gc_mark_hook (sec, info, rel, h, sym)
7675 asection *sec;
7676 struct bfd_link_info *info ATTRIBUTE_UNUSED;
7677 Elf_Internal_Rela *rel;
7678 struct elf_link_hash_entry *h;
7679 Elf_Internal_Sym *sym;
7680 {
7681 /* ??? Do mips16 stub sections need to be handled special? */
7682
7683 if (h != NULL)
7684 {
7685 switch (ELF_R_TYPE (sec->owner, rel->r_info))
7686 {
7687 case R_MIPS_GNU_VTINHERIT:
7688 case R_MIPS_GNU_VTENTRY:
7689 break;
7690
7691 default:
7692 switch (h->root.type)
7693 {
7694 case bfd_link_hash_defined:
7695 case bfd_link_hash_defweak:
7696 return h->root.u.def.section;
7697
7698 case bfd_link_hash_common:
7699 return h->root.u.c.p->section;
7700
7701 default:
7702 break;
7703 }
7704 }
7705 }
7706 else
7707 return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
7708
7709 return NULL;
7710 }
7711
7712 /* Update the got entry reference counts for the section being removed. */
7713
7714 bfd_boolean
7715 _bfd_mips_elf_gc_sweep_hook (abfd, info, sec, relocs)
7716 bfd *abfd ATTRIBUTE_UNUSED;
7717 struct bfd_link_info *info ATTRIBUTE_UNUSED;
7718 asection *sec ATTRIBUTE_UNUSED;
7719 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
7720 {
7721 #if 0
7722 Elf_Internal_Shdr *symtab_hdr;
7723 struct elf_link_hash_entry **sym_hashes;
7724 bfd_signed_vma *local_got_refcounts;
7725 const Elf_Internal_Rela *rel, *relend;
7726 unsigned long r_symndx;
7727 struct elf_link_hash_entry *h;
7728
7729 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7730 sym_hashes = elf_sym_hashes (abfd);
7731 local_got_refcounts = elf_local_got_refcounts (abfd);
7732
7733 relend = relocs + sec->reloc_count;
7734 for (rel = relocs; rel < relend; rel++)
7735 switch (ELF_R_TYPE (abfd, rel->r_info))
7736 {
7737 case R_MIPS_GOT16:
7738 case R_MIPS_CALL16:
7739 case R_MIPS_CALL_HI16:
7740 case R_MIPS_CALL_LO16:
7741 case R_MIPS_GOT_HI16:
7742 case R_MIPS_GOT_LO16:
7743 case R_MIPS_GOT_DISP:
7744 case R_MIPS_GOT_PAGE:
7745 case R_MIPS_GOT_OFST:
7746 /* ??? It would seem that the existing MIPS code does no sort
7747 of reference counting or whatnot on its GOT and PLT entries,
7748 so it is not possible to garbage collect them at this time. */
7749 break;
7750
7751 default:
7752 break;
7753 }
7754 #endif
7755
7756 return TRUE;
7757 }
7758 \f
7759 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
7760 hiding the old indirect symbol. Process additional relocation
7761 information. Also called for weakdefs, in which case we just let
7762 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
7763
7764 void
7765 _bfd_mips_elf_copy_indirect_symbol (bed, dir, ind)
7766 struct elf_backend_data *bed;
7767 struct elf_link_hash_entry *dir, *ind;
7768 {
7769 struct mips_elf_link_hash_entry *dirmips, *indmips;
7770
7771 _bfd_elf_link_hash_copy_indirect (bed, dir, ind);
7772
7773 if (ind->root.type != bfd_link_hash_indirect)
7774 return;
7775
7776 dirmips = (struct mips_elf_link_hash_entry *) dir;
7777 indmips = (struct mips_elf_link_hash_entry *) ind;
7778 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
7779 if (indmips->readonly_reloc)
7780 dirmips->readonly_reloc = TRUE;
7781 if (dirmips->min_dyn_reloc_index == 0
7782 || (indmips->min_dyn_reloc_index != 0
7783 && indmips->min_dyn_reloc_index < dirmips->min_dyn_reloc_index))
7784 dirmips->min_dyn_reloc_index = indmips->min_dyn_reloc_index;
7785 if (indmips->no_fn_stub)
7786 dirmips->no_fn_stub = TRUE;
7787 }
7788
7789 void
7790 _bfd_mips_elf_hide_symbol (info, entry, force_local)
7791 struct bfd_link_info *info;
7792 struct elf_link_hash_entry *entry;
7793 bfd_boolean force_local;
7794 {
7795 bfd *dynobj;
7796 asection *got;
7797 struct mips_got_info *g;
7798 struct mips_elf_link_hash_entry *h;
7799
7800 h = (struct mips_elf_link_hash_entry *) entry;
7801 if (h->forced_local)
7802 return;
7803 h->forced_local = TRUE;
7804
7805 dynobj = elf_hash_table (info)->dynobj;
7806 if (dynobj != NULL)
7807 {
7808 got = mips_elf_got_section (dynobj, FALSE);
7809 g = mips_elf_section_data (got)->u.got_info;
7810
7811 if (g->next)
7812 {
7813 struct mips_got_entry e;
7814 struct mips_got_info *gg = g;
7815
7816 /* Since we're turning what used to be a global symbol into a
7817 local one, bump up the number of local entries of each GOT
7818 that had an entry for it. This will automatically decrease
7819 the number of global entries, since global_gotno is actually
7820 the upper limit of global entries. */
7821 e.abfd = dynobj;
7822 e.symndx = -1;
7823 e.d.h = h;
7824
7825 for (g = g->next; g != gg; g = g->next)
7826 if (htab_find (g->got_entries, &e))
7827 {
7828 BFD_ASSERT (g->global_gotno > 0);
7829 g->local_gotno++;
7830 g->global_gotno--;
7831 }
7832
7833 /* If this was a global symbol forced into the primary GOT, we
7834 no longer need an entry for it. We can't release the entry
7835 at this point, but we must at least stop counting it as one
7836 of the symbols that required a forced got entry. */
7837 if (h->root.got.offset == 2)
7838 {
7839 BFD_ASSERT (gg->assigned_gotno > 0);
7840 gg->assigned_gotno--;
7841 }
7842 }
7843 else if (g->global_gotno == 0 && g->global_gotsym == NULL)
7844 /* If we haven't got through GOT allocation yet, just bump up the
7845 number of local entries, as this symbol won't be counted as
7846 global. */
7847 g->local_gotno++;
7848 else if (h->root.got.offset == 1)
7849 {
7850 /* If we're past non-multi-GOT allocation and this symbol had
7851 been marked for a global got entry, give it a local entry
7852 instead. */
7853 BFD_ASSERT (g->global_gotno > 0);
7854 g->local_gotno++;
7855 g->global_gotno--;
7856 }
7857 }
7858
7859 _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local);
7860 }
7861 \f
7862 #define PDR_SIZE 32
7863
7864 bfd_boolean
7865 _bfd_mips_elf_discard_info (abfd, cookie, info)
7866 bfd *abfd;
7867 struct elf_reloc_cookie *cookie;
7868 struct bfd_link_info *info;
7869 {
7870 asection *o;
7871 bfd_boolean ret = FALSE;
7872 unsigned char *tdata;
7873 size_t i, skip;
7874
7875 o = bfd_get_section_by_name (abfd, ".pdr");
7876 if (! o)
7877 return FALSE;
7878 if (o->_raw_size == 0)
7879 return FALSE;
7880 if (o->_raw_size % PDR_SIZE != 0)
7881 return FALSE;
7882 if (o->output_section != NULL
7883 && bfd_is_abs_section (o->output_section))
7884 return FALSE;
7885
7886 tdata = bfd_zmalloc (o->_raw_size / PDR_SIZE);
7887 if (! tdata)
7888 return FALSE;
7889
7890 cookie->rels = (MNAME(abfd,_bfd_elf,link_read_relocs)
7891 (abfd, o, (PTR) NULL,
7892 (Elf_Internal_Rela *) NULL,
7893 info->keep_memory));
7894 if (!cookie->rels)
7895 {
7896 free (tdata);
7897 return FALSE;
7898 }
7899
7900 cookie->rel = cookie->rels;
7901 cookie->relend = cookie->rels + o->reloc_count;
7902
7903 for (i = 0, skip = 0; i < o->_raw_size; i ++)
7904 {
7905 if (MNAME(abfd,_bfd_elf,reloc_symbol_deleted_p) (i * PDR_SIZE, cookie))
7906 {
7907 tdata[i] = 1;
7908 skip ++;
7909 }
7910 }
7911
7912 if (skip != 0)
7913 {
7914 mips_elf_section_data (o)->u.tdata = tdata;
7915 o->_cooked_size = o->_raw_size - skip * PDR_SIZE;
7916 ret = TRUE;
7917 }
7918 else
7919 free (tdata);
7920
7921 if (! info->keep_memory)
7922 free (cookie->rels);
7923
7924 return ret;
7925 }
7926
7927 bfd_boolean
7928 _bfd_mips_elf_ignore_discarded_relocs (sec)
7929 asection *sec;
7930 {
7931 if (strcmp (sec->name, ".pdr") == 0)
7932 return TRUE;
7933 return FALSE;
7934 }
7935
7936 bfd_boolean
7937 _bfd_mips_elf_write_section (output_bfd, sec, contents)
7938 bfd *output_bfd;
7939 asection *sec;
7940 bfd_byte *contents;
7941 {
7942 bfd_byte *to, *from, *end;
7943 int i;
7944
7945 if (strcmp (sec->name, ".pdr") != 0)
7946 return FALSE;
7947
7948 if (mips_elf_section_data (sec)->u.tdata == NULL)
7949 return FALSE;
7950
7951 to = contents;
7952 end = contents + sec->_raw_size;
7953 for (from = contents, i = 0;
7954 from < end;
7955 from += PDR_SIZE, i++)
7956 {
7957 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
7958 continue;
7959 if (to != from)
7960 memcpy (to, from, PDR_SIZE);
7961 to += PDR_SIZE;
7962 }
7963 bfd_set_section_contents (output_bfd, sec->output_section, contents,
7964 (file_ptr) sec->output_offset,
7965 sec->_cooked_size);
7966 return TRUE;
7967 }
7968 \f
7969 /* MIPS ELF uses a special find_nearest_line routine in order the
7970 handle the ECOFF debugging information. */
7971
7972 struct mips_elf_find_line
7973 {
7974 struct ecoff_debug_info d;
7975 struct ecoff_find_line i;
7976 };
7977
7978 bfd_boolean
7979 _bfd_mips_elf_find_nearest_line (abfd, section, symbols, offset, filename_ptr,
7980 functionname_ptr, line_ptr)
7981 bfd *abfd;
7982 asection *section;
7983 asymbol **symbols;
7984 bfd_vma offset;
7985 const char **filename_ptr;
7986 const char **functionname_ptr;
7987 unsigned int *line_ptr;
7988 {
7989 asection *msec;
7990
7991 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
7992 filename_ptr, functionname_ptr,
7993 line_ptr))
7994 return TRUE;
7995
7996 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
7997 filename_ptr, functionname_ptr,
7998 line_ptr,
7999 (unsigned) (ABI_64_P (abfd) ? 8 : 0),
8000 &elf_tdata (abfd)->dwarf2_find_line_info))
8001 return TRUE;
8002
8003 msec = bfd_get_section_by_name (abfd, ".mdebug");
8004 if (msec != NULL)
8005 {
8006 flagword origflags;
8007 struct mips_elf_find_line *fi;
8008 const struct ecoff_debug_swap * const swap =
8009 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
8010
8011 /* If we are called during a link, mips_elf_final_link may have
8012 cleared the SEC_HAS_CONTENTS field. We force it back on here
8013 if appropriate (which it normally will be). */
8014 origflags = msec->flags;
8015 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
8016 msec->flags |= SEC_HAS_CONTENTS;
8017
8018 fi = elf_tdata (abfd)->find_line_info;
8019 if (fi == NULL)
8020 {
8021 bfd_size_type external_fdr_size;
8022 char *fraw_src;
8023 char *fraw_end;
8024 struct fdr *fdr_ptr;
8025 bfd_size_type amt = sizeof (struct mips_elf_find_line);
8026
8027 fi = (struct mips_elf_find_line *) bfd_zalloc (abfd, amt);
8028 if (fi == NULL)
8029 {
8030 msec->flags = origflags;
8031 return FALSE;
8032 }
8033
8034 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
8035 {
8036 msec->flags = origflags;
8037 return FALSE;
8038 }
8039
8040 /* Swap in the FDR information. */
8041 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
8042 fi->d.fdr = (struct fdr *) bfd_alloc (abfd, amt);
8043 if (fi->d.fdr == NULL)
8044 {
8045 msec->flags = origflags;
8046 return FALSE;
8047 }
8048 external_fdr_size = swap->external_fdr_size;
8049 fdr_ptr = fi->d.fdr;
8050 fraw_src = (char *) fi->d.external_fdr;
8051 fraw_end = (fraw_src
8052 + fi->d.symbolic_header.ifdMax * external_fdr_size);
8053 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
8054 (*swap->swap_fdr_in) (abfd, (PTR) fraw_src, fdr_ptr);
8055
8056 elf_tdata (abfd)->find_line_info = fi;
8057
8058 /* Note that we don't bother to ever free this information.
8059 find_nearest_line is either called all the time, as in
8060 objdump -l, so the information should be saved, or it is
8061 rarely called, as in ld error messages, so the memory
8062 wasted is unimportant. Still, it would probably be a
8063 good idea for free_cached_info to throw it away. */
8064 }
8065
8066 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
8067 &fi->i, filename_ptr, functionname_ptr,
8068 line_ptr))
8069 {
8070 msec->flags = origflags;
8071 return TRUE;
8072 }
8073
8074 msec->flags = origflags;
8075 }
8076
8077 /* Fall back on the generic ELF find_nearest_line routine. */
8078
8079 return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
8080 filename_ptr, functionname_ptr,
8081 line_ptr);
8082 }
8083 \f
8084 /* When are writing out the .options or .MIPS.options section,
8085 remember the bytes we are writing out, so that we can install the
8086 GP value in the section_processing routine. */
8087
8088 bfd_boolean
8089 _bfd_mips_elf_set_section_contents (abfd, section, location, offset, count)
8090 bfd *abfd;
8091 sec_ptr section;
8092 PTR location;
8093 file_ptr offset;
8094 bfd_size_type count;
8095 {
8096 if (strcmp (section->name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
8097 {
8098 bfd_byte *c;
8099
8100 if (elf_section_data (section) == NULL)
8101 {
8102 bfd_size_type amt = sizeof (struct bfd_elf_section_data);
8103 section->used_by_bfd = (PTR) bfd_zalloc (abfd, amt);
8104 if (elf_section_data (section) == NULL)
8105 return FALSE;
8106 }
8107 c = mips_elf_section_data (section)->u.tdata;
8108 if (c == NULL)
8109 {
8110 bfd_size_type size;
8111
8112 if (section->_cooked_size != 0)
8113 size = section->_cooked_size;
8114 else
8115 size = section->_raw_size;
8116 c = (bfd_byte *) bfd_zalloc (abfd, size);
8117 if (c == NULL)
8118 return FALSE;
8119 mips_elf_section_data (section)->u.tdata = c;
8120 }
8121
8122 memcpy (c + offset, location, (size_t) count);
8123 }
8124
8125 return _bfd_elf_set_section_contents (abfd, section, location, offset,
8126 count);
8127 }
8128
8129 /* This is almost identical to bfd_generic_get_... except that some
8130 MIPS relocations need to be handled specially. Sigh. */
8131
8132 bfd_byte *
8133 _bfd_elf_mips_get_relocated_section_contents (abfd, link_info, link_order,
8134 data, relocateable, symbols)
8135 bfd *abfd;
8136 struct bfd_link_info *link_info;
8137 struct bfd_link_order *link_order;
8138 bfd_byte *data;
8139 bfd_boolean relocateable;
8140 asymbol **symbols;
8141 {
8142 /* Get enough memory to hold the stuff */
8143 bfd *input_bfd = link_order->u.indirect.section->owner;
8144 asection *input_section = link_order->u.indirect.section;
8145
8146 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
8147 arelent **reloc_vector = NULL;
8148 long reloc_count;
8149
8150 if (reloc_size < 0)
8151 goto error_return;
8152
8153 reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
8154 if (reloc_vector == NULL && reloc_size != 0)
8155 goto error_return;
8156
8157 /* read in the section */
8158 if (!bfd_get_section_contents (input_bfd,
8159 input_section,
8160 (PTR) data,
8161 (file_ptr) 0,
8162 input_section->_raw_size))
8163 goto error_return;
8164
8165 /* We're not relaxing the section, so just copy the size info */
8166 input_section->_cooked_size = input_section->_raw_size;
8167 input_section->reloc_done = TRUE;
8168
8169 reloc_count = bfd_canonicalize_reloc (input_bfd,
8170 input_section,
8171 reloc_vector,
8172 symbols);
8173 if (reloc_count < 0)
8174 goto error_return;
8175
8176 if (reloc_count > 0)
8177 {
8178 arelent **parent;
8179 /* for mips */
8180 int gp_found;
8181 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */
8182
8183 {
8184 struct bfd_hash_entry *h;
8185 struct bfd_link_hash_entry *lh;
8186 /* Skip all this stuff if we aren't mixing formats. */
8187 if (abfd && input_bfd
8188 && abfd->xvec == input_bfd->xvec)
8189 lh = 0;
8190 else
8191 {
8192 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
8193 lh = (struct bfd_link_hash_entry *) h;
8194 }
8195 lookup:
8196 if (lh)
8197 {
8198 switch (lh->type)
8199 {
8200 case bfd_link_hash_undefined:
8201 case bfd_link_hash_undefweak:
8202 case bfd_link_hash_common:
8203 gp_found = 0;
8204 break;
8205 case bfd_link_hash_defined:
8206 case bfd_link_hash_defweak:
8207 gp_found = 1;
8208 gp = lh->u.def.value;
8209 break;
8210 case bfd_link_hash_indirect:
8211 case bfd_link_hash_warning:
8212 lh = lh->u.i.link;
8213 /* @@FIXME ignoring warning for now */
8214 goto lookup;
8215 case bfd_link_hash_new:
8216 default:
8217 abort ();
8218 }
8219 }
8220 else
8221 gp_found = 0;
8222 }
8223 /* end mips */
8224 for (parent = reloc_vector; *parent != (arelent *) NULL;
8225 parent++)
8226 {
8227 char *error_message = (char *) NULL;
8228 bfd_reloc_status_type r;
8229
8230 /* Specific to MIPS: Deal with relocation types that require
8231 knowing the gp of the output bfd. */
8232 asymbol *sym = *(*parent)->sym_ptr_ptr;
8233 if (bfd_is_abs_section (sym->section) && abfd)
8234 {
8235 /* The special_function wouldn't get called anyway. */
8236 }
8237 else if (!gp_found)
8238 {
8239 /* The gp isn't there; let the special function code
8240 fall over on its own. */
8241 }
8242 else if ((*parent)->howto->special_function
8243 == _bfd_mips_elf32_gprel16_reloc)
8244 {
8245 /* bypass special_function call */
8246 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
8247 input_section, relocateable,
8248 (PTR) data, gp);
8249 goto skip_bfd_perform_relocation;
8250 }
8251 /* end mips specific stuff */
8252
8253 r = bfd_perform_relocation (input_bfd,
8254 *parent,
8255 (PTR) data,
8256 input_section,
8257 relocateable ? abfd : (bfd *) NULL,
8258 &error_message);
8259 skip_bfd_perform_relocation:
8260
8261 if (relocateable)
8262 {
8263 asection *os = input_section->output_section;
8264
8265 /* A partial link, so keep the relocs */
8266 os->orelocation[os->reloc_count] = *parent;
8267 os->reloc_count++;
8268 }
8269
8270 if (r != bfd_reloc_ok)
8271 {
8272 switch (r)
8273 {
8274 case bfd_reloc_undefined:
8275 if (!((*link_info->callbacks->undefined_symbol)
8276 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
8277 input_bfd, input_section, (*parent)->address,
8278 TRUE)))
8279 goto error_return;
8280 break;
8281 case bfd_reloc_dangerous:
8282 BFD_ASSERT (error_message != (char *) NULL);
8283 if (!((*link_info->callbacks->reloc_dangerous)
8284 (link_info, error_message, input_bfd, input_section,
8285 (*parent)->address)))
8286 goto error_return;
8287 break;
8288 case bfd_reloc_overflow:
8289 if (!((*link_info->callbacks->reloc_overflow)
8290 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
8291 (*parent)->howto->name, (*parent)->addend,
8292 input_bfd, input_section, (*parent)->address)))
8293 goto error_return;
8294 break;
8295 case bfd_reloc_outofrange:
8296 default:
8297 abort ();
8298 break;
8299 }
8300
8301 }
8302 }
8303 }
8304 if (reloc_vector != NULL)
8305 free (reloc_vector);
8306 return data;
8307
8308 error_return:
8309 if (reloc_vector != NULL)
8310 free (reloc_vector);
8311 return NULL;
8312 }
8313 \f
8314 /* Create a MIPS ELF linker hash table. */
8315
8316 struct bfd_link_hash_table *
8317 _bfd_mips_elf_link_hash_table_create (abfd)
8318 bfd *abfd;
8319 {
8320 struct mips_elf_link_hash_table *ret;
8321 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
8322
8323 ret = (struct mips_elf_link_hash_table *) bfd_malloc (amt);
8324 if (ret == (struct mips_elf_link_hash_table *) NULL)
8325 return NULL;
8326
8327 if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
8328 mips_elf_link_hash_newfunc))
8329 {
8330 free (ret);
8331 return NULL;
8332 }
8333
8334 #if 0
8335 /* We no longer use this. */
8336 for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++)
8337 ret->dynsym_sec_strindex[i] = (bfd_size_type) -1;
8338 #endif
8339 ret->procedure_count = 0;
8340 ret->compact_rel_size = 0;
8341 ret->use_rld_obj_head = FALSE;
8342 ret->rld_value = 0;
8343 ret->mips16_stubs_seen = FALSE;
8344
8345 return &ret->root.root;
8346 }
8347 \f
8348 /* We need to use a special link routine to handle the .reginfo and
8349 the .mdebug sections. We need to merge all instances of these
8350 sections together, not write them all out sequentially. */
8351
8352 bfd_boolean
8353 _bfd_mips_elf_final_link (abfd, info)
8354 bfd *abfd;
8355 struct bfd_link_info *info;
8356 {
8357 asection **secpp;
8358 asection *o;
8359 struct bfd_link_order *p;
8360 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
8361 asection *rtproc_sec;
8362 Elf32_RegInfo reginfo;
8363 struct ecoff_debug_info debug;
8364 const struct ecoff_debug_swap *swap
8365 = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
8366 HDRR *symhdr = &debug.symbolic_header;
8367 PTR mdebug_handle = NULL;
8368 asection *s;
8369 EXTR esym;
8370 unsigned int i;
8371 bfd_size_type amt;
8372
8373 static const char * const secname[] =
8374 {
8375 ".text", ".init", ".fini", ".data",
8376 ".rodata", ".sdata", ".sbss", ".bss"
8377 };
8378 static const int sc[] =
8379 {
8380 scText, scInit, scFini, scData,
8381 scRData, scSData, scSBss, scBss
8382 };
8383
8384 /* If all the things we linked together were PIC, but we're
8385 producing an executable (rather than a shared object), then the
8386 resulting file is CPIC (i.e., it calls PIC code.) */
8387 if (!info->shared
8388 && !info->relocateable
8389 && elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
8390 {
8391 elf_elfheader (abfd)->e_flags &= ~EF_MIPS_PIC;
8392 elf_elfheader (abfd)->e_flags |= EF_MIPS_CPIC;
8393 }
8394
8395 /* We'd carefully arranged the dynamic symbol indices, and then the
8396 generic size_dynamic_sections renumbered them out from under us.
8397 Rather than trying somehow to prevent the renumbering, just do
8398 the sort again. */
8399 if (elf_hash_table (info)->dynamic_sections_created)
8400 {
8401 bfd *dynobj;
8402 asection *got;
8403 struct mips_got_info *g;
8404
8405 /* When we resort, we must tell mips_elf_sort_hash_table what
8406 the lowest index it may use is. That's the number of section
8407 symbols we're going to add. The generic ELF linker only
8408 adds these symbols when building a shared object. Note that
8409 we count the sections after (possibly) removing the .options
8410 section above. */
8411 if (! mips_elf_sort_hash_table (info, (info->shared
8412 ? bfd_count_sections (abfd) + 1
8413 : 1)))
8414 return FALSE;
8415
8416 /* Make sure we didn't grow the global .got region. */
8417 dynobj = elf_hash_table (info)->dynobj;
8418 got = mips_elf_got_section (dynobj, FALSE);
8419 g = mips_elf_section_data (got)->u.got_info;
8420
8421 if (g->global_gotsym != NULL)
8422 BFD_ASSERT ((elf_hash_table (info)->dynsymcount
8423 - g->global_gotsym->dynindx)
8424 <= g->global_gotno);
8425 }
8426
8427 #if 0
8428 /* We want to set the GP value for ld -r. */
8429 /* On IRIX5, we omit the .options section. On IRIX6, however, we
8430 include it, even though we don't process it quite right. (Some
8431 entries are supposed to be merged.) Empirically, we seem to be
8432 better off including it then not. */
8433 if (IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
8434 for (secpp = &abfd->sections; *secpp != NULL; secpp = &(*secpp)->next)
8435 {
8436 if (strcmp ((*secpp)->name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
8437 {
8438 for (p = (*secpp)->link_order_head; p != NULL; p = p->next)
8439 if (p->type == bfd_indirect_link_order)
8440 p->u.indirect.section->flags &= ~SEC_HAS_CONTENTS;
8441 (*secpp)->link_order_head = NULL;
8442 bfd_section_list_remove (abfd, secpp);
8443 --abfd->section_count;
8444
8445 break;
8446 }
8447 }
8448
8449 /* We include .MIPS.options, even though we don't process it quite right.
8450 (Some entries are supposed to be merged.) At IRIX6 empirically we seem
8451 to be better off including it than not. */
8452 for (secpp = &abfd->sections; *secpp != NULL; secpp = &(*secpp)->next)
8453 {
8454 if (strcmp ((*secpp)->name, ".MIPS.options") == 0)
8455 {
8456 for (p = (*secpp)->link_order_head; p != NULL; p = p->next)
8457 if (p->type == bfd_indirect_link_order)
8458 p->u.indirect.section->flags &=~ SEC_HAS_CONTENTS;
8459 (*secpp)->link_order_head = NULL;
8460 bfd_section_list_remove (abfd, secpp);
8461 --abfd->section_count;
8462
8463 break;
8464 }
8465 }
8466 #endif
8467
8468 /* Get a value for the GP register. */
8469 if (elf_gp (abfd) == 0)
8470 {
8471 struct bfd_link_hash_entry *h;
8472
8473 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
8474 if (h != (struct bfd_link_hash_entry *) NULL
8475 && h->type == bfd_link_hash_defined)
8476 elf_gp (abfd) = (h->u.def.value
8477 + h->u.def.section->output_section->vma
8478 + h->u.def.section->output_offset);
8479 else if (info->relocateable)
8480 {
8481 bfd_vma lo = MINUS_ONE;
8482
8483 /* Find the GP-relative section with the lowest offset. */
8484 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
8485 if (o->vma < lo
8486 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
8487 lo = o->vma;
8488
8489 /* And calculate GP relative to that. */
8490 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (abfd);
8491 }
8492 else
8493 {
8494 /* If the relocate_section function needs to do a reloc
8495 involving the GP value, it should make a reloc_dangerous
8496 callback to warn that GP is not defined. */
8497 }
8498 }
8499
8500 /* Go through the sections and collect the .reginfo and .mdebug
8501 information. */
8502 reginfo_sec = NULL;
8503 mdebug_sec = NULL;
8504 gptab_data_sec = NULL;
8505 gptab_bss_sec = NULL;
8506 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
8507 {
8508 if (strcmp (o->name, ".reginfo") == 0)
8509 {
8510 memset (&reginfo, 0, sizeof reginfo);
8511
8512 /* We have found the .reginfo section in the output file.
8513 Look through all the link_orders comprising it and merge
8514 the information together. */
8515 for (p = o->link_order_head;
8516 p != (struct bfd_link_order *) NULL;
8517 p = p->next)
8518 {
8519 asection *input_section;
8520 bfd *input_bfd;
8521 Elf32_External_RegInfo ext;
8522 Elf32_RegInfo sub;
8523
8524 if (p->type != bfd_indirect_link_order)
8525 {
8526 if (p->type == bfd_data_link_order)
8527 continue;
8528 abort ();
8529 }
8530
8531 input_section = p->u.indirect.section;
8532 input_bfd = input_section->owner;
8533
8534 /* The linker emulation code has probably clobbered the
8535 size to be zero bytes. */
8536 if (input_section->_raw_size == 0)
8537 input_section->_raw_size = sizeof (Elf32_External_RegInfo);
8538
8539 if (! bfd_get_section_contents (input_bfd, input_section,
8540 (PTR) &ext,
8541 (file_ptr) 0,
8542 (bfd_size_type) sizeof ext))
8543 return FALSE;
8544
8545 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
8546
8547 reginfo.ri_gprmask |= sub.ri_gprmask;
8548 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
8549 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
8550 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
8551 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
8552
8553 /* ri_gp_value is set by the function
8554 mips_elf32_section_processing when the section is
8555 finally written out. */
8556
8557 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8558 elf_link_input_bfd ignores this section. */
8559 input_section->flags &= ~SEC_HAS_CONTENTS;
8560 }
8561
8562 /* Size has been set in _bfd_mips_elf_always_size_sections. */
8563 BFD_ASSERT(o->_raw_size == sizeof (Elf32_External_RegInfo));
8564
8565 /* Skip this section later on (I don't think this currently
8566 matters, but someday it might). */
8567 o->link_order_head = (struct bfd_link_order *) NULL;
8568
8569 reginfo_sec = o;
8570 }
8571
8572 if (strcmp (o->name, ".mdebug") == 0)
8573 {
8574 struct extsym_info einfo;
8575 bfd_vma last;
8576
8577 /* We have found the .mdebug section in the output file.
8578 Look through all the link_orders comprising it and merge
8579 the information together. */
8580 symhdr->magic = swap->sym_magic;
8581 /* FIXME: What should the version stamp be? */
8582 symhdr->vstamp = 0;
8583 symhdr->ilineMax = 0;
8584 symhdr->cbLine = 0;
8585 symhdr->idnMax = 0;
8586 symhdr->ipdMax = 0;
8587 symhdr->isymMax = 0;
8588 symhdr->ioptMax = 0;
8589 symhdr->iauxMax = 0;
8590 symhdr->issMax = 0;
8591 symhdr->issExtMax = 0;
8592 symhdr->ifdMax = 0;
8593 symhdr->crfd = 0;
8594 symhdr->iextMax = 0;
8595
8596 /* We accumulate the debugging information itself in the
8597 debug_info structure. */
8598 debug.line = NULL;
8599 debug.external_dnr = NULL;
8600 debug.external_pdr = NULL;
8601 debug.external_sym = NULL;
8602 debug.external_opt = NULL;
8603 debug.external_aux = NULL;
8604 debug.ss = NULL;
8605 debug.ssext = debug.ssext_end = NULL;
8606 debug.external_fdr = NULL;
8607 debug.external_rfd = NULL;
8608 debug.external_ext = debug.external_ext_end = NULL;
8609
8610 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
8611 if (mdebug_handle == (PTR) NULL)
8612 return FALSE;
8613
8614 esym.jmptbl = 0;
8615 esym.cobol_main = 0;
8616 esym.weakext = 0;
8617 esym.reserved = 0;
8618 esym.ifd = ifdNil;
8619 esym.asym.iss = issNil;
8620 esym.asym.st = stLocal;
8621 esym.asym.reserved = 0;
8622 esym.asym.index = indexNil;
8623 last = 0;
8624 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
8625 {
8626 esym.asym.sc = sc[i];
8627 s = bfd_get_section_by_name (abfd, secname[i]);
8628 if (s != NULL)
8629 {
8630 esym.asym.value = s->vma;
8631 last = s->vma + s->_raw_size;
8632 }
8633 else
8634 esym.asym.value = last;
8635 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
8636 secname[i], &esym))
8637 return FALSE;
8638 }
8639
8640 for (p = o->link_order_head;
8641 p != (struct bfd_link_order *) NULL;
8642 p = p->next)
8643 {
8644 asection *input_section;
8645 bfd *input_bfd;
8646 const struct ecoff_debug_swap *input_swap;
8647 struct ecoff_debug_info input_debug;
8648 char *eraw_src;
8649 char *eraw_end;
8650
8651 if (p->type != bfd_indirect_link_order)
8652 {
8653 if (p->type == bfd_data_link_order)
8654 continue;
8655 abort ();
8656 }
8657
8658 input_section = p->u.indirect.section;
8659 input_bfd = input_section->owner;
8660
8661 if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour
8662 || (get_elf_backend_data (input_bfd)
8663 ->elf_backend_ecoff_debug_swap) == NULL)
8664 {
8665 /* I don't know what a non MIPS ELF bfd would be
8666 doing with a .mdebug section, but I don't really
8667 want to deal with it. */
8668 continue;
8669 }
8670
8671 input_swap = (get_elf_backend_data (input_bfd)
8672 ->elf_backend_ecoff_debug_swap);
8673
8674 BFD_ASSERT (p->size == input_section->_raw_size);
8675
8676 /* The ECOFF linking code expects that we have already
8677 read in the debugging information and set up an
8678 ecoff_debug_info structure, so we do that now. */
8679 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
8680 &input_debug))
8681 return FALSE;
8682
8683 if (! (bfd_ecoff_debug_accumulate
8684 (mdebug_handle, abfd, &debug, swap, input_bfd,
8685 &input_debug, input_swap, info)))
8686 return FALSE;
8687
8688 /* Loop through the external symbols. For each one with
8689 interesting information, try to find the symbol in
8690 the linker global hash table and save the information
8691 for the output external symbols. */
8692 eraw_src = input_debug.external_ext;
8693 eraw_end = (eraw_src
8694 + (input_debug.symbolic_header.iextMax
8695 * input_swap->external_ext_size));
8696 for (;
8697 eraw_src < eraw_end;
8698 eraw_src += input_swap->external_ext_size)
8699 {
8700 EXTR ext;
8701 const char *name;
8702 struct mips_elf_link_hash_entry *h;
8703
8704 (*input_swap->swap_ext_in) (input_bfd, (PTR) eraw_src, &ext);
8705 if (ext.asym.sc == scNil
8706 || ext.asym.sc == scUndefined
8707 || ext.asym.sc == scSUndefined)
8708 continue;
8709
8710 name = input_debug.ssext + ext.asym.iss;
8711 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
8712 name, FALSE, FALSE, TRUE);
8713 if (h == NULL || h->esym.ifd != -2)
8714 continue;
8715
8716 if (ext.ifd != -1)
8717 {
8718 BFD_ASSERT (ext.ifd
8719 < input_debug.symbolic_header.ifdMax);
8720 ext.ifd = input_debug.ifdmap[ext.ifd];
8721 }
8722
8723 h->esym = ext;
8724 }
8725
8726 /* Free up the information we just read. */
8727 free (input_debug.line);
8728 free (input_debug.external_dnr);
8729 free (input_debug.external_pdr);
8730 free (input_debug.external_sym);
8731 free (input_debug.external_opt);
8732 free (input_debug.external_aux);
8733 free (input_debug.ss);
8734 free (input_debug.ssext);
8735 free (input_debug.external_fdr);
8736 free (input_debug.external_rfd);
8737 free (input_debug.external_ext);
8738
8739 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8740 elf_link_input_bfd ignores this section. */
8741 input_section->flags &= ~SEC_HAS_CONTENTS;
8742 }
8743
8744 if (SGI_COMPAT (abfd) && info->shared)
8745 {
8746 /* Create .rtproc section. */
8747 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
8748 if (rtproc_sec == NULL)
8749 {
8750 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
8751 | SEC_LINKER_CREATED | SEC_READONLY);
8752
8753 rtproc_sec = bfd_make_section (abfd, ".rtproc");
8754 if (rtproc_sec == NULL
8755 || ! bfd_set_section_flags (abfd, rtproc_sec, flags)
8756 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
8757 return FALSE;
8758 }
8759
8760 if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
8761 info, rtproc_sec,
8762 &debug))
8763 return FALSE;
8764 }
8765
8766 /* Build the external symbol information. */
8767 einfo.abfd = abfd;
8768 einfo.info = info;
8769 einfo.debug = &debug;
8770 einfo.swap = swap;
8771 einfo.failed = FALSE;
8772 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8773 mips_elf_output_extsym,
8774 (PTR) &einfo);
8775 if (einfo.failed)
8776 return FALSE;
8777
8778 /* Set the size of the .mdebug section. */
8779 o->_raw_size = bfd_ecoff_debug_size (abfd, &debug, swap);
8780
8781 /* Skip this section later on (I don't think this currently
8782 matters, but someday it might). */
8783 o->link_order_head = (struct bfd_link_order *) NULL;
8784
8785 mdebug_sec = o;
8786 }
8787
8788 if (strncmp (o->name, ".gptab.", sizeof ".gptab." - 1) == 0)
8789 {
8790 const char *subname;
8791 unsigned int c;
8792 Elf32_gptab *tab;
8793 Elf32_External_gptab *ext_tab;
8794 unsigned int j;
8795
8796 /* The .gptab.sdata and .gptab.sbss sections hold
8797 information describing how the small data area would
8798 change depending upon the -G switch. These sections
8799 not used in executables files. */
8800 if (! info->relocateable)
8801 {
8802 for (p = o->link_order_head;
8803 p != (struct bfd_link_order *) NULL;
8804 p = p->next)
8805 {
8806 asection *input_section;
8807
8808 if (p->type != bfd_indirect_link_order)
8809 {
8810 if (p->type == bfd_data_link_order)
8811 continue;
8812 abort ();
8813 }
8814
8815 input_section = p->u.indirect.section;
8816
8817 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8818 elf_link_input_bfd ignores this section. */
8819 input_section->flags &= ~SEC_HAS_CONTENTS;
8820 }
8821
8822 /* Skip this section later on (I don't think this
8823 currently matters, but someday it might). */
8824 o->link_order_head = (struct bfd_link_order *) NULL;
8825
8826 /* Really remove the section. */
8827 for (secpp = &abfd->sections;
8828 *secpp != o;
8829 secpp = &(*secpp)->next)
8830 ;
8831 bfd_section_list_remove (abfd, secpp);
8832 --abfd->section_count;
8833
8834 continue;
8835 }
8836
8837 /* There is one gptab for initialized data, and one for
8838 uninitialized data. */
8839 if (strcmp (o->name, ".gptab.sdata") == 0)
8840 gptab_data_sec = o;
8841 else if (strcmp (o->name, ".gptab.sbss") == 0)
8842 gptab_bss_sec = o;
8843 else
8844 {
8845 (*_bfd_error_handler)
8846 (_("%s: illegal section name `%s'"),
8847 bfd_get_filename (abfd), o->name);
8848 bfd_set_error (bfd_error_nonrepresentable_section);
8849 return FALSE;
8850 }
8851
8852 /* The linker script always combines .gptab.data and
8853 .gptab.sdata into .gptab.sdata, and likewise for
8854 .gptab.bss and .gptab.sbss. It is possible that there is
8855 no .sdata or .sbss section in the output file, in which
8856 case we must change the name of the output section. */
8857 subname = o->name + sizeof ".gptab" - 1;
8858 if (bfd_get_section_by_name (abfd, subname) == NULL)
8859 {
8860 if (o == gptab_data_sec)
8861 o->name = ".gptab.data";
8862 else
8863 o->name = ".gptab.bss";
8864 subname = o->name + sizeof ".gptab" - 1;
8865 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
8866 }
8867
8868 /* Set up the first entry. */
8869 c = 1;
8870 amt = c * sizeof (Elf32_gptab);
8871 tab = (Elf32_gptab *) bfd_malloc (amt);
8872 if (tab == NULL)
8873 return FALSE;
8874 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
8875 tab[0].gt_header.gt_unused = 0;
8876
8877 /* Combine the input sections. */
8878 for (p = o->link_order_head;
8879 p != (struct bfd_link_order *) NULL;
8880 p = p->next)
8881 {
8882 asection *input_section;
8883 bfd *input_bfd;
8884 bfd_size_type size;
8885 unsigned long last;
8886 bfd_size_type gpentry;
8887
8888 if (p->type != bfd_indirect_link_order)
8889 {
8890 if (p->type == bfd_data_link_order)
8891 continue;
8892 abort ();
8893 }
8894
8895 input_section = p->u.indirect.section;
8896 input_bfd = input_section->owner;
8897
8898 /* Combine the gptab entries for this input section one
8899 by one. We know that the input gptab entries are
8900 sorted by ascending -G value. */
8901 size = bfd_section_size (input_bfd, input_section);
8902 last = 0;
8903 for (gpentry = sizeof (Elf32_External_gptab);
8904 gpentry < size;
8905 gpentry += sizeof (Elf32_External_gptab))
8906 {
8907 Elf32_External_gptab ext_gptab;
8908 Elf32_gptab int_gptab;
8909 unsigned long val;
8910 unsigned long add;
8911 bfd_boolean exact;
8912 unsigned int look;
8913
8914 if (! (bfd_get_section_contents
8915 (input_bfd, input_section, (PTR) &ext_gptab,
8916 (file_ptr) gpentry,
8917 (bfd_size_type) sizeof (Elf32_External_gptab))))
8918 {
8919 free (tab);
8920 return FALSE;
8921 }
8922
8923 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
8924 &int_gptab);
8925 val = int_gptab.gt_entry.gt_g_value;
8926 add = int_gptab.gt_entry.gt_bytes - last;
8927
8928 exact = FALSE;
8929 for (look = 1; look < c; look++)
8930 {
8931 if (tab[look].gt_entry.gt_g_value >= val)
8932 tab[look].gt_entry.gt_bytes += add;
8933
8934 if (tab[look].gt_entry.gt_g_value == val)
8935 exact = TRUE;
8936 }
8937
8938 if (! exact)
8939 {
8940 Elf32_gptab *new_tab;
8941 unsigned int max;
8942
8943 /* We need a new table entry. */
8944 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
8945 new_tab = (Elf32_gptab *) bfd_realloc ((PTR) tab, amt);
8946 if (new_tab == NULL)
8947 {
8948 free (tab);
8949 return FALSE;
8950 }
8951 tab = new_tab;
8952 tab[c].gt_entry.gt_g_value = val;
8953 tab[c].gt_entry.gt_bytes = add;
8954
8955 /* Merge in the size for the next smallest -G
8956 value, since that will be implied by this new
8957 value. */
8958 max = 0;
8959 for (look = 1; look < c; look++)
8960 {
8961 if (tab[look].gt_entry.gt_g_value < val
8962 && (max == 0
8963 || (tab[look].gt_entry.gt_g_value
8964 > tab[max].gt_entry.gt_g_value)))
8965 max = look;
8966 }
8967 if (max != 0)
8968 tab[c].gt_entry.gt_bytes +=
8969 tab[max].gt_entry.gt_bytes;
8970
8971 ++c;
8972 }
8973
8974 last = int_gptab.gt_entry.gt_bytes;
8975 }
8976
8977 /* Hack: reset the SEC_HAS_CONTENTS flag so that
8978 elf_link_input_bfd ignores this section. */
8979 input_section->flags &= ~SEC_HAS_CONTENTS;
8980 }
8981
8982 /* The table must be sorted by -G value. */
8983 if (c > 2)
8984 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
8985
8986 /* Swap out the table. */
8987 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
8988 ext_tab = (Elf32_External_gptab *) bfd_alloc (abfd, amt);
8989 if (ext_tab == NULL)
8990 {
8991 free (tab);
8992 return FALSE;
8993 }
8994
8995 for (j = 0; j < c; j++)
8996 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
8997 free (tab);
8998
8999 o->_raw_size = c * sizeof (Elf32_External_gptab);
9000 o->contents = (bfd_byte *) ext_tab;
9001
9002 /* Skip this section later on (I don't think this currently
9003 matters, but someday it might). */
9004 o->link_order_head = (struct bfd_link_order *) NULL;
9005 }
9006 }
9007
9008 /* Invoke the regular ELF backend linker to do all the work. */
9009 if (!MNAME(abfd,bfd_elf,bfd_final_link) (abfd, info))
9010 return FALSE;
9011
9012 /* Now write out the computed sections. */
9013
9014 if (reginfo_sec != (asection *) NULL)
9015 {
9016 Elf32_External_RegInfo ext;
9017
9018 bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
9019 if (! bfd_set_section_contents (abfd, reginfo_sec, (PTR) &ext,
9020 (file_ptr) 0,
9021 (bfd_size_type) sizeof ext))
9022 return FALSE;
9023 }
9024
9025 if (mdebug_sec != (asection *) NULL)
9026 {
9027 BFD_ASSERT (abfd->output_has_begun);
9028 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
9029 swap, info,
9030 mdebug_sec->filepos))
9031 return FALSE;
9032
9033 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
9034 }
9035
9036 if (gptab_data_sec != (asection *) NULL)
9037 {
9038 if (! bfd_set_section_contents (abfd, gptab_data_sec,
9039 gptab_data_sec->contents,
9040 (file_ptr) 0,
9041 gptab_data_sec->_raw_size))
9042 return FALSE;
9043 }
9044
9045 if (gptab_bss_sec != (asection *) NULL)
9046 {
9047 if (! bfd_set_section_contents (abfd, gptab_bss_sec,
9048 gptab_bss_sec->contents,
9049 (file_ptr) 0,
9050 gptab_bss_sec->_raw_size))
9051 return FALSE;
9052 }
9053
9054 if (SGI_COMPAT (abfd))
9055 {
9056 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
9057 if (rtproc_sec != NULL)
9058 {
9059 if (! bfd_set_section_contents (abfd, rtproc_sec,
9060 rtproc_sec->contents,
9061 (file_ptr) 0,
9062 rtproc_sec->_raw_size))
9063 return FALSE;
9064 }
9065 }
9066
9067 return TRUE;
9068 }
9069 \f
9070 /* Structure for saying that BFD machine EXTENSION extends BASE. */
9071
9072 struct mips_mach_extension {
9073 unsigned long extension, base;
9074 };
9075
9076
9077 /* An array describing how BFD machines relate to one another. The entries
9078 are ordered topologically with MIPS I extensions listed last. */
9079
9080 static const struct mips_mach_extension mips_mach_extensions[] = {
9081 /* MIPS64 extensions. */
9082 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
9083
9084 /* MIPS V extensions. */
9085 { bfd_mach_mipsisa64, bfd_mach_mips5 },
9086
9087 /* R10000 extensions. */
9088 { bfd_mach_mips12000, bfd_mach_mips10000 },
9089
9090 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core
9091 vr5400 ISA, but doesn't include the multimedia stuff. It seems
9092 better to allow vr5400 and vr5500 code to be merged anyway, since
9093 many libraries will just use the core ISA. Perhaps we could add
9094 some sort of ASE flag if this ever proves a problem. */
9095 { bfd_mach_mips5500, bfd_mach_mips5400 },
9096 { bfd_mach_mips5400, bfd_mach_mips5000 },
9097
9098 /* MIPS IV extensions. */
9099 { bfd_mach_mips5, bfd_mach_mips8000 },
9100 { bfd_mach_mips10000, bfd_mach_mips8000 },
9101 { bfd_mach_mips5000, bfd_mach_mips8000 },
9102
9103 /* VR4100 extensions. */
9104 { bfd_mach_mips4120, bfd_mach_mips4100 },
9105 { bfd_mach_mips4111, bfd_mach_mips4100 },
9106
9107 /* MIPS III extensions. */
9108 { bfd_mach_mips8000, bfd_mach_mips4000 },
9109 { bfd_mach_mips4650, bfd_mach_mips4000 },
9110 { bfd_mach_mips4600, bfd_mach_mips4000 },
9111 { bfd_mach_mips4400, bfd_mach_mips4000 },
9112 { bfd_mach_mips4300, bfd_mach_mips4000 },
9113 { bfd_mach_mips4100, bfd_mach_mips4000 },
9114 { bfd_mach_mips4010, bfd_mach_mips4000 },
9115
9116 /* MIPS32 extensions. */
9117 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
9118
9119 /* MIPS II extensions. */
9120 { bfd_mach_mips4000, bfd_mach_mips6000 },
9121 { bfd_mach_mipsisa32, bfd_mach_mips6000 },
9122
9123 /* MIPS I extensions. */
9124 { bfd_mach_mips6000, bfd_mach_mips3000 },
9125 { bfd_mach_mips3900, bfd_mach_mips3000 }
9126 };
9127
9128
9129 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */
9130
9131 static bfd_boolean
9132 mips_mach_extends_p (base, extension)
9133 unsigned long base, extension;
9134 {
9135 size_t i;
9136
9137 for (i = 0; extension != base && i < ARRAY_SIZE (mips_mach_extensions); i++)
9138 if (extension == mips_mach_extensions[i].extension)
9139 extension = mips_mach_extensions[i].base;
9140
9141 return extension == base;
9142 }
9143
9144
9145 /* Return true if the given ELF header flags describe a 32-bit binary. */
9146
9147 static bfd_boolean
9148 mips_32bit_flags_p (flags)
9149 flagword flags;
9150 {
9151 return ((flags & EF_MIPS_32BITMODE) != 0
9152 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
9153 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
9154 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
9155 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
9156 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
9157 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
9158 }
9159
9160
9161 /* Merge backend specific data from an object file to the output
9162 object file when linking. */
9163
9164 bfd_boolean
9165 _bfd_mips_elf_merge_private_bfd_data (ibfd, obfd)
9166 bfd *ibfd;
9167 bfd *obfd;
9168 {
9169 flagword old_flags;
9170 flagword new_flags;
9171 bfd_boolean ok;
9172 bfd_boolean null_input_bfd = TRUE;
9173 asection *sec;
9174
9175 /* Check if we have the same endianess */
9176 if (! _bfd_generic_verify_endian_match (ibfd, obfd))
9177 return FALSE;
9178
9179 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
9180 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
9181 return TRUE;
9182
9183 new_flags = elf_elfheader (ibfd)->e_flags;
9184 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
9185 old_flags = elf_elfheader (obfd)->e_flags;
9186
9187 if (! elf_flags_init (obfd))
9188 {
9189 elf_flags_init (obfd) = TRUE;
9190 elf_elfheader (obfd)->e_flags = new_flags;
9191 elf_elfheader (obfd)->e_ident[EI_CLASS]
9192 = elf_elfheader (ibfd)->e_ident[EI_CLASS];
9193
9194 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
9195 && bfd_get_arch_info (obfd)->the_default)
9196 {
9197 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
9198 bfd_get_mach (ibfd)))
9199 return FALSE;
9200 }
9201
9202 return TRUE;
9203 }
9204
9205 /* Check flag compatibility. */
9206
9207 new_flags &= ~EF_MIPS_NOREORDER;
9208 old_flags &= ~EF_MIPS_NOREORDER;
9209
9210 /* Some IRIX 6 BSD-compatibility objects have this bit set. It
9211 doesn't seem to matter. */
9212 new_flags &= ~EF_MIPS_XGOT;
9213 old_flags &= ~EF_MIPS_XGOT;
9214
9215 if (new_flags == old_flags)
9216 return TRUE;
9217
9218 /* Check to see if the input BFD actually contains any sections.
9219 If not, its flags may not have been initialised either, but it cannot
9220 actually cause any incompatibility. */
9221 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
9222 {
9223 /* Ignore synthetic sections and empty .text, .data and .bss sections
9224 which are automatically generated by gas. */
9225 if (strcmp (sec->name, ".reginfo")
9226 && strcmp (sec->name, ".mdebug")
9227 && ((!strcmp (sec->name, ".text")
9228 || !strcmp (sec->name, ".data")
9229 || !strcmp (sec->name, ".bss"))
9230 && sec->_raw_size != 0))
9231 {
9232 null_input_bfd = FALSE;
9233 break;
9234 }
9235 }
9236 if (null_input_bfd)
9237 return TRUE;
9238
9239 ok = TRUE;
9240
9241 if ((new_flags & EF_MIPS_PIC) != (old_flags & EF_MIPS_PIC))
9242 {
9243 new_flags &= ~EF_MIPS_PIC;
9244 old_flags &= ~EF_MIPS_PIC;
9245 (*_bfd_error_handler)
9246 (_("%s: linking PIC files with non-PIC files"),
9247 bfd_archive_filename (ibfd));
9248 ok = FALSE;
9249 }
9250
9251 if ((new_flags & EF_MIPS_CPIC) != (old_flags & EF_MIPS_CPIC))
9252 {
9253 new_flags &= ~EF_MIPS_CPIC;
9254 old_flags &= ~EF_MIPS_CPIC;
9255 (*_bfd_error_handler)
9256 (_("%s: linking abicalls files with non-abicalls files"),
9257 bfd_archive_filename (ibfd));
9258 ok = FALSE;
9259 }
9260
9261 /* Compare the ISAs. */
9262 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
9263 {
9264 (*_bfd_error_handler)
9265 (_("%s: linking 32-bit code with 64-bit code"),
9266 bfd_archive_filename (ibfd));
9267 ok = FALSE;
9268 }
9269 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
9270 {
9271 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */
9272 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
9273 {
9274 /* Copy the architecture info from IBFD to OBFD. Also copy
9275 the 32-bit flag (if set) so that we continue to recognise
9276 OBFD as a 32-bit binary. */
9277 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
9278 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
9279 elf_elfheader (obfd)->e_flags
9280 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
9281
9282 /* Copy across the ABI flags if OBFD doesn't use them
9283 and if that was what caused us to treat IBFD as 32-bit. */
9284 if ((old_flags & EF_MIPS_ABI) == 0
9285 && mips_32bit_flags_p (new_flags)
9286 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
9287 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
9288 }
9289 else
9290 {
9291 /* The ISAs aren't compatible. */
9292 (*_bfd_error_handler)
9293 (_("%s: linking %s module with previous %s modules"),
9294 bfd_archive_filename (ibfd),
9295 bfd_printable_name (ibfd),
9296 bfd_printable_name (obfd));
9297 ok = FALSE;
9298 }
9299 }
9300
9301 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
9302 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
9303
9304 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it
9305 does set EI_CLASS differently from any 32-bit ABI. */
9306 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
9307 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
9308 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
9309 {
9310 /* Only error if both are set (to different values). */
9311 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
9312 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
9313 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
9314 {
9315 (*_bfd_error_handler)
9316 (_("%s: ABI mismatch: linking %s module with previous %s modules"),
9317 bfd_archive_filename (ibfd),
9318 elf_mips_abi_name (ibfd),
9319 elf_mips_abi_name (obfd));
9320 ok = FALSE;
9321 }
9322 new_flags &= ~EF_MIPS_ABI;
9323 old_flags &= ~EF_MIPS_ABI;
9324 }
9325
9326 /* For now, allow arbitrary mixing of ASEs (retain the union). */
9327 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
9328 {
9329 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
9330
9331 new_flags &= ~ EF_MIPS_ARCH_ASE;
9332 old_flags &= ~ EF_MIPS_ARCH_ASE;
9333 }
9334
9335 /* Warn about any other mismatches */
9336 if (new_flags != old_flags)
9337 {
9338 (*_bfd_error_handler)
9339 (_("%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
9340 bfd_archive_filename (ibfd), (unsigned long) new_flags,
9341 (unsigned long) old_flags);
9342 ok = FALSE;
9343 }
9344
9345 if (! ok)
9346 {
9347 bfd_set_error (bfd_error_bad_value);
9348 return FALSE;
9349 }
9350
9351 return TRUE;
9352 }
9353
9354 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
9355
9356 bfd_boolean
9357 _bfd_mips_elf_set_private_flags (abfd, flags)
9358 bfd *abfd;
9359 flagword flags;
9360 {
9361 BFD_ASSERT (!elf_flags_init (abfd)
9362 || elf_elfheader (abfd)->e_flags == flags);
9363
9364 elf_elfheader (abfd)->e_flags = flags;
9365 elf_flags_init (abfd) = TRUE;
9366 return TRUE;
9367 }
9368
9369 bfd_boolean
9370 _bfd_mips_elf_print_private_bfd_data (abfd, ptr)
9371 bfd *abfd;
9372 PTR ptr;
9373 {
9374 FILE *file = (FILE *) ptr;
9375
9376 BFD_ASSERT (abfd != NULL && ptr != NULL);
9377
9378 /* Print normal ELF private data. */
9379 _bfd_elf_print_private_bfd_data (abfd, ptr);
9380
9381 /* xgettext:c-format */
9382 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
9383
9384 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
9385 fprintf (file, _(" [abi=O32]"));
9386 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
9387 fprintf (file, _(" [abi=O64]"));
9388 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
9389 fprintf (file, _(" [abi=EABI32]"));
9390 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
9391 fprintf (file, _(" [abi=EABI64]"));
9392 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
9393 fprintf (file, _(" [abi unknown]"));
9394 else if (ABI_N32_P (abfd))
9395 fprintf (file, _(" [abi=N32]"));
9396 else if (ABI_64_P (abfd))
9397 fprintf (file, _(" [abi=64]"));
9398 else
9399 fprintf (file, _(" [no abi set]"));
9400
9401 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
9402 fprintf (file, _(" [mips1]"));
9403 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
9404 fprintf (file, _(" [mips2]"));
9405 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
9406 fprintf (file, _(" [mips3]"));
9407 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
9408 fprintf (file, _(" [mips4]"));
9409 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
9410 fprintf (file, _(" [mips5]"));
9411 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
9412 fprintf (file, _(" [mips32]"));
9413 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
9414 fprintf (file, _(" [mips64]"));
9415 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
9416 fprintf (file, _(" [mips32r2]"));
9417 else
9418 fprintf (file, _(" [unknown ISA]"));
9419
9420 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
9421 fprintf (file, _(" [mdmx]"));
9422
9423 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
9424 fprintf (file, _(" [mips16]"));
9425
9426 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
9427 fprintf (file, _(" [32bitmode]"));
9428 else
9429 fprintf (file, _(" [not 32bitmode]"));
9430
9431 fputc ('\n', file);
9432
9433 return TRUE;
9434 }
This page took 0.255933 seconds and 4 git commands to generate.