MIPS/BFD: Actually produce short microMIPS LA25 stubs
[deliverable/binutils-gdb.git] / bfd / elfxx-mips.c
1 /* MIPS-specific support for ELF
2 Copyright (C) 1993-2016 Free Software Foundation, Inc.
3
4 Most of the information added by Ian Lance Taylor, Cygnus Support,
5 <ian@cygnus.com>.
6 N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
7 <mark@codesourcery.com>
8 Traditional MIPS targets support added by Koundinya.K, Dansk Data
9 Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
10
11 This file is part of BFD, the Binary File Descriptor library.
12
13 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
15 the Free Software Foundation; either version 3 of the License, or
16 (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
26 MA 02110-1301, USA. */
27
28
29 /* This file handles functionality common to the different MIPS ABI's. */
30
31 #include "sysdep.h"
32 #include "bfd.h"
33 #include "libbfd.h"
34 #include "libiberty.h"
35 #include "elf-bfd.h"
36 #include "elfxx-mips.h"
37 #include "elf/mips.h"
38 #include "elf-vxworks.h"
39 #include "dwarf2.h"
40
41 /* Get the ECOFF swapping routines. */
42 #include "coff/sym.h"
43 #include "coff/symconst.h"
44 #include "coff/ecoff.h"
45 #include "coff/mips.h"
46
47 #include "hashtab.h"
48
49 /* Types of TLS GOT entry. */
50 enum mips_got_tls_type {
51 GOT_TLS_NONE,
52 GOT_TLS_GD,
53 GOT_TLS_LDM,
54 GOT_TLS_IE
55 };
56
57 /* This structure is used to hold information about one GOT entry.
58 There are four types of entry:
59
60 (1) an absolute address
61 requires: abfd == NULL
62 fields: d.address
63
64 (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
65 requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
66 fields: abfd, symndx, d.addend, tls_type
67
68 (3) a SYMBOL address, where SYMBOL is not local to an input bfd
69 requires: abfd != NULL, symndx == -1
70 fields: d.h, tls_type
71
72 (4) a TLS LDM slot
73 requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
74 fields: none; there's only one of these per GOT. */
75 struct mips_got_entry
76 {
77 /* One input bfd that needs the GOT entry. */
78 bfd *abfd;
79 /* The index of the symbol, as stored in the relocation r_info, if
80 we have a local symbol; -1 otherwise. */
81 long symndx;
82 union
83 {
84 /* If abfd == NULL, an address that must be stored in the got. */
85 bfd_vma address;
86 /* If abfd != NULL && symndx != -1, the addend of the relocation
87 that should be added to the symbol value. */
88 bfd_vma addend;
89 /* If abfd != NULL && symndx == -1, the hash table entry
90 corresponding to a symbol in the GOT. The symbol's entry
91 is in the local area if h->global_got_area is GGA_NONE,
92 otherwise it is in the global area. */
93 struct mips_elf_link_hash_entry *h;
94 } d;
95
96 /* The TLS type of this GOT entry. An LDM GOT entry will be a local
97 symbol entry with r_symndx == 0. */
98 unsigned char tls_type;
99
100 /* True if we have filled in the GOT contents for a TLS entry,
101 and created the associated relocations. */
102 unsigned char tls_initialized;
103
104 /* The offset from the beginning of the .got section to the entry
105 corresponding to this symbol+addend. If it's a global symbol
106 whose offset is yet to be decided, it's going to be -1. */
107 long gotidx;
108 };
109
110 /* This structure represents a GOT page reference from an input bfd.
111 Each instance represents a symbol + ADDEND, where the representation
112 of the symbol depends on whether it is local to the input bfd.
113 If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
114 Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
115
116 Page references with SYMNDX >= 0 always become page references
117 in the output. Page references with SYMNDX < 0 only become page
118 references if the symbol binds locally; in other cases, the page
119 reference decays to a global GOT reference. */
120 struct mips_got_page_ref
121 {
122 long symndx;
123 union
124 {
125 struct mips_elf_link_hash_entry *h;
126 bfd *abfd;
127 } u;
128 bfd_vma addend;
129 };
130
131 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
132 The structures form a non-overlapping list that is sorted by increasing
133 MIN_ADDEND. */
134 struct mips_got_page_range
135 {
136 struct mips_got_page_range *next;
137 bfd_signed_vma min_addend;
138 bfd_signed_vma max_addend;
139 };
140
141 /* This structure describes the range of addends that are applied to page
142 relocations against a given section. */
143 struct mips_got_page_entry
144 {
145 /* The section that these entries are based on. */
146 asection *sec;
147 /* The ranges for this page entry. */
148 struct mips_got_page_range *ranges;
149 /* The maximum number of page entries needed for RANGES. */
150 bfd_vma num_pages;
151 };
152
153 /* This structure is used to hold .got information when linking. */
154
155 struct mips_got_info
156 {
157 /* The number of global .got entries. */
158 unsigned int global_gotno;
159 /* The number of global .got entries that are in the GGA_RELOC_ONLY area. */
160 unsigned int reloc_only_gotno;
161 /* The number of .got slots used for TLS. */
162 unsigned int tls_gotno;
163 /* The first unused TLS .got entry. Used only during
164 mips_elf_initialize_tls_index. */
165 unsigned int tls_assigned_gotno;
166 /* The number of local .got entries, eventually including page entries. */
167 unsigned int local_gotno;
168 /* The maximum number of page entries needed. */
169 unsigned int page_gotno;
170 /* The number of relocations needed for the GOT entries. */
171 unsigned int relocs;
172 /* The first unused local .got entry. */
173 unsigned int assigned_low_gotno;
174 /* The last unused local .got entry. */
175 unsigned int assigned_high_gotno;
176 /* A hash table holding members of the got. */
177 struct htab *got_entries;
178 /* A hash table holding mips_got_page_ref structures. */
179 struct htab *got_page_refs;
180 /* A hash table of mips_got_page_entry structures. */
181 struct htab *got_page_entries;
182 /* In multi-got links, a pointer to the next got (err, rather, most
183 of the time, it points to the previous got). */
184 struct mips_got_info *next;
185 };
186
187 /* Structure passed when merging bfds' gots. */
188
189 struct mips_elf_got_per_bfd_arg
190 {
191 /* The output bfd. */
192 bfd *obfd;
193 /* The link information. */
194 struct bfd_link_info *info;
195 /* A pointer to the primary got, i.e., the one that's going to get
196 the implicit relocations from DT_MIPS_LOCAL_GOTNO and
197 DT_MIPS_GOTSYM. */
198 struct mips_got_info *primary;
199 /* A non-primary got we're trying to merge with other input bfd's
200 gots. */
201 struct mips_got_info *current;
202 /* The maximum number of got entries that can be addressed with a
203 16-bit offset. */
204 unsigned int max_count;
205 /* The maximum number of page entries needed by each got. */
206 unsigned int max_pages;
207 /* The total number of global entries which will live in the
208 primary got and be automatically relocated. This includes
209 those not referenced by the primary GOT but included in
210 the "master" GOT. */
211 unsigned int global_count;
212 };
213
214 /* A structure used to pass information to htab_traverse callbacks
215 when laying out the GOT. */
216
217 struct mips_elf_traverse_got_arg
218 {
219 struct bfd_link_info *info;
220 struct mips_got_info *g;
221 int value;
222 };
223
224 struct _mips_elf_section_data
225 {
226 struct bfd_elf_section_data elf;
227 union
228 {
229 bfd_byte *tdata;
230 } u;
231 };
232
233 #define mips_elf_section_data(sec) \
234 ((struct _mips_elf_section_data *) elf_section_data (sec))
235
236 #define is_mips_elf(bfd) \
237 (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
238 && elf_tdata (bfd) != NULL \
239 && elf_object_id (bfd) == MIPS_ELF_DATA)
240
241 /* The ABI says that every symbol used by dynamic relocations must have
242 a global GOT entry. Among other things, this provides the dynamic
243 linker with a free, directly-indexed cache. The GOT can therefore
244 contain symbols that are not referenced by GOT relocations themselves
245 (in other words, it may have symbols that are not referenced by things
246 like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
247
248 GOT relocations are less likely to overflow if we put the associated
249 GOT entries towards the beginning. We therefore divide the global
250 GOT entries into two areas: "normal" and "reloc-only". Entries in
251 the first area can be used for both dynamic relocations and GP-relative
252 accesses, while those in the "reloc-only" area are for dynamic
253 relocations only.
254
255 These GGA_* ("Global GOT Area") values are organised so that lower
256 values are more general than higher values. Also, non-GGA_NONE
257 values are ordered by the position of the area in the GOT. */
258 #define GGA_NORMAL 0
259 #define GGA_RELOC_ONLY 1
260 #define GGA_NONE 2
261
262 /* Information about a non-PIC interface to a PIC function. There are
263 two ways of creating these interfaces. The first is to add:
264
265 lui $25,%hi(func)
266 addiu $25,$25,%lo(func)
267
268 immediately before a PIC function "func". The second is to add:
269
270 lui $25,%hi(func)
271 j func
272 addiu $25,$25,%lo(func)
273
274 to a separate trampoline section.
275
276 Stubs of the first kind go in a new section immediately before the
277 target function. Stubs of the second kind go in a single section
278 pointed to by the hash table's "strampoline" field. */
279 struct mips_elf_la25_stub {
280 /* The generated section that contains this stub. */
281 asection *stub_section;
282
283 /* The offset of the stub from the start of STUB_SECTION. */
284 bfd_vma offset;
285
286 /* One symbol for the original function. Its location is available
287 in H->root.root.u.def. */
288 struct mips_elf_link_hash_entry *h;
289 };
290
291 /* Macros for populating a mips_elf_la25_stub. */
292
293 #define LA25_LUI(VAL) (0x3c190000 | (VAL)) /* lui t9,VAL */
294 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
295 #define LA25_ADDIU(VAL) (0x27390000 | (VAL)) /* addiu t9,t9,VAL */
296 #define LA25_LUI_MICROMIPS(VAL) \
297 (0x41b90000 | (VAL)) /* lui t9,VAL */
298 #define LA25_J_MICROMIPS(VAL) \
299 (0xd4000000 | (((VAL) >> 1) & 0x3ffffff)) /* j VAL */
300 #define LA25_ADDIU_MICROMIPS(VAL) \
301 (0x33390000 | (VAL)) /* addiu t9,t9,VAL */
302
303 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
304 the dynamic symbols. */
305
306 struct mips_elf_hash_sort_data
307 {
308 /* The symbol in the global GOT with the lowest dynamic symbol table
309 index. */
310 struct elf_link_hash_entry *low;
311 /* The least dynamic symbol table index corresponding to a non-TLS
312 symbol with a GOT entry. */
313 long min_got_dynindx;
314 /* The greatest dynamic symbol table index corresponding to a symbol
315 with a GOT entry that is not referenced (e.g., a dynamic symbol
316 with dynamic relocations pointing to it from non-primary GOTs). */
317 long max_unref_got_dynindx;
318 /* The greatest dynamic symbol table index not corresponding to a
319 symbol without a GOT entry. */
320 long max_non_got_dynindx;
321 };
322
323 /* We make up to two PLT entries if needed, one for standard MIPS code
324 and one for compressed code, either a MIPS16 or microMIPS one. We
325 keep a separate record of traditional lazy-binding stubs, for easier
326 processing. */
327
328 struct plt_entry
329 {
330 /* Traditional SVR4 stub offset, or -1 if none. */
331 bfd_vma stub_offset;
332
333 /* Standard PLT entry offset, or -1 if none. */
334 bfd_vma mips_offset;
335
336 /* Compressed PLT entry offset, or -1 if none. */
337 bfd_vma comp_offset;
338
339 /* The corresponding .got.plt index, or -1 if none. */
340 bfd_vma gotplt_index;
341
342 /* Whether we need a standard PLT entry. */
343 unsigned int need_mips : 1;
344
345 /* Whether we need a compressed PLT entry. */
346 unsigned int need_comp : 1;
347 };
348
349 /* The MIPS ELF linker needs additional information for each symbol in
350 the global hash table. */
351
352 struct mips_elf_link_hash_entry
353 {
354 struct elf_link_hash_entry root;
355
356 /* External symbol information. */
357 EXTR esym;
358
359 /* The la25 stub we have created for ths symbol, if any. */
360 struct mips_elf_la25_stub *la25_stub;
361
362 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
363 this symbol. */
364 unsigned int possibly_dynamic_relocs;
365
366 /* If there is a stub that 32 bit functions should use to call this
367 16 bit function, this points to the section containing the stub. */
368 asection *fn_stub;
369
370 /* If there is a stub that 16 bit functions should use to call this
371 32 bit function, this points to the section containing the stub. */
372 asection *call_stub;
373
374 /* This is like the call_stub field, but it is used if the function
375 being called returns a floating point value. */
376 asection *call_fp_stub;
377
378 /* The highest GGA_* value that satisfies all references to this symbol. */
379 unsigned int global_got_area : 2;
380
381 /* True if all GOT relocations against this symbol are for calls. This is
382 a looser condition than no_fn_stub below, because there may be other
383 non-call non-GOT relocations against the symbol. */
384 unsigned int got_only_for_calls : 1;
385
386 /* True if one of the relocations described by possibly_dynamic_relocs
387 is against a readonly section. */
388 unsigned int readonly_reloc : 1;
389
390 /* True if there is a relocation against this symbol that must be
391 resolved by the static linker (in other words, if the relocation
392 cannot possibly be made dynamic). */
393 unsigned int has_static_relocs : 1;
394
395 /* True if we must not create a .MIPS.stubs entry for this symbol.
396 This is set, for example, if there are relocations related to
397 taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
398 See "MIPS ABI Supplement, 3rd Edition", p. 4-20. */
399 unsigned int no_fn_stub : 1;
400
401 /* Whether we need the fn_stub; this is true if this symbol appears
402 in any relocs other than a 16 bit call. */
403 unsigned int need_fn_stub : 1;
404
405 /* True if this symbol is referenced by branch relocations from
406 any non-PIC input file. This is used to determine whether an
407 la25 stub is required. */
408 unsigned int has_nonpic_branches : 1;
409
410 /* Does this symbol need a traditional MIPS lazy-binding stub
411 (as opposed to a PLT entry)? */
412 unsigned int needs_lazy_stub : 1;
413
414 /* Does this symbol resolve to a PLT entry? */
415 unsigned int use_plt_entry : 1;
416 };
417
418 /* MIPS ELF linker hash table. */
419
420 struct mips_elf_link_hash_table
421 {
422 struct elf_link_hash_table root;
423
424 /* The number of .rtproc entries. */
425 bfd_size_type procedure_count;
426
427 /* The size of the .compact_rel section (if SGI_COMPAT). */
428 bfd_size_type compact_rel_size;
429
430 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
431 is set to the address of __rld_obj_head as in IRIX5 and IRIX6. */
432 bfd_boolean use_rld_obj_head;
433
434 /* The __rld_map or __rld_obj_head symbol. */
435 struct elf_link_hash_entry *rld_symbol;
436
437 /* This is set if we see any mips16 stub sections. */
438 bfd_boolean mips16_stubs_seen;
439
440 /* True if we can generate copy relocs and PLTs. */
441 bfd_boolean use_plts_and_copy_relocs;
442
443 /* True if we can only use 32-bit microMIPS instructions. */
444 bfd_boolean insn32;
445
446 /* True if we're generating code for VxWorks. */
447 bfd_boolean is_vxworks;
448
449 /* True if we already reported the small-data section overflow. */
450 bfd_boolean small_data_overflow_reported;
451
452 /* Shortcuts to some dynamic sections, or NULL if they are not
453 being used. */
454 asection *srelbss;
455 asection *sdynbss;
456 asection *srelplt;
457 asection *srelplt2;
458 asection *sgotplt;
459 asection *splt;
460 asection *sstubs;
461 asection *sgot;
462
463 /* The master GOT information. */
464 struct mips_got_info *got_info;
465
466 /* The global symbol in the GOT with the lowest index in the dynamic
467 symbol table. */
468 struct elf_link_hash_entry *global_gotsym;
469
470 /* The size of the PLT header in bytes. */
471 bfd_vma plt_header_size;
472
473 /* The size of a standard PLT entry in bytes. */
474 bfd_vma plt_mips_entry_size;
475
476 /* The size of a compressed PLT entry in bytes. */
477 bfd_vma plt_comp_entry_size;
478
479 /* The offset of the next standard PLT entry to create. */
480 bfd_vma plt_mips_offset;
481
482 /* The offset of the next compressed PLT entry to create. */
483 bfd_vma plt_comp_offset;
484
485 /* The index of the next .got.plt entry to create. */
486 bfd_vma plt_got_index;
487
488 /* The number of functions that need a lazy-binding stub. */
489 bfd_vma lazy_stub_count;
490
491 /* The size of a function stub entry in bytes. */
492 bfd_vma function_stub_size;
493
494 /* The number of reserved entries at the beginning of the GOT. */
495 unsigned int reserved_gotno;
496
497 /* The section used for mips_elf_la25_stub trampolines.
498 See the comment above that structure for details. */
499 asection *strampoline;
500
501 /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
502 pairs. */
503 htab_t la25_stubs;
504
505 /* A function FN (NAME, IS, OS) that creates a new input section
506 called NAME and links it to output section OS. If IS is nonnull,
507 the new section should go immediately before it, otherwise it
508 should go at the (current) beginning of OS.
509
510 The function returns the new section on success, otherwise it
511 returns null. */
512 asection *(*add_stub_section) (const char *, asection *, asection *);
513
514 /* Small local sym cache. */
515 struct sym_cache sym_cache;
516
517 /* Is the PLT header compressed? */
518 unsigned int plt_header_is_comp : 1;
519 };
520
521 /* Get the MIPS ELF linker hash table from a link_info structure. */
522
523 #define mips_elf_hash_table(p) \
524 (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
525 == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
526
527 /* A structure used to communicate with htab_traverse callbacks. */
528 struct mips_htab_traverse_info
529 {
530 /* The usual link-wide information. */
531 struct bfd_link_info *info;
532 bfd *output_bfd;
533
534 /* Starts off FALSE and is set to TRUE if the link should be aborted. */
535 bfd_boolean error;
536 };
537
538 /* MIPS ELF private object data. */
539
540 struct mips_elf_obj_tdata
541 {
542 /* Generic ELF private object data. */
543 struct elf_obj_tdata root;
544
545 /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output. */
546 bfd *abi_fp_bfd;
547
548 /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output. */
549 bfd *abi_msa_bfd;
550
551 /* The abiflags for this object. */
552 Elf_Internal_ABIFlags_v0 abiflags;
553 bfd_boolean abiflags_valid;
554
555 /* The GOT requirements of input bfds. */
556 struct mips_got_info *got;
557
558 /* Used by _bfd_mips_elf_find_nearest_line. The structure could be
559 included directly in this one, but there's no point to wasting
560 the memory just for the infrequently called find_nearest_line. */
561 struct mips_elf_find_line *find_line_info;
562
563 /* An array of stub sections indexed by symbol number. */
564 asection **local_stubs;
565 asection **local_call_stubs;
566
567 /* The Irix 5 support uses two virtual sections, which represent
568 text/data symbols defined in dynamic objects. */
569 asymbol *elf_data_symbol;
570 asymbol *elf_text_symbol;
571 asection *elf_data_section;
572 asection *elf_text_section;
573 };
574
575 /* Get MIPS ELF private object data from BFD's tdata. */
576
577 #define mips_elf_tdata(bfd) \
578 ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
579
580 #define TLS_RELOC_P(r_type) \
581 (r_type == R_MIPS_TLS_DTPMOD32 \
582 || r_type == R_MIPS_TLS_DTPMOD64 \
583 || r_type == R_MIPS_TLS_DTPREL32 \
584 || r_type == R_MIPS_TLS_DTPREL64 \
585 || r_type == R_MIPS_TLS_GD \
586 || r_type == R_MIPS_TLS_LDM \
587 || r_type == R_MIPS_TLS_DTPREL_HI16 \
588 || r_type == R_MIPS_TLS_DTPREL_LO16 \
589 || r_type == R_MIPS_TLS_GOTTPREL \
590 || r_type == R_MIPS_TLS_TPREL32 \
591 || r_type == R_MIPS_TLS_TPREL64 \
592 || r_type == R_MIPS_TLS_TPREL_HI16 \
593 || r_type == R_MIPS_TLS_TPREL_LO16 \
594 || r_type == R_MIPS16_TLS_GD \
595 || r_type == R_MIPS16_TLS_LDM \
596 || r_type == R_MIPS16_TLS_DTPREL_HI16 \
597 || r_type == R_MIPS16_TLS_DTPREL_LO16 \
598 || r_type == R_MIPS16_TLS_GOTTPREL \
599 || r_type == R_MIPS16_TLS_TPREL_HI16 \
600 || r_type == R_MIPS16_TLS_TPREL_LO16 \
601 || r_type == R_MICROMIPS_TLS_GD \
602 || r_type == R_MICROMIPS_TLS_LDM \
603 || r_type == R_MICROMIPS_TLS_DTPREL_HI16 \
604 || r_type == R_MICROMIPS_TLS_DTPREL_LO16 \
605 || r_type == R_MICROMIPS_TLS_GOTTPREL \
606 || r_type == R_MICROMIPS_TLS_TPREL_HI16 \
607 || r_type == R_MICROMIPS_TLS_TPREL_LO16)
608
609 /* Structure used to pass information to mips_elf_output_extsym. */
610
611 struct extsym_info
612 {
613 bfd *abfd;
614 struct bfd_link_info *info;
615 struct ecoff_debug_info *debug;
616 const struct ecoff_debug_swap *swap;
617 bfd_boolean failed;
618 };
619
620 /* The names of the runtime procedure table symbols used on IRIX5. */
621
622 static const char * const mips_elf_dynsym_rtproc_names[] =
623 {
624 "_procedure_table",
625 "_procedure_string_table",
626 "_procedure_table_size",
627 NULL
628 };
629
630 /* These structures are used to generate the .compact_rel section on
631 IRIX5. */
632
633 typedef struct
634 {
635 unsigned long id1; /* Always one? */
636 unsigned long num; /* Number of compact relocation entries. */
637 unsigned long id2; /* Always two? */
638 unsigned long offset; /* The file offset of the first relocation. */
639 unsigned long reserved0; /* Zero? */
640 unsigned long reserved1; /* Zero? */
641 } Elf32_compact_rel;
642
643 typedef struct
644 {
645 bfd_byte id1[4];
646 bfd_byte num[4];
647 bfd_byte id2[4];
648 bfd_byte offset[4];
649 bfd_byte reserved0[4];
650 bfd_byte reserved1[4];
651 } Elf32_External_compact_rel;
652
653 typedef struct
654 {
655 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
656 unsigned int rtype : 4; /* Relocation types. See below. */
657 unsigned int dist2to : 8;
658 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
659 unsigned long konst; /* KONST field. See below. */
660 unsigned long vaddr; /* VADDR to be relocated. */
661 } Elf32_crinfo;
662
663 typedef struct
664 {
665 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
666 unsigned int rtype : 4; /* Relocation types. See below. */
667 unsigned int dist2to : 8;
668 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
669 unsigned long konst; /* KONST field. See below. */
670 } Elf32_crinfo2;
671
672 typedef struct
673 {
674 bfd_byte info[4];
675 bfd_byte konst[4];
676 bfd_byte vaddr[4];
677 } Elf32_External_crinfo;
678
679 typedef struct
680 {
681 bfd_byte info[4];
682 bfd_byte konst[4];
683 } Elf32_External_crinfo2;
684
685 /* These are the constants used to swap the bitfields in a crinfo. */
686
687 #define CRINFO_CTYPE (0x1)
688 #define CRINFO_CTYPE_SH (31)
689 #define CRINFO_RTYPE (0xf)
690 #define CRINFO_RTYPE_SH (27)
691 #define CRINFO_DIST2TO (0xff)
692 #define CRINFO_DIST2TO_SH (19)
693 #define CRINFO_RELVADDR (0x7ffff)
694 #define CRINFO_RELVADDR_SH (0)
695
696 /* A compact relocation info has long (3 words) or short (2 words)
697 formats. A short format doesn't have VADDR field and relvaddr
698 fields contains ((VADDR - vaddr of the previous entry) >> 2). */
699 #define CRF_MIPS_LONG 1
700 #define CRF_MIPS_SHORT 0
701
702 /* There are 4 types of compact relocation at least. The value KONST
703 has different meaning for each type:
704
705 (type) (konst)
706 CT_MIPS_REL32 Address in data
707 CT_MIPS_WORD Address in word (XXX)
708 CT_MIPS_GPHI_LO GP - vaddr
709 CT_MIPS_JMPAD Address to jump
710 */
711
712 #define CRT_MIPS_REL32 0xa
713 #define CRT_MIPS_WORD 0xb
714 #define CRT_MIPS_GPHI_LO 0xc
715 #define CRT_MIPS_JMPAD 0xd
716
717 #define mips_elf_set_cr_format(x,format) ((x).ctype = (format))
718 #define mips_elf_set_cr_type(x,type) ((x).rtype = (type))
719 #define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v))
720 #define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2)
721 \f
722 /* The structure of the runtime procedure descriptor created by the
723 loader for use by the static exception system. */
724
725 typedef struct runtime_pdr {
726 bfd_vma adr; /* Memory address of start of procedure. */
727 long regmask; /* Save register mask. */
728 long regoffset; /* Save register offset. */
729 long fregmask; /* Save floating point register mask. */
730 long fregoffset; /* Save floating point register offset. */
731 long frameoffset; /* Frame size. */
732 short framereg; /* Frame pointer register. */
733 short pcreg; /* Offset or reg of return pc. */
734 long irpss; /* Index into the runtime string table. */
735 long reserved;
736 struct exception_info *exception_info;/* Pointer to exception array. */
737 } RPDR, *pRPDR;
738 #define cbRPDR sizeof (RPDR)
739 #define rpdNil ((pRPDR) 0)
740 \f
741 static struct mips_got_entry *mips_elf_create_local_got_entry
742 (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
743 struct mips_elf_link_hash_entry *, int);
744 static bfd_boolean mips_elf_sort_hash_table_f
745 (struct mips_elf_link_hash_entry *, void *);
746 static bfd_vma mips_elf_high
747 (bfd_vma);
748 static bfd_boolean mips_elf_create_dynamic_relocation
749 (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
750 struct mips_elf_link_hash_entry *, asection *, bfd_vma,
751 bfd_vma *, asection *);
752 static bfd_vma mips_elf_adjust_gp
753 (bfd *, struct mips_got_info *, bfd *);
754
755 /* This will be used when we sort the dynamic relocation records. */
756 static bfd *reldyn_sorting_bfd;
757
758 /* True if ABFD is for CPUs with load interlocking that include
759 non-MIPS1 CPUs and R3900. */
760 #define LOAD_INTERLOCKS_P(abfd) \
761 ( ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
762 || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
763
764 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
765 This should be safe for all architectures. We enable this predicate
766 for RM9000 for now. */
767 #define JAL_TO_BAL_P(abfd) \
768 ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
769
770 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
771 This should be safe for all architectures. We enable this predicate for
772 all CPUs. */
773 #define JALR_TO_BAL_P(abfd) 1
774
775 /* True if ABFD is for CPUs that are faster if JR is converted to B.
776 This should be safe for all architectures. We enable this predicate for
777 all CPUs. */
778 #define JR_TO_B_P(abfd) 1
779
780 /* True if ABFD is a PIC object. */
781 #define PIC_OBJECT_P(abfd) \
782 ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
783
784 /* Nonzero if ABFD is using the O32 ABI. */
785 #define ABI_O32_P(abfd) \
786 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
787
788 /* Nonzero if ABFD is using the N32 ABI. */
789 #define ABI_N32_P(abfd) \
790 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
791
792 /* Nonzero if ABFD is using the N64 ABI. */
793 #define ABI_64_P(abfd) \
794 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
795
796 /* Nonzero if ABFD is using NewABI conventions. */
797 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
798
799 /* Nonzero if ABFD has microMIPS code. */
800 #define MICROMIPS_P(abfd) \
801 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
802
803 /* Nonzero if ABFD is MIPS R6. */
804 #define MIPSR6_P(abfd) \
805 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
806 || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
807
808 /* The IRIX compatibility level we are striving for. */
809 #define IRIX_COMPAT(abfd) \
810 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
811
812 /* Whether we are trying to be compatible with IRIX at all. */
813 #define SGI_COMPAT(abfd) \
814 (IRIX_COMPAT (abfd) != ict_none)
815
816 /* The name of the options section. */
817 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
818 (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
819
820 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
821 Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME. */
822 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
823 (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
824
825 /* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section. */
826 #define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \
827 (strcmp (NAME, ".MIPS.abiflags") == 0)
828
829 /* Whether the section is readonly. */
830 #define MIPS_ELF_READONLY_SECTION(sec) \
831 ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) \
832 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
833
834 /* The name of the stub section. */
835 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
836
837 /* The size of an external REL relocation. */
838 #define MIPS_ELF_REL_SIZE(abfd) \
839 (get_elf_backend_data (abfd)->s->sizeof_rel)
840
841 /* The size of an external RELA relocation. */
842 #define MIPS_ELF_RELA_SIZE(abfd) \
843 (get_elf_backend_data (abfd)->s->sizeof_rela)
844
845 /* The size of an external dynamic table entry. */
846 #define MIPS_ELF_DYN_SIZE(abfd) \
847 (get_elf_backend_data (abfd)->s->sizeof_dyn)
848
849 /* The size of a GOT entry. */
850 #define MIPS_ELF_GOT_SIZE(abfd) \
851 (get_elf_backend_data (abfd)->s->arch_size / 8)
852
853 /* The size of the .rld_map section. */
854 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
855 (get_elf_backend_data (abfd)->s->arch_size / 8)
856
857 /* The size of a symbol-table entry. */
858 #define MIPS_ELF_SYM_SIZE(abfd) \
859 (get_elf_backend_data (abfd)->s->sizeof_sym)
860
861 /* The default alignment for sections, as a power of two. */
862 #define MIPS_ELF_LOG_FILE_ALIGN(abfd) \
863 (get_elf_backend_data (abfd)->s->log_file_align)
864
865 /* Get word-sized data. */
866 #define MIPS_ELF_GET_WORD(abfd, ptr) \
867 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
868
869 /* Put out word-sized data. */
870 #define MIPS_ELF_PUT_WORD(abfd, val, ptr) \
871 (ABI_64_P (abfd) \
872 ? bfd_put_64 (abfd, val, ptr) \
873 : bfd_put_32 (abfd, val, ptr))
874
875 /* The opcode for word-sized loads (LW or LD). */
876 #define MIPS_ELF_LOAD_WORD(abfd) \
877 (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
878
879 /* Add a dynamic symbol table-entry. */
880 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
881 _bfd_elf_add_dynamic_entry (info, tag, val)
882
883 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \
884 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
885
886 /* The name of the dynamic relocation section. */
887 #define MIPS_ELF_REL_DYN_NAME(INFO) \
888 (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
889
890 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
891 from smaller values. Start with zero, widen, *then* decrement. */
892 #define MINUS_ONE (((bfd_vma)0) - 1)
893 #define MINUS_TWO (((bfd_vma)0) - 2)
894
895 /* The value to write into got[1] for SVR4 targets, to identify it is
896 a GNU object. The dynamic linker can then use got[1] to store the
897 module pointer. */
898 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
899 ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
900
901 /* The offset of $gp from the beginning of the .got section. */
902 #define ELF_MIPS_GP_OFFSET(INFO) \
903 (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
904
905 /* The maximum size of the GOT for it to be addressable using 16-bit
906 offsets from $gp. */
907 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
908
909 /* Instructions which appear in a stub. */
910 #define STUB_LW(abfd) \
911 ((ABI_64_P (abfd) \
912 ? 0xdf998010 /* ld t9,0x8010(gp) */ \
913 : 0x8f998010)) /* lw t9,0x8010(gp) */
914 #define STUB_MOVE 0x03e07825 /* or t7,ra,zero */
915 #define STUB_LUI(VAL) (0x3c180000 + (VAL)) /* lui t8,VAL */
916 #define STUB_JALR 0x0320f809 /* jalr t9,ra */
917 #define STUB_ORI(VAL) (0x37180000 + (VAL)) /* ori t8,t8,VAL */
918 #define STUB_LI16U(VAL) (0x34180000 + (VAL)) /* ori t8,zero,VAL unsigned */
919 #define STUB_LI16S(abfd, VAL) \
920 ((ABI_64_P (abfd) \
921 ? (0x64180000 + (VAL)) /* daddiu t8,zero,VAL sign extended */ \
922 : (0x24180000 + (VAL)))) /* addiu t8,zero,VAL sign extended */
923
924 /* Likewise for the microMIPS ASE. */
925 #define STUB_LW_MICROMIPS(abfd) \
926 (ABI_64_P (abfd) \
927 ? 0xdf3c8010 /* ld t9,0x8010(gp) */ \
928 : 0xff3c8010) /* lw t9,0x8010(gp) */
929 #define STUB_MOVE_MICROMIPS 0x0dff /* move t7,ra */
930 #define STUB_MOVE32_MICROMIPS 0x001f7a90 /* or t7,ra,zero */
931 #define STUB_LUI_MICROMIPS(VAL) \
932 (0x41b80000 + (VAL)) /* lui t8,VAL */
933 #define STUB_JALR_MICROMIPS 0x45d9 /* jalr t9 */
934 #define STUB_JALR32_MICROMIPS 0x03f90f3c /* jalr ra,t9 */
935 #define STUB_ORI_MICROMIPS(VAL) \
936 (0x53180000 + (VAL)) /* ori t8,t8,VAL */
937 #define STUB_LI16U_MICROMIPS(VAL) \
938 (0x53000000 + (VAL)) /* ori t8,zero,VAL unsigned */
939 #define STUB_LI16S_MICROMIPS(abfd, VAL) \
940 (ABI_64_P (abfd) \
941 ? 0x5f000000 + (VAL) /* daddiu t8,zero,VAL sign extended */ \
942 : 0x33000000 + (VAL)) /* addiu t8,zero,VAL sign extended */
943
944 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
945 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
946 #define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12
947 #define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16
948 #define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16
949 #define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20
950
951 /* The name of the dynamic interpreter. This is put in the .interp
952 section. */
953
954 #define ELF_DYNAMIC_INTERPRETER(abfd) \
955 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \
956 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \
957 : "/usr/lib/libc.so.1")
958
959 #ifdef BFD64
960 #define MNAME(bfd,pre,pos) \
961 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
962 #define ELF_R_SYM(bfd, i) \
963 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
964 #define ELF_R_TYPE(bfd, i) \
965 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
966 #define ELF_R_INFO(bfd, s, t) \
967 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
968 #else
969 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
970 #define ELF_R_SYM(bfd, i) \
971 (ELF32_R_SYM (i))
972 #define ELF_R_TYPE(bfd, i) \
973 (ELF32_R_TYPE (i))
974 #define ELF_R_INFO(bfd, s, t) \
975 (ELF32_R_INFO (s, t))
976 #endif
977 \f
978 /* The mips16 compiler uses a couple of special sections to handle
979 floating point arguments.
980
981 Section names that look like .mips16.fn.FNNAME contain stubs that
982 copy floating point arguments from the fp regs to the gp regs and
983 then jump to FNNAME. If any 32 bit function calls FNNAME, the
984 call should be redirected to the stub instead. If no 32 bit
985 function calls FNNAME, the stub should be discarded. We need to
986 consider any reference to the function, not just a call, because
987 if the address of the function is taken we will need the stub,
988 since the address might be passed to a 32 bit function.
989
990 Section names that look like .mips16.call.FNNAME contain stubs
991 that copy floating point arguments from the gp regs to the fp
992 regs and then jump to FNNAME. If FNNAME is a 32 bit function,
993 then any 16 bit function that calls FNNAME should be redirected
994 to the stub instead. If FNNAME is not a 32 bit function, the
995 stub should be discarded.
996
997 .mips16.call.fp.FNNAME sections are similar, but contain stubs
998 which call FNNAME and then copy the return value from the fp regs
999 to the gp regs. These stubs store the return value in $18 while
1000 calling FNNAME; any function which might call one of these stubs
1001 must arrange to save $18 around the call. (This case is not
1002 needed for 32 bit functions that call 16 bit functions, because
1003 16 bit functions always return floating point values in both
1004 $f0/$f1 and $2/$3.)
1005
1006 Note that in all cases FNNAME might be defined statically.
1007 Therefore, FNNAME is not used literally. Instead, the relocation
1008 information will indicate which symbol the section is for.
1009
1010 We record any stubs that we find in the symbol table. */
1011
1012 #define FN_STUB ".mips16.fn."
1013 #define CALL_STUB ".mips16.call."
1014 #define CALL_FP_STUB ".mips16.call.fp."
1015
1016 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
1017 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
1018 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
1019 \f
1020 /* The format of the first PLT entry in an O32 executable. */
1021 static const bfd_vma mips_o32_exec_plt0_entry[] =
1022 {
1023 0x3c1c0000, /* lui $28, %hi(&GOTPLT[0]) */
1024 0x8f990000, /* lw $25, %lo(&GOTPLT[0])($28) */
1025 0x279c0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */
1026 0x031cc023, /* subu $24, $24, $28 */
1027 0x03e07825, /* or t7, ra, zero */
1028 0x0018c082, /* srl $24, $24, 2 */
1029 0x0320f809, /* jalr $25 */
1030 0x2718fffe /* subu $24, $24, 2 */
1031 };
1032
1033 /* The format of the first PLT entry in an N32 executable. Different
1034 because gp ($28) is not available; we use t2 ($14) instead. */
1035 static const bfd_vma mips_n32_exec_plt0_entry[] =
1036 {
1037 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */
1038 0x8dd90000, /* lw $25, %lo(&GOTPLT[0])($14) */
1039 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */
1040 0x030ec023, /* subu $24, $24, $14 */
1041 0x03e07825, /* or t7, ra, zero */
1042 0x0018c082, /* srl $24, $24, 2 */
1043 0x0320f809, /* jalr $25 */
1044 0x2718fffe /* subu $24, $24, 2 */
1045 };
1046
1047 /* The format of the first PLT entry in an N64 executable. Different
1048 from N32 because of the increased size of GOT entries. */
1049 static const bfd_vma mips_n64_exec_plt0_entry[] =
1050 {
1051 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */
1052 0xddd90000, /* ld $25, %lo(&GOTPLT[0])($14) */
1053 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */
1054 0x030ec023, /* subu $24, $24, $14 */
1055 0x03e07825, /* or t7, ra, zero */
1056 0x0018c0c2, /* srl $24, $24, 3 */
1057 0x0320f809, /* jalr $25 */
1058 0x2718fffe /* subu $24, $24, 2 */
1059 };
1060
1061 /* The format of the microMIPS first PLT entry in an O32 executable.
1062 We rely on v0 ($2) rather than t8 ($24) to contain the address
1063 of the GOTPLT entry handled, so this stub may only be used when
1064 all the subsequent PLT entries are microMIPS code too.
1065
1066 The trailing NOP is for alignment and correct disassembly only. */
1067 static const bfd_vma micromips_o32_exec_plt0_entry[] =
1068 {
1069 0x7980, 0x0000, /* addiupc $3, (&GOTPLT[0]) - . */
1070 0xff23, 0x0000, /* lw $25, 0($3) */
1071 0x0535, /* subu $2, $2, $3 */
1072 0x2525, /* srl $2, $2, 2 */
1073 0x3302, 0xfffe, /* subu $24, $2, 2 */
1074 0x0dff, /* move $15, $31 */
1075 0x45f9, /* jalrs $25 */
1076 0x0f83, /* move $28, $3 */
1077 0x0c00 /* nop */
1078 };
1079
1080 /* The format of the microMIPS first PLT entry in an O32 executable
1081 in the insn32 mode. */
1082 static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] =
1083 {
1084 0x41bc, 0x0000, /* lui $28, %hi(&GOTPLT[0]) */
1085 0xff3c, 0x0000, /* lw $25, %lo(&GOTPLT[0])($28) */
1086 0x339c, 0x0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */
1087 0x0398, 0xc1d0, /* subu $24, $24, $28 */
1088 0x001f, 0x7a90, /* or $15, $31, zero */
1089 0x0318, 0x1040, /* srl $24, $24, 2 */
1090 0x03f9, 0x0f3c, /* jalr $25 */
1091 0x3318, 0xfffe /* subu $24, $24, 2 */
1092 };
1093
1094 /* The format of subsequent standard PLT entries. */
1095 static const bfd_vma mips_exec_plt_entry[] =
1096 {
1097 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */
1098 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */
1099 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */
1100 0x03200008 /* jr $25 */
1101 };
1102
1103 /* In the following PLT entry the JR and ADDIU instructions will
1104 be swapped in _bfd_mips_elf_finish_dynamic_symbol because
1105 LOAD_INTERLOCKS_P will be true for MIPS R6. */
1106 static const bfd_vma mipsr6_exec_plt_entry[] =
1107 {
1108 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */
1109 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */
1110 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */
1111 0x03200009 /* jr $25 */
1112 };
1113
1114 /* The format of subsequent MIPS16 o32 PLT entries. We use v0 ($2)
1115 and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not
1116 directly addressable. */
1117 static const bfd_vma mips16_o32_exec_plt_entry[] =
1118 {
1119 0xb203, /* lw $2, 12($pc) */
1120 0x9a60, /* lw $3, 0($2) */
1121 0x651a, /* move $24, $2 */
1122 0xeb00, /* jr $3 */
1123 0x653b, /* move $25, $3 */
1124 0x6500, /* nop */
1125 0x0000, 0x0000 /* .word (.got.plt entry) */
1126 };
1127
1128 /* The format of subsequent microMIPS o32 PLT entries. We use v0 ($2)
1129 as a temporary because t8 ($24) is not addressable with ADDIUPC. */
1130 static const bfd_vma micromips_o32_exec_plt_entry[] =
1131 {
1132 0x7900, 0x0000, /* addiupc $2, (.got.plt entry) - . */
1133 0xff22, 0x0000, /* lw $25, 0($2) */
1134 0x4599, /* jr $25 */
1135 0x0f02 /* move $24, $2 */
1136 };
1137
1138 /* The format of subsequent microMIPS o32 PLT entries in the insn32 mode. */
1139 static const bfd_vma micromips_insn32_o32_exec_plt_entry[] =
1140 {
1141 0x41af, 0x0000, /* lui $15, %hi(.got.plt entry) */
1142 0xff2f, 0x0000, /* lw $25, %lo(.got.plt entry)($15) */
1143 0x0019, 0x0f3c, /* jr $25 */
1144 0x330f, 0x0000 /* addiu $24, $15, %lo(.got.plt entry) */
1145 };
1146
1147 /* The format of the first PLT entry in a VxWorks executable. */
1148 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
1149 {
1150 0x3c190000, /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_) */
1151 0x27390000, /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_) */
1152 0x8f390008, /* lw t9, 8(t9) */
1153 0x00000000, /* nop */
1154 0x03200008, /* jr t9 */
1155 0x00000000 /* nop */
1156 };
1157
1158 /* The format of subsequent PLT entries. */
1159 static const bfd_vma mips_vxworks_exec_plt_entry[] =
1160 {
1161 0x10000000, /* b .PLT_resolver */
1162 0x24180000, /* li t8, <pltindex> */
1163 0x3c190000, /* lui t9, %hi(<.got.plt slot>) */
1164 0x27390000, /* addiu t9, t9, %lo(<.got.plt slot>) */
1165 0x8f390000, /* lw t9, 0(t9) */
1166 0x00000000, /* nop */
1167 0x03200008, /* jr t9 */
1168 0x00000000 /* nop */
1169 };
1170
1171 /* The format of the first PLT entry in a VxWorks shared object. */
1172 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1173 {
1174 0x8f990008, /* lw t9, 8(gp) */
1175 0x00000000, /* nop */
1176 0x03200008, /* jr t9 */
1177 0x00000000, /* nop */
1178 0x00000000, /* nop */
1179 0x00000000 /* nop */
1180 };
1181
1182 /* The format of subsequent PLT entries. */
1183 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1184 {
1185 0x10000000, /* b .PLT_resolver */
1186 0x24180000 /* li t8, <pltindex> */
1187 };
1188 \f
1189 /* microMIPS 32-bit opcode helper installer. */
1190
1191 static void
1192 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1193 {
1194 bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1195 bfd_put_16 (abfd, opcode & 0xffff, ptr + 2);
1196 }
1197
1198 /* microMIPS 32-bit opcode helper retriever. */
1199
1200 static bfd_vma
1201 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1202 {
1203 return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1204 }
1205 \f
1206 /* Look up an entry in a MIPS ELF linker hash table. */
1207
1208 #define mips_elf_link_hash_lookup(table, string, create, copy, follow) \
1209 ((struct mips_elf_link_hash_entry *) \
1210 elf_link_hash_lookup (&(table)->root, (string), (create), \
1211 (copy), (follow)))
1212
1213 /* Traverse a MIPS ELF linker hash table. */
1214
1215 #define mips_elf_link_hash_traverse(table, func, info) \
1216 (elf_link_hash_traverse \
1217 (&(table)->root, \
1218 (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
1219 (info)))
1220
1221 /* Find the base offsets for thread-local storage in this object,
1222 for GD/LD and IE/LE respectively. */
1223
1224 #define TP_OFFSET 0x7000
1225 #define DTP_OFFSET 0x8000
1226
1227 static bfd_vma
1228 dtprel_base (struct bfd_link_info *info)
1229 {
1230 /* If tls_sec is NULL, we should have signalled an error already. */
1231 if (elf_hash_table (info)->tls_sec == NULL)
1232 return 0;
1233 return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1234 }
1235
1236 static bfd_vma
1237 tprel_base (struct bfd_link_info *info)
1238 {
1239 /* If tls_sec is NULL, we should have signalled an error already. */
1240 if (elf_hash_table (info)->tls_sec == NULL)
1241 return 0;
1242 return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1243 }
1244
1245 /* Create an entry in a MIPS ELF linker hash table. */
1246
1247 static struct bfd_hash_entry *
1248 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1249 struct bfd_hash_table *table, const char *string)
1250 {
1251 struct mips_elf_link_hash_entry *ret =
1252 (struct mips_elf_link_hash_entry *) entry;
1253
1254 /* Allocate the structure if it has not already been allocated by a
1255 subclass. */
1256 if (ret == NULL)
1257 ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1258 if (ret == NULL)
1259 return (struct bfd_hash_entry *) ret;
1260
1261 /* Call the allocation method of the superclass. */
1262 ret = ((struct mips_elf_link_hash_entry *)
1263 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1264 table, string));
1265 if (ret != NULL)
1266 {
1267 /* Set local fields. */
1268 memset (&ret->esym, 0, sizeof (EXTR));
1269 /* We use -2 as a marker to indicate that the information has
1270 not been set. -1 means there is no associated ifd. */
1271 ret->esym.ifd = -2;
1272 ret->la25_stub = 0;
1273 ret->possibly_dynamic_relocs = 0;
1274 ret->fn_stub = NULL;
1275 ret->call_stub = NULL;
1276 ret->call_fp_stub = NULL;
1277 ret->global_got_area = GGA_NONE;
1278 ret->got_only_for_calls = TRUE;
1279 ret->readonly_reloc = FALSE;
1280 ret->has_static_relocs = FALSE;
1281 ret->no_fn_stub = FALSE;
1282 ret->need_fn_stub = FALSE;
1283 ret->has_nonpic_branches = FALSE;
1284 ret->needs_lazy_stub = FALSE;
1285 ret->use_plt_entry = FALSE;
1286 }
1287
1288 return (struct bfd_hash_entry *) ret;
1289 }
1290
1291 /* Allocate MIPS ELF private object data. */
1292
1293 bfd_boolean
1294 _bfd_mips_elf_mkobject (bfd *abfd)
1295 {
1296 return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1297 MIPS_ELF_DATA);
1298 }
1299
1300 bfd_boolean
1301 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1302 {
1303 if (!sec->used_by_bfd)
1304 {
1305 struct _mips_elf_section_data *sdata;
1306 bfd_size_type amt = sizeof (*sdata);
1307
1308 sdata = bfd_zalloc (abfd, amt);
1309 if (sdata == NULL)
1310 return FALSE;
1311 sec->used_by_bfd = sdata;
1312 }
1313
1314 return _bfd_elf_new_section_hook (abfd, sec);
1315 }
1316 \f
1317 /* Read ECOFF debugging information from a .mdebug section into a
1318 ecoff_debug_info structure. */
1319
1320 bfd_boolean
1321 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1322 struct ecoff_debug_info *debug)
1323 {
1324 HDRR *symhdr;
1325 const struct ecoff_debug_swap *swap;
1326 char *ext_hdr;
1327
1328 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1329 memset (debug, 0, sizeof (*debug));
1330
1331 ext_hdr = bfd_malloc (swap->external_hdr_size);
1332 if (ext_hdr == NULL && swap->external_hdr_size != 0)
1333 goto error_return;
1334
1335 if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1336 swap->external_hdr_size))
1337 goto error_return;
1338
1339 symhdr = &debug->symbolic_header;
1340 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1341
1342 /* The symbolic header contains absolute file offsets and sizes to
1343 read. */
1344 #define READ(ptr, offset, count, size, type) \
1345 if (symhdr->count == 0) \
1346 debug->ptr = NULL; \
1347 else \
1348 { \
1349 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
1350 debug->ptr = bfd_malloc (amt); \
1351 if (debug->ptr == NULL) \
1352 goto error_return; \
1353 if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0 \
1354 || bfd_bread (debug->ptr, amt, abfd) != amt) \
1355 goto error_return; \
1356 }
1357
1358 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1359 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1360 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1361 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1362 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1363 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1364 union aux_ext *);
1365 READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1366 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1367 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1368 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1369 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1370 #undef READ
1371
1372 debug->fdr = NULL;
1373
1374 return TRUE;
1375
1376 error_return:
1377 if (ext_hdr != NULL)
1378 free (ext_hdr);
1379 if (debug->line != NULL)
1380 free (debug->line);
1381 if (debug->external_dnr != NULL)
1382 free (debug->external_dnr);
1383 if (debug->external_pdr != NULL)
1384 free (debug->external_pdr);
1385 if (debug->external_sym != NULL)
1386 free (debug->external_sym);
1387 if (debug->external_opt != NULL)
1388 free (debug->external_opt);
1389 if (debug->external_aux != NULL)
1390 free (debug->external_aux);
1391 if (debug->ss != NULL)
1392 free (debug->ss);
1393 if (debug->ssext != NULL)
1394 free (debug->ssext);
1395 if (debug->external_fdr != NULL)
1396 free (debug->external_fdr);
1397 if (debug->external_rfd != NULL)
1398 free (debug->external_rfd);
1399 if (debug->external_ext != NULL)
1400 free (debug->external_ext);
1401 return FALSE;
1402 }
1403 \f
1404 /* Swap RPDR (runtime procedure table entry) for output. */
1405
1406 static void
1407 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1408 {
1409 H_PUT_S32 (abfd, in->adr, ex->p_adr);
1410 H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1411 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1412 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1413 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1414 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1415
1416 H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1417 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1418
1419 H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1420 }
1421
1422 /* Create a runtime procedure table from the .mdebug section. */
1423
1424 static bfd_boolean
1425 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1426 struct bfd_link_info *info, asection *s,
1427 struct ecoff_debug_info *debug)
1428 {
1429 const struct ecoff_debug_swap *swap;
1430 HDRR *hdr = &debug->symbolic_header;
1431 RPDR *rpdr, *rp;
1432 struct rpdr_ext *erp;
1433 void *rtproc;
1434 struct pdr_ext *epdr;
1435 struct sym_ext *esym;
1436 char *ss, **sv;
1437 char *str;
1438 bfd_size_type size;
1439 bfd_size_type count;
1440 unsigned long sindex;
1441 unsigned long i;
1442 PDR pdr;
1443 SYMR sym;
1444 const char *no_name_func = _("static procedure (no name)");
1445
1446 epdr = NULL;
1447 rpdr = NULL;
1448 esym = NULL;
1449 ss = NULL;
1450 sv = NULL;
1451
1452 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1453
1454 sindex = strlen (no_name_func) + 1;
1455 count = hdr->ipdMax;
1456 if (count > 0)
1457 {
1458 size = swap->external_pdr_size;
1459
1460 epdr = bfd_malloc (size * count);
1461 if (epdr == NULL)
1462 goto error_return;
1463
1464 if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1465 goto error_return;
1466
1467 size = sizeof (RPDR);
1468 rp = rpdr = bfd_malloc (size * count);
1469 if (rpdr == NULL)
1470 goto error_return;
1471
1472 size = sizeof (char *);
1473 sv = bfd_malloc (size * count);
1474 if (sv == NULL)
1475 goto error_return;
1476
1477 count = hdr->isymMax;
1478 size = swap->external_sym_size;
1479 esym = bfd_malloc (size * count);
1480 if (esym == NULL)
1481 goto error_return;
1482
1483 if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1484 goto error_return;
1485
1486 count = hdr->issMax;
1487 ss = bfd_malloc (count);
1488 if (ss == NULL)
1489 goto error_return;
1490 if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1491 goto error_return;
1492
1493 count = hdr->ipdMax;
1494 for (i = 0; i < (unsigned long) count; i++, rp++)
1495 {
1496 (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1497 (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1498 rp->adr = sym.value;
1499 rp->regmask = pdr.regmask;
1500 rp->regoffset = pdr.regoffset;
1501 rp->fregmask = pdr.fregmask;
1502 rp->fregoffset = pdr.fregoffset;
1503 rp->frameoffset = pdr.frameoffset;
1504 rp->framereg = pdr.framereg;
1505 rp->pcreg = pdr.pcreg;
1506 rp->irpss = sindex;
1507 sv[i] = ss + sym.iss;
1508 sindex += strlen (sv[i]) + 1;
1509 }
1510 }
1511
1512 size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1513 size = BFD_ALIGN (size, 16);
1514 rtproc = bfd_alloc (abfd, size);
1515 if (rtproc == NULL)
1516 {
1517 mips_elf_hash_table (info)->procedure_count = 0;
1518 goto error_return;
1519 }
1520
1521 mips_elf_hash_table (info)->procedure_count = count + 2;
1522
1523 erp = rtproc;
1524 memset (erp, 0, sizeof (struct rpdr_ext));
1525 erp++;
1526 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1527 strcpy (str, no_name_func);
1528 str += strlen (no_name_func) + 1;
1529 for (i = 0; i < count; i++)
1530 {
1531 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1532 strcpy (str, sv[i]);
1533 str += strlen (sv[i]) + 1;
1534 }
1535 H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1536
1537 /* Set the size and contents of .rtproc section. */
1538 s->size = size;
1539 s->contents = rtproc;
1540
1541 /* Skip this section later on (I don't think this currently
1542 matters, but someday it might). */
1543 s->map_head.link_order = NULL;
1544
1545 if (epdr != NULL)
1546 free (epdr);
1547 if (rpdr != NULL)
1548 free (rpdr);
1549 if (esym != NULL)
1550 free (esym);
1551 if (ss != NULL)
1552 free (ss);
1553 if (sv != NULL)
1554 free (sv);
1555
1556 return TRUE;
1557
1558 error_return:
1559 if (epdr != NULL)
1560 free (epdr);
1561 if (rpdr != NULL)
1562 free (rpdr);
1563 if (esym != NULL)
1564 free (esym);
1565 if (ss != NULL)
1566 free (ss);
1567 if (sv != NULL)
1568 free (sv);
1569 return FALSE;
1570 }
1571 \f
1572 /* We're going to create a stub for H. Create a symbol for the stub's
1573 value and size, to help make the disassembly easier to read. */
1574
1575 static bfd_boolean
1576 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1577 struct mips_elf_link_hash_entry *h,
1578 const char *prefix, asection *s, bfd_vma value,
1579 bfd_vma size)
1580 {
1581 bfd_boolean micromips_p = ELF_ST_IS_MICROMIPS (h->root.other);
1582 struct bfd_link_hash_entry *bh;
1583 struct elf_link_hash_entry *elfh;
1584 char *name;
1585 bfd_boolean res;
1586
1587 if (micromips_p)
1588 value |= 1;
1589
1590 /* Create a new symbol. */
1591 name = concat (prefix, h->root.root.root.string, NULL);
1592 bh = NULL;
1593 res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1594 BSF_LOCAL, s, value, NULL,
1595 TRUE, FALSE, &bh);
1596 free (name);
1597 if (! res)
1598 return FALSE;
1599
1600 /* Make it a local function. */
1601 elfh = (struct elf_link_hash_entry *) bh;
1602 elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1603 elfh->size = size;
1604 elfh->forced_local = 1;
1605 if (micromips_p)
1606 elfh->other = ELF_ST_SET_MICROMIPS (elfh->other);
1607 return TRUE;
1608 }
1609
1610 /* We're about to redefine H. Create a symbol to represent H's
1611 current value and size, to help make the disassembly easier
1612 to read. */
1613
1614 static bfd_boolean
1615 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1616 struct mips_elf_link_hash_entry *h,
1617 const char *prefix)
1618 {
1619 struct bfd_link_hash_entry *bh;
1620 struct elf_link_hash_entry *elfh;
1621 char *name;
1622 asection *s;
1623 bfd_vma value;
1624 bfd_boolean res;
1625
1626 /* Read the symbol's value. */
1627 BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1628 || h->root.root.type == bfd_link_hash_defweak);
1629 s = h->root.root.u.def.section;
1630 value = h->root.root.u.def.value;
1631
1632 /* Create a new symbol. */
1633 name = concat (prefix, h->root.root.root.string, NULL);
1634 bh = NULL;
1635 res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1636 BSF_LOCAL, s, value, NULL,
1637 TRUE, FALSE, &bh);
1638 free (name);
1639 if (! res)
1640 return FALSE;
1641
1642 /* Make it local and copy the other attributes from H. */
1643 elfh = (struct elf_link_hash_entry *) bh;
1644 elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1645 elfh->other = h->root.other;
1646 elfh->size = h->root.size;
1647 elfh->forced_local = 1;
1648 return TRUE;
1649 }
1650
1651 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1652 function rather than to a hard-float stub. */
1653
1654 static bfd_boolean
1655 section_allows_mips16_refs_p (asection *section)
1656 {
1657 const char *name;
1658
1659 name = bfd_get_section_name (section->owner, section);
1660 return (FN_STUB_P (name)
1661 || CALL_STUB_P (name)
1662 || CALL_FP_STUB_P (name)
1663 || strcmp (name, ".pdr") == 0);
1664 }
1665
1666 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1667 stub section of some kind. Return the R_SYMNDX of the target
1668 function, or 0 if we can't decide which function that is. */
1669
1670 static unsigned long
1671 mips16_stub_symndx (const struct elf_backend_data *bed,
1672 asection *sec ATTRIBUTE_UNUSED,
1673 const Elf_Internal_Rela *relocs,
1674 const Elf_Internal_Rela *relend)
1675 {
1676 int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1677 const Elf_Internal_Rela *rel;
1678
1679 /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1680 one in a compound relocation. */
1681 for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1682 if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1683 return ELF_R_SYM (sec->owner, rel->r_info);
1684
1685 /* Otherwise trust the first relocation, whatever its kind. This is
1686 the traditional behavior. */
1687 if (relocs < relend)
1688 return ELF_R_SYM (sec->owner, relocs->r_info);
1689
1690 return 0;
1691 }
1692
1693 /* Check the mips16 stubs for a particular symbol, and see if we can
1694 discard them. */
1695
1696 static void
1697 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1698 struct mips_elf_link_hash_entry *h)
1699 {
1700 /* Dynamic symbols must use the standard call interface, in case other
1701 objects try to call them. */
1702 if (h->fn_stub != NULL
1703 && h->root.dynindx != -1)
1704 {
1705 mips_elf_create_shadow_symbol (info, h, ".mips16.");
1706 h->need_fn_stub = TRUE;
1707 }
1708
1709 if (h->fn_stub != NULL
1710 && ! h->need_fn_stub)
1711 {
1712 /* We don't need the fn_stub; the only references to this symbol
1713 are 16 bit calls. Clobber the size to 0 to prevent it from
1714 being included in the link. */
1715 h->fn_stub->size = 0;
1716 h->fn_stub->flags &= ~SEC_RELOC;
1717 h->fn_stub->reloc_count = 0;
1718 h->fn_stub->flags |= SEC_EXCLUDE;
1719 h->fn_stub->output_section = bfd_abs_section_ptr;
1720 }
1721
1722 if (h->call_stub != NULL
1723 && ELF_ST_IS_MIPS16 (h->root.other))
1724 {
1725 /* We don't need the call_stub; this is a 16 bit function, so
1726 calls from other 16 bit functions are OK. Clobber the size
1727 to 0 to prevent it from being included in the link. */
1728 h->call_stub->size = 0;
1729 h->call_stub->flags &= ~SEC_RELOC;
1730 h->call_stub->reloc_count = 0;
1731 h->call_stub->flags |= SEC_EXCLUDE;
1732 h->call_stub->output_section = bfd_abs_section_ptr;
1733 }
1734
1735 if (h->call_fp_stub != NULL
1736 && ELF_ST_IS_MIPS16 (h->root.other))
1737 {
1738 /* We don't need the call_stub; this is a 16 bit function, so
1739 calls from other 16 bit functions are OK. Clobber the size
1740 to 0 to prevent it from being included in the link. */
1741 h->call_fp_stub->size = 0;
1742 h->call_fp_stub->flags &= ~SEC_RELOC;
1743 h->call_fp_stub->reloc_count = 0;
1744 h->call_fp_stub->flags |= SEC_EXCLUDE;
1745 h->call_fp_stub->output_section = bfd_abs_section_ptr;
1746 }
1747 }
1748
1749 /* Hashtable callbacks for mips_elf_la25_stubs. */
1750
1751 static hashval_t
1752 mips_elf_la25_stub_hash (const void *entry_)
1753 {
1754 const struct mips_elf_la25_stub *entry;
1755
1756 entry = (struct mips_elf_la25_stub *) entry_;
1757 return entry->h->root.root.u.def.section->id
1758 + entry->h->root.root.u.def.value;
1759 }
1760
1761 static int
1762 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1763 {
1764 const struct mips_elf_la25_stub *entry1, *entry2;
1765
1766 entry1 = (struct mips_elf_la25_stub *) entry1_;
1767 entry2 = (struct mips_elf_la25_stub *) entry2_;
1768 return ((entry1->h->root.root.u.def.section
1769 == entry2->h->root.root.u.def.section)
1770 && (entry1->h->root.root.u.def.value
1771 == entry2->h->root.root.u.def.value));
1772 }
1773
1774 /* Called by the linker to set up the la25 stub-creation code. FN is
1775 the linker's implementation of add_stub_function. Return true on
1776 success. */
1777
1778 bfd_boolean
1779 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1780 asection *(*fn) (const char *, asection *,
1781 asection *))
1782 {
1783 struct mips_elf_link_hash_table *htab;
1784
1785 htab = mips_elf_hash_table (info);
1786 if (htab == NULL)
1787 return FALSE;
1788
1789 htab->add_stub_section = fn;
1790 htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1791 mips_elf_la25_stub_eq, NULL);
1792 if (htab->la25_stubs == NULL)
1793 return FALSE;
1794
1795 return TRUE;
1796 }
1797
1798 /* Return true if H is a locally-defined PIC function, in the sense
1799 that it or its fn_stub might need $25 to be valid on entry.
1800 Note that MIPS16 functions set up $gp using PC-relative instructions,
1801 so they themselves never need $25 to be valid. Only non-MIPS16
1802 entry points are of interest here. */
1803
1804 static bfd_boolean
1805 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1806 {
1807 return ((h->root.root.type == bfd_link_hash_defined
1808 || h->root.root.type == bfd_link_hash_defweak)
1809 && h->root.def_regular
1810 && !bfd_is_abs_section (h->root.root.u.def.section)
1811 && (!ELF_ST_IS_MIPS16 (h->root.other)
1812 || (h->fn_stub && h->need_fn_stub))
1813 && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1814 || ELF_ST_IS_MIPS_PIC (h->root.other)));
1815 }
1816
1817 /* Set *SEC to the input section that contains the target of STUB.
1818 Return the offset of the target from the start of that section. */
1819
1820 static bfd_vma
1821 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1822 asection **sec)
1823 {
1824 if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1825 {
1826 BFD_ASSERT (stub->h->need_fn_stub);
1827 *sec = stub->h->fn_stub;
1828 return 0;
1829 }
1830 else
1831 {
1832 *sec = stub->h->root.root.u.def.section;
1833 return stub->h->root.root.u.def.value;
1834 }
1835 }
1836
1837 /* STUB describes an la25 stub that we have decided to implement
1838 by inserting an LUI/ADDIU pair before the target function.
1839 Create the section and redirect the function symbol to it. */
1840
1841 static bfd_boolean
1842 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1843 struct bfd_link_info *info)
1844 {
1845 struct mips_elf_link_hash_table *htab;
1846 char *name;
1847 asection *s, *input_section;
1848 unsigned int align;
1849
1850 htab = mips_elf_hash_table (info);
1851 if (htab == NULL)
1852 return FALSE;
1853
1854 /* Create a unique name for the new section. */
1855 name = bfd_malloc (11 + sizeof (".text.stub."));
1856 if (name == NULL)
1857 return FALSE;
1858 sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1859
1860 /* Create the section. */
1861 mips_elf_get_la25_target (stub, &input_section);
1862 s = htab->add_stub_section (name, input_section,
1863 input_section->output_section);
1864 if (s == NULL)
1865 return FALSE;
1866
1867 /* Make sure that any padding goes before the stub. */
1868 align = input_section->alignment_power;
1869 if (!bfd_set_section_alignment (s->owner, s, align))
1870 return FALSE;
1871 if (align > 3)
1872 s->size = (1 << align) - 8;
1873
1874 /* Create a symbol for the stub. */
1875 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1876 stub->stub_section = s;
1877 stub->offset = s->size;
1878
1879 /* Allocate room for it. */
1880 s->size += 8;
1881 return TRUE;
1882 }
1883
1884 /* STUB describes an la25 stub that we have decided to implement
1885 with a separate trampoline. Allocate room for it and redirect
1886 the function symbol to it. */
1887
1888 static bfd_boolean
1889 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1890 struct bfd_link_info *info)
1891 {
1892 struct mips_elf_link_hash_table *htab;
1893 asection *s;
1894
1895 htab = mips_elf_hash_table (info);
1896 if (htab == NULL)
1897 return FALSE;
1898
1899 /* Create a trampoline section, if we haven't already. */
1900 s = htab->strampoline;
1901 if (s == NULL)
1902 {
1903 asection *input_section = stub->h->root.root.u.def.section;
1904 s = htab->add_stub_section (".text", NULL,
1905 input_section->output_section);
1906 if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1907 return FALSE;
1908 htab->strampoline = s;
1909 }
1910
1911 /* Create a symbol for the stub. */
1912 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1913 stub->stub_section = s;
1914 stub->offset = s->size;
1915
1916 /* Allocate room for it. */
1917 s->size += 16;
1918 return TRUE;
1919 }
1920
1921 /* H describes a symbol that needs an la25 stub. Make sure that an
1922 appropriate stub exists and point H at it. */
1923
1924 static bfd_boolean
1925 mips_elf_add_la25_stub (struct bfd_link_info *info,
1926 struct mips_elf_link_hash_entry *h)
1927 {
1928 struct mips_elf_link_hash_table *htab;
1929 struct mips_elf_la25_stub search, *stub;
1930 bfd_boolean use_trampoline_p;
1931 asection *s;
1932 bfd_vma value;
1933 void **slot;
1934
1935 /* Describe the stub we want. */
1936 search.stub_section = NULL;
1937 search.offset = 0;
1938 search.h = h;
1939
1940 /* See if we've already created an equivalent stub. */
1941 htab = mips_elf_hash_table (info);
1942 if (htab == NULL)
1943 return FALSE;
1944
1945 slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1946 if (slot == NULL)
1947 return FALSE;
1948
1949 stub = (struct mips_elf_la25_stub *) *slot;
1950 if (stub != NULL)
1951 {
1952 /* We can reuse the existing stub. */
1953 h->la25_stub = stub;
1954 return TRUE;
1955 }
1956
1957 /* Create a permanent copy of ENTRY and add it to the hash table. */
1958 stub = bfd_malloc (sizeof (search));
1959 if (stub == NULL)
1960 return FALSE;
1961 *stub = search;
1962 *slot = stub;
1963
1964 /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1965 of the section and if we would need no more than 2 nops. */
1966 value = mips_elf_get_la25_target (stub, &s);
1967 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
1968 value &= ~1;
1969 use_trampoline_p = (value != 0 || s->alignment_power > 4);
1970
1971 h->la25_stub = stub;
1972 return (use_trampoline_p
1973 ? mips_elf_add_la25_trampoline (stub, info)
1974 : mips_elf_add_la25_intro (stub, info));
1975 }
1976
1977 /* A mips_elf_link_hash_traverse callback that is called before sizing
1978 sections. DATA points to a mips_htab_traverse_info structure. */
1979
1980 static bfd_boolean
1981 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1982 {
1983 struct mips_htab_traverse_info *hti;
1984
1985 hti = (struct mips_htab_traverse_info *) data;
1986 if (!bfd_link_relocatable (hti->info))
1987 mips_elf_check_mips16_stubs (hti->info, h);
1988
1989 if (mips_elf_local_pic_function_p (h))
1990 {
1991 /* PR 12845: If H is in a section that has been garbage
1992 collected it will have its output section set to *ABS*. */
1993 if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1994 return TRUE;
1995
1996 /* H is a function that might need $25 to be valid on entry.
1997 If we're creating a non-PIC relocatable object, mark H as
1998 being PIC. If we're creating a non-relocatable object with
1999 non-PIC branches and jumps to H, make sure that H has an la25
2000 stub. */
2001 if (bfd_link_relocatable (hti->info))
2002 {
2003 if (!PIC_OBJECT_P (hti->output_bfd))
2004 h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
2005 }
2006 else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
2007 {
2008 hti->error = TRUE;
2009 return FALSE;
2010 }
2011 }
2012 return TRUE;
2013 }
2014 \f
2015 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2016 Most mips16 instructions are 16 bits, but these instructions
2017 are 32 bits.
2018
2019 The format of these instructions is:
2020
2021 +--------------+--------------------------------+
2022 | JALX | X| Imm 20:16 | Imm 25:21 |
2023 +--------------+--------------------------------+
2024 | Immediate 15:0 |
2025 +-----------------------------------------------+
2026
2027 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
2028 Note that the immediate value in the first word is swapped.
2029
2030 When producing a relocatable object file, R_MIPS16_26 is
2031 handled mostly like R_MIPS_26. In particular, the addend is
2032 stored as a straight 26-bit value in a 32-bit instruction.
2033 (gas makes life simpler for itself by never adjusting a
2034 R_MIPS16_26 reloc to be against a section, so the addend is
2035 always zero). However, the 32 bit instruction is stored as 2
2036 16-bit values, rather than a single 32-bit value. In a
2037 big-endian file, the result is the same; in a little-endian
2038 file, the two 16-bit halves of the 32 bit value are swapped.
2039 This is so that a disassembler can recognize the jal
2040 instruction.
2041
2042 When doing a final link, R_MIPS16_26 is treated as a 32 bit
2043 instruction stored as two 16-bit values. The addend A is the
2044 contents of the targ26 field. The calculation is the same as
2045 R_MIPS_26. When storing the calculated value, reorder the
2046 immediate value as shown above, and don't forget to store the
2047 value as two 16-bit values.
2048
2049 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2050 defined as
2051
2052 big-endian:
2053 +--------+----------------------+
2054 | | |
2055 | | targ26-16 |
2056 |31 26|25 0|
2057 +--------+----------------------+
2058
2059 little-endian:
2060 +----------+------+-------------+
2061 | | | |
2062 | sub1 | | sub2 |
2063 |0 9|10 15|16 31|
2064 +----------+--------------------+
2065 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2066 ((sub1 << 16) | sub2)).
2067
2068 When producing a relocatable object file, the calculation is
2069 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2070 When producing a fully linked file, the calculation is
2071 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2072 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2073
2074 The table below lists the other MIPS16 instruction relocations.
2075 Each one is calculated in the same way as the non-MIPS16 relocation
2076 given on the right, but using the extended MIPS16 layout of 16-bit
2077 immediate fields:
2078
2079 R_MIPS16_GPREL R_MIPS_GPREL16
2080 R_MIPS16_GOT16 R_MIPS_GOT16
2081 R_MIPS16_CALL16 R_MIPS_CALL16
2082 R_MIPS16_HI16 R_MIPS_HI16
2083 R_MIPS16_LO16 R_MIPS_LO16
2084
2085 A typical instruction will have a format like this:
2086
2087 +--------------+--------------------------------+
2088 | EXTEND | Imm 10:5 | Imm 15:11 |
2089 +--------------+--------------------------------+
2090 | Major | rx | ry | Imm 4:0 |
2091 +--------------+--------------------------------+
2092
2093 EXTEND is the five bit value 11110. Major is the instruction
2094 opcode.
2095
2096 All we need to do here is shuffle the bits appropriately.
2097 As above, the two 16-bit halves must be swapped on a
2098 little-endian system.
2099
2100 Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the
2101 relocatable field is shifted by 1 rather than 2 and the same bit
2102 shuffling is done as with the relocations above. */
2103
2104 static inline bfd_boolean
2105 mips16_reloc_p (int r_type)
2106 {
2107 switch (r_type)
2108 {
2109 case R_MIPS16_26:
2110 case R_MIPS16_GPREL:
2111 case R_MIPS16_GOT16:
2112 case R_MIPS16_CALL16:
2113 case R_MIPS16_HI16:
2114 case R_MIPS16_LO16:
2115 case R_MIPS16_TLS_GD:
2116 case R_MIPS16_TLS_LDM:
2117 case R_MIPS16_TLS_DTPREL_HI16:
2118 case R_MIPS16_TLS_DTPREL_LO16:
2119 case R_MIPS16_TLS_GOTTPREL:
2120 case R_MIPS16_TLS_TPREL_HI16:
2121 case R_MIPS16_TLS_TPREL_LO16:
2122 case R_MIPS16_PC16_S1:
2123 return TRUE;
2124
2125 default:
2126 return FALSE;
2127 }
2128 }
2129
2130 /* Check if a microMIPS reloc. */
2131
2132 static inline bfd_boolean
2133 micromips_reloc_p (unsigned int r_type)
2134 {
2135 return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2136 }
2137
2138 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2139 on a little-endian system. This does not apply to R_MICROMIPS_PC7_S1
2140 and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions. */
2141
2142 static inline bfd_boolean
2143 micromips_reloc_shuffle_p (unsigned int r_type)
2144 {
2145 return (micromips_reloc_p (r_type)
2146 && r_type != R_MICROMIPS_PC7_S1
2147 && r_type != R_MICROMIPS_PC10_S1);
2148 }
2149
2150 static inline bfd_boolean
2151 got16_reloc_p (int r_type)
2152 {
2153 return (r_type == R_MIPS_GOT16
2154 || r_type == R_MIPS16_GOT16
2155 || r_type == R_MICROMIPS_GOT16);
2156 }
2157
2158 static inline bfd_boolean
2159 call16_reloc_p (int r_type)
2160 {
2161 return (r_type == R_MIPS_CALL16
2162 || r_type == R_MIPS16_CALL16
2163 || r_type == R_MICROMIPS_CALL16);
2164 }
2165
2166 static inline bfd_boolean
2167 got_disp_reloc_p (unsigned int r_type)
2168 {
2169 return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2170 }
2171
2172 static inline bfd_boolean
2173 got_page_reloc_p (unsigned int r_type)
2174 {
2175 return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2176 }
2177
2178 static inline bfd_boolean
2179 got_lo16_reloc_p (unsigned int r_type)
2180 {
2181 return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2182 }
2183
2184 static inline bfd_boolean
2185 call_hi16_reloc_p (unsigned int r_type)
2186 {
2187 return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2188 }
2189
2190 static inline bfd_boolean
2191 call_lo16_reloc_p (unsigned int r_type)
2192 {
2193 return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2194 }
2195
2196 static inline bfd_boolean
2197 hi16_reloc_p (int r_type)
2198 {
2199 return (r_type == R_MIPS_HI16
2200 || r_type == R_MIPS16_HI16
2201 || r_type == R_MICROMIPS_HI16
2202 || r_type == R_MIPS_PCHI16);
2203 }
2204
2205 static inline bfd_boolean
2206 lo16_reloc_p (int r_type)
2207 {
2208 return (r_type == R_MIPS_LO16
2209 || r_type == R_MIPS16_LO16
2210 || r_type == R_MICROMIPS_LO16
2211 || r_type == R_MIPS_PCLO16);
2212 }
2213
2214 static inline bfd_boolean
2215 mips16_call_reloc_p (int r_type)
2216 {
2217 return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2218 }
2219
2220 static inline bfd_boolean
2221 jal_reloc_p (int r_type)
2222 {
2223 return (r_type == R_MIPS_26
2224 || r_type == R_MIPS16_26
2225 || r_type == R_MICROMIPS_26_S1);
2226 }
2227
2228 static inline bfd_boolean
2229 b_reloc_p (int r_type)
2230 {
2231 return (r_type == R_MIPS_PC26_S2
2232 || r_type == R_MIPS_PC21_S2
2233 || r_type == R_MIPS_PC16
2234 || r_type == R_MIPS_GNU_REL16_S2
2235 || r_type == R_MIPS16_PC16_S1
2236 || r_type == R_MICROMIPS_PC16_S1
2237 || r_type == R_MICROMIPS_PC10_S1
2238 || r_type == R_MICROMIPS_PC7_S1);
2239 }
2240
2241 static inline bfd_boolean
2242 aligned_pcrel_reloc_p (int r_type)
2243 {
2244 return (r_type == R_MIPS_PC18_S3
2245 || r_type == R_MIPS_PC19_S2);
2246 }
2247
2248 static inline bfd_boolean
2249 branch_reloc_p (int r_type)
2250 {
2251 return (r_type == R_MIPS_26
2252 || r_type == R_MIPS_PC26_S2
2253 || r_type == R_MIPS_PC21_S2
2254 || r_type == R_MIPS_PC16
2255 || r_type == R_MIPS_GNU_REL16_S2);
2256 }
2257
2258 static inline bfd_boolean
2259 mips16_branch_reloc_p (int r_type)
2260 {
2261 return (r_type == R_MIPS16_26
2262 || r_type == R_MIPS16_PC16_S1);
2263 }
2264
2265 static inline bfd_boolean
2266 micromips_branch_reloc_p (int r_type)
2267 {
2268 return (r_type == R_MICROMIPS_26_S1
2269 || r_type == R_MICROMIPS_PC16_S1
2270 || r_type == R_MICROMIPS_PC10_S1
2271 || r_type == R_MICROMIPS_PC7_S1);
2272 }
2273
2274 static inline bfd_boolean
2275 tls_gd_reloc_p (unsigned int r_type)
2276 {
2277 return (r_type == R_MIPS_TLS_GD
2278 || r_type == R_MIPS16_TLS_GD
2279 || r_type == R_MICROMIPS_TLS_GD);
2280 }
2281
2282 static inline bfd_boolean
2283 tls_ldm_reloc_p (unsigned int r_type)
2284 {
2285 return (r_type == R_MIPS_TLS_LDM
2286 || r_type == R_MIPS16_TLS_LDM
2287 || r_type == R_MICROMIPS_TLS_LDM);
2288 }
2289
2290 static inline bfd_boolean
2291 tls_gottprel_reloc_p (unsigned int r_type)
2292 {
2293 return (r_type == R_MIPS_TLS_GOTTPREL
2294 || r_type == R_MIPS16_TLS_GOTTPREL
2295 || r_type == R_MICROMIPS_TLS_GOTTPREL);
2296 }
2297
2298 void
2299 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2300 bfd_boolean jal_shuffle, bfd_byte *data)
2301 {
2302 bfd_vma first, second, val;
2303
2304 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2305 return;
2306
2307 /* Pick up the first and second halfwords of the instruction. */
2308 first = bfd_get_16 (abfd, data);
2309 second = bfd_get_16 (abfd, data + 2);
2310 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2311 val = first << 16 | second;
2312 else if (r_type != R_MIPS16_26)
2313 val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2314 | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2315 else
2316 val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2317 | ((first & 0x1f) << 21) | second);
2318 bfd_put_32 (abfd, val, data);
2319 }
2320
2321 void
2322 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2323 bfd_boolean jal_shuffle, bfd_byte *data)
2324 {
2325 bfd_vma first, second, val;
2326
2327 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2328 return;
2329
2330 val = bfd_get_32 (abfd, data);
2331 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2332 {
2333 second = val & 0xffff;
2334 first = val >> 16;
2335 }
2336 else if (r_type != R_MIPS16_26)
2337 {
2338 second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2339 first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2340 }
2341 else
2342 {
2343 second = val & 0xffff;
2344 first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2345 | ((val >> 21) & 0x1f);
2346 }
2347 bfd_put_16 (abfd, second, data + 2);
2348 bfd_put_16 (abfd, first, data);
2349 }
2350
2351 bfd_reloc_status_type
2352 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2353 arelent *reloc_entry, asection *input_section,
2354 bfd_boolean relocatable, void *data, bfd_vma gp)
2355 {
2356 bfd_vma relocation;
2357 bfd_signed_vma val;
2358 bfd_reloc_status_type status;
2359
2360 if (bfd_is_com_section (symbol->section))
2361 relocation = 0;
2362 else
2363 relocation = symbol->value;
2364
2365 relocation += symbol->section->output_section->vma;
2366 relocation += symbol->section->output_offset;
2367
2368 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2369 return bfd_reloc_outofrange;
2370
2371 /* Set val to the offset into the section or symbol. */
2372 val = reloc_entry->addend;
2373
2374 _bfd_mips_elf_sign_extend (val, 16);
2375
2376 /* Adjust val for the final section location and GP value. If we
2377 are producing relocatable output, we don't want to do this for
2378 an external symbol. */
2379 if (! relocatable
2380 || (symbol->flags & BSF_SECTION_SYM) != 0)
2381 val += relocation - gp;
2382
2383 if (reloc_entry->howto->partial_inplace)
2384 {
2385 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2386 (bfd_byte *) data
2387 + reloc_entry->address);
2388 if (status != bfd_reloc_ok)
2389 return status;
2390 }
2391 else
2392 reloc_entry->addend = val;
2393
2394 if (relocatable)
2395 reloc_entry->address += input_section->output_offset;
2396
2397 return bfd_reloc_ok;
2398 }
2399
2400 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2401 R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section
2402 that contains the relocation field and DATA points to the start of
2403 INPUT_SECTION. */
2404
2405 struct mips_hi16
2406 {
2407 struct mips_hi16 *next;
2408 bfd_byte *data;
2409 asection *input_section;
2410 arelent rel;
2411 };
2412
2413 /* FIXME: This should not be a static variable. */
2414
2415 static struct mips_hi16 *mips_hi16_list;
2416
2417 /* A howto special_function for REL *HI16 relocations. We can only
2418 calculate the correct value once we've seen the partnering
2419 *LO16 relocation, so just save the information for later.
2420
2421 The ABI requires that the *LO16 immediately follow the *HI16.
2422 However, as a GNU extension, we permit an arbitrary number of
2423 *HI16s to be associated with a single *LO16. This significantly
2424 simplies the relocation handling in gcc. */
2425
2426 bfd_reloc_status_type
2427 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2428 asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2429 asection *input_section, bfd *output_bfd,
2430 char **error_message ATTRIBUTE_UNUSED)
2431 {
2432 struct mips_hi16 *n;
2433
2434 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2435 return bfd_reloc_outofrange;
2436
2437 n = bfd_malloc (sizeof *n);
2438 if (n == NULL)
2439 return bfd_reloc_outofrange;
2440
2441 n->next = mips_hi16_list;
2442 n->data = data;
2443 n->input_section = input_section;
2444 n->rel = *reloc_entry;
2445 mips_hi16_list = n;
2446
2447 if (output_bfd != NULL)
2448 reloc_entry->address += input_section->output_offset;
2449
2450 return bfd_reloc_ok;
2451 }
2452
2453 /* A howto special_function for REL R_MIPS*_GOT16 relocations. This is just
2454 like any other 16-bit relocation when applied to global symbols, but is
2455 treated in the same as R_MIPS_HI16 when applied to local symbols. */
2456
2457 bfd_reloc_status_type
2458 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2459 void *data, asection *input_section,
2460 bfd *output_bfd, char **error_message)
2461 {
2462 if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2463 || bfd_is_und_section (bfd_get_section (symbol))
2464 || bfd_is_com_section (bfd_get_section (symbol)))
2465 /* The relocation is against a global symbol. */
2466 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2467 input_section, output_bfd,
2468 error_message);
2469
2470 return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2471 input_section, output_bfd, error_message);
2472 }
2473
2474 /* A howto special_function for REL *LO16 relocations. The *LO16 itself
2475 is a straightforward 16 bit inplace relocation, but we must deal with
2476 any partnering high-part relocations as well. */
2477
2478 bfd_reloc_status_type
2479 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2480 void *data, asection *input_section,
2481 bfd *output_bfd, char **error_message)
2482 {
2483 bfd_vma vallo;
2484 bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2485
2486 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2487 return bfd_reloc_outofrange;
2488
2489 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2490 location);
2491 vallo = bfd_get_32 (abfd, location);
2492 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2493 location);
2494
2495 while (mips_hi16_list != NULL)
2496 {
2497 bfd_reloc_status_type ret;
2498 struct mips_hi16 *hi;
2499
2500 hi = mips_hi16_list;
2501
2502 /* R_MIPS*_GOT16 relocations are something of a special case. We
2503 want to install the addend in the same way as for a R_MIPS*_HI16
2504 relocation (with a rightshift of 16). However, since GOT16
2505 relocations can also be used with global symbols, their howto
2506 has a rightshift of 0. */
2507 if (hi->rel.howto->type == R_MIPS_GOT16)
2508 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2509 else if (hi->rel.howto->type == R_MIPS16_GOT16)
2510 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2511 else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2512 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2513
2514 /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any
2515 carry or borrow will induce a change of +1 or -1 in the high part. */
2516 hi->rel.addend += (vallo + 0x8000) & 0xffff;
2517
2518 ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2519 hi->input_section, output_bfd,
2520 error_message);
2521 if (ret != bfd_reloc_ok)
2522 return ret;
2523
2524 mips_hi16_list = hi->next;
2525 free (hi);
2526 }
2527
2528 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2529 input_section, output_bfd,
2530 error_message);
2531 }
2532
2533 /* A generic howto special_function. This calculates and installs the
2534 relocation itself, thus avoiding the oft-discussed problems in
2535 bfd_perform_relocation and bfd_install_relocation. */
2536
2537 bfd_reloc_status_type
2538 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2539 asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2540 asection *input_section, bfd *output_bfd,
2541 char **error_message ATTRIBUTE_UNUSED)
2542 {
2543 bfd_signed_vma val;
2544 bfd_reloc_status_type status;
2545 bfd_boolean relocatable;
2546
2547 relocatable = (output_bfd != NULL);
2548
2549 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2550 return bfd_reloc_outofrange;
2551
2552 /* Build up the field adjustment in VAL. */
2553 val = 0;
2554 if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2555 {
2556 /* Either we're calculating the final field value or we have a
2557 relocation against a section symbol. Add in the section's
2558 offset or address. */
2559 val += symbol->section->output_section->vma;
2560 val += symbol->section->output_offset;
2561 }
2562
2563 if (!relocatable)
2564 {
2565 /* We're calculating the final field value. Add in the symbol's value
2566 and, if pc-relative, subtract the address of the field itself. */
2567 val += symbol->value;
2568 if (reloc_entry->howto->pc_relative)
2569 {
2570 val -= input_section->output_section->vma;
2571 val -= input_section->output_offset;
2572 val -= reloc_entry->address;
2573 }
2574 }
2575
2576 /* VAL is now the final adjustment. If we're keeping this relocation
2577 in the output file, and if the relocation uses a separate addend,
2578 we just need to add VAL to that addend. Otherwise we need to add
2579 VAL to the relocation field itself. */
2580 if (relocatable && !reloc_entry->howto->partial_inplace)
2581 reloc_entry->addend += val;
2582 else
2583 {
2584 bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2585
2586 /* Add in the separate addend, if any. */
2587 val += reloc_entry->addend;
2588
2589 /* Add VAL to the relocation field. */
2590 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2591 location);
2592 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2593 location);
2594 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2595 location);
2596
2597 if (status != bfd_reloc_ok)
2598 return status;
2599 }
2600
2601 if (relocatable)
2602 reloc_entry->address += input_section->output_offset;
2603
2604 return bfd_reloc_ok;
2605 }
2606 \f
2607 /* Swap an entry in a .gptab section. Note that these routines rely
2608 on the equivalence of the two elements of the union. */
2609
2610 static void
2611 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2612 Elf32_gptab *in)
2613 {
2614 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2615 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2616 }
2617
2618 static void
2619 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2620 Elf32_External_gptab *ex)
2621 {
2622 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2623 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2624 }
2625
2626 static void
2627 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2628 Elf32_External_compact_rel *ex)
2629 {
2630 H_PUT_32 (abfd, in->id1, ex->id1);
2631 H_PUT_32 (abfd, in->num, ex->num);
2632 H_PUT_32 (abfd, in->id2, ex->id2);
2633 H_PUT_32 (abfd, in->offset, ex->offset);
2634 H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2635 H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2636 }
2637
2638 static void
2639 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2640 Elf32_External_crinfo *ex)
2641 {
2642 unsigned long l;
2643
2644 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2645 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2646 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2647 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2648 H_PUT_32 (abfd, l, ex->info);
2649 H_PUT_32 (abfd, in->konst, ex->konst);
2650 H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2651 }
2652 \f
2653 /* A .reginfo section holds a single Elf32_RegInfo structure. These
2654 routines swap this structure in and out. They are used outside of
2655 BFD, so they are globally visible. */
2656
2657 void
2658 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2659 Elf32_RegInfo *in)
2660 {
2661 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2662 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2663 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2664 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2665 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2666 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2667 }
2668
2669 void
2670 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2671 Elf32_External_RegInfo *ex)
2672 {
2673 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2674 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2675 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2676 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2677 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2678 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2679 }
2680
2681 /* In the 64 bit ABI, the .MIPS.options section holds register
2682 information in an Elf64_Reginfo structure. These routines swap
2683 them in and out. They are globally visible because they are used
2684 outside of BFD. These routines are here so that gas can call them
2685 without worrying about whether the 64 bit ABI has been included. */
2686
2687 void
2688 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2689 Elf64_Internal_RegInfo *in)
2690 {
2691 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2692 in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2693 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2694 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2695 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2696 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2697 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2698 }
2699
2700 void
2701 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2702 Elf64_External_RegInfo *ex)
2703 {
2704 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2705 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2706 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2707 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2708 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2709 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2710 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2711 }
2712
2713 /* Swap in an options header. */
2714
2715 void
2716 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2717 Elf_Internal_Options *in)
2718 {
2719 in->kind = H_GET_8 (abfd, ex->kind);
2720 in->size = H_GET_8 (abfd, ex->size);
2721 in->section = H_GET_16 (abfd, ex->section);
2722 in->info = H_GET_32 (abfd, ex->info);
2723 }
2724
2725 /* Swap out an options header. */
2726
2727 void
2728 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2729 Elf_External_Options *ex)
2730 {
2731 H_PUT_8 (abfd, in->kind, ex->kind);
2732 H_PUT_8 (abfd, in->size, ex->size);
2733 H_PUT_16 (abfd, in->section, ex->section);
2734 H_PUT_32 (abfd, in->info, ex->info);
2735 }
2736
2737 /* Swap in an abiflags structure. */
2738
2739 void
2740 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2741 const Elf_External_ABIFlags_v0 *ex,
2742 Elf_Internal_ABIFlags_v0 *in)
2743 {
2744 in->version = H_GET_16 (abfd, ex->version);
2745 in->isa_level = H_GET_8 (abfd, ex->isa_level);
2746 in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2747 in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2748 in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2749 in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2750 in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2751 in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2752 in->ases = H_GET_32 (abfd, ex->ases);
2753 in->flags1 = H_GET_32 (abfd, ex->flags1);
2754 in->flags2 = H_GET_32 (abfd, ex->flags2);
2755 }
2756
2757 /* Swap out an abiflags structure. */
2758
2759 void
2760 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2761 const Elf_Internal_ABIFlags_v0 *in,
2762 Elf_External_ABIFlags_v0 *ex)
2763 {
2764 H_PUT_16 (abfd, in->version, ex->version);
2765 H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2766 H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2767 H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2768 H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2769 H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2770 H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2771 H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2772 H_PUT_32 (abfd, in->ases, ex->ases);
2773 H_PUT_32 (abfd, in->flags1, ex->flags1);
2774 H_PUT_32 (abfd, in->flags2, ex->flags2);
2775 }
2776 \f
2777 /* This function is called via qsort() to sort the dynamic relocation
2778 entries by increasing r_symndx value. */
2779
2780 static int
2781 sort_dynamic_relocs (const void *arg1, const void *arg2)
2782 {
2783 Elf_Internal_Rela int_reloc1;
2784 Elf_Internal_Rela int_reloc2;
2785 int diff;
2786
2787 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2788 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2789
2790 diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2791 if (diff != 0)
2792 return diff;
2793
2794 if (int_reloc1.r_offset < int_reloc2.r_offset)
2795 return -1;
2796 if (int_reloc1.r_offset > int_reloc2.r_offset)
2797 return 1;
2798 return 0;
2799 }
2800
2801 /* Like sort_dynamic_relocs, but used for elf64 relocations. */
2802
2803 static int
2804 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2805 const void *arg2 ATTRIBUTE_UNUSED)
2806 {
2807 #ifdef BFD64
2808 Elf_Internal_Rela int_reloc1[3];
2809 Elf_Internal_Rela int_reloc2[3];
2810
2811 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2812 (reldyn_sorting_bfd, arg1, int_reloc1);
2813 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2814 (reldyn_sorting_bfd, arg2, int_reloc2);
2815
2816 if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2817 return -1;
2818 if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2819 return 1;
2820
2821 if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2822 return -1;
2823 if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2824 return 1;
2825 return 0;
2826 #else
2827 abort ();
2828 #endif
2829 }
2830
2831
2832 /* This routine is used to write out ECOFF debugging external symbol
2833 information. It is called via mips_elf_link_hash_traverse. The
2834 ECOFF external symbol information must match the ELF external
2835 symbol information. Unfortunately, at this point we don't know
2836 whether a symbol is required by reloc information, so the two
2837 tables may wind up being different. We must sort out the external
2838 symbol information before we can set the final size of the .mdebug
2839 section, and we must set the size of the .mdebug section before we
2840 can relocate any sections, and we can't know which symbols are
2841 required by relocation until we relocate the sections.
2842 Fortunately, it is relatively unlikely that any symbol will be
2843 stripped but required by a reloc. In particular, it can not happen
2844 when generating a final executable. */
2845
2846 static bfd_boolean
2847 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2848 {
2849 struct extsym_info *einfo = data;
2850 bfd_boolean strip;
2851 asection *sec, *output_section;
2852
2853 if (h->root.indx == -2)
2854 strip = FALSE;
2855 else if ((h->root.def_dynamic
2856 || h->root.ref_dynamic
2857 || h->root.type == bfd_link_hash_new)
2858 && !h->root.def_regular
2859 && !h->root.ref_regular)
2860 strip = TRUE;
2861 else if (einfo->info->strip == strip_all
2862 || (einfo->info->strip == strip_some
2863 && bfd_hash_lookup (einfo->info->keep_hash,
2864 h->root.root.root.string,
2865 FALSE, FALSE) == NULL))
2866 strip = TRUE;
2867 else
2868 strip = FALSE;
2869
2870 if (strip)
2871 return TRUE;
2872
2873 if (h->esym.ifd == -2)
2874 {
2875 h->esym.jmptbl = 0;
2876 h->esym.cobol_main = 0;
2877 h->esym.weakext = 0;
2878 h->esym.reserved = 0;
2879 h->esym.ifd = ifdNil;
2880 h->esym.asym.value = 0;
2881 h->esym.asym.st = stGlobal;
2882
2883 if (h->root.root.type == bfd_link_hash_undefined
2884 || h->root.root.type == bfd_link_hash_undefweak)
2885 {
2886 const char *name;
2887
2888 /* Use undefined class. Also, set class and type for some
2889 special symbols. */
2890 name = h->root.root.root.string;
2891 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2892 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2893 {
2894 h->esym.asym.sc = scData;
2895 h->esym.asym.st = stLabel;
2896 h->esym.asym.value = 0;
2897 }
2898 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2899 {
2900 h->esym.asym.sc = scAbs;
2901 h->esym.asym.st = stLabel;
2902 h->esym.asym.value =
2903 mips_elf_hash_table (einfo->info)->procedure_count;
2904 }
2905 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2906 {
2907 h->esym.asym.sc = scAbs;
2908 h->esym.asym.st = stLabel;
2909 h->esym.asym.value = elf_gp (einfo->abfd);
2910 }
2911 else
2912 h->esym.asym.sc = scUndefined;
2913 }
2914 else if (h->root.root.type != bfd_link_hash_defined
2915 && h->root.root.type != bfd_link_hash_defweak)
2916 h->esym.asym.sc = scAbs;
2917 else
2918 {
2919 const char *name;
2920
2921 sec = h->root.root.u.def.section;
2922 output_section = sec->output_section;
2923
2924 /* When making a shared library and symbol h is the one from
2925 the another shared library, OUTPUT_SECTION may be null. */
2926 if (output_section == NULL)
2927 h->esym.asym.sc = scUndefined;
2928 else
2929 {
2930 name = bfd_section_name (output_section->owner, output_section);
2931
2932 if (strcmp (name, ".text") == 0)
2933 h->esym.asym.sc = scText;
2934 else if (strcmp (name, ".data") == 0)
2935 h->esym.asym.sc = scData;
2936 else if (strcmp (name, ".sdata") == 0)
2937 h->esym.asym.sc = scSData;
2938 else if (strcmp (name, ".rodata") == 0
2939 || strcmp (name, ".rdata") == 0)
2940 h->esym.asym.sc = scRData;
2941 else if (strcmp (name, ".bss") == 0)
2942 h->esym.asym.sc = scBss;
2943 else if (strcmp (name, ".sbss") == 0)
2944 h->esym.asym.sc = scSBss;
2945 else if (strcmp (name, ".init") == 0)
2946 h->esym.asym.sc = scInit;
2947 else if (strcmp (name, ".fini") == 0)
2948 h->esym.asym.sc = scFini;
2949 else
2950 h->esym.asym.sc = scAbs;
2951 }
2952 }
2953
2954 h->esym.asym.reserved = 0;
2955 h->esym.asym.index = indexNil;
2956 }
2957
2958 if (h->root.root.type == bfd_link_hash_common)
2959 h->esym.asym.value = h->root.root.u.c.size;
2960 else if (h->root.root.type == bfd_link_hash_defined
2961 || h->root.root.type == bfd_link_hash_defweak)
2962 {
2963 if (h->esym.asym.sc == scCommon)
2964 h->esym.asym.sc = scBss;
2965 else if (h->esym.asym.sc == scSCommon)
2966 h->esym.asym.sc = scSBss;
2967
2968 sec = h->root.root.u.def.section;
2969 output_section = sec->output_section;
2970 if (output_section != NULL)
2971 h->esym.asym.value = (h->root.root.u.def.value
2972 + sec->output_offset
2973 + output_section->vma);
2974 else
2975 h->esym.asym.value = 0;
2976 }
2977 else
2978 {
2979 struct mips_elf_link_hash_entry *hd = h;
2980
2981 while (hd->root.root.type == bfd_link_hash_indirect)
2982 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2983
2984 if (hd->needs_lazy_stub)
2985 {
2986 BFD_ASSERT (hd->root.plt.plist != NULL);
2987 BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
2988 /* Set type and value for a symbol with a function stub. */
2989 h->esym.asym.st = stProc;
2990 sec = hd->root.root.u.def.section;
2991 if (sec == NULL)
2992 h->esym.asym.value = 0;
2993 else
2994 {
2995 output_section = sec->output_section;
2996 if (output_section != NULL)
2997 h->esym.asym.value = (hd->root.plt.plist->stub_offset
2998 + sec->output_offset
2999 + output_section->vma);
3000 else
3001 h->esym.asym.value = 0;
3002 }
3003 }
3004 }
3005
3006 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
3007 h->root.root.root.string,
3008 &h->esym))
3009 {
3010 einfo->failed = TRUE;
3011 return FALSE;
3012 }
3013
3014 return TRUE;
3015 }
3016
3017 /* A comparison routine used to sort .gptab entries. */
3018
3019 static int
3020 gptab_compare (const void *p1, const void *p2)
3021 {
3022 const Elf32_gptab *a1 = p1;
3023 const Elf32_gptab *a2 = p2;
3024
3025 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
3026 }
3027 \f
3028 /* Functions to manage the got entry hash table. */
3029
3030 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3031 hash number. */
3032
3033 static INLINE hashval_t
3034 mips_elf_hash_bfd_vma (bfd_vma addr)
3035 {
3036 #ifdef BFD64
3037 return addr + (addr >> 32);
3038 #else
3039 return addr;
3040 #endif
3041 }
3042
3043 static hashval_t
3044 mips_elf_got_entry_hash (const void *entry_)
3045 {
3046 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3047
3048 return (entry->symndx
3049 + ((entry->tls_type == GOT_TLS_LDM) << 18)
3050 + (entry->tls_type == GOT_TLS_LDM ? 0
3051 : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3052 : entry->symndx >= 0 ? (entry->abfd->id
3053 + mips_elf_hash_bfd_vma (entry->d.addend))
3054 : entry->d.h->root.root.root.hash));
3055 }
3056
3057 static int
3058 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3059 {
3060 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3061 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3062
3063 return (e1->symndx == e2->symndx
3064 && e1->tls_type == e2->tls_type
3065 && (e1->tls_type == GOT_TLS_LDM ? TRUE
3066 : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3067 : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3068 && e1->d.addend == e2->d.addend)
3069 : e2->abfd && e1->d.h == e2->d.h));
3070 }
3071
3072 static hashval_t
3073 mips_got_page_ref_hash (const void *ref_)
3074 {
3075 const struct mips_got_page_ref *ref;
3076
3077 ref = (const struct mips_got_page_ref *) ref_;
3078 return ((ref->symndx >= 0
3079 ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3080 : ref->u.h->root.root.root.hash)
3081 + mips_elf_hash_bfd_vma (ref->addend));
3082 }
3083
3084 static int
3085 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3086 {
3087 const struct mips_got_page_ref *ref1, *ref2;
3088
3089 ref1 = (const struct mips_got_page_ref *) ref1_;
3090 ref2 = (const struct mips_got_page_ref *) ref2_;
3091 return (ref1->symndx == ref2->symndx
3092 && (ref1->symndx < 0
3093 ? ref1->u.h == ref2->u.h
3094 : ref1->u.abfd == ref2->u.abfd)
3095 && ref1->addend == ref2->addend);
3096 }
3097
3098 static hashval_t
3099 mips_got_page_entry_hash (const void *entry_)
3100 {
3101 const struct mips_got_page_entry *entry;
3102
3103 entry = (const struct mips_got_page_entry *) entry_;
3104 return entry->sec->id;
3105 }
3106
3107 static int
3108 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3109 {
3110 const struct mips_got_page_entry *entry1, *entry2;
3111
3112 entry1 = (const struct mips_got_page_entry *) entry1_;
3113 entry2 = (const struct mips_got_page_entry *) entry2_;
3114 return entry1->sec == entry2->sec;
3115 }
3116 \f
3117 /* Create and return a new mips_got_info structure. */
3118
3119 static struct mips_got_info *
3120 mips_elf_create_got_info (bfd *abfd)
3121 {
3122 struct mips_got_info *g;
3123
3124 g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3125 if (g == NULL)
3126 return NULL;
3127
3128 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3129 mips_elf_got_entry_eq, NULL);
3130 if (g->got_entries == NULL)
3131 return NULL;
3132
3133 g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3134 mips_got_page_ref_eq, NULL);
3135 if (g->got_page_refs == NULL)
3136 return NULL;
3137
3138 return g;
3139 }
3140
3141 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3142 CREATE_P and if ABFD doesn't already have a GOT. */
3143
3144 static struct mips_got_info *
3145 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3146 {
3147 struct mips_elf_obj_tdata *tdata;
3148
3149 if (!is_mips_elf (abfd))
3150 return NULL;
3151
3152 tdata = mips_elf_tdata (abfd);
3153 if (!tdata->got && create_p)
3154 tdata->got = mips_elf_create_got_info (abfd);
3155 return tdata->got;
3156 }
3157
3158 /* Record that ABFD should use output GOT G. */
3159
3160 static void
3161 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3162 {
3163 struct mips_elf_obj_tdata *tdata;
3164
3165 BFD_ASSERT (is_mips_elf (abfd));
3166 tdata = mips_elf_tdata (abfd);
3167 if (tdata->got)
3168 {
3169 /* The GOT structure itself and the hash table entries are
3170 allocated to a bfd, but the hash tables aren't. */
3171 htab_delete (tdata->got->got_entries);
3172 htab_delete (tdata->got->got_page_refs);
3173 if (tdata->got->got_page_entries)
3174 htab_delete (tdata->got->got_page_entries);
3175 }
3176 tdata->got = g;
3177 }
3178
3179 /* Return the dynamic relocation section. If it doesn't exist, try to
3180 create a new it if CREATE_P, otherwise return NULL. Also return NULL
3181 if creation fails. */
3182
3183 static asection *
3184 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3185 {
3186 const char *dname;
3187 asection *sreloc;
3188 bfd *dynobj;
3189
3190 dname = MIPS_ELF_REL_DYN_NAME (info);
3191 dynobj = elf_hash_table (info)->dynobj;
3192 sreloc = bfd_get_linker_section (dynobj, dname);
3193 if (sreloc == NULL && create_p)
3194 {
3195 sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3196 (SEC_ALLOC
3197 | SEC_LOAD
3198 | SEC_HAS_CONTENTS
3199 | SEC_IN_MEMORY
3200 | SEC_LINKER_CREATED
3201 | SEC_READONLY));
3202 if (sreloc == NULL
3203 || ! bfd_set_section_alignment (dynobj, sreloc,
3204 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3205 return NULL;
3206 }
3207 return sreloc;
3208 }
3209
3210 /* Return the GOT_TLS_* type required by relocation type R_TYPE. */
3211
3212 static int
3213 mips_elf_reloc_tls_type (unsigned int r_type)
3214 {
3215 if (tls_gd_reloc_p (r_type))
3216 return GOT_TLS_GD;
3217
3218 if (tls_ldm_reloc_p (r_type))
3219 return GOT_TLS_LDM;
3220
3221 if (tls_gottprel_reloc_p (r_type))
3222 return GOT_TLS_IE;
3223
3224 return GOT_TLS_NONE;
3225 }
3226
3227 /* Return the number of GOT slots needed for GOT TLS type TYPE. */
3228
3229 static int
3230 mips_tls_got_entries (unsigned int type)
3231 {
3232 switch (type)
3233 {
3234 case GOT_TLS_GD:
3235 case GOT_TLS_LDM:
3236 return 2;
3237
3238 case GOT_TLS_IE:
3239 return 1;
3240
3241 case GOT_TLS_NONE:
3242 return 0;
3243 }
3244 abort ();
3245 }
3246
3247 /* Count the number of relocations needed for a TLS GOT entry, with
3248 access types from TLS_TYPE, and symbol H (or a local symbol if H
3249 is NULL). */
3250
3251 static int
3252 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3253 struct elf_link_hash_entry *h)
3254 {
3255 int indx = 0;
3256 bfd_boolean need_relocs = FALSE;
3257 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3258
3259 if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3260 && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3261 indx = h->dynindx;
3262
3263 if ((bfd_link_pic (info) || indx != 0)
3264 && (h == NULL
3265 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3266 || h->root.type != bfd_link_hash_undefweak))
3267 need_relocs = TRUE;
3268
3269 if (!need_relocs)
3270 return 0;
3271
3272 switch (tls_type)
3273 {
3274 case GOT_TLS_GD:
3275 return indx != 0 ? 2 : 1;
3276
3277 case GOT_TLS_IE:
3278 return 1;
3279
3280 case GOT_TLS_LDM:
3281 return bfd_link_pic (info) ? 1 : 0;
3282
3283 default:
3284 return 0;
3285 }
3286 }
3287
3288 /* Add the number of GOT entries and TLS relocations required by ENTRY
3289 to G. */
3290
3291 static void
3292 mips_elf_count_got_entry (struct bfd_link_info *info,
3293 struct mips_got_info *g,
3294 struct mips_got_entry *entry)
3295 {
3296 if (entry->tls_type)
3297 {
3298 g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3299 g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3300 entry->symndx < 0
3301 ? &entry->d.h->root : NULL);
3302 }
3303 else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3304 g->local_gotno += 1;
3305 else
3306 g->global_gotno += 1;
3307 }
3308
3309 /* Output a simple dynamic relocation into SRELOC. */
3310
3311 static void
3312 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3313 asection *sreloc,
3314 unsigned long reloc_index,
3315 unsigned long indx,
3316 int r_type,
3317 bfd_vma offset)
3318 {
3319 Elf_Internal_Rela rel[3];
3320
3321 memset (rel, 0, sizeof (rel));
3322
3323 rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3324 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3325
3326 if (ABI_64_P (output_bfd))
3327 {
3328 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3329 (output_bfd, &rel[0],
3330 (sreloc->contents
3331 + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3332 }
3333 else
3334 bfd_elf32_swap_reloc_out
3335 (output_bfd, &rel[0],
3336 (sreloc->contents
3337 + reloc_index * sizeof (Elf32_External_Rel)));
3338 }
3339
3340 /* Initialize a set of TLS GOT entries for one symbol. */
3341
3342 static void
3343 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3344 struct mips_got_entry *entry,
3345 struct mips_elf_link_hash_entry *h,
3346 bfd_vma value)
3347 {
3348 struct mips_elf_link_hash_table *htab;
3349 int indx;
3350 asection *sreloc, *sgot;
3351 bfd_vma got_offset, got_offset2;
3352 bfd_boolean need_relocs = FALSE;
3353
3354 htab = mips_elf_hash_table (info);
3355 if (htab == NULL)
3356 return;
3357
3358 sgot = htab->sgot;
3359
3360 indx = 0;
3361 if (h != NULL)
3362 {
3363 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3364
3365 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
3366 &h->root)
3367 && (!bfd_link_pic (info)
3368 || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3369 indx = h->root.dynindx;
3370 }
3371
3372 if (entry->tls_initialized)
3373 return;
3374
3375 if ((bfd_link_pic (info) || indx != 0)
3376 && (h == NULL
3377 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3378 || h->root.type != bfd_link_hash_undefweak))
3379 need_relocs = TRUE;
3380
3381 /* MINUS_ONE means the symbol is not defined in this object. It may not
3382 be defined at all; assume that the value doesn't matter in that
3383 case. Otherwise complain if we would use the value. */
3384 BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3385 || h->root.root.type == bfd_link_hash_undefweak);
3386
3387 /* Emit necessary relocations. */
3388 sreloc = mips_elf_rel_dyn_section (info, FALSE);
3389 got_offset = entry->gotidx;
3390
3391 switch (entry->tls_type)
3392 {
3393 case GOT_TLS_GD:
3394 /* General Dynamic. */
3395 got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3396
3397 if (need_relocs)
3398 {
3399 mips_elf_output_dynamic_relocation
3400 (abfd, sreloc, sreloc->reloc_count++, indx,
3401 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3402 sgot->output_offset + sgot->output_section->vma + got_offset);
3403
3404 if (indx)
3405 mips_elf_output_dynamic_relocation
3406 (abfd, sreloc, sreloc->reloc_count++, indx,
3407 ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3408 sgot->output_offset + sgot->output_section->vma + got_offset2);
3409 else
3410 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3411 sgot->contents + got_offset2);
3412 }
3413 else
3414 {
3415 MIPS_ELF_PUT_WORD (abfd, 1,
3416 sgot->contents + got_offset);
3417 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3418 sgot->contents + got_offset2);
3419 }
3420 break;
3421
3422 case GOT_TLS_IE:
3423 /* Initial Exec model. */
3424 if (need_relocs)
3425 {
3426 if (indx == 0)
3427 MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3428 sgot->contents + got_offset);
3429 else
3430 MIPS_ELF_PUT_WORD (abfd, 0,
3431 sgot->contents + got_offset);
3432
3433 mips_elf_output_dynamic_relocation
3434 (abfd, sreloc, sreloc->reloc_count++, indx,
3435 ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3436 sgot->output_offset + sgot->output_section->vma + got_offset);
3437 }
3438 else
3439 MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3440 sgot->contents + got_offset);
3441 break;
3442
3443 case GOT_TLS_LDM:
3444 /* The initial offset is zero, and the LD offsets will include the
3445 bias by DTP_OFFSET. */
3446 MIPS_ELF_PUT_WORD (abfd, 0,
3447 sgot->contents + got_offset
3448 + MIPS_ELF_GOT_SIZE (abfd));
3449
3450 if (!bfd_link_pic (info))
3451 MIPS_ELF_PUT_WORD (abfd, 1,
3452 sgot->contents + got_offset);
3453 else
3454 mips_elf_output_dynamic_relocation
3455 (abfd, sreloc, sreloc->reloc_count++, indx,
3456 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3457 sgot->output_offset + sgot->output_section->vma + got_offset);
3458 break;
3459
3460 default:
3461 abort ();
3462 }
3463
3464 entry->tls_initialized = TRUE;
3465 }
3466
3467 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3468 for global symbol H. .got.plt comes before the GOT, so the offset
3469 will be negative. */
3470
3471 static bfd_vma
3472 mips_elf_gotplt_index (struct bfd_link_info *info,
3473 struct elf_link_hash_entry *h)
3474 {
3475 bfd_vma got_address, got_value;
3476 struct mips_elf_link_hash_table *htab;
3477
3478 htab = mips_elf_hash_table (info);
3479 BFD_ASSERT (htab != NULL);
3480
3481 BFD_ASSERT (h->plt.plist != NULL);
3482 BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3483
3484 /* Calculate the address of the associated .got.plt entry. */
3485 got_address = (htab->sgotplt->output_section->vma
3486 + htab->sgotplt->output_offset
3487 + (h->plt.plist->gotplt_index
3488 * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3489
3490 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
3491 got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3492 + htab->root.hgot->root.u.def.section->output_offset
3493 + htab->root.hgot->root.u.def.value);
3494
3495 return got_address - got_value;
3496 }
3497
3498 /* Return the GOT offset for address VALUE. If there is not yet a GOT
3499 entry for this value, create one. If R_SYMNDX refers to a TLS symbol,
3500 create a TLS GOT entry instead. Return -1 if no satisfactory GOT
3501 offset can be found. */
3502
3503 static bfd_vma
3504 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3505 bfd_vma value, unsigned long r_symndx,
3506 struct mips_elf_link_hash_entry *h, int r_type)
3507 {
3508 struct mips_elf_link_hash_table *htab;
3509 struct mips_got_entry *entry;
3510
3511 htab = mips_elf_hash_table (info);
3512 BFD_ASSERT (htab != NULL);
3513
3514 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3515 r_symndx, h, r_type);
3516 if (!entry)
3517 return MINUS_ONE;
3518
3519 if (entry->tls_type)
3520 mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3521 return entry->gotidx;
3522 }
3523
3524 /* Return the GOT index of global symbol H in the primary GOT. */
3525
3526 static bfd_vma
3527 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3528 struct elf_link_hash_entry *h)
3529 {
3530 struct mips_elf_link_hash_table *htab;
3531 long global_got_dynindx;
3532 struct mips_got_info *g;
3533 bfd_vma got_index;
3534
3535 htab = mips_elf_hash_table (info);
3536 BFD_ASSERT (htab != NULL);
3537
3538 global_got_dynindx = 0;
3539 if (htab->global_gotsym != NULL)
3540 global_got_dynindx = htab->global_gotsym->dynindx;
3541
3542 /* Once we determine the global GOT entry with the lowest dynamic
3543 symbol table index, we must put all dynamic symbols with greater
3544 indices into the primary GOT. That makes it easy to calculate the
3545 GOT offset. */
3546 BFD_ASSERT (h->dynindx >= global_got_dynindx);
3547 g = mips_elf_bfd_got (obfd, FALSE);
3548 got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3549 * MIPS_ELF_GOT_SIZE (obfd));
3550 BFD_ASSERT (got_index < htab->sgot->size);
3551
3552 return got_index;
3553 }
3554
3555 /* Return the GOT index for the global symbol indicated by H, which is
3556 referenced by a relocation of type R_TYPE in IBFD. */
3557
3558 static bfd_vma
3559 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3560 struct elf_link_hash_entry *h, int r_type)
3561 {
3562 struct mips_elf_link_hash_table *htab;
3563 struct mips_got_info *g;
3564 struct mips_got_entry lookup, *entry;
3565 bfd_vma gotidx;
3566
3567 htab = mips_elf_hash_table (info);
3568 BFD_ASSERT (htab != NULL);
3569
3570 g = mips_elf_bfd_got (ibfd, FALSE);
3571 BFD_ASSERT (g);
3572
3573 lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3574 if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3575 return mips_elf_primary_global_got_index (obfd, info, h);
3576
3577 lookup.abfd = ibfd;
3578 lookup.symndx = -1;
3579 lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3580 entry = htab_find (g->got_entries, &lookup);
3581 BFD_ASSERT (entry);
3582
3583 gotidx = entry->gotidx;
3584 BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3585
3586 if (lookup.tls_type)
3587 {
3588 bfd_vma value = MINUS_ONE;
3589
3590 if ((h->root.type == bfd_link_hash_defined
3591 || h->root.type == bfd_link_hash_defweak)
3592 && h->root.u.def.section->output_section)
3593 value = (h->root.u.def.value
3594 + h->root.u.def.section->output_offset
3595 + h->root.u.def.section->output_section->vma);
3596
3597 mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3598 }
3599 return gotidx;
3600 }
3601
3602 /* Find a GOT page entry that points to within 32KB of VALUE. These
3603 entries are supposed to be placed at small offsets in the GOT, i.e.,
3604 within 32KB of GP. Return the index of the GOT entry, or -1 if no
3605 entry could be created. If OFFSETP is nonnull, use it to return the
3606 offset of the GOT entry from VALUE. */
3607
3608 static bfd_vma
3609 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3610 bfd_vma value, bfd_vma *offsetp)
3611 {
3612 bfd_vma page, got_index;
3613 struct mips_got_entry *entry;
3614
3615 page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3616 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3617 NULL, R_MIPS_GOT_PAGE);
3618
3619 if (!entry)
3620 return MINUS_ONE;
3621
3622 got_index = entry->gotidx;
3623
3624 if (offsetp)
3625 *offsetp = value - entry->d.address;
3626
3627 return got_index;
3628 }
3629
3630 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3631 EXTERNAL is true if the relocation was originally against a global
3632 symbol that binds locally. */
3633
3634 static bfd_vma
3635 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3636 bfd_vma value, bfd_boolean external)
3637 {
3638 struct mips_got_entry *entry;
3639
3640 /* GOT16 relocations against local symbols are followed by a LO16
3641 relocation; those against global symbols are not. Thus if the
3642 symbol was originally local, the GOT16 relocation should load the
3643 equivalent of %hi(VALUE), otherwise it should load VALUE itself. */
3644 if (! external)
3645 value = mips_elf_high (value) << 16;
3646
3647 /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3648 R_MIPS16_GOT16, R_MIPS_CALL16, etc. The format of the entry is the
3649 same in all cases. */
3650 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3651 NULL, R_MIPS_GOT16);
3652 if (entry)
3653 return entry->gotidx;
3654 else
3655 return MINUS_ONE;
3656 }
3657
3658 /* Returns the offset for the entry at the INDEXth position
3659 in the GOT. */
3660
3661 static bfd_vma
3662 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3663 bfd *input_bfd, bfd_vma got_index)
3664 {
3665 struct mips_elf_link_hash_table *htab;
3666 asection *sgot;
3667 bfd_vma gp;
3668
3669 htab = mips_elf_hash_table (info);
3670 BFD_ASSERT (htab != NULL);
3671
3672 sgot = htab->sgot;
3673 gp = _bfd_get_gp_value (output_bfd)
3674 + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3675
3676 return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3677 }
3678
3679 /* Create and return a local GOT entry for VALUE, which was calculated
3680 from a symbol belonging to INPUT_SECTON. Return NULL if it could not
3681 be created. If R_SYMNDX refers to a TLS symbol, create a TLS entry
3682 instead. */
3683
3684 static struct mips_got_entry *
3685 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3686 bfd *ibfd, bfd_vma value,
3687 unsigned long r_symndx,
3688 struct mips_elf_link_hash_entry *h,
3689 int r_type)
3690 {
3691 struct mips_got_entry lookup, *entry;
3692 void **loc;
3693 struct mips_got_info *g;
3694 struct mips_elf_link_hash_table *htab;
3695 bfd_vma gotidx;
3696
3697 htab = mips_elf_hash_table (info);
3698 BFD_ASSERT (htab != NULL);
3699
3700 g = mips_elf_bfd_got (ibfd, FALSE);
3701 if (g == NULL)
3702 {
3703 g = mips_elf_bfd_got (abfd, FALSE);
3704 BFD_ASSERT (g != NULL);
3705 }
3706
3707 /* This function shouldn't be called for symbols that live in the global
3708 area of the GOT. */
3709 BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3710
3711 lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3712 if (lookup.tls_type)
3713 {
3714 lookup.abfd = ibfd;
3715 if (tls_ldm_reloc_p (r_type))
3716 {
3717 lookup.symndx = 0;
3718 lookup.d.addend = 0;
3719 }
3720 else if (h == NULL)
3721 {
3722 lookup.symndx = r_symndx;
3723 lookup.d.addend = 0;
3724 }
3725 else
3726 {
3727 lookup.symndx = -1;
3728 lookup.d.h = h;
3729 }
3730
3731 entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3732 BFD_ASSERT (entry);
3733
3734 gotidx = entry->gotidx;
3735 BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3736
3737 return entry;
3738 }
3739
3740 lookup.abfd = NULL;
3741 lookup.symndx = -1;
3742 lookup.d.address = value;
3743 loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3744 if (!loc)
3745 return NULL;
3746
3747 entry = (struct mips_got_entry *) *loc;
3748 if (entry)
3749 return entry;
3750
3751 if (g->assigned_low_gotno > g->assigned_high_gotno)
3752 {
3753 /* We didn't allocate enough space in the GOT. */
3754 (*_bfd_error_handler)
3755 (_("not enough GOT space for local GOT entries"));
3756 bfd_set_error (bfd_error_bad_value);
3757 return NULL;
3758 }
3759
3760 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3761 if (!entry)
3762 return NULL;
3763
3764 if (got16_reloc_p (r_type)
3765 || call16_reloc_p (r_type)
3766 || got_page_reloc_p (r_type)
3767 || got_disp_reloc_p (r_type))
3768 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3769 else
3770 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3771
3772 *entry = lookup;
3773 *loc = entry;
3774
3775 MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3776
3777 /* These GOT entries need a dynamic relocation on VxWorks. */
3778 if (htab->is_vxworks)
3779 {
3780 Elf_Internal_Rela outrel;
3781 asection *s;
3782 bfd_byte *rloc;
3783 bfd_vma got_address;
3784
3785 s = mips_elf_rel_dyn_section (info, FALSE);
3786 got_address = (htab->sgot->output_section->vma
3787 + htab->sgot->output_offset
3788 + entry->gotidx);
3789
3790 rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3791 outrel.r_offset = got_address;
3792 outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3793 outrel.r_addend = value;
3794 bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3795 }
3796
3797 return entry;
3798 }
3799
3800 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3801 The number might be exact or a worst-case estimate, depending on how
3802 much information is available to elf_backend_omit_section_dynsym at
3803 the current linking stage. */
3804
3805 static bfd_size_type
3806 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3807 {
3808 bfd_size_type count;
3809
3810 count = 0;
3811 if (bfd_link_pic (info)
3812 || elf_hash_table (info)->is_relocatable_executable)
3813 {
3814 asection *p;
3815 const struct elf_backend_data *bed;
3816
3817 bed = get_elf_backend_data (output_bfd);
3818 for (p = output_bfd->sections; p ; p = p->next)
3819 if ((p->flags & SEC_EXCLUDE) == 0
3820 && (p->flags & SEC_ALLOC) != 0
3821 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3822 ++count;
3823 }
3824 return count;
3825 }
3826
3827 /* Sort the dynamic symbol table so that symbols that need GOT entries
3828 appear towards the end. */
3829
3830 static bfd_boolean
3831 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3832 {
3833 struct mips_elf_link_hash_table *htab;
3834 struct mips_elf_hash_sort_data hsd;
3835 struct mips_got_info *g;
3836
3837 if (elf_hash_table (info)->dynsymcount == 0)
3838 return TRUE;
3839
3840 htab = mips_elf_hash_table (info);
3841 BFD_ASSERT (htab != NULL);
3842
3843 g = htab->got_info;
3844 if (g == NULL)
3845 return TRUE;
3846
3847 hsd.low = NULL;
3848 hsd.max_unref_got_dynindx
3849 = hsd.min_got_dynindx
3850 = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3851 hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3852 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3853 elf_hash_table (info)),
3854 mips_elf_sort_hash_table_f,
3855 &hsd);
3856
3857 /* There should have been enough room in the symbol table to
3858 accommodate both the GOT and non-GOT symbols. */
3859 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3860 BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3861 == elf_hash_table (info)->dynsymcount);
3862 BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3863 == g->global_gotno);
3864
3865 /* Now we know which dynamic symbol has the lowest dynamic symbol
3866 table index in the GOT. */
3867 htab->global_gotsym = hsd.low;
3868
3869 return TRUE;
3870 }
3871
3872 /* If H needs a GOT entry, assign it the highest available dynamic
3873 index. Otherwise, assign it the lowest available dynamic
3874 index. */
3875
3876 static bfd_boolean
3877 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3878 {
3879 struct mips_elf_hash_sort_data *hsd = data;
3880
3881 /* Symbols without dynamic symbol table entries aren't interesting
3882 at all. */
3883 if (h->root.dynindx == -1)
3884 return TRUE;
3885
3886 switch (h->global_got_area)
3887 {
3888 case GGA_NONE:
3889 h->root.dynindx = hsd->max_non_got_dynindx++;
3890 break;
3891
3892 case GGA_NORMAL:
3893 h->root.dynindx = --hsd->min_got_dynindx;
3894 hsd->low = (struct elf_link_hash_entry *) h;
3895 break;
3896
3897 case GGA_RELOC_ONLY:
3898 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3899 hsd->low = (struct elf_link_hash_entry *) h;
3900 h->root.dynindx = hsd->max_unref_got_dynindx++;
3901 break;
3902 }
3903
3904 return TRUE;
3905 }
3906
3907 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3908 (which is owned by the caller and shouldn't be added to the
3909 hash table directly). */
3910
3911 static bfd_boolean
3912 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3913 struct mips_got_entry *lookup)
3914 {
3915 struct mips_elf_link_hash_table *htab;
3916 struct mips_got_entry *entry;
3917 struct mips_got_info *g;
3918 void **loc, **bfd_loc;
3919
3920 /* Make sure there's a slot for this entry in the master GOT. */
3921 htab = mips_elf_hash_table (info);
3922 g = htab->got_info;
3923 loc = htab_find_slot (g->got_entries, lookup, INSERT);
3924 if (!loc)
3925 return FALSE;
3926
3927 /* Populate the entry if it isn't already. */
3928 entry = (struct mips_got_entry *) *loc;
3929 if (!entry)
3930 {
3931 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3932 if (!entry)
3933 return FALSE;
3934
3935 lookup->tls_initialized = FALSE;
3936 lookup->gotidx = -1;
3937 *entry = *lookup;
3938 *loc = entry;
3939 }
3940
3941 /* Reuse the same GOT entry for the BFD's GOT. */
3942 g = mips_elf_bfd_got (abfd, TRUE);
3943 if (!g)
3944 return FALSE;
3945
3946 bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3947 if (!bfd_loc)
3948 return FALSE;
3949
3950 if (!*bfd_loc)
3951 *bfd_loc = entry;
3952 return TRUE;
3953 }
3954
3955 /* ABFD has a GOT relocation of type R_TYPE against H. Reserve a GOT
3956 entry for it. FOR_CALL is true if the caller is only interested in
3957 using the GOT entry for calls. */
3958
3959 static bfd_boolean
3960 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3961 bfd *abfd, struct bfd_link_info *info,
3962 bfd_boolean for_call, int r_type)
3963 {
3964 struct mips_elf_link_hash_table *htab;
3965 struct mips_elf_link_hash_entry *hmips;
3966 struct mips_got_entry entry;
3967 unsigned char tls_type;
3968
3969 htab = mips_elf_hash_table (info);
3970 BFD_ASSERT (htab != NULL);
3971
3972 hmips = (struct mips_elf_link_hash_entry *) h;
3973 if (!for_call)
3974 hmips->got_only_for_calls = FALSE;
3975
3976 /* A global symbol in the GOT must also be in the dynamic symbol
3977 table. */
3978 if (h->dynindx == -1)
3979 {
3980 switch (ELF_ST_VISIBILITY (h->other))
3981 {
3982 case STV_INTERNAL:
3983 case STV_HIDDEN:
3984 _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3985 break;
3986 }
3987 if (!bfd_elf_link_record_dynamic_symbol (info, h))
3988 return FALSE;
3989 }
3990
3991 tls_type = mips_elf_reloc_tls_type (r_type);
3992 if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3993 hmips->global_got_area = GGA_NORMAL;
3994
3995 entry.abfd = abfd;
3996 entry.symndx = -1;
3997 entry.d.h = (struct mips_elf_link_hash_entry *) h;
3998 entry.tls_type = tls_type;
3999 return mips_elf_record_got_entry (info, abfd, &entry);
4000 }
4001
4002 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
4003 where SYMNDX is a local symbol. Reserve a GOT entry for it. */
4004
4005 static bfd_boolean
4006 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
4007 struct bfd_link_info *info, int r_type)
4008 {
4009 struct mips_elf_link_hash_table *htab;
4010 struct mips_got_info *g;
4011 struct mips_got_entry entry;
4012
4013 htab = mips_elf_hash_table (info);
4014 BFD_ASSERT (htab != NULL);
4015
4016 g = htab->got_info;
4017 BFD_ASSERT (g != NULL);
4018
4019 entry.abfd = abfd;
4020 entry.symndx = symndx;
4021 entry.d.addend = addend;
4022 entry.tls_type = mips_elf_reloc_tls_type (r_type);
4023 return mips_elf_record_got_entry (info, abfd, &entry);
4024 }
4025
4026 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
4027 H is the symbol's hash table entry, or null if SYMNDX is local
4028 to ABFD. */
4029
4030 static bfd_boolean
4031 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4032 long symndx, struct elf_link_hash_entry *h,
4033 bfd_signed_vma addend)
4034 {
4035 struct mips_elf_link_hash_table *htab;
4036 struct mips_got_info *g1, *g2;
4037 struct mips_got_page_ref lookup, *entry;
4038 void **loc, **bfd_loc;
4039
4040 htab = mips_elf_hash_table (info);
4041 BFD_ASSERT (htab != NULL);
4042
4043 g1 = htab->got_info;
4044 BFD_ASSERT (g1 != NULL);
4045
4046 if (h)
4047 {
4048 lookup.symndx = -1;
4049 lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4050 }
4051 else
4052 {
4053 lookup.symndx = symndx;
4054 lookup.u.abfd = abfd;
4055 }
4056 lookup.addend = addend;
4057 loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4058 if (loc == NULL)
4059 return FALSE;
4060
4061 entry = (struct mips_got_page_ref *) *loc;
4062 if (!entry)
4063 {
4064 entry = bfd_alloc (abfd, sizeof (*entry));
4065 if (!entry)
4066 return FALSE;
4067
4068 *entry = lookup;
4069 *loc = entry;
4070 }
4071
4072 /* Add the same entry to the BFD's GOT. */
4073 g2 = mips_elf_bfd_got (abfd, TRUE);
4074 if (!g2)
4075 return FALSE;
4076
4077 bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4078 if (!bfd_loc)
4079 return FALSE;
4080
4081 if (!*bfd_loc)
4082 *bfd_loc = entry;
4083
4084 return TRUE;
4085 }
4086
4087 /* Add room for N relocations to the .rel(a).dyn section in ABFD. */
4088
4089 static void
4090 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4091 unsigned int n)
4092 {
4093 asection *s;
4094 struct mips_elf_link_hash_table *htab;
4095
4096 htab = mips_elf_hash_table (info);
4097 BFD_ASSERT (htab != NULL);
4098
4099 s = mips_elf_rel_dyn_section (info, FALSE);
4100 BFD_ASSERT (s != NULL);
4101
4102 if (htab->is_vxworks)
4103 s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4104 else
4105 {
4106 if (s->size == 0)
4107 {
4108 /* Make room for a null element. */
4109 s->size += MIPS_ELF_REL_SIZE (abfd);
4110 ++s->reloc_count;
4111 }
4112 s->size += n * MIPS_ELF_REL_SIZE (abfd);
4113 }
4114 }
4115 \f
4116 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4117 mips_elf_traverse_got_arg structure. Count the number of GOT
4118 entries and TLS relocs. Set DATA->value to true if we need
4119 to resolve indirect or warning symbols and then recreate the GOT. */
4120
4121 static int
4122 mips_elf_check_recreate_got (void **entryp, void *data)
4123 {
4124 struct mips_got_entry *entry;
4125 struct mips_elf_traverse_got_arg *arg;
4126
4127 entry = (struct mips_got_entry *) *entryp;
4128 arg = (struct mips_elf_traverse_got_arg *) data;
4129 if (entry->abfd != NULL && entry->symndx == -1)
4130 {
4131 struct mips_elf_link_hash_entry *h;
4132
4133 h = entry->d.h;
4134 if (h->root.root.type == bfd_link_hash_indirect
4135 || h->root.root.type == bfd_link_hash_warning)
4136 {
4137 arg->value = TRUE;
4138 return 0;
4139 }
4140 }
4141 mips_elf_count_got_entry (arg->info, arg->g, entry);
4142 return 1;
4143 }
4144
4145 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4146 mips_elf_traverse_got_arg structure. Add all entries to DATA->g,
4147 converting entries for indirect and warning symbols into entries
4148 for the target symbol. Set DATA->g to null on error. */
4149
4150 static int
4151 mips_elf_recreate_got (void **entryp, void *data)
4152 {
4153 struct mips_got_entry new_entry, *entry;
4154 struct mips_elf_traverse_got_arg *arg;
4155 void **slot;
4156
4157 entry = (struct mips_got_entry *) *entryp;
4158 arg = (struct mips_elf_traverse_got_arg *) data;
4159 if (entry->abfd != NULL
4160 && entry->symndx == -1
4161 && (entry->d.h->root.root.type == bfd_link_hash_indirect
4162 || entry->d.h->root.root.type == bfd_link_hash_warning))
4163 {
4164 struct mips_elf_link_hash_entry *h;
4165
4166 new_entry = *entry;
4167 entry = &new_entry;
4168 h = entry->d.h;
4169 do
4170 {
4171 BFD_ASSERT (h->global_got_area == GGA_NONE);
4172 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4173 }
4174 while (h->root.root.type == bfd_link_hash_indirect
4175 || h->root.root.type == bfd_link_hash_warning);
4176 entry->d.h = h;
4177 }
4178 slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4179 if (slot == NULL)
4180 {
4181 arg->g = NULL;
4182 return 0;
4183 }
4184 if (*slot == NULL)
4185 {
4186 if (entry == &new_entry)
4187 {
4188 entry = bfd_alloc (entry->abfd, sizeof (*entry));
4189 if (!entry)
4190 {
4191 arg->g = NULL;
4192 return 0;
4193 }
4194 *entry = new_entry;
4195 }
4196 *slot = entry;
4197 mips_elf_count_got_entry (arg->info, arg->g, entry);
4198 }
4199 return 1;
4200 }
4201
4202 /* Return the maximum number of GOT page entries required for RANGE. */
4203
4204 static bfd_vma
4205 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4206 {
4207 return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4208 }
4209
4210 /* Record that G requires a page entry that can reach SEC + ADDEND. */
4211
4212 static bfd_boolean
4213 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4214 asection *sec, bfd_signed_vma addend)
4215 {
4216 struct mips_got_info *g = arg->g;
4217 struct mips_got_page_entry lookup, *entry;
4218 struct mips_got_page_range **range_ptr, *range;
4219 bfd_vma old_pages, new_pages;
4220 void **loc;
4221
4222 /* Find the mips_got_page_entry hash table entry for this section. */
4223 lookup.sec = sec;
4224 loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4225 if (loc == NULL)
4226 return FALSE;
4227
4228 /* Create a mips_got_page_entry if this is the first time we've
4229 seen the section. */
4230 entry = (struct mips_got_page_entry *) *loc;
4231 if (!entry)
4232 {
4233 entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4234 if (!entry)
4235 return FALSE;
4236
4237 entry->sec = sec;
4238 *loc = entry;
4239 }
4240
4241 /* Skip over ranges whose maximum extent cannot share a page entry
4242 with ADDEND. */
4243 range_ptr = &entry->ranges;
4244 while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4245 range_ptr = &(*range_ptr)->next;
4246
4247 /* If we scanned to the end of the list, or found a range whose
4248 minimum extent cannot share a page entry with ADDEND, create
4249 a new singleton range. */
4250 range = *range_ptr;
4251 if (!range || addend < range->min_addend - 0xffff)
4252 {
4253 range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4254 if (!range)
4255 return FALSE;
4256
4257 range->next = *range_ptr;
4258 range->min_addend = addend;
4259 range->max_addend = addend;
4260
4261 *range_ptr = range;
4262 entry->num_pages++;
4263 g->page_gotno++;
4264 return TRUE;
4265 }
4266
4267 /* Remember how many pages the old range contributed. */
4268 old_pages = mips_elf_pages_for_range (range);
4269
4270 /* Update the ranges. */
4271 if (addend < range->min_addend)
4272 range->min_addend = addend;
4273 else if (addend > range->max_addend)
4274 {
4275 if (range->next && addend >= range->next->min_addend - 0xffff)
4276 {
4277 old_pages += mips_elf_pages_for_range (range->next);
4278 range->max_addend = range->next->max_addend;
4279 range->next = range->next->next;
4280 }
4281 else
4282 range->max_addend = addend;
4283 }
4284
4285 /* Record any change in the total estimate. */
4286 new_pages = mips_elf_pages_for_range (range);
4287 if (old_pages != new_pages)
4288 {
4289 entry->num_pages += new_pages - old_pages;
4290 g->page_gotno += new_pages - old_pages;
4291 }
4292
4293 return TRUE;
4294 }
4295
4296 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4297 and for which DATA points to a mips_elf_traverse_got_arg. Work out
4298 whether the page reference described by *REFP needs a GOT page entry,
4299 and record that entry in DATA->g if so. Set DATA->g to null on failure. */
4300
4301 static bfd_boolean
4302 mips_elf_resolve_got_page_ref (void **refp, void *data)
4303 {
4304 struct mips_got_page_ref *ref;
4305 struct mips_elf_traverse_got_arg *arg;
4306 struct mips_elf_link_hash_table *htab;
4307 asection *sec;
4308 bfd_vma addend;
4309
4310 ref = (struct mips_got_page_ref *) *refp;
4311 arg = (struct mips_elf_traverse_got_arg *) data;
4312 htab = mips_elf_hash_table (arg->info);
4313
4314 if (ref->symndx < 0)
4315 {
4316 struct mips_elf_link_hash_entry *h;
4317
4318 /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries. */
4319 h = ref->u.h;
4320 if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4321 return 1;
4322
4323 /* Ignore undefined symbols; we'll issue an error later if
4324 appropriate. */
4325 if (!((h->root.root.type == bfd_link_hash_defined
4326 || h->root.root.type == bfd_link_hash_defweak)
4327 && h->root.root.u.def.section))
4328 return 1;
4329
4330 sec = h->root.root.u.def.section;
4331 addend = h->root.root.u.def.value + ref->addend;
4332 }
4333 else
4334 {
4335 Elf_Internal_Sym *isym;
4336
4337 /* Read in the symbol. */
4338 isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4339 ref->symndx);
4340 if (isym == NULL)
4341 {
4342 arg->g = NULL;
4343 return 0;
4344 }
4345
4346 /* Get the associated input section. */
4347 sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4348 if (sec == NULL)
4349 {
4350 arg->g = NULL;
4351 return 0;
4352 }
4353
4354 /* If this is a mergable section, work out the section and offset
4355 of the merged data. For section symbols, the addend specifies
4356 of the offset _of_ the first byte in the data, otherwise it
4357 specifies the offset _from_ the first byte. */
4358 if (sec->flags & SEC_MERGE)
4359 {
4360 void *secinfo;
4361
4362 secinfo = elf_section_data (sec)->sec_info;
4363 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4364 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4365 isym->st_value + ref->addend);
4366 else
4367 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4368 isym->st_value) + ref->addend;
4369 }
4370 else
4371 addend = isym->st_value + ref->addend;
4372 }
4373 if (!mips_elf_record_got_page_entry (arg, sec, addend))
4374 {
4375 arg->g = NULL;
4376 return 0;
4377 }
4378 return 1;
4379 }
4380
4381 /* If any entries in G->got_entries are for indirect or warning symbols,
4382 replace them with entries for the target symbol. Convert g->got_page_refs
4383 into got_page_entry structures and estimate the number of page entries
4384 that they require. */
4385
4386 static bfd_boolean
4387 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4388 struct mips_got_info *g)
4389 {
4390 struct mips_elf_traverse_got_arg tga;
4391 struct mips_got_info oldg;
4392
4393 oldg = *g;
4394
4395 tga.info = info;
4396 tga.g = g;
4397 tga.value = FALSE;
4398 htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4399 if (tga.value)
4400 {
4401 *g = oldg;
4402 g->got_entries = htab_create (htab_size (oldg.got_entries),
4403 mips_elf_got_entry_hash,
4404 mips_elf_got_entry_eq, NULL);
4405 if (!g->got_entries)
4406 return FALSE;
4407
4408 htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4409 if (!tga.g)
4410 return FALSE;
4411
4412 htab_delete (oldg.got_entries);
4413 }
4414
4415 g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4416 mips_got_page_entry_eq, NULL);
4417 if (g->got_page_entries == NULL)
4418 return FALSE;
4419
4420 tga.info = info;
4421 tga.g = g;
4422 htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4423
4424 return TRUE;
4425 }
4426
4427 /* Return true if a GOT entry for H should live in the local rather than
4428 global GOT area. */
4429
4430 static bfd_boolean
4431 mips_use_local_got_p (struct bfd_link_info *info,
4432 struct mips_elf_link_hash_entry *h)
4433 {
4434 /* Symbols that aren't in the dynamic symbol table must live in the
4435 local GOT. This includes symbols that are completely undefined
4436 and which therefore don't bind locally. We'll report undefined
4437 symbols later if appropriate. */
4438 if (h->root.dynindx == -1)
4439 return TRUE;
4440
4441 /* Symbols that bind locally can (and in the case of forced-local
4442 symbols, must) live in the local GOT. */
4443 if (h->got_only_for_calls
4444 ? SYMBOL_CALLS_LOCAL (info, &h->root)
4445 : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4446 return TRUE;
4447
4448 /* If this is an executable that must provide a definition of the symbol,
4449 either though PLTs or copy relocations, then that address should go in
4450 the local rather than global GOT. */
4451 if (bfd_link_executable (info) && h->has_static_relocs)
4452 return TRUE;
4453
4454 return FALSE;
4455 }
4456
4457 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4458 link_info structure. Decide whether the hash entry needs an entry in
4459 the global part of the primary GOT, setting global_got_area accordingly.
4460 Count the number of global symbols that are in the primary GOT only
4461 because they have relocations against them (reloc_only_gotno). */
4462
4463 static int
4464 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4465 {
4466 struct bfd_link_info *info;
4467 struct mips_elf_link_hash_table *htab;
4468 struct mips_got_info *g;
4469
4470 info = (struct bfd_link_info *) data;
4471 htab = mips_elf_hash_table (info);
4472 g = htab->got_info;
4473 if (h->global_got_area != GGA_NONE)
4474 {
4475 /* Make a final decision about whether the symbol belongs in the
4476 local or global GOT. */
4477 if (mips_use_local_got_p (info, h))
4478 /* The symbol belongs in the local GOT. We no longer need this
4479 entry if it was only used for relocations; those relocations
4480 will be against the null or section symbol instead of H. */
4481 h->global_got_area = GGA_NONE;
4482 else if (htab->is_vxworks
4483 && h->got_only_for_calls
4484 && h->root.plt.plist->mips_offset != MINUS_ONE)
4485 /* On VxWorks, calls can refer directly to the .got.plt entry;
4486 they don't need entries in the regular GOT. .got.plt entries
4487 will be allocated by _bfd_mips_elf_adjust_dynamic_symbol. */
4488 h->global_got_area = GGA_NONE;
4489 else if (h->global_got_area == GGA_RELOC_ONLY)
4490 {
4491 g->reloc_only_gotno++;
4492 g->global_gotno++;
4493 }
4494 }
4495 return 1;
4496 }
4497 \f
4498 /* A htab_traverse callback for GOT entries. Add each one to the GOT
4499 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */
4500
4501 static int
4502 mips_elf_add_got_entry (void **entryp, void *data)
4503 {
4504 struct mips_got_entry *entry;
4505 struct mips_elf_traverse_got_arg *arg;
4506 void **slot;
4507
4508 entry = (struct mips_got_entry *) *entryp;
4509 arg = (struct mips_elf_traverse_got_arg *) data;
4510 slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4511 if (!slot)
4512 {
4513 arg->g = NULL;
4514 return 0;
4515 }
4516 if (!*slot)
4517 {
4518 *slot = entry;
4519 mips_elf_count_got_entry (arg->info, arg->g, entry);
4520 }
4521 return 1;
4522 }
4523
4524 /* A htab_traverse callback for GOT page entries. Add each one to the GOT
4525 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */
4526
4527 static int
4528 mips_elf_add_got_page_entry (void **entryp, void *data)
4529 {
4530 struct mips_got_page_entry *entry;
4531 struct mips_elf_traverse_got_arg *arg;
4532 void **slot;
4533
4534 entry = (struct mips_got_page_entry *) *entryp;
4535 arg = (struct mips_elf_traverse_got_arg *) data;
4536 slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4537 if (!slot)
4538 {
4539 arg->g = NULL;
4540 return 0;
4541 }
4542 if (!*slot)
4543 {
4544 *slot = entry;
4545 arg->g->page_gotno += entry->num_pages;
4546 }
4547 return 1;
4548 }
4549
4550 /* Consider merging FROM, which is ABFD's GOT, into TO. Return -1 if
4551 this would lead to overflow, 1 if they were merged successfully,
4552 and 0 if a merge failed due to lack of memory. (These values are chosen
4553 so that nonnegative return values can be returned by a htab_traverse
4554 callback.) */
4555
4556 static int
4557 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4558 struct mips_got_info *to,
4559 struct mips_elf_got_per_bfd_arg *arg)
4560 {
4561 struct mips_elf_traverse_got_arg tga;
4562 unsigned int estimate;
4563
4564 /* Work out how many page entries we would need for the combined GOT. */
4565 estimate = arg->max_pages;
4566 if (estimate >= from->page_gotno + to->page_gotno)
4567 estimate = from->page_gotno + to->page_gotno;
4568
4569 /* And conservatively estimate how many local and TLS entries
4570 would be needed. */
4571 estimate += from->local_gotno + to->local_gotno;
4572 estimate += from->tls_gotno + to->tls_gotno;
4573
4574 /* If we're merging with the primary got, any TLS relocations will
4575 come after the full set of global entries. Otherwise estimate those
4576 conservatively as well. */
4577 if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4578 estimate += arg->global_count;
4579 else
4580 estimate += from->global_gotno + to->global_gotno;
4581
4582 /* Bail out if the combined GOT might be too big. */
4583 if (estimate > arg->max_count)
4584 return -1;
4585
4586 /* Transfer the bfd's got information from FROM to TO. */
4587 tga.info = arg->info;
4588 tga.g = to;
4589 htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4590 if (!tga.g)
4591 return 0;
4592
4593 htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4594 if (!tga.g)
4595 return 0;
4596
4597 mips_elf_replace_bfd_got (abfd, to);
4598 return 1;
4599 }
4600
4601 /* Attempt to merge GOT G, which belongs to ABFD. Try to use as much
4602 as possible of the primary got, since it doesn't require explicit
4603 dynamic relocations, but don't use bfds that would reference global
4604 symbols out of the addressable range. Failing the primary got,
4605 attempt to merge with the current got, or finish the current got
4606 and then make make the new got current. */
4607
4608 static bfd_boolean
4609 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4610 struct mips_elf_got_per_bfd_arg *arg)
4611 {
4612 unsigned int estimate;
4613 int result;
4614
4615 if (!mips_elf_resolve_final_got_entries (arg->info, g))
4616 return FALSE;
4617
4618 /* Work out the number of page, local and TLS entries. */
4619 estimate = arg->max_pages;
4620 if (estimate > g->page_gotno)
4621 estimate = g->page_gotno;
4622 estimate += g->local_gotno + g->tls_gotno;
4623
4624 /* We place TLS GOT entries after both locals and globals. The globals
4625 for the primary GOT may overflow the normal GOT size limit, so be
4626 sure not to merge a GOT which requires TLS with the primary GOT in that
4627 case. This doesn't affect non-primary GOTs. */
4628 estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4629
4630 if (estimate <= arg->max_count)
4631 {
4632 /* If we don't have a primary GOT, use it as
4633 a starting point for the primary GOT. */
4634 if (!arg->primary)
4635 {
4636 arg->primary = g;
4637 return TRUE;
4638 }
4639
4640 /* Try merging with the primary GOT. */
4641 result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4642 if (result >= 0)
4643 return result;
4644 }
4645
4646 /* If we can merge with the last-created got, do it. */
4647 if (arg->current)
4648 {
4649 result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4650 if (result >= 0)
4651 return result;
4652 }
4653
4654 /* Well, we couldn't merge, so create a new GOT. Don't check if it
4655 fits; if it turns out that it doesn't, we'll get relocation
4656 overflows anyway. */
4657 g->next = arg->current;
4658 arg->current = g;
4659
4660 return TRUE;
4661 }
4662
4663 /* ENTRYP is a hash table entry for a mips_got_entry. Set its gotidx
4664 to GOTIDX, duplicating the entry if it has already been assigned
4665 an index in a different GOT. */
4666
4667 static bfd_boolean
4668 mips_elf_set_gotidx (void **entryp, long gotidx)
4669 {
4670 struct mips_got_entry *entry;
4671
4672 entry = (struct mips_got_entry *) *entryp;
4673 if (entry->gotidx > 0)
4674 {
4675 struct mips_got_entry *new_entry;
4676
4677 new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4678 if (!new_entry)
4679 return FALSE;
4680
4681 *new_entry = *entry;
4682 *entryp = new_entry;
4683 entry = new_entry;
4684 }
4685 entry->gotidx = gotidx;
4686 return TRUE;
4687 }
4688
4689 /* Set the TLS GOT index for the GOT entry in ENTRYP. DATA points to a
4690 mips_elf_traverse_got_arg in which DATA->value is the size of one
4691 GOT entry. Set DATA->g to null on failure. */
4692
4693 static int
4694 mips_elf_initialize_tls_index (void **entryp, void *data)
4695 {
4696 struct mips_got_entry *entry;
4697 struct mips_elf_traverse_got_arg *arg;
4698
4699 /* We're only interested in TLS symbols. */
4700 entry = (struct mips_got_entry *) *entryp;
4701 if (entry->tls_type == GOT_TLS_NONE)
4702 return 1;
4703
4704 arg = (struct mips_elf_traverse_got_arg *) data;
4705 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4706 {
4707 arg->g = NULL;
4708 return 0;
4709 }
4710
4711 /* Account for the entries we've just allocated. */
4712 arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4713 return 1;
4714 }
4715
4716 /* A htab_traverse callback for GOT entries, where DATA points to a
4717 mips_elf_traverse_got_arg. Set the global_got_area of each global
4718 symbol to DATA->value. */
4719
4720 static int
4721 mips_elf_set_global_got_area (void **entryp, void *data)
4722 {
4723 struct mips_got_entry *entry;
4724 struct mips_elf_traverse_got_arg *arg;
4725
4726 entry = (struct mips_got_entry *) *entryp;
4727 arg = (struct mips_elf_traverse_got_arg *) data;
4728 if (entry->abfd != NULL
4729 && entry->symndx == -1
4730 && entry->d.h->global_got_area != GGA_NONE)
4731 entry->d.h->global_got_area = arg->value;
4732 return 1;
4733 }
4734
4735 /* A htab_traverse callback for secondary GOT entries, where DATA points
4736 to a mips_elf_traverse_got_arg. Assign GOT indices to global entries
4737 and record the number of relocations they require. DATA->value is
4738 the size of one GOT entry. Set DATA->g to null on failure. */
4739
4740 static int
4741 mips_elf_set_global_gotidx (void **entryp, void *data)
4742 {
4743 struct mips_got_entry *entry;
4744 struct mips_elf_traverse_got_arg *arg;
4745
4746 entry = (struct mips_got_entry *) *entryp;
4747 arg = (struct mips_elf_traverse_got_arg *) data;
4748 if (entry->abfd != NULL
4749 && entry->symndx == -1
4750 && entry->d.h->global_got_area != GGA_NONE)
4751 {
4752 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4753 {
4754 arg->g = NULL;
4755 return 0;
4756 }
4757 arg->g->assigned_low_gotno += 1;
4758
4759 if (bfd_link_pic (arg->info)
4760 || (elf_hash_table (arg->info)->dynamic_sections_created
4761 && entry->d.h->root.def_dynamic
4762 && !entry->d.h->root.def_regular))
4763 arg->g->relocs += 1;
4764 }
4765
4766 return 1;
4767 }
4768
4769 /* A htab_traverse callback for GOT entries for which DATA is the
4770 bfd_link_info. Forbid any global symbols from having traditional
4771 lazy-binding stubs. */
4772
4773 static int
4774 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4775 {
4776 struct bfd_link_info *info;
4777 struct mips_elf_link_hash_table *htab;
4778 struct mips_got_entry *entry;
4779
4780 entry = (struct mips_got_entry *) *entryp;
4781 info = (struct bfd_link_info *) data;
4782 htab = mips_elf_hash_table (info);
4783 BFD_ASSERT (htab != NULL);
4784
4785 if (entry->abfd != NULL
4786 && entry->symndx == -1
4787 && entry->d.h->needs_lazy_stub)
4788 {
4789 entry->d.h->needs_lazy_stub = FALSE;
4790 htab->lazy_stub_count--;
4791 }
4792
4793 return 1;
4794 }
4795
4796 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4797 the primary GOT. */
4798 static bfd_vma
4799 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4800 {
4801 if (!g->next)
4802 return 0;
4803
4804 g = mips_elf_bfd_got (ibfd, FALSE);
4805 if (! g)
4806 return 0;
4807
4808 BFD_ASSERT (g->next);
4809
4810 g = g->next;
4811
4812 return (g->local_gotno + g->global_gotno + g->tls_gotno)
4813 * MIPS_ELF_GOT_SIZE (abfd);
4814 }
4815
4816 /* Turn a single GOT that is too big for 16-bit addressing into
4817 a sequence of GOTs, each one 16-bit addressable. */
4818
4819 static bfd_boolean
4820 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4821 asection *got, bfd_size_type pages)
4822 {
4823 struct mips_elf_link_hash_table *htab;
4824 struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4825 struct mips_elf_traverse_got_arg tga;
4826 struct mips_got_info *g, *gg;
4827 unsigned int assign, needed_relocs;
4828 bfd *dynobj, *ibfd;
4829
4830 dynobj = elf_hash_table (info)->dynobj;
4831 htab = mips_elf_hash_table (info);
4832 BFD_ASSERT (htab != NULL);
4833
4834 g = htab->got_info;
4835
4836 got_per_bfd_arg.obfd = abfd;
4837 got_per_bfd_arg.info = info;
4838 got_per_bfd_arg.current = NULL;
4839 got_per_bfd_arg.primary = NULL;
4840 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4841 / MIPS_ELF_GOT_SIZE (abfd))
4842 - htab->reserved_gotno);
4843 got_per_bfd_arg.max_pages = pages;
4844 /* The number of globals that will be included in the primary GOT.
4845 See the calls to mips_elf_set_global_got_area below for more
4846 information. */
4847 got_per_bfd_arg.global_count = g->global_gotno;
4848
4849 /* Try to merge the GOTs of input bfds together, as long as they
4850 don't seem to exceed the maximum GOT size, choosing one of them
4851 to be the primary GOT. */
4852 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4853 {
4854 gg = mips_elf_bfd_got (ibfd, FALSE);
4855 if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4856 return FALSE;
4857 }
4858
4859 /* If we do not find any suitable primary GOT, create an empty one. */
4860 if (got_per_bfd_arg.primary == NULL)
4861 g->next = mips_elf_create_got_info (abfd);
4862 else
4863 g->next = got_per_bfd_arg.primary;
4864 g->next->next = got_per_bfd_arg.current;
4865
4866 /* GG is now the master GOT, and G is the primary GOT. */
4867 gg = g;
4868 g = g->next;
4869
4870 /* Map the output bfd to the primary got. That's what we're going
4871 to use for bfds that use GOT16 or GOT_PAGE relocations that we
4872 didn't mark in check_relocs, and we want a quick way to find it.
4873 We can't just use gg->next because we're going to reverse the
4874 list. */
4875 mips_elf_replace_bfd_got (abfd, g);
4876
4877 /* Every symbol that is referenced in a dynamic relocation must be
4878 present in the primary GOT, so arrange for them to appear after
4879 those that are actually referenced. */
4880 gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4881 g->global_gotno = gg->global_gotno;
4882
4883 tga.info = info;
4884 tga.value = GGA_RELOC_ONLY;
4885 htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4886 tga.value = GGA_NORMAL;
4887 htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4888
4889 /* Now go through the GOTs assigning them offset ranges.
4890 [assigned_low_gotno, local_gotno[ will be set to the range of local
4891 entries in each GOT. We can then compute the end of a GOT by
4892 adding local_gotno to global_gotno. We reverse the list and make
4893 it circular since then we'll be able to quickly compute the
4894 beginning of a GOT, by computing the end of its predecessor. To
4895 avoid special cases for the primary GOT, while still preserving
4896 assertions that are valid for both single- and multi-got links,
4897 we arrange for the main got struct to have the right number of
4898 global entries, but set its local_gotno such that the initial
4899 offset of the primary GOT is zero. Remember that the primary GOT
4900 will become the last item in the circular linked list, so it
4901 points back to the master GOT. */
4902 gg->local_gotno = -g->global_gotno;
4903 gg->global_gotno = g->global_gotno;
4904 gg->tls_gotno = 0;
4905 assign = 0;
4906 gg->next = gg;
4907
4908 do
4909 {
4910 struct mips_got_info *gn;
4911
4912 assign += htab->reserved_gotno;
4913 g->assigned_low_gotno = assign;
4914 g->local_gotno += assign;
4915 g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4916 g->assigned_high_gotno = g->local_gotno - 1;
4917 assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4918
4919 /* Take g out of the direct list, and push it onto the reversed
4920 list that gg points to. g->next is guaranteed to be nonnull after
4921 this operation, as required by mips_elf_initialize_tls_index. */
4922 gn = g->next;
4923 g->next = gg->next;
4924 gg->next = g;
4925
4926 /* Set up any TLS entries. We always place the TLS entries after
4927 all non-TLS entries. */
4928 g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4929 tga.g = g;
4930 tga.value = MIPS_ELF_GOT_SIZE (abfd);
4931 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4932 if (!tga.g)
4933 return FALSE;
4934 BFD_ASSERT (g->tls_assigned_gotno == assign);
4935
4936 /* Move onto the next GOT. It will be a secondary GOT if nonull. */
4937 g = gn;
4938
4939 /* Forbid global symbols in every non-primary GOT from having
4940 lazy-binding stubs. */
4941 if (g)
4942 htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4943 }
4944 while (g);
4945
4946 got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4947
4948 needed_relocs = 0;
4949 for (g = gg->next; g && g->next != gg; g = g->next)
4950 {
4951 unsigned int save_assign;
4952
4953 /* Assign offsets to global GOT entries and count how many
4954 relocations they need. */
4955 save_assign = g->assigned_low_gotno;
4956 g->assigned_low_gotno = g->local_gotno;
4957 tga.info = info;
4958 tga.value = MIPS_ELF_GOT_SIZE (abfd);
4959 tga.g = g;
4960 htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4961 if (!tga.g)
4962 return FALSE;
4963 BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4964 g->assigned_low_gotno = save_assign;
4965
4966 if (bfd_link_pic (info))
4967 {
4968 g->relocs += g->local_gotno - g->assigned_low_gotno;
4969 BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
4970 + g->next->global_gotno
4971 + g->next->tls_gotno
4972 + htab->reserved_gotno);
4973 }
4974 needed_relocs += g->relocs;
4975 }
4976 needed_relocs += g->relocs;
4977
4978 if (needed_relocs)
4979 mips_elf_allocate_dynamic_relocations (dynobj, info,
4980 needed_relocs);
4981
4982 return TRUE;
4983 }
4984
4985 \f
4986 /* Returns the first relocation of type r_type found, beginning with
4987 RELOCATION. RELEND is one-past-the-end of the relocation table. */
4988
4989 static const Elf_Internal_Rela *
4990 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4991 const Elf_Internal_Rela *relocation,
4992 const Elf_Internal_Rela *relend)
4993 {
4994 unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4995
4996 while (relocation < relend)
4997 {
4998 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4999 && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
5000 return relocation;
5001
5002 ++relocation;
5003 }
5004
5005 /* We didn't find it. */
5006 return NULL;
5007 }
5008
5009 /* Return whether an input relocation is against a local symbol. */
5010
5011 static bfd_boolean
5012 mips_elf_local_relocation_p (bfd *input_bfd,
5013 const Elf_Internal_Rela *relocation,
5014 asection **local_sections)
5015 {
5016 unsigned long r_symndx;
5017 Elf_Internal_Shdr *symtab_hdr;
5018 size_t extsymoff;
5019
5020 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5021 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5022 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
5023
5024 if (r_symndx < extsymoff)
5025 return TRUE;
5026 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
5027 return TRUE;
5028
5029 return FALSE;
5030 }
5031 \f
5032 /* Sign-extend VALUE, which has the indicated number of BITS. */
5033
5034 bfd_vma
5035 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5036 {
5037 if (value & ((bfd_vma) 1 << (bits - 1)))
5038 /* VALUE is negative. */
5039 value |= ((bfd_vma) - 1) << bits;
5040
5041 return value;
5042 }
5043
5044 /* Return non-zero if the indicated VALUE has overflowed the maximum
5045 range expressible by a signed number with the indicated number of
5046 BITS. */
5047
5048 static bfd_boolean
5049 mips_elf_overflow_p (bfd_vma value, int bits)
5050 {
5051 bfd_signed_vma svalue = (bfd_signed_vma) value;
5052
5053 if (svalue > (1 << (bits - 1)) - 1)
5054 /* The value is too big. */
5055 return TRUE;
5056 else if (svalue < -(1 << (bits - 1)))
5057 /* The value is too small. */
5058 return TRUE;
5059
5060 /* All is well. */
5061 return FALSE;
5062 }
5063
5064 /* Calculate the %high function. */
5065
5066 static bfd_vma
5067 mips_elf_high (bfd_vma value)
5068 {
5069 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5070 }
5071
5072 /* Calculate the %higher function. */
5073
5074 static bfd_vma
5075 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5076 {
5077 #ifdef BFD64
5078 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5079 #else
5080 abort ();
5081 return MINUS_ONE;
5082 #endif
5083 }
5084
5085 /* Calculate the %highest function. */
5086
5087 static bfd_vma
5088 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5089 {
5090 #ifdef BFD64
5091 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5092 #else
5093 abort ();
5094 return MINUS_ONE;
5095 #endif
5096 }
5097 \f
5098 /* Create the .compact_rel section. */
5099
5100 static bfd_boolean
5101 mips_elf_create_compact_rel_section
5102 (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5103 {
5104 flagword flags;
5105 register asection *s;
5106
5107 if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5108 {
5109 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5110 | SEC_READONLY);
5111
5112 s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5113 if (s == NULL
5114 || ! bfd_set_section_alignment (abfd, s,
5115 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5116 return FALSE;
5117
5118 s->size = sizeof (Elf32_External_compact_rel);
5119 }
5120
5121 return TRUE;
5122 }
5123
5124 /* Create the .got section to hold the global offset table. */
5125
5126 static bfd_boolean
5127 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5128 {
5129 flagword flags;
5130 register asection *s;
5131 struct elf_link_hash_entry *h;
5132 struct bfd_link_hash_entry *bh;
5133 struct mips_elf_link_hash_table *htab;
5134
5135 htab = mips_elf_hash_table (info);
5136 BFD_ASSERT (htab != NULL);
5137
5138 /* This function may be called more than once. */
5139 if (htab->sgot)
5140 return TRUE;
5141
5142 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5143 | SEC_LINKER_CREATED);
5144
5145 /* We have to use an alignment of 2**4 here because this is hardcoded
5146 in the function stub generation and in the linker script. */
5147 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5148 if (s == NULL
5149 || ! bfd_set_section_alignment (abfd, s, 4))
5150 return FALSE;
5151 htab->sgot = s;
5152
5153 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
5154 linker script because we don't want to define the symbol if we
5155 are not creating a global offset table. */
5156 bh = NULL;
5157 if (! (_bfd_generic_link_add_one_symbol
5158 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5159 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5160 return FALSE;
5161
5162 h = (struct elf_link_hash_entry *) bh;
5163 h->non_elf = 0;
5164 h->def_regular = 1;
5165 h->type = STT_OBJECT;
5166 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5167 elf_hash_table (info)->hgot = h;
5168
5169 if (bfd_link_pic (info)
5170 && ! bfd_elf_link_record_dynamic_symbol (info, h))
5171 return FALSE;
5172
5173 htab->got_info = mips_elf_create_got_info (abfd);
5174 mips_elf_section_data (s)->elf.this_hdr.sh_flags
5175 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5176
5177 /* We also need a .got.plt section when generating PLTs. */
5178 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5179 SEC_ALLOC | SEC_LOAD
5180 | SEC_HAS_CONTENTS
5181 | SEC_IN_MEMORY
5182 | SEC_LINKER_CREATED);
5183 if (s == NULL)
5184 return FALSE;
5185 htab->sgotplt = s;
5186
5187 return TRUE;
5188 }
5189 \f
5190 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5191 __GOTT_INDEX__ symbols. These symbols are only special for
5192 shared objects; they are not used in executables. */
5193
5194 static bfd_boolean
5195 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5196 {
5197 return (mips_elf_hash_table (info)->is_vxworks
5198 && bfd_link_pic (info)
5199 && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5200 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5201 }
5202
5203 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5204 require an la25 stub. See also mips_elf_local_pic_function_p,
5205 which determines whether the destination function ever requires a
5206 stub. */
5207
5208 static bfd_boolean
5209 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5210 bfd_boolean target_is_16_bit_code_p)
5211 {
5212 /* We specifically ignore branches and jumps from EF_PIC objects,
5213 where the onus is on the compiler or programmer to perform any
5214 necessary initialization of $25. Sometimes such initialization
5215 is unnecessary; for example, -mno-shared functions do not use
5216 the incoming value of $25, and may therefore be called directly. */
5217 if (PIC_OBJECT_P (input_bfd))
5218 return FALSE;
5219
5220 switch (r_type)
5221 {
5222 case R_MIPS_26:
5223 case R_MIPS_PC16:
5224 case R_MIPS_PC21_S2:
5225 case R_MIPS_PC26_S2:
5226 case R_MICROMIPS_26_S1:
5227 case R_MICROMIPS_PC7_S1:
5228 case R_MICROMIPS_PC10_S1:
5229 case R_MICROMIPS_PC16_S1:
5230 case R_MICROMIPS_PC23_S2:
5231 return TRUE;
5232
5233 case R_MIPS16_26:
5234 return !target_is_16_bit_code_p;
5235
5236 default:
5237 return FALSE;
5238 }
5239 }
5240 \f
5241 /* Calculate the value produced by the RELOCATION (which comes from
5242 the INPUT_BFD). The ADDEND is the addend to use for this
5243 RELOCATION; RELOCATION->R_ADDEND is ignored.
5244
5245 The result of the relocation calculation is stored in VALUEP.
5246 On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5247 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5248
5249 This function returns bfd_reloc_continue if the caller need take no
5250 further action regarding this relocation, bfd_reloc_notsupported if
5251 something goes dramatically wrong, bfd_reloc_overflow if an
5252 overflow occurs, and bfd_reloc_ok to indicate success. */
5253
5254 static bfd_reloc_status_type
5255 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5256 asection *input_section,
5257 struct bfd_link_info *info,
5258 const Elf_Internal_Rela *relocation,
5259 bfd_vma addend, reloc_howto_type *howto,
5260 Elf_Internal_Sym *local_syms,
5261 asection **local_sections, bfd_vma *valuep,
5262 const char **namep,
5263 bfd_boolean *cross_mode_jump_p,
5264 bfd_boolean save_addend)
5265 {
5266 /* The eventual value we will return. */
5267 bfd_vma value;
5268 /* The address of the symbol against which the relocation is
5269 occurring. */
5270 bfd_vma symbol = 0;
5271 /* The final GP value to be used for the relocatable, executable, or
5272 shared object file being produced. */
5273 bfd_vma gp;
5274 /* The place (section offset or address) of the storage unit being
5275 relocated. */
5276 bfd_vma p;
5277 /* The value of GP used to create the relocatable object. */
5278 bfd_vma gp0;
5279 /* The offset into the global offset table at which the address of
5280 the relocation entry symbol, adjusted by the addend, resides
5281 during execution. */
5282 bfd_vma g = MINUS_ONE;
5283 /* The section in which the symbol referenced by the relocation is
5284 located. */
5285 asection *sec = NULL;
5286 struct mips_elf_link_hash_entry *h = NULL;
5287 /* TRUE if the symbol referred to by this relocation is a local
5288 symbol. */
5289 bfd_boolean local_p, was_local_p;
5290 /* TRUE if the symbol referred to by this relocation is a section
5291 symbol. */
5292 bfd_boolean section_p = FALSE;
5293 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */
5294 bfd_boolean gp_disp_p = FALSE;
5295 /* TRUE if the symbol referred to by this relocation is
5296 "__gnu_local_gp". */
5297 bfd_boolean gnu_local_gp_p = FALSE;
5298 Elf_Internal_Shdr *symtab_hdr;
5299 size_t extsymoff;
5300 unsigned long r_symndx;
5301 int r_type;
5302 /* TRUE if overflow occurred during the calculation of the
5303 relocation value. */
5304 bfd_boolean overflowed_p;
5305 /* TRUE if this relocation refers to a MIPS16 function. */
5306 bfd_boolean target_is_16_bit_code_p = FALSE;
5307 bfd_boolean target_is_micromips_code_p = FALSE;
5308 struct mips_elf_link_hash_table *htab;
5309 bfd *dynobj;
5310
5311 dynobj = elf_hash_table (info)->dynobj;
5312 htab = mips_elf_hash_table (info);
5313 BFD_ASSERT (htab != NULL);
5314
5315 /* Parse the relocation. */
5316 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5317 r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5318 p = (input_section->output_section->vma
5319 + input_section->output_offset
5320 + relocation->r_offset);
5321
5322 /* Assume that there will be no overflow. */
5323 overflowed_p = FALSE;
5324
5325 /* Figure out whether or not the symbol is local, and get the offset
5326 used in the array of hash table entries. */
5327 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5328 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5329 local_sections);
5330 was_local_p = local_p;
5331 if (! elf_bad_symtab (input_bfd))
5332 extsymoff = symtab_hdr->sh_info;
5333 else
5334 {
5335 /* The symbol table does not follow the rule that local symbols
5336 must come before globals. */
5337 extsymoff = 0;
5338 }
5339
5340 /* Figure out the value of the symbol. */
5341 if (local_p)
5342 {
5343 bfd_boolean micromips_p = MICROMIPS_P (abfd);
5344 Elf_Internal_Sym *sym;
5345
5346 sym = local_syms + r_symndx;
5347 sec = local_sections[r_symndx];
5348
5349 section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION;
5350
5351 symbol = sec->output_section->vma + sec->output_offset;
5352 if (!section_p || (sec->flags & SEC_MERGE))
5353 symbol += sym->st_value;
5354 if ((sec->flags & SEC_MERGE) && section_p)
5355 {
5356 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5357 addend -= symbol;
5358 addend += sec->output_section->vma + sec->output_offset;
5359 }
5360
5361 /* MIPS16/microMIPS text labels should be treated as odd. */
5362 if (ELF_ST_IS_COMPRESSED (sym->st_other))
5363 ++symbol;
5364
5365 /* Record the name of this symbol, for our caller. */
5366 *namep = bfd_elf_string_from_elf_section (input_bfd,
5367 symtab_hdr->sh_link,
5368 sym->st_name);
5369 if (*namep == NULL || **namep == '\0')
5370 *namep = bfd_section_name (input_bfd, sec);
5371
5372 /* For relocations against a section symbol and ones against no
5373 symbol (absolute relocations) infer the ISA mode from the addend. */
5374 if (section_p || r_symndx == STN_UNDEF)
5375 {
5376 target_is_16_bit_code_p = (addend & 1) && !micromips_p;
5377 target_is_micromips_code_p = (addend & 1) && micromips_p;
5378 }
5379 /* For relocations against an absolute symbol infer the ISA mode
5380 from the value of the symbol plus addend. */
5381 else if (bfd_is_abs_section (sec))
5382 {
5383 target_is_16_bit_code_p = ((symbol + addend) & 1) && !micromips_p;
5384 target_is_micromips_code_p = ((symbol + addend) & 1) && micromips_p;
5385 }
5386 /* Otherwise just use the regular symbol annotation available. */
5387 else
5388 {
5389 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5390 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5391 }
5392 }
5393 else
5394 {
5395 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */
5396
5397 /* For global symbols we look up the symbol in the hash-table. */
5398 h = ((struct mips_elf_link_hash_entry *)
5399 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5400 /* Find the real hash-table entry for this symbol. */
5401 while (h->root.root.type == bfd_link_hash_indirect
5402 || h->root.root.type == bfd_link_hash_warning)
5403 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5404
5405 /* Record the name of this symbol, for our caller. */
5406 *namep = h->root.root.root.string;
5407
5408 /* See if this is the special _gp_disp symbol. Note that such a
5409 symbol must always be a global symbol. */
5410 if (strcmp (*namep, "_gp_disp") == 0
5411 && ! NEWABI_P (input_bfd))
5412 {
5413 /* Relocations against _gp_disp are permitted only with
5414 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
5415 if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5416 return bfd_reloc_notsupported;
5417
5418 gp_disp_p = TRUE;
5419 }
5420 /* See if this is the special _gp symbol. Note that such a
5421 symbol must always be a global symbol. */
5422 else if (strcmp (*namep, "__gnu_local_gp") == 0)
5423 gnu_local_gp_p = TRUE;
5424
5425
5426 /* If this symbol is defined, calculate its address. Note that
5427 _gp_disp is a magic symbol, always implicitly defined by the
5428 linker, so it's inappropriate to check to see whether or not
5429 its defined. */
5430 else if ((h->root.root.type == bfd_link_hash_defined
5431 || h->root.root.type == bfd_link_hash_defweak)
5432 && h->root.root.u.def.section)
5433 {
5434 sec = h->root.root.u.def.section;
5435 if (sec->output_section)
5436 symbol = (h->root.root.u.def.value
5437 + sec->output_section->vma
5438 + sec->output_offset);
5439 else
5440 symbol = h->root.root.u.def.value;
5441 }
5442 else if (h->root.root.type == bfd_link_hash_undefweak)
5443 /* We allow relocations against undefined weak symbols, giving
5444 it the value zero, so that you can undefined weak functions
5445 and check to see if they exist by looking at their
5446 addresses. */
5447 symbol = 0;
5448 else if (info->unresolved_syms_in_objects == RM_IGNORE
5449 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5450 symbol = 0;
5451 else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5452 ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5453 {
5454 /* If this is a dynamic link, we should have created a
5455 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5456 in in _bfd_mips_elf_create_dynamic_sections.
5457 Otherwise, we should define the symbol with a value of 0.
5458 FIXME: It should probably get into the symbol table
5459 somehow as well. */
5460 BFD_ASSERT (! bfd_link_pic (info));
5461 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5462 symbol = 0;
5463 }
5464 else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5465 {
5466 /* This is an optional symbol - an Irix specific extension to the
5467 ELF spec. Ignore it for now.
5468 XXX - FIXME - there is more to the spec for OPTIONAL symbols
5469 than simply ignoring them, but we do not handle this for now.
5470 For information see the "64-bit ELF Object File Specification"
5471 which is available from here:
5472 http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */
5473 symbol = 0;
5474 }
5475 else
5476 {
5477 (*info->callbacks->undefined_symbol)
5478 (info, h->root.root.root.string, input_bfd,
5479 input_section, relocation->r_offset,
5480 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5481 || ELF_ST_VISIBILITY (h->root.other));
5482 return bfd_reloc_undefined;
5483 }
5484
5485 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5486 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5487 }
5488
5489 /* If this is a reference to a 16-bit function with a stub, we need
5490 to redirect the relocation to the stub unless:
5491
5492 (a) the relocation is for a MIPS16 JAL;
5493
5494 (b) the relocation is for a MIPS16 PIC call, and there are no
5495 non-MIPS16 uses of the GOT slot; or
5496
5497 (c) the section allows direct references to MIPS16 functions. */
5498 if (r_type != R_MIPS16_26
5499 && !bfd_link_relocatable (info)
5500 && ((h != NULL
5501 && h->fn_stub != NULL
5502 && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5503 || (local_p
5504 && mips_elf_tdata (input_bfd)->local_stubs != NULL
5505 && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5506 && !section_allows_mips16_refs_p (input_section))
5507 {
5508 /* This is a 32- or 64-bit call to a 16-bit function. We should
5509 have already noticed that we were going to need the
5510 stub. */
5511 if (local_p)
5512 {
5513 sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5514 value = 0;
5515 }
5516 else
5517 {
5518 BFD_ASSERT (h->need_fn_stub);
5519 if (h->la25_stub)
5520 {
5521 /* If a LA25 header for the stub itself exists, point to the
5522 prepended LUI/ADDIU sequence. */
5523 sec = h->la25_stub->stub_section;
5524 value = h->la25_stub->offset;
5525 }
5526 else
5527 {
5528 sec = h->fn_stub;
5529 value = 0;
5530 }
5531 }
5532
5533 symbol = sec->output_section->vma + sec->output_offset + value;
5534 /* The target is 16-bit, but the stub isn't. */
5535 target_is_16_bit_code_p = FALSE;
5536 }
5537 /* If this is a MIPS16 call with a stub, that is made through the PLT or
5538 to a standard MIPS function, we need to redirect the call to the stub.
5539 Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5540 indirect calls should use an indirect stub instead. */
5541 else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5542 && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5543 || (local_p
5544 && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5545 && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5546 && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5547 {
5548 if (local_p)
5549 sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5550 else
5551 {
5552 /* If both call_stub and call_fp_stub are defined, we can figure
5553 out which one to use by checking which one appears in the input
5554 file. */
5555 if (h->call_stub != NULL && h->call_fp_stub != NULL)
5556 {
5557 asection *o;
5558
5559 sec = NULL;
5560 for (o = input_bfd->sections; o != NULL; o = o->next)
5561 {
5562 if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5563 {
5564 sec = h->call_fp_stub;
5565 break;
5566 }
5567 }
5568 if (sec == NULL)
5569 sec = h->call_stub;
5570 }
5571 else if (h->call_stub != NULL)
5572 sec = h->call_stub;
5573 else
5574 sec = h->call_fp_stub;
5575 }
5576
5577 BFD_ASSERT (sec->size > 0);
5578 symbol = sec->output_section->vma + sec->output_offset;
5579 }
5580 /* If this is a direct call to a PIC function, redirect to the
5581 non-PIC stub. */
5582 else if (h != NULL && h->la25_stub
5583 && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5584 target_is_16_bit_code_p))
5585 {
5586 symbol = (h->la25_stub->stub_section->output_section->vma
5587 + h->la25_stub->stub_section->output_offset
5588 + h->la25_stub->offset);
5589 if (ELF_ST_IS_MICROMIPS (h->root.other))
5590 symbol |= 1;
5591 }
5592 /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5593 entry is used if a standard PLT entry has also been made. In this
5594 case the symbol will have been set by mips_elf_set_plt_sym_value
5595 to point to the standard PLT entry, so redirect to the compressed
5596 one. */
5597 else if ((mips16_branch_reloc_p (r_type)
5598 || micromips_branch_reloc_p (r_type))
5599 && !bfd_link_relocatable (info)
5600 && h != NULL
5601 && h->use_plt_entry
5602 && h->root.plt.plist->comp_offset != MINUS_ONE
5603 && h->root.plt.plist->mips_offset != MINUS_ONE)
5604 {
5605 bfd_boolean micromips_p = MICROMIPS_P (abfd);
5606
5607 sec = htab->splt;
5608 symbol = (sec->output_section->vma
5609 + sec->output_offset
5610 + htab->plt_header_size
5611 + htab->plt_mips_offset
5612 + h->root.plt.plist->comp_offset
5613 + 1);
5614
5615 target_is_16_bit_code_p = !micromips_p;
5616 target_is_micromips_code_p = micromips_p;
5617 }
5618
5619 /* Make sure MIPS16 and microMIPS are not used together. */
5620 if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p)
5621 || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5622 {
5623 (*_bfd_error_handler)
5624 (_("MIPS16 and microMIPS functions cannot call each other"));
5625 return bfd_reloc_notsupported;
5626 }
5627
5628 /* Calls from 16-bit code to 32-bit code and vice versa require the
5629 mode change. However, we can ignore calls to undefined weak symbols,
5630 which should never be executed at runtime. This exception is important
5631 because the assembly writer may have "known" that any definition of the
5632 symbol would be 16-bit code, and that direct jumps were therefore
5633 acceptable. */
5634 *cross_mode_jump_p = (!bfd_link_relocatable (info)
5635 && !(h && h->root.root.type == bfd_link_hash_undefweak)
5636 && ((mips16_branch_reloc_p (r_type)
5637 && !target_is_16_bit_code_p)
5638 || (micromips_branch_reloc_p (r_type)
5639 && !target_is_micromips_code_p)
5640 || ((branch_reloc_p (r_type)
5641 || r_type == R_MIPS_JALR)
5642 && (target_is_16_bit_code_p
5643 || target_is_micromips_code_p))));
5644
5645 local_p = (h == NULL || mips_use_local_got_p (info, h));
5646
5647 gp0 = _bfd_get_gp_value (input_bfd);
5648 gp = _bfd_get_gp_value (abfd);
5649 if (htab->got_info)
5650 gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5651
5652 if (gnu_local_gp_p)
5653 symbol = gp;
5654
5655 /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5656 to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP. The addend is applied by the
5657 corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST. */
5658 if (got_page_reloc_p (r_type) && !local_p)
5659 {
5660 r_type = (micromips_reloc_p (r_type)
5661 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5662 addend = 0;
5663 }
5664
5665 /* If we haven't already determined the GOT offset, and we're going
5666 to need it, get it now. */
5667 switch (r_type)
5668 {
5669 case R_MIPS16_CALL16:
5670 case R_MIPS16_GOT16:
5671 case R_MIPS_CALL16:
5672 case R_MIPS_GOT16:
5673 case R_MIPS_GOT_DISP:
5674 case R_MIPS_GOT_HI16:
5675 case R_MIPS_CALL_HI16:
5676 case R_MIPS_GOT_LO16:
5677 case R_MIPS_CALL_LO16:
5678 case R_MICROMIPS_CALL16:
5679 case R_MICROMIPS_GOT16:
5680 case R_MICROMIPS_GOT_DISP:
5681 case R_MICROMIPS_GOT_HI16:
5682 case R_MICROMIPS_CALL_HI16:
5683 case R_MICROMIPS_GOT_LO16:
5684 case R_MICROMIPS_CALL_LO16:
5685 case R_MIPS_TLS_GD:
5686 case R_MIPS_TLS_GOTTPREL:
5687 case R_MIPS_TLS_LDM:
5688 case R_MIPS16_TLS_GD:
5689 case R_MIPS16_TLS_GOTTPREL:
5690 case R_MIPS16_TLS_LDM:
5691 case R_MICROMIPS_TLS_GD:
5692 case R_MICROMIPS_TLS_GOTTPREL:
5693 case R_MICROMIPS_TLS_LDM:
5694 /* Find the index into the GOT where this value is located. */
5695 if (tls_ldm_reloc_p (r_type))
5696 {
5697 g = mips_elf_local_got_index (abfd, input_bfd, info,
5698 0, 0, NULL, r_type);
5699 if (g == MINUS_ONE)
5700 return bfd_reloc_outofrange;
5701 }
5702 else if (!local_p)
5703 {
5704 /* On VxWorks, CALL relocations should refer to the .got.plt
5705 entry, which is initialized to point at the PLT stub. */
5706 if (htab->is_vxworks
5707 && (call_hi16_reloc_p (r_type)
5708 || call_lo16_reloc_p (r_type)
5709 || call16_reloc_p (r_type)))
5710 {
5711 BFD_ASSERT (addend == 0);
5712 BFD_ASSERT (h->root.needs_plt);
5713 g = mips_elf_gotplt_index (info, &h->root);
5714 }
5715 else
5716 {
5717 BFD_ASSERT (addend == 0);
5718 g = mips_elf_global_got_index (abfd, info, input_bfd,
5719 &h->root, r_type);
5720 if (!TLS_RELOC_P (r_type)
5721 && !elf_hash_table (info)->dynamic_sections_created)
5722 /* This is a static link. We must initialize the GOT entry. */
5723 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5724 }
5725 }
5726 else if (!htab->is_vxworks
5727 && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5728 /* The calculation below does not involve "g". */
5729 break;
5730 else
5731 {
5732 g = mips_elf_local_got_index (abfd, input_bfd, info,
5733 symbol + addend, r_symndx, h, r_type);
5734 if (g == MINUS_ONE)
5735 return bfd_reloc_outofrange;
5736 }
5737
5738 /* Convert GOT indices to actual offsets. */
5739 g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5740 break;
5741 }
5742
5743 /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5744 symbols are resolved by the loader. Add them to .rela.dyn. */
5745 if (h != NULL && is_gott_symbol (info, &h->root))
5746 {
5747 Elf_Internal_Rela outrel;
5748 bfd_byte *loc;
5749 asection *s;
5750
5751 s = mips_elf_rel_dyn_section (info, FALSE);
5752 loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5753
5754 outrel.r_offset = (input_section->output_section->vma
5755 + input_section->output_offset
5756 + relocation->r_offset);
5757 outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5758 outrel.r_addend = addend;
5759 bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5760
5761 /* If we've written this relocation for a readonly section,
5762 we need to set DF_TEXTREL again, so that we do not delete the
5763 DT_TEXTREL tag. */
5764 if (MIPS_ELF_READONLY_SECTION (input_section))
5765 info->flags |= DF_TEXTREL;
5766
5767 *valuep = 0;
5768 return bfd_reloc_ok;
5769 }
5770
5771 /* Figure out what kind of relocation is being performed. */
5772 switch (r_type)
5773 {
5774 case R_MIPS_NONE:
5775 return bfd_reloc_continue;
5776
5777 case R_MIPS_16:
5778 if (howto->partial_inplace)
5779 addend = _bfd_mips_elf_sign_extend (addend, 16);
5780 value = symbol + addend;
5781 overflowed_p = mips_elf_overflow_p (value, 16);
5782 break;
5783
5784 case R_MIPS_32:
5785 case R_MIPS_REL32:
5786 case R_MIPS_64:
5787 if ((bfd_link_pic (info)
5788 || (htab->root.dynamic_sections_created
5789 && h != NULL
5790 && h->root.def_dynamic
5791 && !h->root.def_regular
5792 && !h->has_static_relocs))
5793 && r_symndx != STN_UNDEF
5794 && (h == NULL
5795 || h->root.root.type != bfd_link_hash_undefweak
5796 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5797 && (input_section->flags & SEC_ALLOC) != 0)
5798 {
5799 /* If we're creating a shared library, then we can't know
5800 where the symbol will end up. So, we create a relocation
5801 record in the output, and leave the job up to the dynamic
5802 linker. We must do the same for executable references to
5803 shared library symbols, unless we've decided to use copy
5804 relocs or PLTs instead. */
5805 value = addend;
5806 if (!mips_elf_create_dynamic_relocation (abfd,
5807 info,
5808 relocation,
5809 h,
5810 sec,
5811 symbol,
5812 &value,
5813 input_section))
5814 return bfd_reloc_undefined;
5815 }
5816 else
5817 {
5818 if (r_type != R_MIPS_REL32)
5819 value = symbol + addend;
5820 else
5821 value = addend;
5822 }
5823 value &= howto->dst_mask;
5824 break;
5825
5826 case R_MIPS_PC32:
5827 value = symbol + addend - p;
5828 value &= howto->dst_mask;
5829 break;
5830
5831 case R_MIPS16_26:
5832 /* The calculation for R_MIPS16_26 is just the same as for an
5833 R_MIPS_26. It's only the storage of the relocated field into
5834 the output file that's different. That's handled in
5835 mips_elf_perform_relocation. So, we just fall through to the
5836 R_MIPS_26 case here. */
5837 case R_MIPS_26:
5838 case R_MICROMIPS_26_S1:
5839 {
5840 unsigned int shift;
5841
5842 /* Shift is 2, unusually, for microMIPS JALX. */
5843 shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5844
5845 if (howto->partial_inplace && !section_p)
5846 value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5847 else
5848 value = addend;
5849 value += symbol;
5850
5851 /* Make sure the target of a jump is suitably aligned. Bit 0 must
5852 be the correct ISA mode selector except for weak undefined
5853 symbols. */
5854 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5855 && (*cross_mode_jump_p
5856 ? (value & 3) != (r_type == R_MIPS_26)
5857 : (value & ((1 << shift) - 1)) != (r_type != R_MIPS_26)))
5858 return bfd_reloc_outofrange;
5859
5860 value >>= shift;
5861 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5862 overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5863 value &= howto->dst_mask;
5864 }
5865 break;
5866
5867 case R_MIPS_TLS_DTPREL_HI16:
5868 case R_MIPS16_TLS_DTPREL_HI16:
5869 case R_MICROMIPS_TLS_DTPREL_HI16:
5870 value = (mips_elf_high (addend + symbol - dtprel_base (info))
5871 & howto->dst_mask);
5872 break;
5873
5874 case R_MIPS_TLS_DTPREL_LO16:
5875 case R_MIPS_TLS_DTPREL32:
5876 case R_MIPS_TLS_DTPREL64:
5877 case R_MIPS16_TLS_DTPREL_LO16:
5878 case R_MICROMIPS_TLS_DTPREL_LO16:
5879 value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5880 break;
5881
5882 case R_MIPS_TLS_TPREL_HI16:
5883 case R_MIPS16_TLS_TPREL_HI16:
5884 case R_MICROMIPS_TLS_TPREL_HI16:
5885 value = (mips_elf_high (addend + symbol - tprel_base (info))
5886 & howto->dst_mask);
5887 break;
5888
5889 case R_MIPS_TLS_TPREL_LO16:
5890 case R_MIPS_TLS_TPREL32:
5891 case R_MIPS_TLS_TPREL64:
5892 case R_MIPS16_TLS_TPREL_LO16:
5893 case R_MICROMIPS_TLS_TPREL_LO16:
5894 value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5895 break;
5896
5897 case R_MIPS_HI16:
5898 case R_MIPS16_HI16:
5899 case R_MICROMIPS_HI16:
5900 if (!gp_disp_p)
5901 {
5902 value = mips_elf_high (addend + symbol);
5903 value &= howto->dst_mask;
5904 }
5905 else
5906 {
5907 /* For MIPS16 ABI code we generate this sequence
5908 0: li $v0,%hi(_gp_disp)
5909 4: addiupc $v1,%lo(_gp_disp)
5910 8: sll $v0,16
5911 12: addu $v0,$v1
5912 14: move $gp,$v0
5913 So the offsets of hi and lo relocs are the same, but the
5914 base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5915 ADDIUPC clears the low two bits of the instruction address,
5916 so the base is ($t9 + 4) & ~3. */
5917 if (r_type == R_MIPS16_HI16)
5918 value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5919 /* The microMIPS .cpload sequence uses the same assembly
5920 instructions as the traditional psABI version, but the
5921 incoming $t9 has the low bit set. */
5922 else if (r_type == R_MICROMIPS_HI16)
5923 value = mips_elf_high (addend + gp - p - 1);
5924 else
5925 value = mips_elf_high (addend + gp - p);
5926 overflowed_p = mips_elf_overflow_p (value, 16);
5927 }
5928 break;
5929
5930 case R_MIPS_LO16:
5931 case R_MIPS16_LO16:
5932 case R_MICROMIPS_LO16:
5933 case R_MICROMIPS_HI0_LO16:
5934 if (!gp_disp_p)
5935 value = (symbol + addend) & howto->dst_mask;
5936 else
5937 {
5938 /* See the comment for R_MIPS16_HI16 above for the reason
5939 for this conditional. */
5940 if (r_type == R_MIPS16_LO16)
5941 value = addend + gp - (p & ~(bfd_vma) 0x3);
5942 else if (r_type == R_MICROMIPS_LO16
5943 || r_type == R_MICROMIPS_HI0_LO16)
5944 value = addend + gp - p + 3;
5945 else
5946 value = addend + gp - p + 4;
5947 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5948 for overflow. But, on, say, IRIX5, relocations against
5949 _gp_disp are normally generated from the .cpload
5950 pseudo-op. It generates code that normally looks like
5951 this:
5952
5953 lui $gp,%hi(_gp_disp)
5954 addiu $gp,$gp,%lo(_gp_disp)
5955 addu $gp,$gp,$t9
5956
5957 Here $t9 holds the address of the function being called,
5958 as required by the MIPS ELF ABI. The R_MIPS_LO16
5959 relocation can easily overflow in this situation, but the
5960 R_MIPS_HI16 relocation will handle the overflow.
5961 Therefore, we consider this a bug in the MIPS ABI, and do
5962 not check for overflow here. */
5963 }
5964 break;
5965
5966 case R_MIPS_LITERAL:
5967 case R_MICROMIPS_LITERAL:
5968 /* Because we don't merge literal sections, we can handle this
5969 just like R_MIPS_GPREL16. In the long run, we should merge
5970 shared literals, and then we will need to additional work
5971 here. */
5972
5973 /* Fall through. */
5974
5975 case R_MIPS16_GPREL:
5976 /* The R_MIPS16_GPREL performs the same calculation as
5977 R_MIPS_GPREL16, but stores the relocated bits in a different
5978 order. We don't need to do anything special here; the
5979 differences are handled in mips_elf_perform_relocation. */
5980 case R_MIPS_GPREL16:
5981 case R_MICROMIPS_GPREL7_S2:
5982 case R_MICROMIPS_GPREL16:
5983 /* Only sign-extend the addend if it was extracted from the
5984 instruction. If the addend was separate, leave it alone,
5985 otherwise we may lose significant bits. */
5986 if (howto->partial_inplace)
5987 addend = _bfd_mips_elf_sign_extend (addend, 16);
5988 value = symbol + addend - gp;
5989 /* If the symbol was local, any earlier relocatable links will
5990 have adjusted its addend with the gp offset, so compensate
5991 for that now. Don't do it for symbols forced local in this
5992 link, though, since they won't have had the gp offset applied
5993 to them before. */
5994 if (was_local_p)
5995 value += gp0;
5996 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5997 overflowed_p = mips_elf_overflow_p (value, 16);
5998 break;
5999
6000 case R_MIPS16_GOT16:
6001 case R_MIPS16_CALL16:
6002 case R_MIPS_GOT16:
6003 case R_MIPS_CALL16:
6004 case R_MICROMIPS_GOT16:
6005 case R_MICROMIPS_CALL16:
6006 /* VxWorks does not have separate local and global semantics for
6007 R_MIPS*_GOT16; every relocation evaluates to "G". */
6008 if (!htab->is_vxworks && local_p)
6009 {
6010 value = mips_elf_got16_entry (abfd, input_bfd, info,
6011 symbol + addend, !was_local_p);
6012 if (value == MINUS_ONE)
6013 return bfd_reloc_outofrange;
6014 value
6015 = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6016 overflowed_p = mips_elf_overflow_p (value, 16);
6017 break;
6018 }
6019
6020 /* Fall through. */
6021
6022 case R_MIPS_TLS_GD:
6023 case R_MIPS_TLS_GOTTPREL:
6024 case R_MIPS_TLS_LDM:
6025 case R_MIPS_GOT_DISP:
6026 case R_MIPS16_TLS_GD:
6027 case R_MIPS16_TLS_GOTTPREL:
6028 case R_MIPS16_TLS_LDM:
6029 case R_MICROMIPS_TLS_GD:
6030 case R_MICROMIPS_TLS_GOTTPREL:
6031 case R_MICROMIPS_TLS_LDM:
6032 case R_MICROMIPS_GOT_DISP:
6033 value = g;
6034 overflowed_p = mips_elf_overflow_p (value, 16);
6035 break;
6036
6037 case R_MIPS_GPREL32:
6038 value = (addend + symbol + gp0 - gp);
6039 if (!save_addend)
6040 value &= howto->dst_mask;
6041 break;
6042
6043 case R_MIPS_PC16:
6044 case R_MIPS_GNU_REL16_S2:
6045 if (howto->partial_inplace)
6046 addend = _bfd_mips_elf_sign_extend (addend, 18);
6047
6048 /* No need to exclude weak undefined symbols here as they resolve
6049 to 0 and never set `*cross_mode_jump_p', so this alignment check
6050 will never trigger for them. */
6051 if (*cross_mode_jump_p
6052 ? ((symbol + addend) & 3) != 1
6053 : ((symbol + addend) & 3) != 0)
6054 return bfd_reloc_outofrange;
6055
6056 value = symbol + addend - p;
6057 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6058 overflowed_p = mips_elf_overflow_p (value, 18);
6059 value >>= howto->rightshift;
6060 value &= howto->dst_mask;
6061 break;
6062
6063 case R_MIPS16_PC16_S1:
6064 if (howto->partial_inplace)
6065 addend = _bfd_mips_elf_sign_extend (addend, 17);
6066
6067 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6068 && (*cross_mode_jump_p
6069 ? ((symbol + addend) & 3) != 0
6070 : ((symbol + addend) & 1) == 0))
6071 return bfd_reloc_outofrange;
6072
6073 value = symbol + addend - p;
6074 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6075 overflowed_p = mips_elf_overflow_p (value, 17);
6076 value >>= howto->rightshift;
6077 value &= howto->dst_mask;
6078 break;
6079
6080 case R_MIPS_PC21_S2:
6081 if (howto->partial_inplace)
6082 addend = _bfd_mips_elf_sign_extend (addend, 23);
6083
6084 if ((symbol + addend) & 3)
6085 return bfd_reloc_outofrange;
6086
6087 value = symbol + addend - p;
6088 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6089 overflowed_p = mips_elf_overflow_p (value, 23);
6090 value >>= howto->rightshift;
6091 value &= howto->dst_mask;
6092 break;
6093
6094 case R_MIPS_PC26_S2:
6095 if (howto->partial_inplace)
6096 addend = _bfd_mips_elf_sign_extend (addend, 28);
6097
6098 if ((symbol + addend) & 3)
6099 return bfd_reloc_outofrange;
6100
6101 value = symbol + addend - p;
6102 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6103 overflowed_p = mips_elf_overflow_p (value, 28);
6104 value >>= howto->rightshift;
6105 value &= howto->dst_mask;
6106 break;
6107
6108 case R_MIPS_PC18_S3:
6109 if (howto->partial_inplace)
6110 addend = _bfd_mips_elf_sign_extend (addend, 21);
6111
6112 if ((symbol + addend) & 7)
6113 return bfd_reloc_outofrange;
6114
6115 value = symbol + addend - ((p | 7) ^ 7);
6116 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6117 overflowed_p = mips_elf_overflow_p (value, 21);
6118 value >>= howto->rightshift;
6119 value &= howto->dst_mask;
6120 break;
6121
6122 case R_MIPS_PC19_S2:
6123 if (howto->partial_inplace)
6124 addend = _bfd_mips_elf_sign_extend (addend, 21);
6125
6126 if ((symbol + addend) & 3)
6127 return bfd_reloc_outofrange;
6128
6129 value = symbol + addend - p;
6130 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6131 overflowed_p = mips_elf_overflow_p (value, 21);
6132 value >>= howto->rightshift;
6133 value &= howto->dst_mask;
6134 break;
6135
6136 case R_MIPS_PCHI16:
6137 value = mips_elf_high (symbol + addend - p);
6138 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6139 overflowed_p = mips_elf_overflow_p (value, 16);
6140 value &= howto->dst_mask;
6141 break;
6142
6143 case R_MIPS_PCLO16:
6144 if (howto->partial_inplace)
6145 addend = _bfd_mips_elf_sign_extend (addend, 16);
6146 value = symbol + addend - p;
6147 value &= howto->dst_mask;
6148 break;
6149
6150 case R_MICROMIPS_PC7_S1:
6151 if (howto->partial_inplace)
6152 addend = _bfd_mips_elf_sign_extend (addend, 8);
6153
6154 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6155 && (*cross_mode_jump_p
6156 ? ((symbol + addend + 2) & 3) != 0
6157 : ((symbol + addend + 2) & 1) == 0))
6158 return bfd_reloc_outofrange;
6159
6160 value = symbol + addend - p;
6161 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6162 overflowed_p = mips_elf_overflow_p (value, 8);
6163 value >>= howto->rightshift;
6164 value &= howto->dst_mask;
6165 break;
6166
6167 case R_MICROMIPS_PC10_S1:
6168 if (howto->partial_inplace)
6169 addend = _bfd_mips_elf_sign_extend (addend, 11);
6170
6171 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6172 && (*cross_mode_jump_p
6173 ? ((symbol + addend + 2) & 3) != 0
6174 : ((symbol + addend + 2) & 1) == 0))
6175 return bfd_reloc_outofrange;
6176
6177 value = symbol + addend - p;
6178 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6179 overflowed_p = mips_elf_overflow_p (value, 11);
6180 value >>= howto->rightshift;
6181 value &= howto->dst_mask;
6182 break;
6183
6184 case R_MICROMIPS_PC16_S1:
6185 if (howto->partial_inplace)
6186 addend = _bfd_mips_elf_sign_extend (addend, 17);
6187
6188 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6189 && (*cross_mode_jump_p
6190 ? ((symbol + addend) & 3) != 0
6191 : ((symbol + addend) & 1) == 0))
6192 return bfd_reloc_outofrange;
6193
6194 value = symbol + addend - p;
6195 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6196 overflowed_p = mips_elf_overflow_p (value, 17);
6197 value >>= howto->rightshift;
6198 value &= howto->dst_mask;
6199 break;
6200
6201 case R_MICROMIPS_PC23_S2:
6202 if (howto->partial_inplace)
6203 addend = _bfd_mips_elf_sign_extend (addend, 25);
6204 value = symbol + addend - ((p | 3) ^ 3);
6205 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6206 overflowed_p = mips_elf_overflow_p (value, 25);
6207 value >>= howto->rightshift;
6208 value &= howto->dst_mask;
6209 break;
6210
6211 case R_MIPS_GOT_HI16:
6212 case R_MIPS_CALL_HI16:
6213 case R_MICROMIPS_GOT_HI16:
6214 case R_MICROMIPS_CALL_HI16:
6215 /* We're allowed to handle these two relocations identically.
6216 The dynamic linker is allowed to handle the CALL relocations
6217 differently by creating a lazy evaluation stub. */
6218 value = g;
6219 value = mips_elf_high (value);
6220 value &= howto->dst_mask;
6221 break;
6222
6223 case R_MIPS_GOT_LO16:
6224 case R_MIPS_CALL_LO16:
6225 case R_MICROMIPS_GOT_LO16:
6226 case R_MICROMIPS_CALL_LO16:
6227 value = g & howto->dst_mask;
6228 break;
6229
6230 case R_MIPS_GOT_PAGE:
6231 case R_MICROMIPS_GOT_PAGE:
6232 value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6233 if (value == MINUS_ONE)
6234 return bfd_reloc_outofrange;
6235 value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6236 overflowed_p = mips_elf_overflow_p (value, 16);
6237 break;
6238
6239 case R_MIPS_GOT_OFST:
6240 case R_MICROMIPS_GOT_OFST:
6241 if (local_p)
6242 mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6243 else
6244 value = addend;
6245 overflowed_p = mips_elf_overflow_p (value, 16);
6246 break;
6247
6248 case R_MIPS_SUB:
6249 case R_MICROMIPS_SUB:
6250 value = symbol - addend;
6251 value &= howto->dst_mask;
6252 break;
6253
6254 case R_MIPS_HIGHER:
6255 case R_MICROMIPS_HIGHER:
6256 value = mips_elf_higher (addend + symbol);
6257 value &= howto->dst_mask;
6258 break;
6259
6260 case R_MIPS_HIGHEST:
6261 case R_MICROMIPS_HIGHEST:
6262 value = mips_elf_highest (addend + symbol);
6263 value &= howto->dst_mask;
6264 break;
6265
6266 case R_MIPS_SCN_DISP:
6267 case R_MICROMIPS_SCN_DISP:
6268 value = symbol + addend - sec->output_offset;
6269 value &= howto->dst_mask;
6270 break;
6271
6272 case R_MIPS_JALR:
6273 case R_MICROMIPS_JALR:
6274 /* This relocation is only a hint. In some cases, we optimize
6275 it into a bal instruction. But we don't try to optimize
6276 when the symbol does not resolve locally. */
6277 if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6278 return bfd_reloc_continue;
6279 value = symbol + addend;
6280 break;
6281
6282 case R_MIPS_PJUMP:
6283 case R_MIPS_GNU_VTINHERIT:
6284 case R_MIPS_GNU_VTENTRY:
6285 /* We don't do anything with these at present. */
6286 return bfd_reloc_continue;
6287
6288 default:
6289 /* An unrecognized relocation type. */
6290 return bfd_reloc_notsupported;
6291 }
6292
6293 /* Store the VALUE for our caller. */
6294 *valuep = value;
6295 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6296 }
6297
6298 /* Obtain the field relocated by RELOCATION. */
6299
6300 static bfd_vma
6301 mips_elf_obtain_contents (reloc_howto_type *howto,
6302 const Elf_Internal_Rela *relocation,
6303 bfd *input_bfd, bfd_byte *contents)
6304 {
6305 bfd_vma x = 0;
6306 bfd_byte *location = contents + relocation->r_offset;
6307 unsigned int size = bfd_get_reloc_size (howto);
6308
6309 /* Obtain the bytes. */
6310 if (size != 0)
6311 x = bfd_get (8 * size, input_bfd, location);
6312
6313 return x;
6314 }
6315
6316 /* It has been determined that the result of the RELOCATION is the
6317 VALUE. Use HOWTO to place VALUE into the output file at the
6318 appropriate position. The SECTION is the section to which the
6319 relocation applies.
6320 CROSS_MODE_JUMP_P is true if the relocation field
6321 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6322
6323 Returns FALSE if anything goes wrong. */
6324
6325 static bfd_boolean
6326 mips_elf_perform_relocation (struct bfd_link_info *info,
6327 reloc_howto_type *howto,
6328 const Elf_Internal_Rela *relocation,
6329 bfd_vma value, bfd *input_bfd,
6330 asection *input_section, bfd_byte *contents,
6331 bfd_boolean cross_mode_jump_p)
6332 {
6333 bfd_vma x;
6334 bfd_byte *location;
6335 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6336 unsigned int size;
6337
6338 /* Figure out where the relocation is occurring. */
6339 location = contents + relocation->r_offset;
6340
6341 _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6342
6343 /* Obtain the current value. */
6344 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6345
6346 /* Clear the field we are setting. */
6347 x &= ~howto->dst_mask;
6348
6349 /* Set the field. */
6350 x |= (value & howto->dst_mask);
6351
6352 /* Detect incorrect JALX usage. If required, turn JAL or BAL into JALX. */
6353 if (!cross_mode_jump_p && jal_reloc_p (r_type))
6354 {
6355 bfd_vma opcode = x >> 26;
6356
6357 if (r_type == R_MIPS16_26 ? opcode == 0x7
6358 : r_type == R_MICROMIPS_26_S1 ? opcode == 0x3c
6359 : opcode == 0x1d)
6360 {
6361 info->callbacks->einfo
6362 (_("%X%H: Unsupported JALX to the same ISA mode\n"),
6363 input_bfd, input_section, relocation->r_offset);
6364 return TRUE;
6365 }
6366 }
6367 if (cross_mode_jump_p && jal_reloc_p (r_type))
6368 {
6369 bfd_boolean ok;
6370 bfd_vma opcode = x >> 26;
6371 bfd_vma jalx_opcode;
6372
6373 /* Check to see if the opcode is already JAL or JALX. */
6374 if (r_type == R_MIPS16_26)
6375 {
6376 ok = ((opcode == 0x6) || (opcode == 0x7));
6377 jalx_opcode = 0x7;
6378 }
6379 else if (r_type == R_MICROMIPS_26_S1)
6380 {
6381 ok = ((opcode == 0x3d) || (opcode == 0x3c));
6382 jalx_opcode = 0x3c;
6383 }
6384 else
6385 {
6386 ok = ((opcode == 0x3) || (opcode == 0x1d));
6387 jalx_opcode = 0x1d;
6388 }
6389
6390 /* If the opcode is not JAL or JALX, there's a problem. We cannot
6391 convert J or JALS to JALX. */
6392 if (!ok)
6393 {
6394 info->callbacks->einfo
6395 (_("%X%H: Unsupported jump between ISA modes; "
6396 "consider recompiling with interlinking enabled\n"),
6397 input_bfd, input_section, relocation->r_offset);
6398 return TRUE;
6399 }
6400
6401 /* Make this the JALX opcode. */
6402 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6403 }
6404 else if (cross_mode_jump_p && b_reloc_p (r_type))
6405 {
6406 bfd_boolean ok = FALSE;
6407 bfd_vma opcode = x >> 16;
6408 bfd_vma jalx_opcode = 0;
6409 bfd_vma addr;
6410 bfd_vma dest;
6411
6412 if (r_type == R_MICROMIPS_PC16_S1)
6413 {
6414 ok = opcode == 0x4060;
6415 jalx_opcode = 0x3c;
6416 value <<= 1;
6417 }
6418 else if (r_type == R_MIPS_PC16 || r_type == R_MIPS_GNU_REL16_S2)
6419 {
6420 ok = opcode == 0x411;
6421 jalx_opcode = 0x1d;
6422 value <<= 2;
6423 }
6424
6425 if (bfd_link_pic (info) || !ok)
6426 {
6427 info->callbacks->einfo
6428 (_("%X%H: Unsupported branch between ISA modes\n"),
6429 input_bfd, input_section, relocation->r_offset);
6430 return TRUE;
6431 }
6432
6433 addr = (input_section->output_section->vma
6434 + input_section->output_offset
6435 + relocation->r_offset
6436 + 4);
6437 dest = addr + (((value & 0x3ffff) ^ 0x20000) - 0x20000);
6438
6439 if ((addr >> 28) << 28 != (dest >> 28) << 28)
6440 {
6441 info->callbacks->einfo
6442 (_("%X%H: Cannot convert branch between ISA modes "
6443 "to JALX: relocation out of range\n"),
6444 input_bfd, input_section, relocation->r_offset);
6445 return TRUE;
6446 }
6447
6448 /* Make this the JALX opcode. */
6449 x = ((dest >> 2) & 0x3ffffff) | jalx_opcode << 26;
6450 }
6451
6452 /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6453 range. */
6454 if (!bfd_link_relocatable (info)
6455 && !cross_mode_jump_p
6456 && ((JAL_TO_BAL_P (input_bfd)
6457 && r_type == R_MIPS_26
6458 && (x >> 26) == 0x3) /* jal addr */
6459 || (JALR_TO_BAL_P (input_bfd)
6460 && r_type == R_MIPS_JALR
6461 && x == 0x0320f809) /* jalr t9 */
6462 || (JR_TO_B_P (input_bfd)
6463 && r_type == R_MIPS_JALR
6464 && x == 0x03200008))) /* jr t9 */
6465 {
6466 bfd_vma addr;
6467 bfd_vma dest;
6468 bfd_signed_vma off;
6469
6470 addr = (input_section->output_section->vma
6471 + input_section->output_offset
6472 + relocation->r_offset
6473 + 4);
6474 if (r_type == R_MIPS_26)
6475 dest = (value << 2) | ((addr >> 28) << 28);
6476 else
6477 dest = value;
6478 off = dest - addr;
6479 if (off <= 0x1ffff && off >= -0x20000)
6480 {
6481 if (x == 0x03200008) /* jr t9 */
6482 x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff); /* b addr */
6483 else
6484 x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff); /* bal addr */
6485 }
6486 }
6487
6488 /* Put the value into the output. */
6489 size = bfd_get_reloc_size (howto);
6490 if (size != 0)
6491 bfd_put (8 * size, input_bfd, x, location);
6492
6493 _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6494 location);
6495
6496 return TRUE;
6497 }
6498 \f
6499 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL
6500 is the original relocation, which is now being transformed into a
6501 dynamic relocation. The ADDENDP is adjusted if necessary; the
6502 caller should store the result in place of the original addend. */
6503
6504 static bfd_boolean
6505 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6506 struct bfd_link_info *info,
6507 const Elf_Internal_Rela *rel,
6508 struct mips_elf_link_hash_entry *h,
6509 asection *sec, bfd_vma symbol,
6510 bfd_vma *addendp, asection *input_section)
6511 {
6512 Elf_Internal_Rela outrel[3];
6513 asection *sreloc;
6514 bfd *dynobj;
6515 int r_type;
6516 long indx;
6517 bfd_boolean defined_p;
6518 struct mips_elf_link_hash_table *htab;
6519
6520 htab = mips_elf_hash_table (info);
6521 BFD_ASSERT (htab != NULL);
6522
6523 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6524 dynobj = elf_hash_table (info)->dynobj;
6525 sreloc = mips_elf_rel_dyn_section (info, FALSE);
6526 BFD_ASSERT (sreloc != NULL);
6527 BFD_ASSERT (sreloc->contents != NULL);
6528 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6529 < sreloc->size);
6530
6531 outrel[0].r_offset =
6532 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6533 if (ABI_64_P (output_bfd))
6534 {
6535 outrel[1].r_offset =
6536 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6537 outrel[2].r_offset =
6538 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6539 }
6540
6541 if (outrel[0].r_offset == MINUS_ONE)
6542 /* The relocation field has been deleted. */
6543 return TRUE;
6544
6545 if (outrel[0].r_offset == MINUS_TWO)
6546 {
6547 /* The relocation field has been converted into a relative value of
6548 some sort. Functions like _bfd_elf_write_section_eh_frame expect
6549 the field to be fully relocated, so add in the symbol's value. */
6550 *addendp += symbol;
6551 return TRUE;
6552 }
6553
6554 /* We must now calculate the dynamic symbol table index to use
6555 in the relocation. */
6556 if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6557 {
6558 BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6559 indx = h->root.dynindx;
6560 if (SGI_COMPAT (output_bfd))
6561 defined_p = h->root.def_regular;
6562 else
6563 /* ??? glibc's ld.so just adds the final GOT entry to the
6564 relocation field. It therefore treats relocs against
6565 defined symbols in the same way as relocs against
6566 undefined symbols. */
6567 defined_p = FALSE;
6568 }
6569 else
6570 {
6571 if (sec != NULL && bfd_is_abs_section (sec))
6572 indx = 0;
6573 else if (sec == NULL || sec->owner == NULL)
6574 {
6575 bfd_set_error (bfd_error_bad_value);
6576 return FALSE;
6577 }
6578 else
6579 {
6580 indx = elf_section_data (sec->output_section)->dynindx;
6581 if (indx == 0)
6582 {
6583 asection *osec = htab->root.text_index_section;
6584 indx = elf_section_data (osec)->dynindx;
6585 }
6586 if (indx == 0)
6587 abort ();
6588 }
6589
6590 /* Instead of generating a relocation using the section
6591 symbol, we may as well make it a fully relative
6592 relocation. We want to avoid generating relocations to
6593 local symbols because we used to generate them
6594 incorrectly, without adding the original symbol value,
6595 which is mandated by the ABI for section symbols. In
6596 order to give dynamic loaders and applications time to
6597 phase out the incorrect use, we refrain from emitting
6598 section-relative relocations. It's not like they're
6599 useful, after all. This should be a bit more efficient
6600 as well. */
6601 /* ??? Although this behavior is compatible with glibc's ld.so,
6602 the ABI says that relocations against STN_UNDEF should have
6603 a symbol value of 0. Irix rld honors this, so relocations
6604 against STN_UNDEF have no effect. */
6605 if (!SGI_COMPAT (output_bfd))
6606 indx = 0;
6607 defined_p = TRUE;
6608 }
6609
6610 /* If the relocation was previously an absolute relocation and
6611 this symbol will not be referred to by the relocation, we must
6612 adjust it by the value we give it in the dynamic symbol table.
6613 Otherwise leave the job up to the dynamic linker. */
6614 if (defined_p && r_type != R_MIPS_REL32)
6615 *addendp += symbol;
6616
6617 if (htab->is_vxworks)
6618 /* VxWorks uses non-relative relocations for this. */
6619 outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6620 else
6621 /* The relocation is always an REL32 relocation because we don't
6622 know where the shared library will wind up at load-time. */
6623 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6624 R_MIPS_REL32);
6625
6626 /* For strict adherence to the ABI specification, we should
6627 generate a R_MIPS_64 relocation record by itself before the
6628 _REL32/_64 record as well, such that the addend is read in as
6629 a 64-bit value (REL32 is a 32-bit relocation, after all).
6630 However, since none of the existing ELF64 MIPS dynamic
6631 loaders seems to care, we don't waste space with these
6632 artificial relocations. If this turns out to not be true,
6633 mips_elf_allocate_dynamic_relocation() should be tweaked so
6634 as to make room for a pair of dynamic relocations per
6635 invocation if ABI_64_P, and here we should generate an
6636 additional relocation record with R_MIPS_64 by itself for a
6637 NULL symbol before this relocation record. */
6638 outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6639 ABI_64_P (output_bfd)
6640 ? R_MIPS_64
6641 : R_MIPS_NONE);
6642 outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6643
6644 /* Adjust the output offset of the relocation to reference the
6645 correct location in the output file. */
6646 outrel[0].r_offset += (input_section->output_section->vma
6647 + input_section->output_offset);
6648 outrel[1].r_offset += (input_section->output_section->vma
6649 + input_section->output_offset);
6650 outrel[2].r_offset += (input_section->output_section->vma
6651 + input_section->output_offset);
6652
6653 /* Put the relocation back out. We have to use the special
6654 relocation outputter in the 64-bit case since the 64-bit
6655 relocation format is non-standard. */
6656 if (ABI_64_P (output_bfd))
6657 {
6658 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6659 (output_bfd, &outrel[0],
6660 (sreloc->contents
6661 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6662 }
6663 else if (htab->is_vxworks)
6664 {
6665 /* VxWorks uses RELA rather than REL dynamic relocations. */
6666 outrel[0].r_addend = *addendp;
6667 bfd_elf32_swap_reloca_out
6668 (output_bfd, &outrel[0],
6669 (sreloc->contents
6670 + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6671 }
6672 else
6673 bfd_elf32_swap_reloc_out
6674 (output_bfd, &outrel[0],
6675 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6676
6677 /* We've now added another relocation. */
6678 ++sreloc->reloc_count;
6679
6680 /* Make sure the output section is writable. The dynamic linker
6681 will be writing to it. */
6682 elf_section_data (input_section->output_section)->this_hdr.sh_flags
6683 |= SHF_WRITE;
6684
6685 /* On IRIX5, make an entry of compact relocation info. */
6686 if (IRIX_COMPAT (output_bfd) == ict_irix5)
6687 {
6688 asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6689 bfd_byte *cr;
6690
6691 if (scpt)
6692 {
6693 Elf32_crinfo cptrel;
6694
6695 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6696 cptrel.vaddr = (rel->r_offset
6697 + input_section->output_section->vma
6698 + input_section->output_offset);
6699 if (r_type == R_MIPS_REL32)
6700 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6701 else
6702 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6703 mips_elf_set_cr_dist2to (cptrel, 0);
6704 cptrel.konst = *addendp;
6705
6706 cr = (scpt->contents
6707 + sizeof (Elf32_External_compact_rel));
6708 mips_elf_set_cr_relvaddr (cptrel, 0);
6709 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6710 ((Elf32_External_crinfo *) cr
6711 + scpt->reloc_count));
6712 ++scpt->reloc_count;
6713 }
6714 }
6715
6716 /* If we've written this relocation for a readonly section,
6717 we need to set DF_TEXTREL again, so that we do not delete the
6718 DT_TEXTREL tag. */
6719 if (MIPS_ELF_READONLY_SECTION (input_section))
6720 info->flags |= DF_TEXTREL;
6721
6722 return TRUE;
6723 }
6724 \f
6725 /* Return the MACH for a MIPS e_flags value. */
6726
6727 unsigned long
6728 _bfd_elf_mips_mach (flagword flags)
6729 {
6730 switch (flags & EF_MIPS_MACH)
6731 {
6732 case E_MIPS_MACH_3900:
6733 return bfd_mach_mips3900;
6734
6735 case E_MIPS_MACH_4010:
6736 return bfd_mach_mips4010;
6737
6738 case E_MIPS_MACH_4100:
6739 return bfd_mach_mips4100;
6740
6741 case E_MIPS_MACH_4111:
6742 return bfd_mach_mips4111;
6743
6744 case E_MIPS_MACH_4120:
6745 return bfd_mach_mips4120;
6746
6747 case E_MIPS_MACH_4650:
6748 return bfd_mach_mips4650;
6749
6750 case E_MIPS_MACH_5400:
6751 return bfd_mach_mips5400;
6752
6753 case E_MIPS_MACH_5500:
6754 return bfd_mach_mips5500;
6755
6756 case E_MIPS_MACH_5900:
6757 return bfd_mach_mips5900;
6758
6759 case E_MIPS_MACH_9000:
6760 return bfd_mach_mips9000;
6761
6762 case E_MIPS_MACH_SB1:
6763 return bfd_mach_mips_sb1;
6764
6765 case E_MIPS_MACH_LS2E:
6766 return bfd_mach_mips_loongson_2e;
6767
6768 case E_MIPS_MACH_LS2F:
6769 return bfd_mach_mips_loongson_2f;
6770
6771 case E_MIPS_MACH_LS3A:
6772 return bfd_mach_mips_loongson_3a;
6773
6774 case E_MIPS_MACH_OCTEON3:
6775 return bfd_mach_mips_octeon3;
6776
6777 case E_MIPS_MACH_OCTEON2:
6778 return bfd_mach_mips_octeon2;
6779
6780 case E_MIPS_MACH_OCTEON:
6781 return bfd_mach_mips_octeon;
6782
6783 case E_MIPS_MACH_XLR:
6784 return bfd_mach_mips_xlr;
6785
6786 default:
6787 switch (flags & EF_MIPS_ARCH)
6788 {
6789 default:
6790 case E_MIPS_ARCH_1:
6791 return bfd_mach_mips3000;
6792
6793 case E_MIPS_ARCH_2:
6794 return bfd_mach_mips6000;
6795
6796 case E_MIPS_ARCH_3:
6797 return bfd_mach_mips4000;
6798
6799 case E_MIPS_ARCH_4:
6800 return bfd_mach_mips8000;
6801
6802 case E_MIPS_ARCH_5:
6803 return bfd_mach_mips5;
6804
6805 case E_MIPS_ARCH_32:
6806 return bfd_mach_mipsisa32;
6807
6808 case E_MIPS_ARCH_64:
6809 return bfd_mach_mipsisa64;
6810
6811 case E_MIPS_ARCH_32R2:
6812 return bfd_mach_mipsisa32r2;
6813
6814 case E_MIPS_ARCH_64R2:
6815 return bfd_mach_mipsisa64r2;
6816
6817 case E_MIPS_ARCH_32R6:
6818 return bfd_mach_mipsisa32r6;
6819
6820 case E_MIPS_ARCH_64R6:
6821 return bfd_mach_mipsisa64r6;
6822 }
6823 }
6824
6825 return 0;
6826 }
6827
6828 /* Return printable name for ABI. */
6829
6830 static INLINE char *
6831 elf_mips_abi_name (bfd *abfd)
6832 {
6833 flagword flags;
6834
6835 flags = elf_elfheader (abfd)->e_flags;
6836 switch (flags & EF_MIPS_ABI)
6837 {
6838 case 0:
6839 if (ABI_N32_P (abfd))
6840 return "N32";
6841 else if (ABI_64_P (abfd))
6842 return "64";
6843 else
6844 return "none";
6845 case E_MIPS_ABI_O32:
6846 return "O32";
6847 case E_MIPS_ABI_O64:
6848 return "O64";
6849 case E_MIPS_ABI_EABI32:
6850 return "EABI32";
6851 case E_MIPS_ABI_EABI64:
6852 return "EABI64";
6853 default:
6854 return "unknown abi";
6855 }
6856 }
6857 \f
6858 /* MIPS ELF uses two common sections. One is the usual one, and the
6859 other is for small objects. All the small objects are kept
6860 together, and then referenced via the gp pointer, which yields
6861 faster assembler code. This is what we use for the small common
6862 section. This approach is copied from ecoff.c. */
6863 static asection mips_elf_scom_section;
6864 static asymbol mips_elf_scom_symbol;
6865 static asymbol *mips_elf_scom_symbol_ptr;
6866
6867 /* MIPS ELF also uses an acommon section, which represents an
6868 allocated common symbol which may be overridden by a
6869 definition in a shared library. */
6870 static asection mips_elf_acom_section;
6871 static asymbol mips_elf_acom_symbol;
6872 static asymbol *mips_elf_acom_symbol_ptr;
6873
6874 /* This is used for both the 32-bit and the 64-bit ABI. */
6875
6876 void
6877 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6878 {
6879 elf_symbol_type *elfsym;
6880
6881 /* Handle the special MIPS section numbers that a symbol may use. */
6882 elfsym = (elf_symbol_type *) asym;
6883 switch (elfsym->internal_elf_sym.st_shndx)
6884 {
6885 case SHN_MIPS_ACOMMON:
6886 /* This section is used in a dynamically linked executable file.
6887 It is an allocated common section. The dynamic linker can
6888 either resolve these symbols to something in a shared
6889 library, or it can just leave them here. For our purposes,
6890 we can consider these symbols to be in a new section. */
6891 if (mips_elf_acom_section.name == NULL)
6892 {
6893 /* Initialize the acommon section. */
6894 mips_elf_acom_section.name = ".acommon";
6895 mips_elf_acom_section.flags = SEC_ALLOC;
6896 mips_elf_acom_section.output_section = &mips_elf_acom_section;
6897 mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6898 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6899 mips_elf_acom_symbol.name = ".acommon";
6900 mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6901 mips_elf_acom_symbol.section = &mips_elf_acom_section;
6902 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6903 }
6904 asym->section = &mips_elf_acom_section;
6905 break;
6906
6907 case SHN_COMMON:
6908 /* Common symbols less than the GP size are automatically
6909 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
6910 if (asym->value > elf_gp_size (abfd)
6911 || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6912 || IRIX_COMPAT (abfd) == ict_irix6)
6913 break;
6914 /* Fall through. */
6915 case SHN_MIPS_SCOMMON:
6916 if (mips_elf_scom_section.name == NULL)
6917 {
6918 /* Initialize the small common section. */
6919 mips_elf_scom_section.name = ".scommon";
6920 mips_elf_scom_section.flags = SEC_IS_COMMON;
6921 mips_elf_scom_section.output_section = &mips_elf_scom_section;
6922 mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6923 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6924 mips_elf_scom_symbol.name = ".scommon";
6925 mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6926 mips_elf_scom_symbol.section = &mips_elf_scom_section;
6927 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6928 }
6929 asym->section = &mips_elf_scom_section;
6930 asym->value = elfsym->internal_elf_sym.st_size;
6931 break;
6932
6933 case SHN_MIPS_SUNDEFINED:
6934 asym->section = bfd_und_section_ptr;
6935 break;
6936
6937 case SHN_MIPS_TEXT:
6938 {
6939 asection *section = bfd_get_section_by_name (abfd, ".text");
6940
6941 if (section != NULL)
6942 {
6943 asym->section = section;
6944 /* MIPS_TEXT is a bit special, the address is not an offset
6945 to the base of the .text section. So substract the section
6946 base address to make it an offset. */
6947 asym->value -= section->vma;
6948 }
6949 }
6950 break;
6951
6952 case SHN_MIPS_DATA:
6953 {
6954 asection *section = bfd_get_section_by_name (abfd, ".data");
6955
6956 if (section != NULL)
6957 {
6958 asym->section = section;
6959 /* MIPS_DATA is a bit special, the address is not an offset
6960 to the base of the .data section. So substract the section
6961 base address to make it an offset. */
6962 asym->value -= section->vma;
6963 }
6964 }
6965 break;
6966 }
6967
6968 /* If this is an odd-valued function symbol, assume it's a MIPS16
6969 or microMIPS one. */
6970 if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6971 && (asym->value & 1) != 0)
6972 {
6973 asym->value--;
6974 if (MICROMIPS_P (abfd))
6975 elfsym->internal_elf_sym.st_other
6976 = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6977 else
6978 elfsym->internal_elf_sym.st_other
6979 = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6980 }
6981 }
6982 \f
6983 /* Implement elf_backend_eh_frame_address_size. This differs from
6984 the default in the way it handles EABI64.
6985
6986 EABI64 was originally specified as an LP64 ABI, and that is what
6987 -mabi=eabi normally gives on a 64-bit target. However, gcc has
6988 historically accepted the combination of -mabi=eabi and -mlong32,
6989 and this ILP32 variation has become semi-official over time.
6990 Both forms use elf32 and have pointer-sized FDE addresses.
6991
6992 If an EABI object was generated by GCC 4.0 or above, it will have
6993 an empty .gcc_compiled_longXX section, where XX is the size of longs
6994 in bits. Unfortunately, ILP32 objects generated by earlier compilers
6995 have no special marking to distinguish them from LP64 objects.
6996
6997 We don't want users of the official LP64 ABI to be punished for the
6998 existence of the ILP32 variant, but at the same time, we don't want
6999 to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
7000 We therefore take the following approach:
7001
7002 - If ABFD contains a .gcc_compiled_longXX section, use it to
7003 determine the pointer size.
7004
7005 - Otherwise check the type of the first relocation. Assume that
7006 the LP64 ABI is being used if the relocation is of type R_MIPS_64.
7007
7008 - Otherwise punt.
7009
7010 The second check is enough to detect LP64 objects generated by pre-4.0
7011 compilers because, in the kind of output generated by those compilers,
7012 the first relocation will be associated with either a CIE personality
7013 routine or an FDE start address. Furthermore, the compilers never
7014 used a special (non-pointer) encoding for this ABI.
7015
7016 Checking the relocation type should also be safe because there is no
7017 reason to use R_MIPS_64 in an ILP32 object. Pre-4.0 compilers never
7018 did so. */
7019
7020 unsigned int
7021 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
7022 {
7023 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
7024 return 8;
7025 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
7026 {
7027 bfd_boolean long32_p, long64_p;
7028
7029 long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
7030 long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
7031 if (long32_p && long64_p)
7032 return 0;
7033 if (long32_p)
7034 return 4;
7035 if (long64_p)
7036 return 8;
7037
7038 if (sec->reloc_count > 0
7039 && elf_section_data (sec)->relocs != NULL
7040 && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
7041 == R_MIPS_64))
7042 return 8;
7043
7044 return 0;
7045 }
7046 return 4;
7047 }
7048 \f
7049 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
7050 relocations against two unnamed section symbols to resolve to the
7051 same address. For example, if we have code like:
7052
7053 lw $4,%got_disp(.data)($gp)
7054 lw $25,%got_disp(.text)($gp)
7055 jalr $25
7056
7057 then the linker will resolve both relocations to .data and the program
7058 will jump there rather than to .text.
7059
7060 We can work around this problem by giving names to local section symbols.
7061 This is also what the MIPSpro tools do. */
7062
7063 bfd_boolean
7064 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
7065 {
7066 return SGI_COMPAT (abfd);
7067 }
7068 \f
7069 /* Work over a section just before writing it out. This routine is
7070 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
7071 sections that need the SHF_MIPS_GPREL flag by name; there has to be
7072 a better way. */
7073
7074 bfd_boolean
7075 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
7076 {
7077 if (hdr->sh_type == SHT_MIPS_REGINFO
7078 && hdr->sh_size > 0)
7079 {
7080 bfd_byte buf[4];
7081
7082 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
7083 BFD_ASSERT (hdr->contents == NULL);
7084
7085 if (bfd_seek (abfd,
7086 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
7087 SEEK_SET) != 0)
7088 return FALSE;
7089 H_PUT_32 (abfd, elf_gp (abfd), buf);
7090 if (bfd_bwrite (buf, 4, abfd) != 4)
7091 return FALSE;
7092 }
7093
7094 if (hdr->sh_type == SHT_MIPS_OPTIONS
7095 && hdr->bfd_section != NULL
7096 && mips_elf_section_data (hdr->bfd_section) != NULL
7097 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
7098 {
7099 bfd_byte *contents, *l, *lend;
7100
7101 /* We stored the section contents in the tdata field in the
7102 set_section_contents routine. We save the section contents
7103 so that we don't have to read them again.
7104 At this point we know that elf_gp is set, so we can look
7105 through the section contents to see if there is an
7106 ODK_REGINFO structure. */
7107
7108 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
7109 l = contents;
7110 lend = contents + hdr->sh_size;
7111 while (l + sizeof (Elf_External_Options) <= lend)
7112 {
7113 Elf_Internal_Options intopt;
7114
7115 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7116 &intopt);
7117 if (intopt.size < sizeof (Elf_External_Options))
7118 {
7119 (*_bfd_error_handler)
7120 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
7121 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7122 break;
7123 }
7124 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7125 {
7126 bfd_byte buf[8];
7127
7128 if (bfd_seek (abfd,
7129 (hdr->sh_offset
7130 + (l - contents)
7131 + sizeof (Elf_External_Options)
7132 + (sizeof (Elf64_External_RegInfo) - 8)),
7133 SEEK_SET) != 0)
7134 return FALSE;
7135 H_PUT_64 (abfd, elf_gp (abfd), buf);
7136 if (bfd_bwrite (buf, 8, abfd) != 8)
7137 return FALSE;
7138 }
7139 else if (intopt.kind == ODK_REGINFO)
7140 {
7141 bfd_byte buf[4];
7142
7143 if (bfd_seek (abfd,
7144 (hdr->sh_offset
7145 + (l - contents)
7146 + sizeof (Elf_External_Options)
7147 + (sizeof (Elf32_External_RegInfo) - 4)),
7148 SEEK_SET) != 0)
7149 return FALSE;
7150 H_PUT_32 (abfd, elf_gp (abfd), buf);
7151 if (bfd_bwrite (buf, 4, abfd) != 4)
7152 return FALSE;
7153 }
7154 l += intopt.size;
7155 }
7156 }
7157
7158 if (hdr->bfd_section != NULL)
7159 {
7160 const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
7161
7162 /* .sbss is not handled specially here because the GNU/Linux
7163 prelinker can convert .sbss from NOBITS to PROGBITS and
7164 changing it back to NOBITS breaks the binary. The entry in
7165 _bfd_mips_elf_special_sections will ensure the correct flags
7166 are set on .sbss if BFD creates it without reading it from an
7167 input file, and without special handling here the flags set
7168 on it in an input file will be followed. */
7169 if (strcmp (name, ".sdata") == 0
7170 || strcmp (name, ".lit8") == 0
7171 || strcmp (name, ".lit4") == 0)
7172 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7173 else if (strcmp (name, ".srdata") == 0)
7174 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7175 else if (strcmp (name, ".compact_rel") == 0)
7176 hdr->sh_flags = 0;
7177 else if (strcmp (name, ".rtproc") == 0)
7178 {
7179 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7180 {
7181 unsigned int adjust;
7182
7183 adjust = hdr->sh_size % hdr->sh_addralign;
7184 if (adjust != 0)
7185 hdr->sh_size += hdr->sh_addralign - adjust;
7186 }
7187 }
7188 }
7189
7190 return TRUE;
7191 }
7192
7193 /* Handle a MIPS specific section when reading an object file. This
7194 is called when elfcode.h finds a section with an unknown type.
7195 This routine supports both the 32-bit and 64-bit ELF ABI.
7196
7197 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7198 how to. */
7199
7200 bfd_boolean
7201 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7202 Elf_Internal_Shdr *hdr,
7203 const char *name,
7204 int shindex)
7205 {
7206 flagword flags = 0;
7207
7208 /* There ought to be a place to keep ELF backend specific flags, but
7209 at the moment there isn't one. We just keep track of the
7210 sections by their name, instead. Fortunately, the ABI gives
7211 suggested names for all the MIPS specific sections, so we will
7212 probably get away with this. */
7213 switch (hdr->sh_type)
7214 {
7215 case SHT_MIPS_LIBLIST:
7216 if (strcmp (name, ".liblist") != 0)
7217 return FALSE;
7218 break;
7219 case SHT_MIPS_MSYM:
7220 if (strcmp (name, ".msym") != 0)
7221 return FALSE;
7222 break;
7223 case SHT_MIPS_CONFLICT:
7224 if (strcmp (name, ".conflict") != 0)
7225 return FALSE;
7226 break;
7227 case SHT_MIPS_GPTAB:
7228 if (! CONST_STRNEQ (name, ".gptab."))
7229 return FALSE;
7230 break;
7231 case SHT_MIPS_UCODE:
7232 if (strcmp (name, ".ucode") != 0)
7233 return FALSE;
7234 break;
7235 case SHT_MIPS_DEBUG:
7236 if (strcmp (name, ".mdebug") != 0)
7237 return FALSE;
7238 flags = SEC_DEBUGGING;
7239 break;
7240 case SHT_MIPS_REGINFO:
7241 if (strcmp (name, ".reginfo") != 0
7242 || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7243 return FALSE;
7244 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7245 break;
7246 case SHT_MIPS_IFACE:
7247 if (strcmp (name, ".MIPS.interfaces") != 0)
7248 return FALSE;
7249 break;
7250 case SHT_MIPS_CONTENT:
7251 if (! CONST_STRNEQ (name, ".MIPS.content"))
7252 return FALSE;
7253 break;
7254 case SHT_MIPS_OPTIONS:
7255 if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7256 return FALSE;
7257 break;
7258 case SHT_MIPS_ABIFLAGS:
7259 if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7260 return FALSE;
7261 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7262 break;
7263 case SHT_MIPS_DWARF:
7264 if (! CONST_STRNEQ (name, ".debug_")
7265 && ! CONST_STRNEQ (name, ".zdebug_"))
7266 return FALSE;
7267 break;
7268 case SHT_MIPS_SYMBOL_LIB:
7269 if (strcmp (name, ".MIPS.symlib") != 0)
7270 return FALSE;
7271 break;
7272 case SHT_MIPS_EVENTS:
7273 if (! CONST_STRNEQ (name, ".MIPS.events")
7274 && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7275 return FALSE;
7276 break;
7277 default:
7278 break;
7279 }
7280
7281 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7282 return FALSE;
7283
7284 if (flags)
7285 {
7286 if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7287 (bfd_get_section_flags (abfd,
7288 hdr->bfd_section)
7289 | flags)))
7290 return FALSE;
7291 }
7292
7293 if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7294 {
7295 Elf_External_ABIFlags_v0 ext;
7296
7297 if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7298 &ext, 0, sizeof ext))
7299 return FALSE;
7300 bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7301 &mips_elf_tdata (abfd)->abiflags);
7302 if (mips_elf_tdata (abfd)->abiflags.version != 0)
7303 return FALSE;
7304 mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7305 }
7306
7307 /* FIXME: We should record sh_info for a .gptab section. */
7308
7309 /* For a .reginfo section, set the gp value in the tdata information
7310 from the contents of this section. We need the gp value while
7311 processing relocs, so we just get it now. The .reginfo section
7312 is not used in the 64-bit MIPS ELF ABI. */
7313 if (hdr->sh_type == SHT_MIPS_REGINFO)
7314 {
7315 Elf32_External_RegInfo ext;
7316 Elf32_RegInfo s;
7317
7318 if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7319 &ext, 0, sizeof ext))
7320 return FALSE;
7321 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7322 elf_gp (abfd) = s.ri_gp_value;
7323 }
7324
7325 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7326 set the gp value based on what we find. We may see both
7327 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7328 they should agree. */
7329 if (hdr->sh_type == SHT_MIPS_OPTIONS)
7330 {
7331 bfd_byte *contents, *l, *lend;
7332
7333 contents = bfd_malloc (hdr->sh_size);
7334 if (contents == NULL)
7335 return FALSE;
7336 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7337 0, hdr->sh_size))
7338 {
7339 free (contents);
7340 return FALSE;
7341 }
7342 l = contents;
7343 lend = contents + hdr->sh_size;
7344 while (l + sizeof (Elf_External_Options) <= lend)
7345 {
7346 Elf_Internal_Options intopt;
7347
7348 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7349 &intopt);
7350 if (intopt.size < sizeof (Elf_External_Options))
7351 {
7352 (*_bfd_error_handler)
7353 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
7354 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7355 break;
7356 }
7357 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7358 {
7359 Elf64_Internal_RegInfo intreg;
7360
7361 bfd_mips_elf64_swap_reginfo_in
7362 (abfd,
7363 ((Elf64_External_RegInfo *)
7364 (l + sizeof (Elf_External_Options))),
7365 &intreg);
7366 elf_gp (abfd) = intreg.ri_gp_value;
7367 }
7368 else if (intopt.kind == ODK_REGINFO)
7369 {
7370 Elf32_RegInfo intreg;
7371
7372 bfd_mips_elf32_swap_reginfo_in
7373 (abfd,
7374 ((Elf32_External_RegInfo *)
7375 (l + sizeof (Elf_External_Options))),
7376 &intreg);
7377 elf_gp (abfd) = intreg.ri_gp_value;
7378 }
7379 l += intopt.size;
7380 }
7381 free (contents);
7382 }
7383
7384 return TRUE;
7385 }
7386
7387 /* Set the correct type for a MIPS ELF section. We do this by the
7388 section name, which is a hack, but ought to work. This routine is
7389 used by both the 32-bit and the 64-bit ABI. */
7390
7391 bfd_boolean
7392 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7393 {
7394 const char *name = bfd_get_section_name (abfd, sec);
7395
7396 if (strcmp (name, ".liblist") == 0)
7397 {
7398 hdr->sh_type = SHT_MIPS_LIBLIST;
7399 hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7400 /* The sh_link field is set in final_write_processing. */
7401 }
7402 else if (strcmp (name, ".conflict") == 0)
7403 hdr->sh_type = SHT_MIPS_CONFLICT;
7404 else if (CONST_STRNEQ (name, ".gptab."))
7405 {
7406 hdr->sh_type = SHT_MIPS_GPTAB;
7407 hdr->sh_entsize = sizeof (Elf32_External_gptab);
7408 /* The sh_info field is set in final_write_processing. */
7409 }
7410 else if (strcmp (name, ".ucode") == 0)
7411 hdr->sh_type = SHT_MIPS_UCODE;
7412 else if (strcmp (name, ".mdebug") == 0)
7413 {
7414 hdr->sh_type = SHT_MIPS_DEBUG;
7415 /* In a shared object on IRIX 5.3, the .mdebug section has an
7416 entsize of 0. FIXME: Does this matter? */
7417 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7418 hdr->sh_entsize = 0;
7419 else
7420 hdr->sh_entsize = 1;
7421 }
7422 else if (strcmp (name, ".reginfo") == 0)
7423 {
7424 hdr->sh_type = SHT_MIPS_REGINFO;
7425 /* In a shared object on IRIX 5.3, the .reginfo section has an
7426 entsize of 0x18. FIXME: Does this matter? */
7427 if (SGI_COMPAT (abfd))
7428 {
7429 if ((abfd->flags & DYNAMIC) != 0)
7430 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7431 else
7432 hdr->sh_entsize = 1;
7433 }
7434 else
7435 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7436 }
7437 else if (SGI_COMPAT (abfd)
7438 && (strcmp (name, ".hash") == 0
7439 || strcmp (name, ".dynamic") == 0
7440 || strcmp (name, ".dynstr") == 0))
7441 {
7442 if (SGI_COMPAT (abfd))
7443 hdr->sh_entsize = 0;
7444 #if 0
7445 /* This isn't how the IRIX6 linker behaves. */
7446 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7447 #endif
7448 }
7449 else if (strcmp (name, ".got") == 0
7450 || strcmp (name, ".srdata") == 0
7451 || strcmp (name, ".sdata") == 0
7452 || strcmp (name, ".sbss") == 0
7453 || strcmp (name, ".lit4") == 0
7454 || strcmp (name, ".lit8") == 0)
7455 hdr->sh_flags |= SHF_MIPS_GPREL;
7456 else if (strcmp (name, ".MIPS.interfaces") == 0)
7457 {
7458 hdr->sh_type = SHT_MIPS_IFACE;
7459 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7460 }
7461 else if (CONST_STRNEQ (name, ".MIPS.content"))
7462 {
7463 hdr->sh_type = SHT_MIPS_CONTENT;
7464 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7465 /* The sh_info field is set in final_write_processing. */
7466 }
7467 else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7468 {
7469 hdr->sh_type = SHT_MIPS_OPTIONS;
7470 hdr->sh_entsize = 1;
7471 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7472 }
7473 else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7474 {
7475 hdr->sh_type = SHT_MIPS_ABIFLAGS;
7476 hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7477 }
7478 else if (CONST_STRNEQ (name, ".debug_")
7479 || CONST_STRNEQ (name, ".zdebug_"))
7480 {
7481 hdr->sh_type = SHT_MIPS_DWARF;
7482
7483 /* Irix facilities such as libexc expect a single .debug_frame
7484 per executable, the system ones have NOSTRIP set and the linker
7485 doesn't merge sections with different flags so ... */
7486 if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7487 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7488 }
7489 else if (strcmp (name, ".MIPS.symlib") == 0)
7490 {
7491 hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7492 /* The sh_link and sh_info fields are set in
7493 final_write_processing. */
7494 }
7495 else if (CONST_STRNEQ (name, ".MIPS.events")
7496 || CONST_STRNEQ (name, ".MIPS.post_rel"))
7497 {
7498 hdr->sh_type = SHT_MIPS_EVENTS;
7499 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7500 /* The sh_link field is set in final_write_processing. */
7501 }
7502 else if (strcmp (name, ".msym") == 0)
7503 {
7504 hdr->sh_type = SHT_MIPS_MSYM;
7505 hdr->sh_flags |= SHF_ALLOC;
7506 hdr->sh_entsize = 8;
7507 }
7508
7509 /* The generic elf_fake_sections will set up REL_HDR using the default
7510 kind of relocations. We used to set up a second header for the
7511 non-default kind of relocations here, but only NewABI would use
7512 these, and the IRIX ld doesn't like resulting empty RELA sections.
7513 Thus we create those header only on demand now. */
7514
7515 return TRUE;
7516 }
7517
7518 /* Given a BFD section, try to locate the corresponding ELF section
7519 index. This is used by both the 32-bit and the 64-bit ABI.
7520 Actually, it's not clear to me that the 64-bit ABI supports these,
7521 but for non-PIC objects we will certainly want support for at least
7522 the .scommon section. */
7523
7524 bfd_boolean
7525 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7526 asection *sec, int *retval)
7527 {
7528 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7529 {
7530 *retval = SHN_MIPS_SCOMMON;
7531 return TRUE;
7532 }
7533 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7534 {
7535 *retval = SHN_MIPS_ACOMMON;
7536 return TRUE;
7537 }
7538 return FALSE;
7539 }
7540 \f
7541 /* Hook called by the linker routine which adds symbols from an object
7542 file. We must handle the special MIPS section numbers here. */
7543
7544 bfd_boolean
7545 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7546 Elf_Internal_Sym *sym, const char **namep,
7547 flagword *flagsp ATTRIBUTE_UNUSED,
7548 asection **secp, bfd_vma *valp)
7549 {
7550 if (SGI_COMPAT (abfd)
7551 && (abfd->flags & DYNAMIC) != 0
7552 && strcmp (*namep, "_rld_new_interface") == 0)
7553 {
7554 /* Skip IRIX5 rld entry name. */
7555 *namep = NULL;
7556 return TRUE;
7557 }
7558
7559 /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7560 a SECTION *ABS*. This causes ld to think it can resolve _gp_disp
7561 by setting a DT_NEEDED for the shared object. Since _gp_disp is
7562 a magic symbol resolved by the linker, we ignore this bogus definition
7563 of _gp_disp. New ABI objects do not suffer from this problem so this
7564 is not done for them. */
7565 if (!NEWABI_P(abfd)
7566 && (sym->st_shndx == SHN_ABS)
7567 && (strcmp (*namep, "_gp_disp") == 0))
7568 {
7569 *namep = NULL;
7570 return TRUE;
7571 }
7572
7573 switch (sym->st_shndx)
7574 {
7575 case SHN_COMMON:
7576 /* Common symbols less than the GP size are automatically
7577 treated as SHN_MIPS_SCOMMON symbols. */
7578 if (sym->st_size > elf_gp_size (abfd)
7579 || ELF_ST_TYPE (sym->st_info) == STT_TLS
7580 || IRIX_COMPAT (abfd) == ict_irix6)
7581 break;
7582 /* Fall through. */
7583 case SHN_MIPS_SCOMMON:
7584 *secp = bfd_make_section_old_way (abfd, ".scommon");
7585 (*secp)->flags |= SEC_IS_COMMON;
7586 *valp = sym->st_size;
7587 break;
7588
7589 case SHN_MIPS_TEXT:
7590 /* This section is used in a shared object. */
7591 if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7592 {
7593 asymbol *elf_text_symbol;
7594 asection *elf_text_section;
7595 bfd_size_type amt = sizeof (asection);
7596
7597 elf_text_section = bfd_zalloc (abfd, amt);
7598 if (elf_text_section == NULL)
7599 return FALSE;
7600
7601 amt = sizeof (asymbol);
7602 elf_text_symbol = bfd_zalloc (abfd, amt);
7603 if (elf_text_symbol == NULL)
7604 return FALSE;
7605
7606 /* Initialize the section. */
7607
7608 mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7609 mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7610
7611 elf_text_section->symbol = elf_text_symbol;
7612 elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7613
7614 elf_text_section->name = ".text";
7615 elf_text_section->flags = SEC_NO_FLAGS;
7616 elf_text_section->output_section = NULL;
7617 elf_text_section->owner = abfd;
7618 elf_text_symbol->name = ".text";
7619 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7620 elf_text_symbol->section = elf_text_section;
7621 }
7622 /* This code used to do *secp = bfd_und_section_ptr if
7623 bfd_link_pic (info). I don't know why, and that doesn't make sense,
7624 so I took it out. */
7625 *secp = mips_elf_tdata (abfd)->elf_text_section;
7626 break;
7627
7628 case SHN_MIPS_ACOMMON:
7629 /* Fall through. XXX Can we treat this as allocated data? */
7630 case SHN_MIPS_DATA:
7631 /* This section is used in a shared object. */
7632 if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7633 {
7634 asymbol *elf_data_symbol;
7635 asection *elf_data_section;
7636 bfd_size_type amt = sizeof (asection);
7637
7638 elf_data_section = bfd_zalloc (abfd, amt);
7639 if (elf_data_section == NULL)
7640 return FALSE;
7641
7642 amt = sizeof (asymbol);
7643 elf_data_symbol = bfd_zalloc (abfd, amt);
7644 if (elf_data_symbol == NULL)
7645 return FALSE;
7646
7647 /* Initialize the section. */
7648
7649 mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7650 mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7651
7652 elf_data_section->symbol = elf_data_symbol;
7653 elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7654
7655 elf_data_section->name = ".data";
7656 elf_data_section->flags = SEC_NO_FLAGS;
7657 elf_data_section->output_section = NULL;
7658 elf_data_section->owner = abfd;
7659 elf_data_symbol->name = ".data";
7660 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7661 elf_data_symbol->section = elf_data_section;
7662 }
7663 /* This code used to do *secp = bfd_und_section_ptr if
7664 bfd_link_pic (info). I don't know why, and that doesn't make sense,
7665 so I took it out. */
7666 *secp = mips_elf_tdata (abfd)->elf_data_section;
7667 break;
7668
7669 case SHN_MIPS_SUNDEFINED:
7670 *secp = bfd_und_section_ptr;
7671 break;
7672 }
7673
7674 if (SGI_COMPAT (abfd)
7675 && ! bfd_link_pic (info)
7676 && info->output_bfd->xvec == abfd->xvec
7677 && strcmp (*namep, "__rld_obj_head") == 0)
7678 {
7679 struct elf_link_hash_entry *h;
7680 struct bfd_link_hash_entry *bh;
7681
7682 /* Mark __rld_obj_head as dynamic. */
7683 bh = NULL;
7684 if (! (_bfd_generic_link_add_one_symbol
7685 (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7686 get_elf_backend_data (abfd)->collect, &bh)))
7687 return FALSE;
7688
7689 h = (struct elf_link_hash_entry *) bh;
7690 h->non_elf = 0;
7691 h->def_regular = 1;
7692 h->type = STT_OBJECT;
7693
7694 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7695 return FALSE;
7696
7697 mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7698 mips_elf_hash_table (info)->rld_symbol = h;
7699 }
7700
7701 /* If this is a mips16 text symbol, add 1 to the value to make it
7702 odd. This will cause something like .word SYM to come up with
7703 the right value when it is loaded into the PC. */
7704 if (ELF_ST_IS_COMPRESSED (sym->st_other))
7705 ++*valp;
7706
7707 return TRUE;
7708 }
7709
7710 /* This hook function is called before the linker writes out a global
7711 symbol. We mark symbols as small common if appropriate. This is
7712 also where we undo the increment of the value for a mips16 symbol. */
7713
7714 int
7715 _bfd_mips_elf_link_output_symbol_hook
7716 (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7717 const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7718 asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7719 {
7720 /* If we see a common symbol, which implies a relocatable link, then
7721 if a symbol was small common in an input file, mark it as small
7722 common in the output file. */
7723 if (sym->st_shndx == SHN_COMMON
7724 && strcmp (input_sec->name, ".scommon") == 0)
7725 sym->st_shndx = SHN_MIPS_SCOMMON;
7726
7727 if (ELF_ST_IS_COMPRESSED (sym->st_other))
7728 sym->st_value &= ~1;
7729
7730 return 1;
7731 }
7732 \f
7733 /* Functions for the dynamic linker. */
7734
7735 /* Create dynamic sections when linking against a dynamic object. */
7736
7737 bfd_boolean
7738 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7739 {
7740 struct elf_link_hash_entry *h;
7741 struct bfd_link_hash_entry *bh;
7742 flagword flags;
7743 register asection *s;
7744 const char * const *namep;
7745 struct mips_elf_link_hash_table *htab;
7746
7747 htab = mips_elf_hash_table (info);
7748 BFD_ASSERT (htab != NULL);
7749
7750 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7751 | SEC_LINKER_CREATED | SEC_READONLY);
7752
7753 /* The psABI requires a read-only .dynamic section, but the VxWorks
7754 EABI doesn't. */
7755 if (!htab->is_vxworks)
7756 {
7757 s = bfd_get_linker_section (abfd, ".dynamic");
7758 if (s != NULL)
7759 {
7760 if (! bfd_set_section_flags (abfd, s, flags))
7761 return FALSE;
7762 }
7763 }
7764
7765 /* We need to create .got section. */
7766 if (!mips_elf_create_got_section (abfd, info))
7767 return FALSE;
7768
7769 if (! mips_elf_rel_dyn_section (info, TRUE))
7770 return FALSE;
7771
7772 /* Create .stub section. */
7773 s = bfd_make_section_anyway_with_flags (abfd,
7774 MIPS_ELF_STUB_SECTION_NAME (abfd),
7775 flags | SEC_CODE);
7776 if (s == NULL
7777 || ! bfd_set_section_alignment (abfd, s,
7778 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7779 return FALSE;
7780 htab->sstubs = s;
7781
7782 if (!mips_elf_hash_table (info)->use_rld_obj_head
7783 && bfd_link_executable (info)
7784 && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7785 {
7786 s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7787 flags &~ (flagword) SEC_READONLY);
7788 if (s == NULL
7789 || ! bfd_set_section_alignment (abfd, s,
7790 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7791 return FALSE;
7792 }
7793
7794 /* On IRIX5, we adjust add some additional symbols and change the
7795 alignments of several sections. There is no ABI documentation
7796 indicating that this is necessary on IRIX6, nor any evidence that
7797 the linker takes such action. */
7798 if (IRIX_COMPAT (abfd) == ict_irix5)
7799 {
7800 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7801 {
7802 bh = NULL;
7803 if (! (_bfd_generic_link_add_one_symbol
7804 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7805 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7806 return FALSE;
7807
7808 h = (struct elf_link_hash_entry *) bh;
7809 h->non_elf = 0;
7810 h->def_regular = 1;
7811 h->type = STT_SECTION;
7812
7813 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7814 return FALSE;
7815 }
7816
7817 /* We need to create a .compact_rel section. */
7818 if (SGI_COMPAT (abfd))
7819 {
7820 if (!mips_elf_create_compact_rel_section (abfd, info))
7821 return FALSE;
7822 }
7823
7824 /* Change alignments of some sections. */
7825 s = bfd_get_linker_section (abfd, ".hash");
7826 if (s != NULL)
7827 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7828
7829 s = bfd_get_linker_section (abfd, ".dynsym");
7830 if (s != NULL)
7831 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7832
7833 s = bfd_get_linker_section (abfd, ".dynstr");
7834 if (s != NULL)
7835 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7836
7837 /* ??? */
7838 s = bfd_get_section_by_name (abfd, ".reginfo");
7839 if (s != NULL)
7840 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7841
7842 s = bfd_get_linker_section (abfd, ".dynamic");
7843 if (s != NULL)
7844 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7845 }
7846
7847 if (bfd_link_executable (info))
7848 {
7849 const char *name;
7850
7851 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7852 bh = NULL;
7853 if (!(_bfd_generic_link_add_one_symbol
7854 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7855 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7856 return FALSE;
7857
7858 h = (struct elf_link_hash_entry *) bh;
7859 h->non_elf = 0;
7860 h->def_regular = 1;
7861 h->type = STT_SECTION;
7862
7863 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7864 return FALSE;
7865
7866 if (! mips_elf_hash_table (info)->use_rld_obj_head)
7867 {
7868 /* __rld_map is a four byte word located in the .data section
7869 and is filled in by the rtld to contain a pointer to
7870 the _r_debug structure. Its symbol value will be set in
7871 _bfd_mips_elf_finish_dynamic_symbol. */
7872 s = bfd_get_linker_section (abfd, ".rld_map");
7873 BFD_ASSERT (s != NULL);
7874
7875 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7876 bh = NULL;
7877 if (!(_bfd_generic_link_add_one_symbol
7878 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7879 get_elf_backend_data (abfd)->collect, &bh)))
7880 return FALSE;
7881
7882 h = (struct elf_link_hash_entry *) bh;
7883 h->non_elf = 0;
7884 h->def_regular = 1;
7885 h->type = STT_OBJECT;
7886
7887 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7888 return FALSE;
7889 mips_elf_hash_table (info)->rld_symbol = h;
7890 }
7891 }
7892
7893 /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7894 Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol. */
7895 if (!_bfd_elf_create_dynamic_sections (abfd, info))
7896 return FALSE;
7897
7898 /* Cache the sections created above. */
7899 htab->splt = bfd_get_linker_section (abfd, ".plt");
7900 htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7901 if (htab->is_vxworks)
7902 {
7903 htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7904 htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7905 }
7906 else
7907 htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7908 if (!htab->sdynbss
7909 || (htab->is_vxworks && !htab->srelbss && !bfd_link_pic (info))
7910 || !htab->srelplt
7911 || !htab->splt)
7912 abort ();
7913
7914 /* Do the usual VxWorks handling. */
7915 if (htab->is_vxworks
7916 && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7917 return FALSE;
7918
7919 return TRUE;
7920 }
7921 \f
7922 /* Return true if relocation REL against section SEC is a REL rather than
7923 RELA relocation. RELOCS is the first relocation in the section and
7924 ABFD is the bfd that contains SEC. */
7925
7926 static bfd_boolean
7927 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7928 const Elf_Internal_Rela *relocs,
7929 const Elf_Internal_Rela *rel)
7930 {
7931 Elf_Internal_Shdr *rel_hdr;
7932 const struct elf_backend_data *bed;
7933
7934 /* To determine which flavor of relocation this is, we depend on the
7935 fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR. */
7936 rel_hdr = elf_section_data (sec)->rel.hdr;
7937 if (rel_hdr == NULL)
7938 return FALSE;
7939 bed = get_elf_backend_data (abfd);
7940 return ((size_t) (rel - relocs)
7941 < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7942 }
7943
7944 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7945 HOWTO is the relocation's howto and CONTENTS points to the contents
7946 of the section that REL is against. */
7947
7948 static bfd_vma
7949 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7950 reloc_howto_type *howto, bfd_byte *contents)
7951 {
7952 bfd_byte *location;
7953 unsigned int r_type;
7954 bfd_vma addend;
7955 bfd_vma bytes;
7956
7957 r_type = ELF_R_TYPE (abfd, rel->r_info);
7958 location = contents + rel->r_offset;
7959
7960 /* Get the addend, which is stored in the input file. */
7961 _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7962 bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
7963 _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7964
7965 addend = bytes & howto->src_mask;
7966
7967 /* Shift is 2, unusually, for microMIPS JALX. Adjust the addend
7968 accordingly. */
7969 if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
7970 addend <<= 1;
7971
7972 return addend;
7973 }
7974
7975 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7976 and *ADDEND is the addend for REL itself. Look for the LO16 relocation
7977 and update *ADDEND with the final addend. Return true on success
7978 or false if the LO16 could not be found. RELEND is the exclusive
7979 upper bound on the relocations for REL's section. */
7980
7981 static bfd_boolean
7982 mips_elf_add_lo16_rel_addend (bfd *abfd,
7983 const Elf_Internal_Rela *rel,
7984 const Elf_Internal_Rela *relend,
7985 bfd_byte *contents, bfd_vma *addend)
7986 {
7987 unsigned int r_type, lo16_type;
7988 const Elf_Internal_Rela *lo16_relocation;
7989 reloc_howto_type *lo16_howto;
7990 bfd_vma l;
7991
7992 r_type = ELF_R_TYPE (abfd, rel->r_info);
7993 if (mips16_reloc_p (r_type))
7994 lo16_type = R_MIPS16_LO16;
7995 else if (micromips_reloc_p (r_type))
7996 lo16_type = R_MICROMIPS_LO16;
7997 else if (r_type == R_MIPS_PCHI16)
7998 lo16_type = R_MIPS_PCLO16;
7999 else
8000 lo16_type = R_MIPS_LO16;
8001
8002 /* The combined value is the sum of the HI16 addend, left-shifted by
8003 sixteen bits, and the LO16 addend, sign extended. (Usually, the
8004 code does a `lui' of the HI16 value, and then an `addiu' of the
8005 LO16 value.)
8006
8007 Scan ahead to find a matching LO16 relocation.
8008
8009 According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
8010 be immediately following. However, for the IRIX6 ABI, the next
8011 relocation may be a composed relocation consisting of several
8012 relocations for the same address. In that case, the R_MIPS_LO16
8013 relocation may occur as one of these. We permit a similar
8014 extension in general, as that is useful for GCC.
8015
8016 In some cases GCC dead code elimination removes the LO16 but keeps
8017 the corresponding HI16. This is strictly speaking a violation of
8018 the ABI but not immediately harmful. */
8019 lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
8020 if (lo16_relocation == NULL)
8021 return FALSE;
8022
8023 /* Obtain the addend kept there. */
8024 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
8025 l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
8026
8027 l <<= lo16_howto->rightshift;
8028 l = _bfd_mips_elf_sign_extend (l, 16);
8029
8030 *addend <<= 16;
8031 *addend += l;
8032 return TRUE;
8033 }
8034
8035 /* Try to read the contents of section SEC in bfd ABFD. Return true and
8036 store the contents in *CONTENTS on success. Assume that *CONTENTS
8037 already holds the contents if it is nonull on entry. */
8038
8039 static bfd_boolean
8040 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
8041 {
8042 if (*contents)
8043 return TRUE;
8044
8045 /* Get cached copy if it exists. */
8046 if (elf_section_data (sec)->this_hdr.contents != NULL)
8047 {
8048 *contents = elf_section_data (sec)->this_hdr.contents;
8049 return TRUE;
8050 }
8051
8052 return bfd_malloc_and_get_section (abfd, sec, contents);
8053 }
8054
8055 /* Make a new PLT record to keep internal data. */
8056
8057 static struct plt_entry *
8058 mips_elf_make_plt_record (bfd *abfd)
8059 {
8060 struct plt_entry *entry;
8061
8062 entry = bfd_zalloc (abfd, sizeof (*entry));
8063 if (entry == NULL)
8064 return NULL;
8065
8066 entry->stub_offset = MINUS_ONE;
8067 entry->mips_offset = MINUS_ONE;
8068 entry->comp_offset = MINUS_ONE;
8069 entry->gotplt_index = MINUS_ONE;
8070 return entry;
8071 }
8072
8073 /* Look through the relocs for a section during the first phase, and
8074 allocate space in the global offset table and record the need for
8075 standard MIPS and compressed procedure linkage table entries. */
8076
8077 bfd_boolean
8078 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
8079 asection *sec, const Elf_Internal_Rela *relocs)
8080 {
8081 const char *name;
8082 bfd *dynobj;
8083 Elf_Internal_Shdr *symtab_hdr;
8084 struct elf_link_hash_entry **sym_hashes;
8085 size_t extsymoff;
8086 const Elf_Internal_Rela *rel;
8087 const Elf_Internal_Rela *rel_end;
8088 asection *sreloc;
8089 const struct elf_backend_data *bed;
8090 struct mips_elf_link_hash_table *htab;
8091 bfd_byte *contents;
8092 bfd_vma addend;
8093 reloc_howto_type *howto;
8094
8095 if (bfd_link_relocatable (info))
8096 return TRUE;
8097
8098 htab = mips_elf_hash_table (info);
8099 BFD_ASSERT (htab != NULL);
8100
8101 dynobj = elf_hash_table (info)->dynobj;
8102 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8103 sym_hashes = elf_sym_hashes (abfd);
8104 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8105
8106 bed = get_elf_backend_data (abfd);
8107 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
8108
8109 /* Check for the mips16 stub sections. */
8110
8111 name = bfd_get_section_name (abfd, sec);
8112 if (FN_STUB_P (name))
8113 {
8114 unsigned long r_symndx;
8115
8116 /* Look at the relocation information to figure out which symbol
8117 this is for. */
8118
8119 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8120 if (r_symndx == 0)
8121 {
8122 (*_bfd_error_handler)
8123 (_("%B: Warning: cannot determine the target function for"
8124 " stub section `%s'"),
8125 abfd, name);
8126 bfd_set_error (bfd_error_bad_value);
8127 return FALSE;
8128 }
8129
8130 if (r_symndx < extsymoff
8131 || sym_hashes[r_symndx - extsymoff] == NULL)
8132 {
8133 asection *o;
8134
8135 /* This stub is for a local symbol. This stub will only be
8136 needed if there is some relocation in this BFD, other
8137 than a 16 bit function call, which refers to this symbol. */
8138 for (o = abfd->sections; o != NULL; o = o->next)
8139 {
8140 Elf_Internal_Rela *sec_relocs;
8141 const Elf_Internal_Rela *r, *rend;
8142
8143 /* We can ignore stub sections when looking for relocs. */
8144 if ((o->flags & SEC_RELOC) == 0
8145 || o->reloc_count == 0
8146 || section_allows_mips16_refs_p (o))
8147 continue;
8148
8149 sec_relocs
8150 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8151 info->keep_memory);
8152 if (sec_relocs == NULL)
8153 return FALSE;
8154
8155 rend = sec_relocs + o->reloc_count;
8156 for (r = sec_relocs; r < rend; r++)
8157 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8158 && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
8159 break;
8160
8161 if (elf_section_data (o)->relocs != sec_relocs)
8162 free (sec_relocs);
8163
8164 if (r < rend)
8165 break;
8166 }
8167
8168 if (o == NULL)
8169 {
8170 /* There is no non-call reloc for this stub, so we do
8171 not need it. Since this function is called before
8172 the linker maps input sections to output sections, we
8173 can easily discard it by setting the SEC_EXCLUDE
8174 flag. */
8175 sec->flags |= SEC_EXCLUDE;
8176 return TRUE;
8177 }
8178
8179 /* Record this stub in an array of local symbol stubs for
8180 this BFD. */
8181 if (mips_elf_tdata (abfd)->local_stubs == NULL)
8182 {
8183 unsigned long symcount;
8184 asection **n;
8185 bfd_size_type amt;
8186
8187 if (elf_bad_symtab (abfd))
8188 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8189 else
8190 symcount = symtab_hdr->sh_info;
8191 amt = symcount * sizeof (asection *);
8192 n = bfd_zalloc (abfd, amt);
8193 if (n == NULL)
8194 return FALSE;
8195 mips_elf_tdata (abfd)->local_stubs = n;
8196 }
8197
8198 sec->flags |= SEC_KEEP;
8199 mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8200
8201 /* We don't need to set mips16_stubs_seen in this case.
8202 That flag is used to see whether we need to look through
8203 the global symbol table for stubs. We don't need to set
8204 it here, because we just have a local stub. */
8205 }
8206 else
8207 {
8208 struct mips_elf_link_hash_entry *h;
8209
8210 h = ((struct mips_elf_link_hash_entry *)
8211 sym_hashes[r_symndx - extsymoff]);
8212
8213 while (h->root.root.type == bfd_link_hash_indirect
8214 || h->root.root.type == bfd_link_hash_warning)
8215 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8216
8217 /* H is the symbol this stub is for. */
8218
8219 /* If we already have an appropriate stub for this function, we
8220 don't need another one, so we can discard this one. Since
8221 this function is called before the linker maps input sections
8222 to output sections, we can easily discard it by setting the
8223 SEC_EXCLUDE flag. */
8224 if (h->fn_stub != NULL)
8225 {
8226 sec->flags |= SEC_EXCLUDE;
8227 return TRUE;
8228 }
8229
8230 sec->flags |= SEC_KEEP;
8231 h->fn_stub = sec;
8232 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8233 }
8234 }
8235 else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8236 {
8237 unsigned long r_symndx;
8238 struct mips_elf_link_hash_entry *h;
8239 asection **loc;
8240
8241 /* Look at the relocation information to figure out which symbol
8242 this is for. */
8243
8244 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8245 if (r_symndx == 0)
8246 {
8247 (*_bfd_error_handler)
8248 (_("%B: Warning: cannot determine the target function for"
8249 " stub section `%s'"),
8250 abfd, name);
8251 bfd_set_error (bfd_error_bad_value);
8252 return FALSE;
8253 }
8254
8255 if (r_symndx < extsymoff
8256 || sym_hashes[r_symndx - extsymoff] == NULL)
8257 {
8258 asection *o;
8259
8260 /* This stub is for a local symbol. This stub will only be
8261 needed if there is some relocation (R_MIPS16_26) in this BFD
8262 that refers to this symbol. */
8263 for (o = abfd->sections; o != NULL; o = o->next)
8264 {
8265 Elf_Internal_Rela *sec_relocs;
8266 const Elf_Internal_Rela *r, *rend;
8267
8268 /* We can ignore stub sections when looking for relocs. */
8269 if ((o->flags & SEC_RELOC) == 0
8270 || o->reloc_count == 0
8271 || section_allows_mips16_refs_p (o))
8272 continue;
8273
8274 sec_relocs
8275 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8276 info->keep_memory);
8277 if (sec_relocs == NULL)
8278 return FALSE;
8279
8280 rend = sec_relocs + o->reloc_count;
8281 for (r = sec_relocs; r < rend; r++)
8282 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8283 && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8284 break;
8285
8286 if (elf_section_data (o)->relocs != sec_relocs)
8287 free (sec_relocs);
8288
8289 if (r < rend)
8290 break;
8291 }
8292
8293 if (o == NULL)
8294 {
8295 /* There is no non-call reloc for this stub, so we do
8296 not need it. Since this function is called before
8297 the linker maps input sections to output sections, we
8298 can easily discard it by setting the SEC_EXCLUDE
8299 flag. */
8300 sec->flags |= SEC_EXCLUDE;
8301 return TRUE;
8302 }
8303
8304 /* Record this stub in an array of local symbol call_stubs for
8305 this BFD. */
8306 if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8307 {
8308 unsigned long symcount;
8309 asection **n;
8310 bfd_size_type amt;
8311
8312 if (elf_bad_symtab (abfd))
8313 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8314 else
8315 symcount = symtab_hdr->sh_info;
8316 amt = symcount * sizeof (asection *);
8317 n = bfd_zalloc (abfd, amt);
8318 if (n == NULL)
8319 return FALSE;
8320 mips_elf_tdata (abfd)->local_call_stubs = n;
8321 }
8322
8323 sec->flags |= SEC_KEEP;
8324 mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8325
8326 /* We don't need to set mips16_stubs_seen in this case.
8327 That flag is used to see whether we need to look through
8328 the global symbol table for stubs. We don't need to set
8329 it here, because we just have a local stub. */
8330 }
8331 else
8332 {
8333 h = ((struct mips_elf_link_hash_entry *)
8334 sym_hashes[r_symndx - extsymoff]);
8335
8336 /* H is the symbol this stub is for. */
8337
8338 if (CALL_FP_STUB_P (name))
8339 loc = &h->call_fp_stub;
8340 else
8341 loc = &h->call_stub;
8342
8343 /* If we already have an appropriate stub for this function, we
8344 don't need another one, so we can discard this one. Since
8345 this function is called before the linker maps input sections
8346 to output sections, we can easily discard it by setting the
8347 SEC_EXCLUDE flag. */
8348 if (*loc != NULL)
8349 {
8350 sec->flags |= SEC_EXCLUDE;
8351 return TRUE;
8352 }
8353
8354 sec->flags |= SEC_KEEP;
8355 *loc = sec;
8356 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8357 }
8358 }
8359
8360 sreloc = NULL;
8361 contents = NULL;
8362 for (rel = relocs; rel < rel_end; ++rel)
8363 {
8364 unsigned long r_symndx;
8365 unsigned int r_type;
8366 struct elf_link_hash_entry *h;
8367 bfd_boolean can_make_dynamic_p;
8368 bfd_boolean call_reloc_p;
8369 bfd_boolean constrain_symbol_p;
8370
8371 r_symndx = ELF_R_SYM (abfd, rel->r_info);
8372 r_type = ELF_R_TYPE (abfd, rel->r_info);
8373
8374 if (r_symndx < extsymoff)
8375 h = NULL;
8376 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8377 {
8378 (*_bfd_error_handler)
8379 (_("%B: Malformed reloc detected for section %s"),
8380 abfd, name);
8381 bfd_set_error (bfd_error_bad_value);
8382 return FALSE;
8383 }
8384 else
8385 {
8386 h = sym_hashes[r_symndx - extsymoff];
8387 if (h != NULL)
8388 {
8389 while (h->root.type == bfd_link_hash_indirect
8390 || h->root.type == bfd_link_hash_warning)
8391 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8392
8393 /* PR15323, ref flags aren't set for references in the
8394 same object. */
8395 h->root.non_ir_ref = 1;
8396 }
8397 }
8398
8399 /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8400 relocation into a dynamic one. */
8401 can_make_dynamic_p = FALSE;
8402
8403 /* Set CALL_RELOC_P to true if the relocation is for a call,
8404 and if pointer equality therefore doesn't matter. */
8405 call_reloc_p = FALSE;
8406
8407 /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8408 into account when deciding how to define the symbol.
8409 Relocations in nonallocatable sections such as .pdr and
8410 .debug* should have no effect. */
8411 constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8412
8413 switch (r_type)
8414 {
8415 case R_MIPS_CALL16:
8416 case R_MIPS_CALL_HI16:
8417 case R_MIPS_CALL_LO16:
8418 case R_MIPS16_CALL16:
8419 case R_MICROMIPS_CALL16:
8420 case R_MICROMIPS_CALL_HI16:
8421 case R_MICROMIPS_CALL_LO16:
8422 call_reloc_p = TRUE;
8423 /* Fall through. */
8424
8425 case R_MIPS_GOT16:
8426 case R_MIPS_GOT_HI16:
8427 case R_MIPS_GOT_LO16:
8428 case R_MIPS_GOT_PAGE:
8429 case R_MIPS_GOT_OFST:
8430 case R_MIPS_GOT_DISP:
8431 case R_MIPS_TLS_GOTTPREL:
8432 case R_MIPS_TLS_GD:
8433 case R_MIPS_TLS_LDM:
8434 case R_MIPS16_GOT16:
8435 case R_MIPS16_TLS_GOTTPREL:
8436 case R_MIPS16_TLS_GD:
8437 case R_MIPS16_TLS_LDM:
8438 case R_MICROMIPS_GOT16:
8439 case R_MICROMIPS_GOT_HI16:
8440 case R_MICROMIPS_GOT_LO16:
8441 case R_MICROMIPS_GOT_PAGE:
8442 case R_MICROMIPS_GOT_OFST:
8443 case R_MICROMIPS_GOT_DISP:
8444 case R_MICROMIPS_TLS_GOTTPREL:
8445 case R_MICROMIPS_TLS_GD:
8446 case R_MICROMIPS_TLS_LDM:
8447 if (dynobj == NULL)
8448 elf_hash_table (info)->dynobj = dynobj = abfd;
8449 if (!mips_elf_create_got_section (dynobj, info))
8450 return FALSE;
8451 if (htab->is_vxworks && !bfd_link_pic (info))
8452 {
8453 (*_bfd_error_handler)
8454 (_("%B: GOT reloc at 0x%lx not expected in executables"),
8455 abfd, (unsigned long) rel->r_offset);
8456 bfd_set_error (bfd_error_bad_value);
8457 return FALSE;
8458 }
8459 can_make_dynamic_p = TRUE;
8460 break;
8461
8462 case R_MIPS_NONE:
8463 case R_MIPS_JALR:
8464 case R_MICROMIPS_JALR:
8465 /* These relocations have empty fields and are purely there to
8466 provide link information. The symbol value doesn't matter. */
8467 constrain_symbol_p = FALSE;
8468 break;
8469
8470 case R_MIPS_GPREL16:
8471 case R_MIPS_GPREL32:
8472 case R_MIPS16_GPREL:
8473 case R_MICROMIPS_GPREL16:
8474 /* GP-relative relocations always resolve to a definition in a
8475 regular input file, ignoring the one-definition rule. This is
8476 important for the GP setup sequence in NewABI code, which
8477 always resolves to a local function even if other relocations
8478 against the symbol wouldn't. */
8479 constrain_symbol_p = FALSE;
8480 break;
8481
8482 case R_MIPS_32:
8483 case R_MIPS_REL32:
8484 case R_MIPS_64:
8485 /* In VxWorks executables, references to external symbols
8486 must be handled using copy relocs or PLT entries; it is not
8487 possible to convert this relocation into a dynamic one.
8488
8489 For executables that use PLTs and copy-relocs, we have a
8490 choice between converting the relocation into a dynamic
8491 one or using copy relocations or PLT entries. It is
8492 usually better to do the former, unless the relocation is
8493 against a read-only section. */
8494 if ((bfd_link_pic (info)
8495 || (h != NULL
8496 && !htab->is_vxworks
8497 && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8498 && !(!info->nocopyreloc
8499 && !PIC_OBJECT_P (abfd)
8500 && MIPS_ELF_READONLY_SECTION (sec))))
8501 && (sec->flags & SEC_ALLOC) != 0)
8502 {
8503 can_make_dynamic_p = TRUE;
8504 if (dynobj == NULL)
8505 elf_hash_table (info)->dynobj = dynobj = abfd;
8506 }
8507 break;
8508
8509 case R_MIPS_26:
8510 case R_MIPS_PC16:
8511 case R_MIPS_PC21_S2:
8512 case R_MIPS_PC26_S2:
8513 case R_MIPS16_26:
8514 case R_MIPS16_PC16_S1:
8515 case R_MICROMIPS_26_S1:
8516 case R_MICROMIPS_PC7_S1:
8517 case R_MICROMIPS_PC10_S1:
8518 case R_MICROMIPS_PC16_S1:
8519 case R_MICROMIPS_PC23_S2:
8520 call_reloc_p = TRUE;
8521 break;
8522 }
8523
8524 if (h)
8525 {
8526 if (constrain_symbol_p)
8527 {
8528 if (!can_make_dynamic_p)
8529 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8530
8531 if (!call_reloc_p)
8532 h->pointer_equality_needed = 1;
8533
8534 /* We must not create a stub for a symbol that has
8535 relocations related to taking the function's address.
8536 This doesn't apply to VxWorks, where CALL relocs refer
8537 to a .got.plt entry instead of a normal .got entry. */
8538 if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8539 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8540 }
8541
8542 /* Relocations against the special VxWorks __GOTT_BASE__ and
8543 __GOTT_INDEX__ symbols must be left to the loader. Allocate
8544 room for them in .rela.dyn. */
8545 if (is_gott_symbol (info, h))
8546 {
8547 if (sreloc == NULL)
8548 {
8549 sreloc = mips_elf_rel_dyn_section (info, TRUE);
8550 if (sreloc == NULL)
8551 return FALSE;
8552 }
8553 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8554 if (MIPS_ELF_READONLY_SECTION (sec))
8555 /* We tell the dynamic linker that there are
8556 relocations against the text segment. */
8557 info->flags |= DF_TEXTREL;
8558 }
8559 }
8560 else if (call_lo16_reloc_p (r_type)
8561 || got_lo16_reloc_p (r_type)
8562 || got_disp_reloc_p (r_type)
8563 || (got16_reloc_p (r_type) && htab->is_vxworks))
8564 {
8565 /* We may need a local GOT entry for this relocation. We
8566 don't count R_MIPS_GOT_PAGE because we can estimate the
8567 maximum number of pages needed by looking at the size of
8568 the segment. Similar comments apply to R_MIPS*_GOT16 and
8569 R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8570 always evaluate to "G". We don't count R_MIPS_GOT_HI16, or
8571 R_MIPS_CALL_HI16 because these are always followed by an
8572 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */
8573 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8574 rel->r_addend, info, r_type))
8575 return FALSE;
8576 }
8577
8578 if (h != NULL
8579 && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8580 ELF_ST_IS_MIPS16 (h->other)))
8581 ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8582
8583 switch (r_type)
8584 {
8585 case R_MIPS_CALL16:
8586 case R_MIPS16_CALL16:
8587 case R_MICROMIPS_CALL16:
8588 if (h == NULL)
8589 {
8590 (*_bfd_error_handler)
8591 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8592 abfd, (unsigned long) rel->r_offset);
8593 bfd_set_error (bfd_error_bad_value);
8594 return FALSE;
8595 }
8596 /* Fall through. */
8597
8598 case R_MIPS_CALL_HI16:
8599 case R_MIPS_CALL_LO16:
8600 case R_MICROMIPS_CALL_HI16:
8601 case R_MICROMIPS_CALL_LO16:
8602 if (h != NULL)
8603 {
8604 /* Make sure there is room in the regular GOT to hold the
8605 function's address. We may eliminate it in favour of
8606 a .got.plt entry later; see mips_elf_count_got_symbols. */
8607 if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8608 r_type))
8609 return FALSE;
8610
8611 /* We need a stub, not a plt entry for the undefined
8612 function. But we record it as if it needs plt. See
8613 _bfd_elf_adjust_dynamic_symbol. */
8614 h->needs_plt = 1;
8615 h->type = STT_FUNC;
8616 }
8617 break;
8618
8619 case R_MIPS_GOT_PAGE:
8620 case R_MICROMIPS_GOT_PAGE:
8621 case R_MIPS16_GOT16:
8622 case R_MIPS_GOT16:
8623 case R_MIPS_GOT_HI16:
8624 case R_MIPS_GOT_LO16:
8625 case R_MICROMIPS_GOT16:
8626 case R_MICROMIPS_GOT_HI16:
8627 case R_MICROMIPS_GOT_LO16:
8628 if (!h || got_page_reloc_p (r_type))
8629 {
8630 /* This relocation needs (or may need, if h != NULL) a
8631 page entry in the GOT. For R_MIPS_GOT_PAGE we do not
8632 know for sure until we know whether the symbol is
8633 preemptible. */
8634 if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8635 {
8636 if (!mips_elf_get_section_contents (abfd, sec, &contents))
8637 return FALSE;
8638 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8639 addend = mips_elf_read_rel_addend (abfd, rel,
8640 howto, contents);
8641 if (got16_reloc_p (r_type))
8642 mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8643 contents, &addend);
8644 else
8645 addend <<= howto->rightshift;
8646 }
8647 else
8648 addend = rel->r_addend;
8649 if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8650 h, addend))
8651 return FALSE;
8652
8653 if (h)
8654 {
8655 struct mips_elf_link_hash_entry *hmips =
8656 (struct mips_elf_link_hash_entry *) h;
8657
8658 /* This symbol is definitely not overridable. */
8659 if (hmips->root.def_regular
8660 && ! (bfd_link_pic (info) && ! info->symbolic
8661 && ! hmips->root.forced_local))
8662 h = NULL;
8663 }
8664 }
8665 /* If this is a global, overridable symbol, GOT_PAGE will
8666 decay to GOT_DISP, so we'll need a GOT entry for it. */
8667 /* Fall through. */
8668
8669 case R_MIPS_GOT_DISP:
8670 case R_MICROMIPS_GOT_DISP:
8671 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8672 FALSE, r_type))
8673 return FALSE;
8674 break;
8675
8676 case R_MIPS_TLS_GOTTPREL:
8677 case R_MIPS16_TLS_GOTTPREL:
8678 case R_MICROMIPS_TLS_GOTTPREL:
8679 if (bfd_link_pic (info))
8680 info->flags |= DF_STATIC_TLS;
8681 /* Fall through */
8682
8683 case R_MIPS_TLS_LDM:
8684 case R_MIPS16_TLS_LDM:
8685 case R_MICROMIPS_TLS_LDM:
8686 if (tls_ldm_reloc_p (r_type))
8687 {
8688 r_symndx = STN_UNDEF;
8689 h = NULL;
8690 }
8691 /* Fall through */
8692
8693 case R_MIPS_TLS_GD:
8694 case R_MIPS16_TLS_GD:
8695 case R_MICROMIPS_TLS_GD:
8696 /* This symbol requires a global offset table entry, or two
8697 for TLS GD relocations. */
8698 if (h != NULL)
8699 {
8700 if (!mips_elf_record_global_got_symbol (h, abfd, info,
8701 FALSE, r_type))
8702 return FALSE;
8703 }
8704 else
8705 {
8706 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8707 rel->r_addend,
8708 info, r_type))
8709 return FALSE;
8710 }
8711 break;
8712
8713 case R_MIPS_32:
8714 case R_MIPS_REL32:
8715 case R_MIPS_64:
8716 /* In VxWorks executables, references to external symbols
8717 are handled using copy relocs or PLT stubs, so there's
8718 no need to add a .rela.dyn entry for this relocation. */
8719 if (can_make_dynamic_p)
8720 {
8721 if (sreloc == NULL)
8722 {
8723 sreloc = mips_elf_rel_dyn_section (info, TRUE);
8724 if (sreloc == NULL)
8725 return FALSE;
8726 }
8727 if (bfd_link_pic (info) && h == NULL)
8728 {
8729 /* When creating a shared object, we must copy these
8730 reloc types into the output file as R_MIPS_REL32
8731 relocs. Make room for this reloc in .rel(a).dyn. */
8732 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8733 if (MIPS_ELF_READONLY_SECTION (sec))
8734 /* We tell the dynamic linker that there are
8735 relocations against the text segment. */
8736 info->flags |= DF_TEXTREL;
8737 }
8738 else
8739 {
8740 struct mips_elf_link_hash_entry *hmips;
8741
8742 /* For a shared object, we must copy this relocation
8743 unless the symbol turns out to be undefined and
8744 weak with non-default visibility, in which case
8745 it will be left as zero.
8746
8747 We could elide R_MIPS_REL32 for locally binding symbols
8748 in shared libraries, but do not yet do so.
8749
8750 For an executable, we only need to copy this
8751 reloc if the symbol is defined in a dynamic
8752 object. */
8753 hmips = (struct mips_elf_link_hash_entry *) h;
8754 ++hmips->possibly_dynamic_relocs;
8755 if (MIPS_ELF_READONLY_SECTION (sec))
8756 /* We need it to tell the dynamic linker if there
8757 are relocations against the text segment. */
8758 hmips->readonly_reloc = TRUE;
8759 }
8760 }
8761
8762 if (SGI_COMPAT (abfd))
8763 mips_elf_hash_table (info)->compact_rel_size +=
8764 sizeof (Elf32_External_crinfo);
8765 break;
8766
8767 case R_MIPS_26:
8768 case R_MIPS_GPREL16:
8769 case R_MIPS_LITERAL:
8770 case R_MIPS_GPREL32:
8771 case R_MICROMIPS_26_S1:
8772 case R_MICROMIPS_GPREL16:
8773 case R_MICROMIPS_LITERAL:
8774 case R_MICROMIPS_GPREL7_S2:
8775 if (SGI_COMPAT (abfd))
8776 mips_elf_hash_table (info)->compact_rel_size +=
8777 sizeof (Elf32_External_crinfo);
8778 break;
8779
8780 /* This relocation describes the C++ object vtable hierarchy.
8781 Reconstruct it for later use during GC. */
8782 case R_MIPS_GNU_VTINHERIT:
8783 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8784 return FALSE;
8785 break;
8786
8787 /* This relocation describes which C++ vtable entries are actually
8788 used. Record for later use during GC. */
8789 case R_MIPS_GNU_VTENTRY:
8790 BFD_ASSERT (h != NULL);
8791 if (h != NULL
8792 && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8793 return FALSE;
8794 break;
8795
8796 default:
8797 break;
8798 }
8799
8800 /* Record the need for a PLT entry. At this point we don't know
8801 yet if we are going to create a PLT in the first place, but
8802 we only record whether the relocation requires a standard MIPS
8803 or a compressed code entry anyway. If we don't make a PLT after
8804 all, then we'll just ignore these arrangements. Likewise if
8805 a PLT entry is not created because the symbol is satisfied
8806 locally. */
8807 if (h != NULL
8808 && (branch_reloc_p (r_type)
8809 || mips16_branch_reloc_p (r_type)
8810 || micromips_branch_reloc_p (r_type))
8811 && !SYMBOL_CALLS_LOCAL (info, h))
8812 {
8813 if (h->plt.plist == NULL)
8814 h->plt.plist = mips_elf_make_plt_record (abfd);
8815 if (h->plt.plist == NULL)
8816 return FALSE;
8817
8818 if (branch_reloc_p (r_type))
8819 h->plt.plist->need_mips = TRUE;
8820 else
8821 h->plt.plist->need_comp = TRUE;
8822 }
8823
8824 /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8825 if there is one. We only need to handle global symbols here;
8826 we decide whether to keep or delete stubs for local symbols
8827 when processing the stub's relocations. */
8828 if (h != NULL
8829 && !mips16_call_reloc_p (r_type)
8830 && !section_allows_mips16_refs_p (sec))
8831 {
8832 struct mips_elf_link_hash_entry *mh;
8833
8834 mh = (struct mips_elf_link_hash_entry *) h;
8835 mh->need_fn_stub = TRUE;
8836 }
8837
8838 /* Refuse some position-dependent relocations when creating a
8839 shared library. Do not refuse R_MIPS_32 / R_MIPS_64; they're
8840 not PIC, but we can create dynamic relocations and the result
8841 will be fine. Also do not refuse R_MIPS_LO16, which can be
8842 combined with R_MIPS_GOT16. */
8843 if (bfd_link_pic (info))
8844 {
8845 switch (r_type)
8846 {
8847 case R_MIPS16_HI16:
8848 case R_MIPS_HI16:
8849 case R_MIPS_HIGHER:
8850 case R_MIPS_HIGHEST:
8851 case R_MICROMIPS_HI16:
8852 case R_MICROMIPS_HIGHER:
8853 case R_MICROMIPS_HIGHEST:
8854 /* Don't refuse a high part relocation if it's against
8855 no symbol (e.g. part of a compound relocation). */
8856 if (r_symndx == STN_UNDEF)
8857 break;
8858
8859 /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8860 and has a special meaning. */
8861 if (!NEWABI_P (abfd) && h != NULL
8862 && strcmp (h->root.root.string, "_gp_disp") == 0)
8863 break;
8864
8865 /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks. */
8866 if (is_gott_symbol (info, h))
8867 break;
8868
8869 /* FALLTHROUGH */
8870
8871 case R_MIPS16_26:
8872 case R_MIPS_26:
8873 case R_MICROMIPS_26_S1:
8874 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8875 (*_bfd_error_handler)
8876 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8877 abfd, howto->name,
8878 (h) ? h->root.root.string : "a local symbol");
8879 bfd_set_error (bfd_error_bad_value);
8880 return FALSE;
8881 default:
8882 break;
8883 }
8884 }
8885 }
8886
8887 return TRUE;
8888 }
8889 \f
8890 bfd_boolean
8891 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8892 struct bfd_link_info *link_info,
8893 bfd_boolean *again)
8894 {
8895 Elf_Internal_Rela *internal_relocs;
8896 Elf_Internal_Rela *irel, *irelend;
8897 Elf_Internal_Shdr *symtab_hdr;
8898 bfd_byte *contents = NULL;
8899 size_t extsymoff;
8900 bfd_boolean changed_contents = FALSE;
8901 bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8902 Elf_Internal_Sym *isymbuf = NULL;
8903
8904 /* We are not currently changing any sizes, so only one pass. */
8905 *again = FALSE;
8906
8907 if (bfd_link_relocatable (link_info))
8908 return TRUE;
8909
8910 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8911 link_info->keep_memory);
8912 if (internal_relocs == NULL)
8913 return TRUE;
8914
8915 irelend = internal_relocs + sec->reloc_count
8916 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8917 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8918 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8919
8920 for (irel = internal_relocs; irel < irelend; irel++)
8921 {
8922 bfd_vma symval;
8923 bfd_signed_vma sym_offset;
8924 unsigned int r_type;
8925 unsigned long r_symndx;
8926 asection *sym_sec;
8927 unsigned long instruction;
8928
8929 /* Turn jalr into bgezal, and jr into beq, if they're marked
8930 with a JALR relocation, that indicate where they jump to.
8931 This saves some pipeline bubbles. */
8932 r_type = ELF_R_TYPE (abfd, irel->r_info);
8933 if (r_type != R_MIPS_JALR)
8934 continue;
8935
8936 r_symndx = ELF_R_SYM (abfd, irel->r_info);
8937 /* Compute the address of the jump target. */
8938 if (r_symndx >= extsymoff)
8939 {
8940 struct mips_elf_link_hash_entry *h
8941 = ((struct mips_elf_link_hash_entry *)
8942 elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8943
8944 while (h->root.root.type == bfd_link_hash_indirect
8945 || h->root.root.type == bfd_link_hash_warning)
8946 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8947
8948 /* If a symbol is undefined, or if it may be overridden,
8949 skip it. */
8950 if (! ((h->root.root.type == bfd_link_hash_defined
8951 || h->root.root.type == bfd_link_hash_defweak)
8952 && h->root.root.u.def.section)
8953 || (bfd_link_pic (link_info) && ! link_info->symbolic
8954 && !h->root.forced_local))
8955 continue;
8956
8957 sym_sec = h->root.root.u.def.section;
8958 if (sym_sec->output_section)
8959 symval = (h->root.root.u.def.value
8960 + sym_sec->output_section->vma
8961 + sym_sec->output_offset);
8962 else
8963 symval = h->root.root.u.def.value;
8964 }
8965 else
8966 {
8967 Elf_Internal_Sym *isym;
8968
8969 /* Read this BFD's symbols if we haven't done so already. */
8970 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8971 {
8972 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8973 if (isymbuf == NULL)
8974 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8975 symtab_hdr->sh_info, 0,
8976 NULL, NULL, NULL);
8977 if (isymbuf == NULL)
8978 goto relax_return;
8979 }
8980
8981 isym = isymbuf + r_symndx;
8982 if (isym->st_shndx == SHN_UNDEF)
8983 continue;
8984 else if (isym->st_shndx == SHN_ABS)
8985 sym_sec = bfd_abs_section_ptr;
8986 else if (isym->st_shndx == SHN_COMMON)
8987 sym_sec = bfd_com_section_ptr;
8988 else
8989 sym_sec
8990 = bfd_section_from_elf_index (abfd, isym->st_shndx);
8991 symval = isym->st_value
8992 + sym_sec->output_section->vma
8993 + sym_sec->output_offset;
8994 }
8995
8996 /* Compute branch offset, from delay slot of the jump to the
8997 branch target. */
8998 sym_offset = (symval + irel->r_addend)
8999 - (sec_start + irel->r_offset + 4);
9000
9001 /* Branch offset must be properly aligned. */
9002 if ((sym_offset & 3) != 0)
9003 continue;
9004
9005 sym_offset >>= 2;
9006
9007 /* Check that it's in range. */
9008 if (sym_offset < -0x8000 || sym_offset >= 0x8000)
9009 continue;
9010
9011 /* Get the section contents if we haven't done so already. */
9012 if (!mips_elf_get_section_contents (abfd, sec, &contents))
9013 goto relax_return;
9014
9015 instruction = bfd_get_32 (abfd, contents + irel->r_offset);
9016
9017 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */
9018 if ((instruction & 0xfc1fffff) == 0x0000f809)
9019 instruction = 0x04110000;
9020 /* If it was jr <reg>, turn it into b <target>. */
9021 else if ((instruction & 0xfc1fffff) == 0x00000008)
9022 instruction = 0x10000000;
9023 else
9024 continue;
9025
9026 instruction |= (sym_offset & 0xffff);
9027 bfd_put_32 (abfd, instruction, contents + irel->r_offset);
9028 changed_contents = TRUE;
9029 }
9030
9031 if (contents != NULL
9032 && elf_section_data (sec)->this_hdr.contents != contents)
9033 {
9034 if (!changed_contents && !link_info->keep_memory)
9035 free (contents);
9036 else
9037 {
9038 /* Cache the section contents for elf_link_input_bfd. */
9039 elf_section_data (sec)->this_hdr.contents = contents;
9040 }
9041 }
9042 return TRUE;
9043
9044 relax_return:
9045 if (contents != NULL
9046 && elf_section_data (sec)->this_hdr.contents != contents)
9047 free (contents);
9048 return FALSE;
9049 }
9050 \f
9051 /* Allocate space for global sym dynamic relocs. */
9052
9053 static bfd_boolean
9054 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9055 {
9056 struct bfd_link_info *info = inf;
9057 bfd *dynobj;
9058 struct mips_elf_link_hash_entry *hmips;
9059 struct mips_elf_link_hash_table *htab;
9060
9061 htab = mips_elf_hash_table (info);
9062 BFD_ASSERT (htab != NULL);
9063
9064 dynobj = elf_hash_table (info)->dynobj;
9065 hmips = (struct mips_elf_link_hash_entry *) h;
9066
9067 /* VxWorks executables are handled elsewhere; we only need to
9068 allocate relocations in shared objects. */
9069 if (htab->is_vxworks && !bfd_link_pic (info))
9070 return TRUE;
9071
9072 /* Ignore indirect symbols. All relocations against such symbols
9073 will be redirected to the target symbol. */
9074 if (h->root.type == bfd_link_hash_indirect)
9075 return TRUE;
9076
9077 /* If this symbol is defined in a dynamic object, or we are creating
9078 a shared library, we will need to copy any R_MIPS_32 or
9079 R_MIPS_REL32 relocs against it into the output file. */
9080 if (! bfd_link_relocatable (info)
9081 && hmips->possibly_dynamic_relocs != 0
9082 && (h->root.type == bfd_link_hash_defweak
9083 || (!h->def_regular && !ELF_COMMON_DEF_P (h))
9084 || bfd_link_pic (info)))
9085 {
9086 bfd_boolean do_copy = TRUE;
9087
9088 if (h->root.type == bfd_link_hash_undefweak)
9089 {
9090 /* Do not copy relocations for undefined weak symbols with
9091 non-default visibility. */
9092 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9093 do_copy = FALSE;
9094
9095 /* Make sure undefined weak symbols are output as a dynamic
9096 symbol in PIEs. */
9097 else if (h->dynindx == -1 && !h->forced_local)
9098 {
9099 if (! bfd_elf_link_record_dynamic_symbol (info, h))
9100 return FALSE;
9101 }
9102 }
9103
9104 if (do_copy)
9105 {
9106 /* Even though we don't directly need a GOT entry for this symbol,
9107 the SVR4 psABI requires it to have a dynamic symbol table
9108 index greater that DT_MIPS_GOTSYM if there are dynamic
9109 relocations against it.
9110
9111 VxWorks does not enforce the same mapping between the GOT
9112 and the symbol table, so the same requirement does not
9113 apply there. */
9114 if (!htab->is_vxworks)
9115 {
9116 if (hmips->global_got_area > GGA_RELOC_ONLY)
9117 hmips->global_got_area = GGA_RELOC_ONLY;
9118 hmips->got_only_for_calls = FALSE;
9119 }
9120
9121 mips_elf_allocate_dynamic_relocations
9122 (dynobj, info, hmips->possibly_dynamic_relocs);
9123 if (hmips->readonly_reloc)
9124 /* We tell the dynamic linker that there are relocations
9125 against the text segment. */
9126 info->flags |= DF_TEXTREL;
9127 }
9128 }
9129
9130 return TRUE;
9131 }
9132
9133 /* Adjust a symbol defined by a dynamic object and referenced by a
9134 regular object. The current definition is in some section of the
9135 dynamic object, but we're not including those sections. We have to
9136 change the definition to something the rest of the link can
9137 understand. */
9138
9139 bfd_boolean
9140 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9141 struct elf_link_hash_entry *h)
9142 {
9143 bfd *dynobj;
9144 struct mips_elf_link_hash_entry *hmips;
9145 struct mips_elf_link_hash_table *htab;
9146
9147 htab = mips_elf_hash_table (info);
9148 BFD_ASSERT (htab != NULL);
9149
9150 dynobj = elf_hash_table (info)->dynobj;
9151 hmips = (struct mips_elf_link_hash_entry *) h;
9152
9153 /* Make sure we know what is going on here. */
9154 BFD_ASSERT (dynobj != NULL
9155 && (h->needs_plt
9156 || h->u.weakdef != NULL
9157 || (h->def_dynamic
9158 && h->ref_regular
9159 && !h->def_regular)));
9160
9161 hmips = (struct mips_elf_link_hash_entry *) h;
9162
9163 /* If there are call relocations against an externally-defined symbol,
9164 see whether we can create a MIPS lazy-binding stub for it. We can
9165 only do this if all references to the function are through call
9166 relocations, and in that case, the traditional lazy-binding stubs
9167 are much more efficient than PLT entries.
9168
9169 Traditional stubs are only available on SVR4 psABI-based systems;
9170 VxWorks always uses PLTs instead. */
9171 if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9172 {
9173 if (! elf_hash_table (info)->dynamic_sections_created)
9174 return TRUE;
9175
9176 /* If this symbol is not defined in a regular file, then set
9177 the symbol to the stub location. This is required to make
9178 function pointers compare as equal between the normal
9179 executable and the shared library. */
9180 if (!h->def_regular)
9181 {
9182 hmips->needs_lazy_stub = TRUE;
9183 htab->lazy_stub_count++;
9184 return TRUE;
9185 }
9186 }
9187 /* As above, VxWorks requires PLT entries for externally-defined
9188 functions that are only accessed through call relocations.
9189
9190 Both VxWorks and non-VxWorks targets also need PLT entries if there
9191 are static-only relocations against an externally-defined function.
9192 This can technically occur for shared libraries if there are
9193 branches to the symbol, although it is unlikely that this will be
9194 used in practice due to the short ranges involved. It can occur
9195 for any relative or absolute relocation in executables; in that
9196 case, the PLT entry becomes the function's canonical address. */
9197 else if (((h->needs_plt && !hmips->no_fn_stub)
9198 || (h->type == STT_FUNC && hmips->has_static_relocs))
9199 && htab->use_plts_and_copy_relocs
9200 && !SYMBOL_CALLS_LOCAL (info, h)
9201 && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9202 && h->root.type == bfd_link_hash_undefweak))
9203 {
9204 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9205 bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9206
9207 /* If this is the first symbol to need a PLT entry, then make some
9208 basic setup. Also work out PLT entry sizes. We'll need them
9209 for PLT offset calculations. */
9210 if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9211 {
9212 BFD_ASSERT (htab->sgotplt->size == 0);
9213 BFD_ASSERT (htab->plt_got_index == 0);
9214
9215 /* If we're using the PLT additions to the psABI, each PLT
9216 entry is 16 bytes and the PLT0 entry is 32 bytes.
9217 Encourage better cache usage by aligning. We do this
9218 lazily to avoid pessimizing traditional objects. */
9219 if (!htab->is_vxworks
9220 && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9221 return FALSE;
9222
9223 /* Make sure that .got.plt is word-aligned. We do this lazily
9224 for the same reason as above. */
9225 if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9226 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9227 return FALSE;
9228
9229 /* On non-VxWorks targets, the first two entries in .got.plt
9230 are reserved. */
9231 if (!htab->is_vxworks)
9232 htab->plt_got_index
9233 += (get_elf_backend_data (dynobj)->got_header_size
9234 / MIPS_ELF_GOT_SIZE (dynobj));
9235
9236 /* On VxWorks, also allocate room for the header's
9237 .rela.plt.unloaded entries. */
9238 if (htab->is_vxworks && !bfd_link_pic (info))
9239 htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9240
9241 /* Now work out the sizes of individual PLT entries. */
9242 if (htab->is_vxworks && bfd_link_pic (info))
9243 htab->plt_mips_entry_size
9244 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9245 else if (htab->is_vxworks)
9246 htab->plt_mips_entry_size
9247 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9248 else if (newabi_p)
9249 htab->plt_mips_entry_size
9250 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9251 else if (!micromips_p)
9252 {
9253 htab->plt_mips_entry_size
9254 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9255 htab->plt_comp_entry_size
9256 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9257 }
9258 else if (htab->insn32)
9259 {
9260 htab->plt_mips_entry_size
9261 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9262 htab->plt_comp_entry_size
9263 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9264 }
9265 else
9266 {
9267 htab->plt_mips_entry_size
9268 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9269 htab->plt_comp_entry_size
9270 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9271 }
9272 }
9273
9274 if (h->plt.plist == NULL)
9275 h->plt.plist = mips_elf_make_plt_record (dynobj);
9276 if (h->plt.plist == NULL)
9277 return FALSE;
9278
9279 /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9280 n32 or n64, so always use a standard entry there.
9281
9282 If the symbol has a MIPS16 call stub and gets a PLT entry, then
9283 all MIPS16 calls will go via that stub, and there is no benefit
9284 to having a MIPS16 entry. And in the case of call_stub a
9285 standard entry actually has to be used as the stub ends with a J
9286 instruction. */
9287 if (newabi_p
9288 || htab->is_vxworks
9289 || hmips->call_stub
9290 || hmips->call_fp_stub)
9291 {
9292 h->plt.plist->need_mips = TRUE;
9293 h->plt.plist->need_comp = FALSE;
9294 }
9295
9296 /* Otherwise, if there are no direct calls to the function, we
9297 have a free choice of whether to use standard or compressed
9298 entries. Prefer microMIPS entries if the object is known to
9299 contain microMIPS code, so that it becomes possible to create
9300 pure microMIPS binaries. Prefer standard entries otherwise,
9301 because MIPS16 ones are no smaller and are usually slower. */
9302 if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9303 {
9304 if (micromips_p)
9305 h->plt.plist->need_comp = TRUE;
9306 else
9307 h->plt.plist->need_mips = TRUE;
9308 }
9309
9310 if (h->plt.plist->need_mips)
9311 {
9312 h->plt.plist->mips_offset = htab->plt_mips_offset;
9313 htab->plt_mips_offset += htab->plt_mips_entry_size;
9314 }
9315 if (h->plt.plist->need_comp)
9316 {
9317 h->plt.plist->comp_offset = htab->plt_comp_offset;
9318 htab->plt_comp_offset += htab->plt_comp_entry_size;
9319 }
9320
9321 /* Reserve the corresponding .got.plt entry now too. */
9322 h->plt.plist->gotplt_index = htab->plt_got_index++;
9323
9324 /* If the output file has no definition of the symbol, set the
9325 symbol's value to the address of the stub. */
9326 if (!bfd_link_pic (info) && !h->def_regular)
9327 hmips->use_plt_entry = TRUE;
9328
9329 /* Make room for the R_MIPS_JUMP_SLOT relocation. */
9330 htab->srelplt->size += (htab->is_vxworks
9331 ? MIPS_ELF_RELA_SIZE (dynobj)
9332 : MIPS_ELF_REL_SIZE (dynobj));
9333
9334 /* Make room for the .rela.plt.unloaded relocations. */
9335 if (htab->is_vxworks && !bfd_link_pic (info))
9336 htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9337
9338 /* All relocations against this symbol that could have been made
9339 dynamic will now refer to the PLT entry instead. */
9340 hmips->possibly_dynamic_relocs = 0;
9341
9342 return TRUE;
9343 }
9344
9345 /* If this is a weak symbol, and there is a real definition, the
9346 processor independent code will have arranged for us to see the
9347 real definition first, and we can just use the same value. */
9348 if (h->u.weakdef != NULL)
9349 {
9350 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9351 || h->u.weakdef->root.type == bfd_link_hash_defweak);
9352 h->root.u.def.section = h->u.weakdef->root.u.def.section;
9353 h->root.u.def.value = h->u.weakdef->root.u.def.value;
9354 return TRUE;
9355 }
9356
9357 /* Otherwise, there is nothing further to do for symbols defined
9358 in regular objects. */
9359 if (h->def_regular)
9360 return TRUE;
9361
9362 /* There's also nothing more to do if we'll convert all relocations
9363 against this symbol into dynamic relocations. */
9364 if (!hmips->has_static_relocs)
9365 return TRUE;
9366
9367 /* We're now relying on copy relocations. Complain if we have
9368 some that we can't convert. */
9369 if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9370 {
9371 (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9372 "dynamic symbol %s"),
9373 h->root.root.string);
9374 bfd_set_error (bfd_error_bad_value);
9375 return FALSE;
9376 }
9377
9378 /* We must allocate the symbol in our .dynbss section, which will
9379 become part of the .bss section of the executable. There will be
9380 an entry for this symbol in the .dynsym section. The dynamic
9381 object will contain position independent code, so all references
9382 from the dynamic object to this symbol will go through the global
9383 offset table. The dynamic linker will use the .dynsym entry to
9384 determine the address it must put in the global offset table, so
9385 both the dynamic object and the regular object will refer to the
9386 same memory location for the variable. */
9387
9388 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9389 {
9390 if (htab->is_vxworks)
9391 htab->srelbss->size += sizeof (Elf32_External_Rela);
9392 else
9393 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9394 h->needs_copy = 1;
9395 }
9396
9397 /* All relocations against this symbol that could have been made
9398 dynamic will now refer to the local copy instead. */
9399 hmips->possibly_dynamic_relocs = 0;
9400
9401 return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
9402 }
9403 \f
9404 /* This function is called after all the input files have been read,
9405 and the input sections have been assigned to output sections. We
9406 check for any mips16 stub sections that we can discard. */
9407
9408 bfd_boolean
9409 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9410 struct bfd_link_info *info)
9411 {
9412 asection *sect;
9413 struct mips_elf_link_hash_table *htab;
9414 struct mips_htab_traverse_info hti;
9415
9416 htab = mips_elf_hash_table (info);
9417 BFD_ASSERT (htab != NULL);
9418
9419 /* The .reginfo section has a fixed size. */
9420 sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9421 if (sect != NULL)
9422 bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9423
9424 /* The .MIPS.abiflags section has a fixed size. */
9425 sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9426 if (sect != NULL)
9427 bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9428
9429 hti.info = info;
9430 hti.output_bfd = output_bfd;
9431 hti.error = FALSE;
9432 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9433 mips_elf_check_symbols, &hti);
9434 if (hti.error)
9435 return FALSE;
9436
9437 return TRUE;
9438 }
9439
9440 /* If the link uses a GOT, lay it out and work out its size. */
9441
9442 static bfd_boolean
9443 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9444 {
9445 bfd *dynobj;
9446 asection *s;
9447 struct mips_got_info *g;
9448 bfd_size_type loadable_size = 0;
9449 bfd_size_type page_gotno;
9450 bfd *ibfd;
9451 struct mips_elf_traverse_got_arg tga;
9452 struct mips_elf_link_hash_table *htab;
9453
9454 htab = mips_elf_hash_table (info);
9455 BFD_ASSERT (htab != NULL);
9456
9457 s = htab->sgot;
9458 if (s == NULL)
9459 return TRUE;
9460
9461 dynobj = elf_hash_table (info)->dynobj;
9462 g = htab->got_info;
9463
9464 /* Allocate room for the reserved entries. VxWorks always reserves
9465 3 entries; other objects only reserve 2 entries. */
9466 BFD_ASSERT (g->assigned_low_gotno == 0);
9467 if (htab->is_vxworks)
9468 htab->reserved_gotno = 3;
9469 else
9470 htab->reserved_gotno = 2;
9471 g->local_gotno += htab->reserved_gotno;
9472 g->assigned_low_gotno = htab->reserved_gotno;
9473
9474 /* Decide which symbols need to go in the global part of the GOT and
9475 count the number of reloc-only GOT symbols. */
9476 mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9477
9478 if (!mips_elf_resolve_final_got_entries (info, g))
9479 return FALSE;
9480
9481 /* Calculate the total loadable size of the output. That
9482 will give us the maximum number of GOT_PAGE entries
9483 required. */
9484 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9485 {
9486 asection *subsection;
9487
9488 for (subsection = ibfd->sections;
9489 subsection;
9490 subsection = subsection->next)
9491 {
9492 if ((subsection->flags & SEC_ALLOC) == 0)
9493 continue;
9494 loadable_size += ((subsection->size + 0xf)
9495 &~ (bfd_size_type) 0xf);
9496 }
9497 }
9498
9499 if (htab->is_vxworks)
9500 /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9501 relocations against local symbols evaluate to "G", and the EABI does
9502 not include R_MIPS_GOT_PAGE. */
9503 page_gotno = 0;
9504 else
9505 /* Assume there are two loadable segments consisting of contiguous
9506 sections. Is 5 enough? */
9507 page_gotno = (loadable_size >> 16) + 5;
9508
9509 /* Choose the smaller of the two page estimates; both are intended to be
9510 conservative. */
9511 if (page_gotno > g->page_gotno)
9512 page_gotno = g->page_gotno;
9513
9514 g->local_gotno += page_gotno;
9515 g->assigned_high_gotno = g->local_gotno - 1;
9516
9517 s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9518 s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9519 s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9520
9521 /* VxWorks does not support multiple GOTs. It initializes $gp to
9522 __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9523 dynamic loader. */
9524 if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9525 {
9526 if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9527 return FALSE;
9528 }
9529 else
9530 {
9531 /* Record that all bfds use G. This also has the effect of freeing
9532 the per-bfd GOTs, which we no longer need. */
9533 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9534 if (mips_elf_bfd_got (ibfd, FALSE))
9535 mips_elf_replace_bfd_got (ibfd, g);
9536 mips_elf_replace_bfd_got (output_bfd, g);
9537
9538 /* Set up TLS entries. */
9539 g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9540 tga.info = info;
9541 tga.g = g;
9542 tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9543 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9544 if (!tga.g)
9545 return FALSE;
9546 BFD_ASSERT (g->tls_assigned_gotno
9547 == g->global_gotno + g->local_gotno + g->tls_gotno);
9548
9549 /* Each VxWorks GOT entry needs an explicit relocation. */
9550 if (htab->is_vxworks && bfd_link_pic (info))
9551 g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9552
9553 /* Allocate room for the TLS relocations. */
9554 if (g->relocs)
9555 mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9556 }
9557
9558 return TRUE;
9559 }
9560
9561 /* Estimate the size of the .MIPS.stubs section. */
9562
9563 static void
9564 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9565 {
9566 struct mips_elf_link_hash_table *htab;
9567 bfd_size_type dynsymcount;
9568
9569 htab = mips_elf_hash_table (info);
9570 BFD_ASSERT (htab != NULL);
9571
9572 if (htab->lazy_stub_count == 0)
9573 return;
9574
9575 /* IRIX rld assumes that a function stub isn't at the end of the .text
9576 section, so add a dummy entry to the end. */
9577 htab->lazy_stub_count++;
9578
9579 /* Get a worst-case estimate of the number of dynamic symbols needed.
9580 At this point, dynsymcount does not account for section symbols
9581 and count_section_dynsyms may overestimate the number that will
9582 be needed. */
9583 dynsymcount = (elf_hash_table (info)->dynsymcount
9584 + count_section_dynsyms (output_bfd, info));
9585
9586 /* Determine the size of one stub entry. There's no disadvantage
9587 from using microMIPS code here, so for the sake of pure-microMIPS
9588 binaries we prefer it whenever there's any microMIPS code in
9589 output produced at all. This has a benefit of stubs being
9590 shorter by 4 bytes each too, unless in the insn32 mode. */
9591 if (!MICROMIPS_P (output_bfd))
9592 htab->function_stub_size = (dynsymcount > 0x10000
9593 ? MIPS_FUNCTION_STUB_BIG_SIZE
9594 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9595 else if (htab->insn32)
9596 htab->function_stub_size = (dynsymcount > 0x10000
9597 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9598 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9599 else
9600 htab->function_stub_size = (dynsymcount > 0x10000
9601 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9602 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9603
9604 htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9605 }
9606
9607 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9608 mips_htab_traverse_info. If H needs a traditional MIPS lazy-binding
9609 stub, allocate an entry in the stubs section. */
9610
9611 static bfd_boolean
9612 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9613 {
9614 struct mips_htab_traverse_info *hti = data;
9615 struct mips_elf_link_hash_table *htab;
9616 struct bfd_link_info *info;
9617 bfd *output_bfd;
9618
9619 info = hti->info;
9620 output_bfd = hti->output_bfd;
9621 htab = mips_elf_hash_table (info);
9622 BFD_ASSERT (htab != NULL);
9623
9624 if (h->needs_lazy_stub)
9625 {
9626 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9627 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9628 bfd_vma isa_bit = micromips_p;
9629
9630 BFD_ASSERT (htab->root.dynobj != NULL);
9631 if (h->root.plt.plist == NULL)
9632 h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9633 if (h->root.plt.plist == NULL)
9634 {
9635 hti->error = TRUE;
9636 return FALSE;
9637 }
9638 h->root.root.u.def.section = htab->sstubs;
9639 h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9640 h->root.plt.plist->stub_offset = htab->sstubs->size;
9641 h->root.other = other;
9642 htab->sstubs->size += htab->function_stub_size;
9643 }
9644 return TRUE;
9645 }
9646
9647 /* Allocate offsets in the stubs section to each symbol that needs one.
9648 Set the final size of the .MIPS.stub section. */
9649
9650 static bfd_boolean
9651 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9652 {
9653 bfd *output_bfd = info->output_bfd;
9654 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9655 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9656 bfd_vma isa_bit = micromips_p;
9657 struct mips_elf_link_hash_table *htab;
9658 struct mips_htab_traverse_info hti;
9659 struct elf_link_hash_entry *h;
9660 bfd *dynobj;
9661
9662 htab = mips_elf_hash_table (info);
9663 BFD_ASSERT (htab != NULL);
9664
9665 if (htab->lazy_stub_count == 0)
9666 return TRUE;
9667
9668 htab->sstubs->size = 0;
9669 hti.info = info;
9670 hti.output_bfd = output_bfd;
9671 hti.error = FALSE;
9672 mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9673 if (hti.error)
9674 return FALSE;
9675 htab->sstubs->size += htab->function_stub_size;
9676 BFD_ASSERT (htab->sstubs->size
9677 == htab->lazy_stub_count * htab->function_stub_size);
9678
9679 dynobj = elf_hash_table (info)->dynobj;
9680 BFD_ASSERT (dynobj != NULL);
9681 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9682 if (h == NULL)
9683 return FALSE;
9684 h->root.u.def.value = isa_bit;
9685 h->other = other;
9686 h->type = STT_FUNC;
9687
9688 return TRUE;
9689 }
9690
9691 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9692 bfd_link_info. If H uses the address of a PLT entry as the value
9693 of the symbol, then set the entry in the symbol table now. Prefer
9694 a standard MIPS PLT entry. */
9695
9696 static bfd_boolean
9697 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9698 {
9699 struct bfd_link_info *info = data;
9700 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9701 struct mips_elf_link_hash_table *htab;
9702 unsigned int other;
9703 bfd_vma isa_bit;
9704 bfd_vma val;
9705
9706 htab = mips_elf_hash_table (info);
9707 BFD_ASSERT (htab != NULL);
9708
9709 if (h->use_plt_entry)
9710 {
9711 BFD_ASSERT (h->root.plt.plist != NULL);
9712 BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9713 || h->root.plt.plist->comp_offset != MINUS_ONE);
9714
9715 val = htab->plt_header_size;
9716 if (h->root.plt.plist->mips_offset != MINUS_ONE)
9717 {
9718 isa_bit = 0;
9719 val += h->root.plt.plist->mips_offset;
9720 other = 0;
9721 }
9722 else
9723 {
9724 isa_bit = 1;
9725 val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9726 other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9727 }
9728 val += isa_bit;
9729 /* For VxWorks, point at the PLT load stub rather than the lazy
9730 resolution stub; this stub will become the canonical function
9731 address. */
9732 if (htab->is_vxworks)
9733 val += 8;
9734
9735 h->root.root.u.def.section = htab->splt;
9736 h->root.root.u.def.value = val;
9737 h->root.other = other;
9738 }
9739
9740 return TRUE;
9741 }
9742
9743 /* Set the sizes of the dynamic sections. */
9744
9745 bfd_boolean
9746 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9747 struct bfd_link_info *info)
9748 {
9749 bfd *dynobj;
9750 asection *s, *sreldyn;
9751 bfd_boolean reltext;
9752 struct mips_elf_link_hash_table *htab;
9753
9754 htab = mips_elf_hash_table (info);
9755 BFD_ASSERT (htab != NULL);
9756 dynobj = elf_hash_table (info)->dynobj;
9757 BFD_ASSERT (dynobj != NULL);
9758
9759 if (elf_hash_table (info)->dynamic_sections_created)
9760 {
9761 /* Set the contents of the .interp section to the interpreter. */
9762 if (bfd_link_executable (info) && !info->nointerp)
9763 {
9764 s = bfd_get_linker_section (dynobj, ".interp");
9765 BFD_ASSERT (s != NULL);
9766 s->size
9767 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9768 s->contents
9769 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9770 }
9771
9772 /* Figure out the size of the PLT header if we know that we
9773 are using it. For the sake of cache alignment always use
9774 a standard header whenever any standard entries are present
9775 even if microMIPS entries are present as well. This also
9776 lets the microMIPS header rely on the value of $v0 only set
9777 by microMIPS entries, for a small size reduction.
9778
9779 Set symbol table entry values for symbols that use the
9780 address of their PLT entry now that we can calculate it.
9781
9782 Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9783 haven't already in _bfd_elf_create_dynamic_sections. */
9784 if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9785 {
9786 bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9787 && !htab->plt_mips_offset);
9788 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9789 bfd_vma isa_bit = micromips_p;
9790 struct elf_link_hash_entry *h;
9791 bfd_vma size;
9792
9793 BFD_ASSERT (htab->use_plts_and_copy_relocs);
9794 BFD_ASSERT (htab->sgotplt->size == 0);
9795 BFD_ASSERT (htab->splt->size == 0);
9796
9797 if (htab->is_vxworks && bfd_link_pic (info))
9798 size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9799 else if (htab->is_vxworks)
9800 size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9801 else if (ABI_64_P (output_bfd))
9802 size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9803 else if (ABI_N32_P (output_bfd))
9804 size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9805 else if (!micromips_p)
9806 size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9807 else if (htab->insn32)
9808 size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9809 else
9810 size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9811
9812 htab->plt_header_is_comp = micromips_p;
9813 htab->plt_header_size = size;
9814 htab->splt->size = (size
9815 + htab->plt_mips_offset
9816 + htab->plt_comp_offset);
9817 htab->sgotplt->size = (htab->plt_got_index
9818 * MIPS_ELF_GOT_SIZE (dynobj));
9819
9820 mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9821
9822 if (htab->root.hplt == NULL)
9823 {
9824 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9825 "_PROCEDURE_LINKAGE_TABLE_");
9826 htab->root.hplt = h;
9827 if (h == NULL)
9828 return FALSE;
9829 }
9830
9831 h = htab->root.hplt;
9832 h->root.u.def.value = isa_bit;
9833 h->other = other;
9834 h->type = STT_FUNC;
9835 }
9836 }
9837
9838 /* Allocate space for global sym dynamic relocs. */
9839 elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9840
9841 mips_elf_estimate_stub_size (output_bfd, info);
9842
9843 if (!mips_elf_lay_out_got (output_bfd, info))
9844 return FALSE;
9845
9846 mips_elf_lay_out_lazy_stubs (info);
9847
9848 /* The check_relocs and adjust_dynamic_symbol entry points have
9849 determined the sizes of the various dynamic sections. Allocate
9850 memory for them. */
9851 reltext = FALSE;
9852 for (s = dynobj->sections; s != NULL; s = s->next)
9853 {
9854 const char *name;
9855
9856 /* It's OK to base decisions on the section name, because none
9857 of the dynobj section names depend upon the input files. */
9858 name = bfd_get_section_name (dynobj, s);
9859
9860 if ((s->flags & SEC_LINKER_CREATED) == 0)
9861 continue;
9862
9863 if (CONST_STRNEQ (name, ".rel"))
9864 {
9865 if (s->size != 0)
9866 {
9867 const char *outname;
9868 asection *target;
9869
9870 /* If this relocation section applies to a read only
9871 section, then we probably need a DT_TEXTREL entry.
9872 If the relocation section is .rel(a).dyn, we always
9873 assert a DT_TEXTREL entry rather than testing whether
9874 there exists a relocation to a read only section or
9875 not. */
9876 outname = bfd_get_section_name (output_bfd,
9877 s->output_section);
9878 target = bfd_get_section_by_name (output_bfd, outname + 4);
9879 if ((target != NULL
9880 && (target->flags & SEC_READONLY) != 0
9881 && (target->flags & SEC_ALLOC) != 0)
9882 || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9883 reltext = TRUE;
9884
9885 /* We use the reloc_count field as a counter if we need
9886 to copy relocs into the output file. */
9887 if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9888 s->reloc_count = 0;
9889
9890 /* If combreloc is enabled, elf_link_sort_relocs() will
9891 sort relocations, but in a different way than we do,
9892 and before we're done creating relocations. Also, it
9893 will move them around between input sections'
9894 relocation's contents, so our sorting would be
9895 broken, so don't let it run. */
9896 info->combreloc = 0;
9897 }
9898 }
9899 else if (bfd_link_executable (info)
9900 && ! mips_elf_hash_table (info)->use_rld_obj_head
9901 && CONST_STRNEQ (name, ".rld_map"))
9902 {
9903 /* We add a room for __rld_map. It will be filled in by the
9904 rtld to contain a pointer to the _r_debug structure. */
9905 s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9906 }
9907 else if (SGI_COMPAT (output_bfd)
9908 && CONST_STRNEQ (name, ".compact_rel"))
9909 s->size += mips_elf_hash_table (info)->compact_rel_size;
9910 else if (s == htab->splt)
9911 {
9912 /* If the last PLT entry has a branch delay slot, allocate
9913 room for an extra nop to fill the delay slot. This is
9914 for CPUs without load interlocking. */
9915 if (! LOAD_INTERLOCKS_P (output_bfd)
9916 && ! htab->is_vxworks && s->size > 0)
9917 s->size += 4;
9918 }
9919 else if (! CONST_STRNEQ (name, ".init")
9920 && s != htab->sgot
9921 && s != htab->sgotplt
9922 && s != htab->sstubs
9923 && s != htab->sdynbss)
9924 {
9925 /* It's not one of our sections, so don't allocate space. */
9926 continue;
9927 }
9928
9929 if (s->size == 0)
9930 {
9931 s->flags |= SEC_EXCLUDE;
9932 continue;
9933 }
9934
9935 if ((s->flags & SEC_HAS_CONTENTS) == 0)
9936 continue;
9937
9938 /* Allocate memory for the section contents. */
9939 s->contents = bfd_zalloc (dynobj, s->size);
9940 if (s->contents == NULL)
9941 {
9942 bfd_set_error (bfd_error_no_memory);
9943 return FALSE;
9944 }
9945 }
9946
9947 if (elf_hash_table (info)->dynamic_sections_created)
9948 {
9949 /* Add some entries to the .dynamic section. We fill in the
9950 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9951 must add the entries now so that we get the correct size for
9952 the .dynamic section. */
9953
9954 /* SGI object has the equivalence of DT_DEBUG in the
9955 DT_MIPS_RLD_MAP entry. This must come first because glibc
9956 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9957 may only look at the first one they see. */
9958 if (!bfd_link_pic (info)
9959 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9960 return FALSE;
9961
9962 if (bfd_link_executable (info)
9963 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9964 return FALSE;
9965
9966 /* The DT_DEBUG entry may be filled in by the dynamic linker and
9967 used by the debugger. */
9968 if (bfd_link_executable (info)
9969 && !SGI_COMPAT (output_bfd)
9970 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9971 return FALSE;
9972
9973 if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9974 info->flags |= DF_TEXTREL;
9975
9976 if ((info->flags & DF_TEXTREL) != 0)
9977 {
9978 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9979 return FALSE;
9980
9981 /* Clear the DF_TEXTREL flag. It will be set again if we
9982 write out an actual text relocation; we may not, because
9983 at this point we do not know whether e.g. any .eh_frame
9984 absolute relocations have been converted to PC-relative. */
9985 info->flags &= ~DF_TEXTREL;
9986 }
9987
9988 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9989 return FALSE;
9990
9991 sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9992 if (htab->is_vxworks)
9993 {
9994 /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not
9995 use any of the DT_MIPS_* tags. */
9996 if (sreldyn && sreldyn->size > 0)
9997 {
9998 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9999 return FALSE;
10000
10001 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
10002 return FALSE;
10003
10004 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
10005 return FALSE;
10006 }
10007 }
10008 else
10009 {
10010 if (sreldyn && sreldyn->size > 0)
10011 {
10012 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
10013 return FALSE;
10014
10015 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
10016 return FALSE;
10017
10018 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
10019 return FALSE;
10020 }
10021
10022 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
10023 return FALSE;
10024
10025 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
10026 return FALSE;
10027
10028 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
10029 return FALSE;
10030
10031 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
10032 return FALSE;
10033
10034 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
10035 return FALSE;
10036
10037 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
10038 return FALSE;
10039
10040 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
10041 return FALSE;
10042
10043 if (IRIX_COMPAT (dynobj) == ict_irix5
10044 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
10045 return FALSE;
10046
10047 if (IRIX_COMPAT (dynobj) == ict_irix6
10048 && (bfd_get_section_by_name
10049 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
10050 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
10051 return FALSE;
10052 }
10053 if (htab->splt->size > 0)
10054 {
10055 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
10056 return FALSE;
10057
10058 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
10059 return FALSE;
10060
10061 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
10062 return FALSE;
10063
10064 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
10065 return FALSE;
10066 }
10067 if (htab->is_vxworks
10068 && !elf_vxworks_add_dynamic_entries (output_bfd, info))
10069 return FALSE;
10070 }
10071
10072 return TRUE;
10073 }
10074 \f
10075 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
10076 Adjust its R_ADDEND field so that it is correct for the output file.
10077 LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
10078 and sections respectively; both use symbol indexes. */
10079
10080 static void
10081 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
10082 bfd *input_bfd, Elf_Internal_Sym *local_syms,
10083 asection **local_sections, Elf_Internal_Rela *rel)
10084 {
10085 unsigned int r_type, r_symndx;
10086 Elf_Internal_Sym *sym;
10087 asection *sec;
10088
10089 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10090 {
10091 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10092 if (gprel16_reloc_p (r_type)
10093 || r_type == R_MIPS_GPREL32
10094 || literal_reloc_p (r_type))
10095 {
10096 rel->r_addend += _bfd_get_gp_value (input_bfd);
10097 rel->r_addend -= _bfd_get_gp_value (output_bfd);
10098 }
10099
10100 r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
10101 sym = local_syms + r_symndx;
10102
10103 /* Adjust REL's addend to account for section merging. */
10104 if (!bfd_link_relocatable (info))
10105 {
10106 sec = local_sections[r_symndx];
10107 _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
10108 }
10109
10110 /* This would normally be done by the rela_normal code in elflink.c. */
10111 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
10112 rel->r_addend += local_sections[r_symndx]->output_offset;
10113 }
10114 }
10115
10116 /* Handle relocations against symbols from removed linkonce sections,
10117 or sections discarded by a linker script. We use this wrapper around
10118 RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
10119 on 64-bit ELF targets. In this case for any relocation handled, which
10120 always be the first in a triplet, the remaining two have to be processed
10121 together with the first, even if they are R_MIPS_NONE. It is the symbol
10122 index referred by the first reloc that applies to all the three and the
10123 remaining two never refer to an object symbol. And it is the final
10124 relocation (the last non-null one) that determines the output field of
10125 the whole relocation so retrieve the corresponding howto structure for
10126 the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
10127
10128 Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
10129 and therefore requires to be pasted in a loop. It also defines a block
10130 and does not protect any of its arguments, hence the extra brackets. */
10131
10132 static void
10133 mips_reloc_against_discarded_section (bfd *output_bfd,
10134 struct bfd_link_info *info,
10135 bfd *input_bfd, asection *input_section,
10136 Elf_Internal_Rela **rel,
10137 const Elf_Internal_Rela **relend,
10138 bfd_boolean rel_reloc,
10139 reloc_howto_type *howto,
10140 bfd_byte *contents)
10141 {
10142 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10143 int count = bed->s->int_rels_per_ext_rel;
10144 unsigned int r_type;
10145 int i;
10146
10147 for (i = count - 1; i > 0; i--)
10148 {
10149 r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10150 if (r_type != R_MIPS_NONE)
10151 {
10152 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10153 break;
10154 }
10155 }
10156 do
10157 {
10158 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10159 (*rel), count, (*relend),
10160 howto, i, contents);
10161 }
10162 while (0);
10163 }
10164
10165 /* Relocate a MIPS ELF section. */
10166
10167 bfd_boolean
10168 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10169 bfd *input_bfd, asection *input_section,
10170 bfd_byte *contents, Elf_Internal_Rela *relocs,
10171 Elf_Internal_Sym *local_syms,
10172 asection **local_sections)
10173 {
10174 Elf_Internal_Rela *rel;
10175 const Elf_Internal_Rela *relend;
10176 bfd_vma addend = 0;
10177 bfd_boolean use_saved_addend_p = FALSE;
10178 const struct elf_backend_data *bed;
10179
10180 bed = get_elf_backend_data (output_bfd);
10181 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10182 for (rel = relocs; rel < relend; ++rel)
10183 {
10184 const char *name;
10185 bfd_vma value = 0;
10186 reloc_howto_type *howto;
10187 bfd_boolean cross_mode_jump_p = FALSE;
10188 /* TRUE if the relocation is a RELA relocation, rather than a
10189 REL relocation. */
10190 bfd_boolean rela_relocation_p = TRUE;
10191 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10192 const char *msg;
10193 unsigned long r_symndx;
10194 asection *sec;
10195 Elf_Internal_Shdr *symtab_hdr;
10196 struct elf_link_hash_entry *h;
10197 bfd_boolean rel_reloc;
10198
10199 rel_reloc = (NEWABI_P (input_bfd)
10200 && mips_elf_rel_relocation_p (input_bfd, input_section,
10201 relocs, rel));
10202 /* Find the relocation howto for this relocation. */
10203 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10204
10205 r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10206 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10207 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10208 {
10209 sec = local_sections[r_symndx];
10210 h = NULL;
10211 }
10212 else
10213 {
10214 unsigned long extsymoff;
10215
10216 extsymoff = 0;
10217 if (!elf_bad_symtab (input_bfd))
10218 extsymoff = symtab_hdr->sh_info;
10219 h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10220 while (h->root.type == bfd_link_hash_indirect
10221 || h->root.type == bfd_link_hash_warning)
10222 h = (struct elf_link_hash_entry *) h->root.u.i.link;
10223
10224 sec = NULL;
10225 if (h->root.type == bfd_link_hash_defined
10226 || h->root.type == bfd_link_hash_defweak)
10227 sec = h->root.u.def.section;
10228 }
10229
10230 if (sec != NULL && discarded_section (sec))
10231 {
10232 mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10233 input_section, &rel, &relend,
10234 rel_reloc, howto, contents);
10235 continue;
10236 }
10237
10238 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10239 {
10240 /* Some 32-bit code uses R_MIPS_64. In particular, people use
10241 64-bit code, but make sure all their addresses are in the
10242 lowermost or uppermost 32-bit section of the 64-bit address
10243 space. Thus, when they use an R_MIPS_64 they mean what is
10244 usually meant by R_MIPS_32, with the exception that the
10245 stored value is sign-extended to 64 bits. */
10246 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10247
10248 /* On big-endian systems, we need to lie about the position
10249 of the reloc. */
10250 if (bfd_big_endian (input_bfd))
10251 rel->r_offset += 4;
10252 }
10253
10254 if (!use_saved_addend_p)
10255 {
10256 /* If these relocations were originally of the REL variety,
10257 we must pull the addend out of the field that will be
10258 relocated. Otherwise, we simply use the contents of the
10259 RELA relocation. */
10260 if (mips_elf_rel_relocation_p (input_bfd, input_section,
10261 relocs, rel))
10262 {
10263 rela_relocation_p = FALSE;
10264 addend = mips_elf_read_rel_addend (input_bfd, rel,
10265 howto, contents);
10266 if (hi16_reloc_p (r_type)
10267 || (got16_reloc_p (r_type)
10268 && mips_elf_local_relocation_p (input_bfd, rel,
10269 local_sections)))
10270 {
10271 if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10272 contents, &addend))
10273 {
10274 if (h)
10275 name = h->root.root.string;
10276 else
10277 name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10278 local_syms + r_symndx,
10279 sec);
10280 (*_bfd_error_handler)
10281 (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10282 input_bfd, input_section, name, howto->name,
10283 rel->r_offset);
10284 }
10285 }
10286 else
10287 addend <<= howto->rightshift;
10288 }
10289 else
10290 addend = rel->r_addend;
10291 mips_elf_adjust_addend (output_bfd, info, input_bfd,
10292 local_syms, local_sections, rel);
10293 }
10294
10295 if (bfd_link_relocatable (info))
10296 {
10297 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10298 && bfd_big_endian (input_bfd))
10299 rel->r_offset -= 4;
10300
10301 if (!rela_relocation_p && rel->r_addend)
10302 {
10303 addend += rel->r_addend;
10304 if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10305 addend = mips_elf_high (addend);
10306 else if (r_type == R_MIPS_HIGHER)
10307 addend = mips_elf_higher (addend);
10308 else if (r_type == R_MIPS_HIGHEST)
10309 addend = mips_elf_highest (addend);
10310 else
10311 addend >>= howto->rightshift;
10312
10313 /* We use the source mask, rather than the destination
10314 mask because the place to which we are writing will be
10315 source of the addend in the final link. */
10316 addend &= howto->src_mask;
10317
10318 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10319 /* See the comment above about using R_MIPS_64 in the 32-bit
10320 ABI. Here, we need to update the addend. It would be
10321 possible to get away with just using the R_MIPS_32 reloc
10322 but for endianness. */
10323 {
10324 bfd_vma sign_bits;
10325 bfd_vma low_bits;
10326 bfd_vma high_bits;
10327
10328 if (addend & ((bfd_vma) 1 << 31))
10329 #ifdef BFD64
10330 sign_bits = ((bfd_vma) 1 << 32) - 1;
10331 #else
10332 sign_bits = -1;
10333 #endif
10334 else
10335 sign_bits = 0;
10336
10337 /* If we don't know that we have a 64-bit type,
10338 do two separate stores. */
10339 if (bfd_big_endian (input_bfd))
10340 {
10341 /* Store the sign-bits (which are most significant)
10342 first. */
10343 low_bits = sign_bits;
10344 high_bits = addend;
10345 }
10346 else
10347 {
10348 low_bits = addend;
10349 high_bits = sign_bits;
10350 }
10351 bfd_put_32 (input_bfd, low_bits,
10352 contents + rel->r_offset);
10353 bfd_put_32 (input_bfd, high_bits,
10354 contents + rel->r_offset + 4);
10355 continue;
10356 }
10357
10358 if (! mips_elf_perform_relocation (info, howto, rel, addend,
10359 input_bfd, input_section,
10360 contents, FALSE))
10361 return FALSE;
10362 }
10363
10364 /* Go on to the next relocation. */
10365 continue;
10366 }
10367
10368 /* In the N32 and 64-bit ABIs there may be multiple consecutive
10369 relocations for the same offset. In that case we are
10370 supposed to treat the output of each relocation as the addend
10371 for the next. */
10372 if (rel + 1 < relend
10373 && rel->r_offset == rel[1].r_offset
10374 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10375 use_saved_addend_p = TRUE;
10376 else
10377 use_saved_addend_p = FALSE;
10378
10379 /* Figure out what value we are supposed to relocate. */
10380 switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10381 input_section, info, rel,
10382 addend, howto, local_syms,
10383 local_sections, &value,
10384 &name, &cross_mode_jump_p,
10385 use_saved_addend_p))
10386 {
10387 case bfd_reloc_continue:
10388 /* There's nothing to do. */
10389 continue;
10390
10391 case bfd_reloc_undefined:
10392 /* mips_elf_calculate_relocation already called the
10393 undefined_symbol callback. There's no real point in
10394 trying to perform the relocation at this point, so we
10395 just skip ahead to the next relocation. */
10396 continue;
10397
10398 case bfd_reloc_notsupported:
10399 msg = _("internal error: unsupported relocation error");
10400 info->callbacks->warning
10401 (info, msg, name, input_bfd, input_section, rel->r_offset);
10402 return FALSE;
10403
10404 case bfd_reloc_overflow:
10405 if (use_saved_addend_p)
10406 /* Ignore overflow until we reach the last relocation for
10407 a given location. */
10408 ;
10409 else
10410 {
10411 struct mips_elf_link_hash_table *htab;
10412
10413 htab = mips_elf_hash_table (info);
10414 BFD_ASSERT (htab != NULL);
10415 BFD_ASSERT (name != NULL);
10416 if (!htab->small_data_overflow_reported
10417 && (gprel16_reloc_p (howto->type)
10418 || literal_reloc_p (howto->type)))
10419 {
10420 msg = _("small-data section exceeds 64KB;"
10421 " lower small-data size limit (see option -G)");
10422
10423 htab->small_data_overflow_reported = TRUE;
10424 (*info->callbacks->einfo) ("%P: %s\n", msg);
10425 }
10426 (*info->callbacks->reloc_overflow)
10427 (info, NULL, name, howto->name, (bfd_vma) 0,
10428 input_bfd, input_section, rel->r_offset);
10429 }
10430 break;
10431
10432 case bfd_reloc_ok:
10433 break;
10434
10435 case bfd_reloc_outofrange:
10436 msg = NULL;
10437 if (jal_reloc_p (howto->type))
10438 msg = (cross_mode_jump_p
10439 ? _("Cannot convert a jump to JALX "
10440 "for a non-word-aligned address")
10441 : (howto->type == R_MIPS16_26
10442 ? _("Jump to a non-word-aligned address")
10443 : _("Jump to a non-instruction-aligned address")));
10444 else if (b_reloc_p (howto->type))
10445 msg = (cross_mode_jump_p
10446 ? _("Cannot convert a branch to JALX "
10447 "for a non-word-aligned address")
10448 : _("Branch to a non-instruction-aligned address"));
10449 else if (aligned_pcrel_reloc_p (howto->type))
10450 msg = _("PC-relative load from unaligned address");
10451 if (msg)
10452 {
10453 info->callbacks->einfo
10454 ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10455 break;
10456 }
10457 /* Fall through. */
10458
10459 default:
10460 abort ();
10461 break;
10462 }
10463
10464 /* If we've got another relocation for the address, keep going
10465 until we reach the last one. */
10466 if (use_saved_addend_p)
10467 {
10468 addend = value;
10469 continue;
10470 }
10471
10472 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10473 /* See the comment above about using R_MIPS_64 in the 32-bit
10474 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
10475 that calculated the right value. Now, however, we
10476 sign-extend the 32-bit result to 64-bits, and store it as a
10477 64-bit value. We are especially generous here in that we
10478 go to extreme lengths to support this usage on systems with
10479 only a 32-bit VMA. */
10480 {
10481 bfd_vma sign_bits;
10482 bfd_vma low_bits;
10483 bfd_vma high_bits;
10484
10485 if (value & ((bfd_vma) 1 << 31))
10486 #ifdef BFD64
10487 sign_bits = ((bfd_vma) 1 << 32) - 1;
10488 #else
10489 sign_bits = -1;
10490 #endif
10491 else
10492 sign_bits = 0;
10493
10494 /* If we don't know that we have a 64-bit type,
10495 do two separate stores. */
10496 if (bfd_big_endian (input_bfd))
10497 {
10498 /* Undo what we did above. */
10499 rel->r_offset -= 4;
10500 /* Store the sign-bits (which are most significant)
10501 first. */
10502 low_bits = sign_bits;
10503 high_bits = value;
10504 }
10505 else
10506 {
10507 low_bits = value;
10508 high_bits = sign_bits;
10509 }
10510 bfd_put_32 (input_bfd, low_bits,
10511 contents + rel->r_offset);
10512 bfd_put_32 (input_bfd, high_bits,
10513 contents + rel->r_offset + 4);
10514 continue;
10515 }
10516
10517 /* Actually perform the relocation. */
10518 if (! mips_elf_perform_relocation (info, howto, rel, value,
10519 input_bfd, input_section,
10520 contents, cross_mode_jump_p))
10521 return FALSE;
10522 }
10523
10524 return TRUE;
10525 }
10526 \f
10527 /* A function that iterates over each entry in la25_stubs and fills
10528 in the code for each one. DATA points to a mips_htab_traverse_info. */
10529
10530 static int
10531 mips_elf_create_la25_stub (void **slot, void *data)
10532 {
10533 struct mips_htab_traverse_info *hti;
10534 struct mips_elf_link_hash_table *htab;
10535 struct mips_elf_la25_stub *stub;
10536 asection *s;
10537 bfd_byte *loc;
10538 bfd_vma offset, target, target_high, target_low;
10539
10540 stub = (struct mips_elf_la25_stub *) *slot;
10541 hti = (struct mips_htab_traverse_info *) data;
10542 htab = mips_elf_hash_table (hti->info);
10543 BFD_ASSERT (htab != NULL);
10544
10545 /* Create the section contents, if we haven't already. */
10546 s = stub->stub_section;
10547 loc = s->contents;
10548 if (loc == NULL)
10549 {
10550 loc = bfd_malloc (s->size);
10551 if (loc == NULL)
10552 {
10553 hti->error = TRUE;
10554 return FALSE;
10555 }
10556 s->contents = loc;
10557 }
10558
10559 /* Work out where in the section this stub should go. */
10560 offset = stub->offset;
10561
10562 /* Work out the target address. */
10563 target = mips_elf_get_la25_target (stub, &s);
10564 target += s->output_section->vma + s->output_offset;
10565
10566 target_high = ((target + 0x8000) >> 16) & 0xffff;
10567 target_low = (target & 0xffff);
10568
10569 if (stub->stub_section != htab->strampoline)
10570 {
10571 /* This is a simple LUI/ADDIU stub. Zero out the beginning
10572 of the section and write the two instructions at the end. */
10573 memset (loc, 0, offset);
10574 loc += offset;
10575 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10576 {
10577 bfd_put_micromips_32 (hti->output_bfd,
10578 LA25_LUI_MICROMIPS (target_high),
10579 loc);
10580 bfd_put_micromips_32 (hti->output_bfd,
10581 LA25_ADDIU_MICROMIPS (target_low),
10582 loc + 4);
10583 }
10584 else
10585 {
10586 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10587 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10588 }
10589 }
10590 else
10591 {
10592 /* This is trampoline. */
10593 loc += offset;
10594 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10595 {
10596 bfd_put_micromips_32 (hti->output_bfd,
10597 LA25_LUI_MICROMIPS (target_high), loc);
10598 bfd_put_micromips_32 (hti->output_bfd,
10599 LA25_J_MICROMIPS (target), loc + 4);
10600 bfd_put_micromips_32 (hti->output_bfd,
10601 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10602 bfd_put_32 (hti->output_bfd, 0, loc + 12);
10603 }
10604 else
10605 {
10606 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10607 bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10608 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10609 bfd_put_32 (hti->output_bfd, 0, loc + 12);
10610 }
10611 }
10612 return TRUE;
10613 }
10614
10615 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10616 adjust it appropriately now. */
10617
10618 static void
10619 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10620 const char *name, Elf_Internal_Sym *sym)
10621 {
10622 /* The linker script takes care of providing names and values for
10623 these, but we must place them into the right sections. */
10624 static const char* const text_section_symbols[] = {
10625 "_ftext",
10626 "_etext",
10627 "__dso_displacement",
10628 "__elf_header",
10629 "__program_header_table",
10630 NULL
10631 };
10632
10633 static const char* const data_section_symbols[] = {
10634 "_fdata",
10635 "_edata",
10636 "_end",
10637 "_fbss",
10638 NULL
10639 };
10640
10641 const char* const *p;
10642 int i;
10643
10644 for (i = 0; i < 2; ++i)
10645 for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10646 *p;
10647 ++p)
10648 if (strcmp (*p, name) == 0)
10649 {
10650 /* All of these symbols are given type STT_SECTION by the
10651 IRIX6 linker. */
10652 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10653 sym->st_other = STO_PROTECTED;
10654
10655 /* The IRIX linker puts these symbols in special sections. */
10656 if (i == 0)
10657 sym->st_shndx = SHN_MIPS_TEXT;
10658 else
10659 sym->st_shndx = SHN_MIPS_DATA;
10660
10661 break;
10662 }
10663 }
10664
10665 /* Finish up dynamic symbol handling. We set the contents of various
10666 dynamic sections here. */
10667
10668 bfd_boolean
10669 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10670 struct bfd_link_info *info,
10671 struct elf_link_hash_entry *h,
10672 Elf_Internal_Sym *sym)
10673 {
10674 bfd *dynobj;
10675 asection *sgot;
10676 struct mips_got_info *g, *gg;
10677 const char *name;
10678 int idx;
10679 struct mips_elf_link_hash_table *htab;
10680 struct mips_elf_link_hash_entry *hmips;
10681
10682 htab = mips_elf_hash_table (info);
10683 BFD_ASSERT (htab != NULL);
10684 dynobj = elf_hash_table (info)->dynobj;
10685 hmips = (struct mips_elf_link_hash_entry *) h;
10686
10687 BFD_ASSERT (!htab->is_vxworks);
10688
10689 if (h->plt.plist != NULL
10690 && (h->plt.plist->mips_offset != MINUS_ONE
10691 || h->plt.plist->comp_offset != MINUS_ONE))
10692 {
10693 /* We've decided to create a PLT entry for this symbol. */
10694 bfd_byte *loc;
10695 bfd_vma header_address, got_address;
10696 bfd_vma got_address_high, got_address_low, load;
10697 bfd_vma got_index;
10698 bfd_vma isa_bit;
10699
10700 got_index = h->plt.plist->gotplt_index;
10701
10702 BFD_ASSERT (htab->use_plts_and_copy_relocs);
10703 BFD_ASSERT (h->dynindx != -1);
10704 BFD_ASSERT (htab->splt != NULL);
10705 BFD_ASSERT (got_index != MINUS_ONE);
10706 BFD_ASSERT (!h->def_regular);
10707
10708 /* Calculate the address of the PLT header. */
10709 isa_bit = htab->plt_header_is_comp;
10710 header_address = (htab->splt->output_section->vma
10711 + htab->splt->output_offset + isa_bit);
10712
10713 /* Calculate the address of the .got.plt entry. */
10714 got_address = (htab->sgotplt->output_section->vma
10715 + htab->sgotplt->output_offset
10716 + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10717
10718 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10719 got_address_low = got_address & 0xffff;
10720
10721 /* Initially point the .got.plt entry at the PLT header. */
10722 loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10723 if (ABI_64_P (output_bfd))
10724 bfd_put_64 (output_bfd, header_address, loc);
10725 else
10726 bfd_put_32 (output_bfd, header_address, loc);
10727
10728 /* Now handle the PLT itself. First the standard entry (the order
10729 does not matter, we just have to pick one). */
10730 if (h->plt.plist->mips_offset != MINUS_ONE)
10731 {
10732 const bfd_vma *plt_entry;
10733 bfd_vma plt_offset;
10734
10735 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10736
10737 BFD_ASSERT (plt_offset <= htab->splt->size);
10738
10739 /* Find out where the .plt entry should go. */
10740 loc = htab->splt->contents + plt_offset;
10741
10742 /* Pick the load opcode. */
10743 load = MIPS_ELF_LOAD_WORD (output_bfd);
10744
10745 /* Fill in the PLT entry itself. */
10746
10747 if (MIPSR6_P (output_bfd))
10748 plt_entry = mipsr6_exec_plt_entry;
10749 else
10750 plt_entry = mips_exec_plt_entry;
10751 bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10752 bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10753 loc + 4);
10754
10755 if (! LOAD_INTERLOCKS_P (output_bfd))
10756 {
10757 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10758 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10759 }
10760 else
10761 {
10762 bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10763 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10764 loc + 12);
10765 }
10766 }
10767
10768 /* Now the compressed entry. They come after any standard ones. */
10769 if (h->plt.plist->comp_offset != MINUS_ONE)
10770 {
10771 bfd_vma plt_offset;
10772
10773 plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10774 + h->plt.plist->comp_offset);
10775
10776 BFD_ASSERT (plt_offset <= htab->splt->size);
10777
10778 /* Find out where the .plt entry should go. */
10779 loc = htab->splt->contents + plt_offset;
10780
10781 /* Fill in the PLT entry itself. */
10782 if (!MICROMIPS_P (output_bfd))
10783 {
10784 const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10785
10786 bfd_put_16 (output_bfd, plt_entry[0], loc);
10787 bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10788 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10789 bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10790 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10791 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10792 bfd_put_32 (output_bfd, got_address, loc + 12);
10793 }
10794 else if (htab->insn32)
10795 {
10796 const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10797
10798 bfd_put_16 (output_bfd, plt_entry[0], loc);
10799 bfd_put_16 (output_bfd, got_address_high, loc + 2);
10800 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10801 bfd_put_16 (output_bfd, got_address_low, loc + 6);
10802 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10803 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10804 bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10805 bfd_put_16 (output_bfd, got_address_low, loc + 14);
10806 }
10807 else
10808 {
10809 const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10810 bfd_signed_vma gotpc_offset;
10811 bfd_vma loc_address;
10812
10813 BFD_ASSERT (got_address % 4 == 0);
10814
10815 loc_address = (htab->splt->output_section->vma
10816 + htab->splt->output_offset + plt_offset);
10817 gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10818
10819 /* ADDIUPC has a span of +/-16MB, check we're in range. */
10820 if (gotpc_offset + 0x1000000 >= 0x2000000)
10821 {
10822 (*_bfd_error_handler)
10823 (_("%B: `%A' offset of %ld from `%A' "
10824 "beyond the range of ADDIUPC"),
10825 output_bfd,
10826 htab->sgotplt->output_section,
10827 htab->splt->output_section,
10828 (long) gotpc_offset);
10829 bfd_set_error (bfd_error_no_error);
10830 return FALSE;
10831 }
10832 bfd_put_16 (output_bfd,
10833 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10834 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10835 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10836 bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10837 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10838 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10839 }
10840 }
10841
10842 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
10843 mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10844 got_index - 2, h->dynindx,
10845 R_MIPS_JUMP_SLOT, got_address);
10846
10847 /* We distinguish between PLT entries and lazy-binding stubs by
10848 giving the former an st_other value of STO_MIPS_PLT. Set the
10849 flag and leave the value if there are any relocations in the
10850 binary where pointer equality matters. */
10851 sym->st_shndx = SHN_UNDEF;
10852 if (h->pointer_equality_needed)
10853 sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10854 else
10855 {
10856 sym->st_value = 0;
10857 sym->st_other = 0;
10858 }
10859 }
10860
10861 if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10862 {
10863 /* We've decided to create a lazy-binding stub. */
10864 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10865 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10866 bfd_vma stub_size = htab->function_stub_size;
10867 bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10868 bfd_vma isa_bit = micromips_p;
10869 bfd_vma stub_big_size;
10870
10871 if (!micromips_p)
10872 stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10873 else if (htab->insn32)
10874 stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10875 else
10876 stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10877
10878 /* This symbol has a stub. Set it up. */
10879
10880 BFD_ASSERT (h->dynindx != -1);
10881
10882 BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10883
10884 /* Values up to 2^31 - 1 are allowed. Larger values would cause
10885 sign extension at runtime in the stub, resulting in a negative
10886 index value. */
10887 if (h->dynindx & ~0x7fffffff)
10888 return FALSE;
10889
10890 /* Fill the stub. */
10891 if (micromips_p)
10892 {
10893 idx = 0;
10894 bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10895 stub + idx);
10896 idx += 4;
10897 if (htab->insn32)
10898 {
10899 bfd_put_micromips_32 (output_bfd,
10900 STUB_MOVE32_MICROMIPS, stub + idx);
10901 idx += 4;
10902 }
10903 else
10904 {
10905 bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10906 idx += 2;
10907 }
10908 if (stub_size == stub_big_size)
10909 {
10910 long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10911
10912 bfd_put_micromips_32 (output_bfd,
10913 STUB_LUI_MICROMIPS (dynindx_hi),
10914 stub + idx);
10915 idx += 4;
10916 }
10917 if (htab->insn32)
10918 {
10919 bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10920 stub + idx);
10921 idx += 4;
10922 }
10923 else
10924 {
10925 bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10926 idx += 2;
10927 }
10928
10929 /* If a large stub is not required and sign extension is not a
10930 problem, then use legacy code in the stub. */
10931 if (stub_size == stub_big_size)
10932 bfd_put_micromips_32 (output_bfd,
10933 STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10934 stub + idx);
10935 else if (h->dynindx & ~0x7fff)
10936 bfd_put_micromips_32 (output_bfd,
10937 STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10938 stub + idx);
10939 else
10940 bfd_put_micromips_32 (output_bfd,
10941 STUB_LI16S_MICROMIPS (output_bfd,
10942 h->dynindx),
10943 stub + idx);
10944 }
10945 else
10946 {
10947 idx = 0;
10948 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10949 idx += 4;
10950 bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
10951 idx += 4;
10952 if (stub_size == stub_big_size)
10953 {
10954 bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10955 stub + idx);
10956 idx += 4;
10957 }
10958 bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10959 idx += 4;
10960
10961 /* If a large stub is not required and sign extension is not a
10962 problem, then use legacy code in the stub. */
10963 if (stub_size == stub_big_size)
10964 bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10965 stub + idx);
10966 else if (h->dynindx & ~0x7fff)
10967 bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10968 stub + idx);
10969 else
10970 bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10971 stub + idx);
10972 }
10973
10974 BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10975 memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10976 stub, stub_size);
10977
10978 /* Mark the symbol as undefined. stub_offset != -1 occurs
10979 only for the referenced symbol. */
10980 sym->st_shndx = SHN_UNDEF;
10981
10982 /* The run-time linker uses the st_value field of the symbol
10983 to reset the global offset table entry for this external
10984 to its stub address when unlinking a shared object. */
10985 sym->st_value = (htab->sstubs->output_section->vma
10986 + htab->sstubs->output_offset
10987 + h->plt.plist->stub_offset
10988 + isa_bit);
10989 sym->st_other = other;
10990 }
10991
10992 /* If we have a MIPS16 function with a stub, the dynamic symbol must
10993 refer to the stub, since only the stub uses the standard calling
10994 conventions. */
10995 if (h->dynindx != -1 && hmips->fn_stub != NULL)
10996 {
10997 BFD_ASSERT (hmips->need_fn_stub);
10998 sym->st_value = (hmips->fn_stub->output_section->vma
10999 + hmips->fn_stub->output_offset);
11000 sym->st_size = hmips->fn_stub->size;
11001 sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
11002 }
11003
11004 BFD_ASSERT (h->dynindx != -1
11005 || h->forced_local);
11006
11007 sgot = htab->sgot;
11008 g = htab->got_info;
11009 BFD_ASSERT (g != NULL);
11010
11011 /* Run through the global symbol table, creating GOT entries for all
11012 the symbols that need them. */
11013 if (hmips->global_got_area != GGA_NONE)
11014 {
11015 bfd_vma offset;
11016 bfd_vma value;
11017
11018 value = sym->st_value;
11019 offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11020 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
11021 }
11022
11023 if (hmips->global_got_area != GGA_NONE && g->next)
11024 {
11025 struct mips_got_entry e, *p;
11026 bfd_vma entry;
11027 bfd_vma offset;
11028
11029 gg = g;
11030
11031 e.abfd = output_bfd;
11032 e.symndx = -1;
11033 e.d.h = hmips;
11034 e.tls_type = GOT_TLS_NONE;
11035
11036 for (g = g->next; g->next != gg; g = g->next)
11037 {
11038 if (g->got_entries
11039 && (p = (struct mips_got_entry *) htab_find (g->got_entries,
11040 &e)))
11041 {
11042 offset = p->gotidx;
11043 BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
11044 if (bfd_link_pic (info)
11045 || (elf_hash_table (info)->dynamic_sections_created
11046 && p->d.h != NULL
11047 && p->d.h->root.def_dynamic
11048 && !p->d.h->root.def_regular))
11049 {
11050 /* Create an R_MIPS_REL32 relocation for this entry. Due to
11051 the various compatibility problems, it's easier to mock
11052 up an R_MIPS_32 or R_MIPS_64 relocation and leave
11053 mips_elf_create_dynamic_relocation to calculate the
11054 appropriate addend. */
11055 Elf_Internal_Rela rel[3];
11056
11057 memset (rel, 0, sizeof (rel));
11058 if (ABI_64_P (output_bfd))
11059 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
11060 else
11061 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
11062 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
11063
11064 entry = 0;
11065 if (! (mips_elf_create_dynamic_relocation
11066 (output_bfd, info, rel,
11067 e.d.h, NULL, sym->st_value, &entry, sgot)))
11068 return FALSE;
11069 }
11070 else
11071 entry = sym->st_value;
11072 MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
11073 }
11074 }
11075 }
11076
11077 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
11078 name = h->root.root.string;
11079 if (h == elf_hash_table (info)->hdynamic
11080 || h == elf_hash_table (info)->hgot)
11081 sym->st_shndx = SHN_ABS;
11082 else if (strcmp (name, "_DYNAMIC_LINK") == 0
11083 || strcmp (name, "_DYNAMIC_LINKING") == 0)
11084 {
11085 sym->st_shndx = SHN_ABS;
11086 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11087 sym->st_value = 1;
11088 }
11089 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
11090 {
11091 sym->st_shndx = SHN_ABS;
11092 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11093 sym->st_value = elf_gp (output_bfd);
11094 }
11095 else if (SGI_COMPAT (output_bfd))
11096 {
11097 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
11098 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
11099 {
11100 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11101 sym->st_other = STO_PROTECTED;
11102 sym->st_value = 0;
11103 sym->st_shndx = SHN_MIPS_DATA;
11104 }
11105 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
11106 {
11107 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11108 sym->st_other = STO_PROTECTED;
11109 sym->st_value = mips_elf_hash_table (info)->procedure_count;
11110 sym->st_shndx = SHN_ABS;
11111 }
11112 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
11113 {
11114 if (h->type == STT_FUNC)
11115 sym->st_shndx = SHN_MIPS_TEXT;
11116 else if (h->type == STT_OBJECT)
11117 sym->st_shndx = SHN_MIPS_DATA;
11118 }
11119 }
11120
11121 /* Emit a copy reloc, if needed. */
11122 if (h->needs_copy)
11123 {
11124 asection *s;
11125 bfd_vma symval;
11126
11127 BFD_ASSERT (h->dynindx != -1);
11128 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11129
11130 s = mips_elf_rel_dyn_section (info, FALSE);
11131 symval = (h->root.u.def.section->output_section->vma
11132 + h->root.u.def.section->output_offset
11133 + h->root.u.def.value);
11134 mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
11135 h->dynindx, R_MIPS_COPY, symval);
11136 }
11137
11138 /* Handle the IRIX6-specific symbols. */
11139 if (IRIX_COMPAT (output_bfd) == ict_irix6)
11140 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
11141
11142 /* Keep dynamic compressed symbols odd. This allows the dynamic linker
11143 to treat compressed symbols like any other. */
11144 if (ELF_ST_IS_MIPS16 (sym->st_other))
11145 {
11146 BFD_ASSERT (sym->st_value & 1);
11147 sym->st_other -= STO_MIPS16;
11148 }
11149 else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11150 {
11151 BFD_ASSERT (sym->st_value & 1);
11152 sym->st_other -= STO_MICROMIPS;
11153 }
11154
11155 return TRUE;
11156 }
11157
11158 /* Likewise, for VxWorks. */
11159
11160 bfd_boolean
11161 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11162 struct bfd_link_info *info,
11163 struct elf_link_hash_entry *h,
11164 Elf_Internal_Sym *sym)
11165 {
11166 bfd *dynobj;
11167 asection *sgot;
11168 struct mips_got_info *g;
11169 struct mips_elf_link_hash_table *htab;
11170 struct mips_elf_link_hash_entry *hmips;
11171
11172 htab = mips_elf_hash_table (info);
11173 BFD_ASSERT (htab != NULL);
11174 dynobj = elf_hash_table (info)->dynobj;
11175 hmips = (struct mips_elf_link_hash_entry *) h;
11176
11177 if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11178 {
11179 bfd_byte *loc;
11180 bfd_vma plt_address, got_address, got_offset, branch_offset;
11181 Elf_Internal_Rela rel;
11182 static const bfd_vma *plt_entry;
11183 bfd_vma gotplt_index;
11184 bfd_vma plt_offset;
11185
11186 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11187 gotplt_index = h->plt.plist->gotplt_index;
11188
11189 BFD_ASSERT (h->dynindx != -1);
11190 BFD_ASSERT (htab->splt != NULL);
11191 BFD_ASSERT (gotplt_index != MINUS_ONE);
11192 BFD_ASSERT (plt_offset <= htab->splt->size);
11193
11194 /* Calculate the address of the .plt entry. */
11195 plt_address = (htab->splt->output_section->vma
11196 + htab->splt->output_offset
11197 + plt_offset);
11198
11199 /* Calculate the address of the .got.plt entry. */
11200 got_address = (htab->sgotplt->output_section->vma
11201 + htab->sgotplt->output_offset
11202 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11203
11204 /* Calculate the offset of the .got.plt entry from
11205 _GLOBAL_OFFSET_TABLE_. */
11206 got_offset = mips_elf_gotplt_index (info, h);
11207
11208 /* Calculate the offset for the branch at the start of the PLT
11209 entry. The branch jumps to the beginning of .plt. */
11210 branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11211
11212 /* Fill in the initial value of the .got.plt entry. */
11213 bfd_put_32 (output_bfd, plt_address,
11214 (htab->sgotplt->contents
11215 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11216
11217 /* Find out where the .plt entry should go. */
11218 loc = htab->splt->contents + plt_offset;
11219
11220 if (bfd_link_pic (info))
11221 {
11222 plt_entry = mips_vxworks_shared_plt_entry;
11223 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11224 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11225 }
11226 else
11227 {
11228 bfd_vma got_address_high, got_address_low;
11229
11230 plt_entry = mips_vxworks_exec_plt_entry;
11231 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11232 got_address_low = got_address & 0xffff;
11233
11234 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11235 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11236 bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11237 bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11238 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11239 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11240 bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11241 bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11242
11243 loc = (htab->srelplt2->contents
11244 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11245
11246 /* Emit a relocation for the .got.plt entry. */
11247 rel.r_offset = got_address;
11248 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11249 rel.r_addend = plt_offset;
11250 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11251
11252 /* Emit a relocation for the lui of %hi(<.got.plt slot>). */
11253 loc += sizeof (Elf32_External_Rela);
11254 rel.r_offset = plt_address + 8;
11255 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11256 rel.r_addend = got_offset;
11257 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11258
11259 /* Emit a relocation for the addiu of %lo(<.got.plt slot>). */
11260 loc += sizeof (Elf32_External_Rela);
11261 rel.r_offset += 4;
11262 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11263 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11264 }
11265
11266 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
11267 loc = (htab->srelplt->contents
11268 + gotplt_index * sizeof (Elf32_External_Rela));
11269 rel.r_offset = got_address;
11270 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11271 rel.r_addend = 0;
11272 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11273
11274 if (!h->def_regular)
11275 sym->st_shndx = SHN_UNDEF;
11276 }
11277
11278 BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11279
11280 sgot = htab->sgot;
11281 g = htab->got_info;
11282 BFD_ASSERT (g != NULL);
11283
11284 /* See if this symbol has an entry in the GOT. */
11285 if (hmips->global_got_area != GGA_NONE)
11286 {
11287 bfd_vma offset;
11288 Elf_Internal_Rela outrel;
11289 bfd_byte *loc;
11290 asection *s;
11291
11292 /* Install the symbol value in the GOT. */
11293 offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11294 MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11295
11296 /* Add a dynamic relocation for it. */
11297 s = mips_elf_rel_dyn_section (info, FALSE);
11298 loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11299 outrel.r_offset = (sgot->output_section->vma
11300 + sgot->output_offset
11301 + offset);
11302 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11303 outrel.r_addend = 0;
11304 bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11305 }
11306
11307 /* Emit a copy reloc, if needed. */
11308 if (h->needs_copy)
11309 {
11310 Elf_Internal_Rela rel;
11311
11312 BFD_ASSERT (h->dynindx != -1);
11313
11314 rel.r_offset = (h->root.u.def.section->output_section->vma
11315 + h->root.u.def.section->output_offset
11316 + h->root.u.def.value);
11317 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11318 rel.r_addend = 0;
11319 bfd_elf32_swap_reloca_out (output_bfd, &rel,
11320 htab->srelbss->contents
11321 + (htab->srelbss->reloc_count
11322 * sizeof (Elf32_External_Rela)));
11323 ++htab->srelbss->reloc_count;
11324 }
11325
11326 /* If this is a mips16/microMIPS symbol, force the value to be even. */
11327 if (ELF_ST_IS_COMPRESSED (sym->st_other))
11328 sym->st_value &= ~1;
11329
11330 return TRUE;
11331 }
11332
11333 /* Write out a plt0 entry to the beginning of .plt. */
11334
11335 static bfd_boolean
11336 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11337 {
11338 bfd_byte *loc;
11339 bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11340 static const bfd_vma *plt_entry;
11341 struct mips_elf_link_hash_table *htab;
11342
11343 htab = mips_elf_hash_table (info);
11344 BFD_ASSERT (htab != NULL);
11345
11346 if (ABI_64_P (output_bfd))
11347 plt_entry = mips_n64_exec_plt0_entry;
11348 else if (ABI_N32_P (output_bfd))
11349 plt_entry = mips_n32_exec_plt0_entry;
11350 else if (!htab->plt_header_is_comp)
11351 plt_entry = mips_o32_exec_plt0_entry;
11352 else if (htab->insn32)
11353 plt_entry = micromips_insn32_o32_exec_plt0_entry;
11354 else
11355 plt_entry = micromips_o32_exec_plt0_entry;
11356
11357 /* Calculate the value of .got.plt. */
11358 gotplt_value = (htab->sgotplt->output_section->vma
11359 + htab->sgotplt->output_offset);
11360 gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11361 gotplt_value_low = gotplt_value & 0xffff;
11362
11363 /* The PLT sequence is not safe for N64 if .got.plt's address can
11364 not be loaded in two instructions. */
11365 BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11366 || ~(gotplt_value | 0x7fffffff) == 0);
11367
11368 /* Install the PLT header. */
11369 loc = htab->splt->contents;
11370 if (plt_entry == micromips_o32_exec_plt0_entry)
11371 {
11372 bfd_vma gotpc_offset;
11373 bfd_vma loc_address;
11374 size_t i;
11375
11376 BFD_ASSERT (gotplt_value % 4 == 0);
11377
11378 loc_address = (htab->splt->output_section->vma
11379 + htab->splt->output_offset);
11380 gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11381
11382 /* ADDIUPC has a span of +/-16MB, check we're in range. */
11383 if (gotpc_offset + 0x1000000 >= 0x2000000)
11384 {
11385 (*_bfd_error_handler)
11386 (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11387 output_bfd,
11388 htab->sgotplt->output_section,
11389 htab->splt->output_section,
11390 (long) gotpc_offset);
11391 bfd_set_error (bfd_error_no_error);
11392 return FALSE;
11393 }
11394 bfd_put_16 (output_bfd,
11395 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11396 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11397 for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11398 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11399 }
11400 else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11401 {
11402 size_t i;
11403
11404 bfd_put_16 (output_bfd, plt_entry[0], loc);
11405 bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11406 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11407 bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11408 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11409 bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11410 for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11411 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11412 }
11413 else
11414 {
11415 bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11416 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11417 bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11418 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11419 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11420 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11421 bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11422 bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11423 }
11424
11425 return TRUE;
11426 }
11427
11428 /* Install the PLT header for a VxWorks executable and finalize the
11429 contents of .rela.plt.unloaded. */
11430
11431 static void
11432 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11433 {
11434 Elf_Internal_Rela rela;
11435 bfd_byte *loc;
11436 bfd_vma got_value, got_value_high, got_value_low, plt_address;
11437 static const bfd_vma *plt_entry;
11438 struct mips_elf_link_hash_table *htab;
11439
11440 htab = mips_elf_hash_table (info);
11441 BFD_ASSERT (htab != NULL);
11442
11443 plt_entry = mips_vxworks_exec_plt0_entry;
11444
11445 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
11446 got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11447 + htab->root.hgot->root.u.def.section->output_offset
11448 + htab->root.hgot->root.u.def.value);
11449
11450 got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11451 got_value_low = got_value & 0xffff;
11452
11453 /* Calculate the address of the PLT header. */
11454 plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11455
11456 /* Install the PLT header. */
11457 loc = htab->splt->contents;
11458 bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11459 bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11460 bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11461 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11462 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11463 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11464
11465 /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_). */
11466 loc = htab->srelplt2->contents;
11467 rela.r_offset = plt_address;
11468 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11469 rela.r_addend = 0;
11470 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11471 loc += sizeof (Elf32_External_Rela);
11472
11473 /* Output the relocation for the following addiu of
11474 %lo(_GLOBAL_OFFSET_TABLE_). */
11475 rela.r_offset += 4;
11476 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11477 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11478 loc += sizeof (Elf32_External_Rela);
11479
11480 /* Fix up the remaining relocations. They may have the wrong
11481 symbol index for _G_O_T_ or _P_L_T_ depending on the order
11482 in which symbols were output. */
11483 while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11484 {
11485 Elf_Internal_Rela rel;
11486
11487 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11488 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11489 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11490 loc += sizeof (Elf32_External_Rela);
11491
11492 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11493 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11494 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11495 loc += sizeof (Elf32_External_Rela);
11496
11497 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11498 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11499 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11500 loc += sizeof (Elf32_External_Rela);
11501 }
11502 }
11503
11504 /* Install the PLT header for a VxWorks shared library. */
11505
11506 static void
11507 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11508 {
11509 unsigned int i;
11510 struct mips_elf_link_hash_table *htab;
11511
11512 htab = mips_elf_hash_table (info);
11513 BFD_ASSERT (htab != NULL);
11514
11515 /* We just need to copy the entry byte-by-byte. */
11516 for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11517 bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11518 htab->splt->contents + i * 4);
11519 }
11520
11521 /* Finish up the dynamic sections. */
11522
11523 bfd_boolean
11524 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11525 struct bfd_link_info *info)
11526 {
11527 bfd *dynobj;
11528 asection *sdyn;
11529 asection *sgot;
11530 struct mips_got_info *gg, *g;
11531 struct mips_elf_link_hash_table *htab;
11532
11533 htab = mips_elf_hash_table (info);
11534 BFD_ASSERT (htab != NULL);
11535
11536 dynobj = elf_hash_table (info)->dynobj;
11537
11538 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11539
11540 sgot = htab->sgot;
11541 gg = htab->got_info;
11542
11543 if (elf_hash_table (info)->dynamic_sections_created)
11544 {
11545 bfd_byte *b;
11546 int dyn_to_skip = 0, dyn_skipped = 0;
11547
11548 BFD_ASSERT (sdyn != NULL);
11549 BFD_ASSERT (gg != NULL);
11550
11551 g = mips_elf_bfd_got (output_bfd, FALSE);
11552 BFD_ASSERT (g != NULL);
11553
11554 for (b = sdyn->contents;
11555 b < sdyn->contents + sdyn->size;
11556 b += MIPS_ELF_DYN_SIZE (dynobj))
11557 {
11558 Elf_Internal_Dyn dyn;
11559 const char *name;
11560 size_t elemsize;
11561 asection *s;
11562 bfd_boolean swap_out_p;
11563
11564 /* Read in the current dynamic entry. */
11565 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11566
11567 /* Assume that we're going to modify it and write it out. */
11568 swap_out_p = TRUE;
11569
11570 switch (dyn.d_tag)
11571 {
11572 case DT_RELENT:
11573 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11574 break;
11575
11576 case DT_RELAENT:
11577 BFD_ASSERT (htab->is_vxworks);
11578 dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11579 break;
11580
11581 case DT_STRSZ:
11582 /* Rewrite DT_STRSZ. */
11583 dyn.d_un.d_val =
11584 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11585 break;
11586
11587 case DT_PLTGOT:
11588 s = htab->sgot;
11589 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11590 break;
11591
11592 case DT_MIPS_PLTGOT:
11593 s = htab->sgotplt;
11594 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11595 break;
11596
11597 case DT_MIPS_RLD_VERSION:
11598 dyn.d_un.d_val = 1; /* XXX */
11599 break;
11600
11601 case DT_MIPS_FLAGS:
11602 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11603 break;
11604
11605 case DT_MIPS_TIME_STAMP:
11606 {
11607 time_t t;
11608 time (&t);
11609 dyn.d_un.d_val = t;
11610 }
11611 break;
11612
11613 case DT_MIPS_ICHECKSUM:
11614 /* XXX FIXME: */
11615 swap_out_p = FALSE;
11616 break;
11617
11618 case DT_MIPS_IVERSION:
11619 /* XXX FIXME: */
11620 swap_out_p = FALSE;
11621 break;
11622
11623 case DT_MIPS_BASE_ADDRESS:
11624 s = output_bfd->sections;
11625 BFD_ASSERT (s != NULL);
11626 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11627 break;
11628
11629 case DT_MIPS_LOCAL_GOTNO:
11630 dyn.d_un.d_val = g->local_gotno;
11631 break;
11632
11633 case DT_MIPS_UNREFEXTNO:
11634 /* The index into the dynamic symbol table which is the
11635 entry of the first external symbol that is not
11636 referenced within the same object. */
11637 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11638 break;
11639
11640 case DT_MIPS_GOTSYM:
11641 if (htab->global_gotsym)
11642 {
11643 dyn.d_un.d_val = htab->global_gotsym->dynindx;
11644 break;
11645 }
11646 /* In case if we don't have global got symbols we default
11647 to setting DT_MIPS_GOTSYM to the same value as
11648 DT_MIPS_SYMTABNO, so we just fall through. */
11649
11650 case DT_MIPS_SYMTABNO:
11651 name = ".dynsym";
11652 elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11653 s = bfd_get_linker_section (dynobj, name);
11654
11655 if (s != NULL)
11656 dyn.d_un.d_val = s->size / elemsize;
11657 else
11658 dyn.d_un.d_val = 0;
11659 break;
11660
11661 case DT_MIPS_HIPAGENO:
11662 dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11663 break;
11664
11665 case DT_MIPS_RLD_MAP:
11666 {
11667 struct elf_link_hash_entry *h;
11668 h = mips_elf_hash_table (info)->rld_symbol;
11669 if (!h)
11670 {
11671 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11672 swap_out_p = FALSE;
11673 break;
11674 }
11675 s = h->root.u.def.section;
11676
11677 /* The MIPS_RLD_MAP tag stores the absolute address of the
11678 debug pointer. */
11679 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11680 + h->root.u.def.value);
11681 }
11682 break;
11683
11684 case DT_MIPS_RLD_MAP_REL:
11685 {
11686 struct elf_link_hash_entry *h;
11687 bfd_vma dt_addr, rld_addr;
11688 h = mips_elf_hash_table (info)->rld_symbol;
11689 if (!h)
11690 {
11691 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11692 swap_out_p = FALSE;
11693 break;
11694 }
11695 s = h->root.u.def.section;
11696
11697 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11698 pointer, relative to the address of the tag. */
11699 dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11700 + (b - sdyn->contents));
11701 rld_addr = (s->output_section->vma + s->output_offset
11702 + h->root.u.def.value);
11703 dyn.d_un.d_ptr = rld_addr - dt_addr;
11704 }
11705 break;
11706
11707 case DT_MIPS_OPTIONS:
11708 s = (bfd_get_section_by_name
11709 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11710 dyn.d_un.d_ptr = s->vma;
11711 break;
11712
11713 case DT_RELASZ:
11714 BFD_ASSERT (htab->is_vxworks);
11715 /* The count does not include the JUMP_SLOT relocations. */
11716 if (htab->srelplt)
11717 dyn.d_un.d_val -= htab->srelplt->size;
11718 break;
11719
11720 case DT_PLTREL:
11721 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11722 if (htab->is_vxworks)
11723 dyn.d_un.d_val = DT_RELA;
11724 else
11725 dyn.d_un.d_val = DT_REL;
11726 break;
11727
11728 case DT_PLTRELSZ:
11729 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11730 dyn.d_un.d_val = htab->srelplt->size;
11731 break;
11732
11733 case DT_JMPREL:
11734 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11735 dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
11736 + htab->srelplt->output_offset);
11737 break;
11738
11739 case DT_TEXTREL:
11740 /* If we didn't need any text relocations after all, delete
11741 the dynamic tag. */
11742 if (!(info->flags & DF_TEXTREL))
11743 {
11744 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11745 swap_out_p = FALSE;
11746 }
11747 break;
11748
11749 case DT_FLAGS:
11750 /* If we didn't need any text relocations after all, clear
11751 DF_TEXTREL from DT_FLAGS. */
11752 if (!(info->flags & DF_TEXTREL))
11753 dyn.d_un.d_val &= ~DF_TEXTREL;
11754 else
11755 swap_out_p = FALSE;
11756 break;
11757
11758 default:
11759 swap_out_p = FALSE;
11760 if (htab->is_vxworks
11761 && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11762 swap_out_p = TRUE;
11763 break;
11764 }
11765
11766 if (swap_out_p || dyn_skipped)
11767 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11768 (dynobj, &dyn, b - dyn_skipped);
11769
11770 if (dyn_to_skip)
11771 {
11772 dyn_skipped += dyn_to_skip;
11773 dyn_to_skip = 0;
11774 }
11775 }
11776
11777 /* Wipe out any trailing entries if we shifted down a dynamic tag. */
11778 if (dyn_skipped > 0)
11779 memset (b - dyn_skipped, 0, dyn_skipped);
11780 }
11781
11782 if (sgot != NULL && sgot->size > 0
11783 && !bfd_is_abs_section (sgot->output_section))
11784 {
11785 if (htab->is_vxworks)
11786 {
11787 /* The first entry of the global offset table points to the
11788 ".dynamic" section. The second is initialized by the
11789 loader and contains the shared library identifier.
11790 The third is also initialized by the loader and points
11791 to the lazy resolution stub. */
11792 MIPS_ELF_PUT_WORD (output_bfd,
11793 sdyn->output_offset + sdyn->output_section->vma,
11794 sgot->contents);
11795 MIPS_ELF_PUT_WORD (output_bfd, 0,
11796 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11797 MIPS_ELF_PUT_WORD (output_bfd, 0,
11798 sgot->contents
11799 + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11800 }
11801 else
11802 {
11803 /* The first entry of the global offset table will be filled at
11804 runtime. The second entry will be used by some runtime loaders.
11805 This isn't the case of IRIX rld. */
11806 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11807 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11808 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11809 }
11810
11811 elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11812 = MIPS_ELF_GOT_SIZE (output_bfd);
11813 }
11814
11815 /* Generate dynamic relocations for the non-primary gots. */
11816 if (gg != NULL && gg->next)
11817 {
11818 Elf_Internal_Rela rel[3];
11819 bfd_vma addend = 0;
11820
11821 memset (rel, 0, sizeof (rel));
11822 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11823
11824 for (g = gg->next; g->next != gg; g = g->next)
11825 {
11826 bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11827 + g->next->tls_gotno;
11828
11829 MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11830 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11831 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11832 sgot->contents
11833 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11834
11835 if (! bfd_link_pic (info))
11836 continue;
11837
11838 for (; got_index < g->local_gotno; got_index++)
11839 {
11840 if (got_index >= g->assigned_low_gotno
11841 && got_index <= g->assigned_high_gotno)
11842 continue;
11843
11844 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11845 = got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11846 if (!(mips_elf_create_dynamic_relocation
11847 (output_bfd, info, rel, NULL,
11848 bfd_abs_section_ptr,
11849 0, &addend, sgot)))
11850 return FALSE;
11851 BFD_ASSERT (addend == 0);
11852 }
11853 }
11854 }
11855
11856 /* The generation of dynamic relocations for the non-primary gots
11857 adds more dynamic relocations. We cannot count them until
11858 here. */
11859
11860 if (elf_hash_table (info)->dynamic_sections_created)
11861 {
11862 bfd_byte *b;
11863 bfd_boolean swap_out_p;
11864
11865 BFD_ASSERT (sdyn != NULL);
11866
11867 for (b = sdyn->contents;
11868 b < sdyn->contents + sdyn->size;
11869 b += MIPS_ELF_DYN_SIZE (dynobj))
11870 {
11871 Elf_Internal_Dyn dyn;
11872 asection *s;
11873
11874 /* Read in the current dynamic entry. */
11875 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11876
11877 /* Assume that we're going to modify it and write it out. */
11878 swap_out_p = TRUE;
11879
11880 switch (dyn.d_tag)
11881 {
11882 case DT_RELSZ:
11883 /* Reduce DT_RELSZ to account for any relocations we
11884 decided not to make. This is for the n64 irix rld,
11885 which doesn't seem to apply any relocations if there
11886 are trailing null entries. */
11887 s = mips_elf_rel_dyn_section (info, FALSE);
11888 dyn.d_un.d_val = (s->reloc_count
11889 * (ABI_64_P (output_bfd)
11890 ? sizeof (Elf64_Mips_External_Rel)
11891 : sizeof (Elf32_External_Rel)));
11892 /* Adjust the section size too. Tools like the prelinker
11893 can reasonably expect the values to the same. */
11894 elf_section_data (s->output_section)->this_hdr.sh_size
11895 = dyn.d_un.d_val;
11896 break;
11897
11898 default:
11899 swap_out_p = FALSE;
11900 break;
11901 }
11902
11903 if (swap_out_p)
11904 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11905 (dynobj, &dyn, b);
11906 }
11907 }
11908
11909 {
11910 asection *s;
11911 Elf32_compact_rel cpt;
11912
11913 if (SGI_COMPAT (output_bfd))
11914 {
11915 /* Write .compact_rel section out. */
11916 s = bfd_get_linker_section (dynobj, ".compact_rel");
11917 if (s != NULL)
11918 {
11919 cpt.id1 = 1;
11920 cpt.num = s->reloc_count;
11921 cpt.id2 = 2;
11922 cpt.offset = (s->output_section->filepos
11923 + sizeof (Elf32_External_compact_rel));
11924 cpt.reserved0 = 0;
11925 cpt.reserved1 = 0;
11926 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11927 ((Elf32_External_compact_rel *)
11928 s->contents));
11929
11930 /* Clean up a dummy stub function entry in .text. */
11931 if (htab->sstubs != NULL)
11932 {
11933 file_ptr dummy_offset;
11934
11935 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11936 dummy_offset = htab->sstubs->size - htab->function_stub_size;
11937 memset (htab->sstubs->contents + dummy_offset, 0,
11938 htab->function_stub_size);
11939 }
11940 }
11941 }
11942
11943 /* The psABI says that the dynamic relocations must be sorted in
11944 increasing order of r_symndx. The VxWorks EABI doesn't require
11945 this, and because the code below handles REL rather than RELA
11946 relocations, using it for VxWorks would be outright harmful. */
11947 if (!htab->is_vxworks)
11948 {
11949 s = mips_elf_rel_dyn_section (info, FALSE);
11950 if (s != NULL
11951 && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11952 {
11953 reldyn_sorting_bfd = output_bfd;
11954
11955 if (ABI_64_P (output_bfd))
11956 qsort ((Elf64_External_Rel *) s->contents + 1,
11957 s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11958 sort_dynamic_relocs_64);
11959 else
11960 qsort ((Elf32_External_Rel *) s->contents + 1,
11961 s->reloc_count - 1, sizeof (Elf32_External_Rel),
11962 sort_dynamic_relocs);
11963 }
11964 }
11965 }
11966
11967 if (htab->splt && htab->splt->size > 0)
11968 {
11969 if (htab->is_vxworks)
11970 {
11971 if (bfd_link_pic (info))
11972 mips_vxworks_finish_shared_plt (output_bfd, info);
11973 else
11974 mips_vxworks_finish_exec_plt (output_bfd, info);
11975 }
11976 else
11977 {
11978 BFD_ASSERT (!bfd_link_pic (info));
11979 if (!mips_finish_exec_plt (output_bfd, info))
11980 return FALSE;
11981 }
11982 }
11983 return TRUE;
11984 }
11985
11986
11987 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */
11988
11989 static void
11990 mips_set_isa_flags (bfd *abfd)
11991 {
11992 flagword val;
11993
11994 switch (bfd_get_mach (abfd))
11995 {
11996 default:
11997 case bfd_mach_mips3000:
11998 val = E_MIPS_ARCH_1;
11999 break;
12000
12001 case bfd_mach_mips3900:
12002 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
12003 break;
12004
12005 case bfd_mach_mips6000:
12006 val = E_MIPS_ARCH_2;
12007 break;
12008
12009 case bfd_mach_mips4000:
12010 case bfd_mach_mips4300:
12011 case bfd_mach_mips4400:
12012 case bfd_mach_mips4600:
12013 val = E_MIPS_ARCH_3;
12014 break;
12015
12016 case bfd_mach_mips4010:
12017 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
12018 break;
12019
12020 case bfd_mach_mips4100:
12021 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
12022 break;
12023
12024 case bfd_mach_mips4111:
12025 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
12026 break;
12027
12028 case bfd_mach_mips4120:
12029 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
12030 break;
12031
12032 case bfd_mach_mips4650:
12033 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
12034 break;
12035
12036 case bfd_mach_mips5400:
12037 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
12038 break;
12039
12040 case bfd_mach_mips5500:
12041 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
12042 break;
12043
12044 case bfd_mach_mips5900:
12045 val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
12046 break;
12047
12048 case bfd_mach_mips9000:
12049 val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
12050 break;
12051
12052 case bfd_mach_mips5000:
12053 case bfd_mach_mips7000:
12054 case bfd_mach_mips8000:
12055 case bfd_mach_mips10000:
12056 case bfd_mach_mips12000:
12057 case bfd_mach_mips14000:
12058 case bfd_mach_mips16000:
12059 val = E_MIPS_ARCH_4;
12060 break;
12061
12062 case bfd_mach_mips5:
12063 val = E_MIPS_ARCH_5;
12064 break;
12065
12066 case bfd_mach_mips_loongson_2e:
12067 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
12068 break;
12069
12070 case bfd_mach_mips_loongson_2f:
12071 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
12072 break;
12073
12074 case bfd_mach_mips_sb1:
12075 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
12076 break;
12077
12078 case bfd_mach_mips_loongson_3a:
12079 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
12080 break;
12081
12082 case bfd_mach_mips_octeon:
12083 case bfd_mach_mips_octeonp:
12084 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
12085 break;
12086
12087 case bfd_mach_mips_octeon3:
12088 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
12089 break;
12090
12091 case bfd_mach_mips_xlr:
12092 val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
12093 break;
12094
12095 case bfd_mach_mips_octeon2:
12096 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
12097 break;
12098
12099 case bfd_mach_mipsisa32:
12100 val = E_MIPS_ARCH_32;
12101 break;
12102
12103 case bfd_mach_mipsisa64:
12104 val = E_MIPS_ARCH_64;
12105 break;
12106
12107 case bfd_mach_mipsisa32r2:
12108 case bfd_mach_mipsisa32r3:
12109 case bfd_mach_mipsisa32r5:
12110 val = E_MIPS_ARCH_32R2;
12111 break;
12112
12113 case bfd_mach_mipsisa64r2:
12114 case bfd_mach_mipsisa64r3:
12115 case bfd_mach_mipsisa64r5:
12116 val = E_MIPS_ARCH_64R2;
12117 break;
12118
12119 case bfd_mach_mipsisa32r6:
12120 val = E_MIPS_ARCH_32R6;
12121 break;
12122
12123 case bfd_mach_mipsisa64r6:
12124 val = E_MIPS_ARCH_64R6;
12125 break;
12126 }
12127 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
12128 elf_elfheader (abfd)->e_flags |= val;
12129
12130 }
12131
12132
12133 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
12134 Don't do so for code sections. We want to keep ordering of HI16/LO16
12135 as is. On the other hand, elf-eh-frame.c processing requires .eh_frame
12136 relocs to be sorted. */
12137
12138 bfd_boolean
12139 _bfd_mips_elf_sort_relocs_p (asection *sec)
12140 {
12141 return (sec->flags & SEC_CODE) == 0;
12142 }
12143
12144
12145 /* The final processing done just before writing out a MIPS ELF object
12146 file. This gets the MIPS architecture right based on the machine
12147 number. This is used by both the 32-bit and the 64-bit ABI. */
12148
12149 void
12150 _bfd_mips_elf_final_write_processing (bfd *abfd,
12151 bfd_boolean linker ATTRIBUTE_UNUSED)
12152 {
12153 unsigned int i;
12154 Elf_Internal_Shdr **hdrpp;
12155 const char *name;
12156 asection *sec;
12157
12158 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12159 is nonzero. This is for compatibility with old objects, which used
12160 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */
12161 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12162 mips_set_isa_flags (abfd);
12163
12164 /* Set the sh_info field for .gptab sections and other appropriate
12165 info for each special section. */
12166 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12167 i < elf_numsections (abfd);
12168 i++, hdrpp++)
12169 {
12170 switch ((*hdrpp)->sh_type)
12171 {
12172 case SHT_MIPS_MSYM:
12173 case SHT_MIPS_LIBLIST:
12174 sec = bfd_get_section_by_name (abfd, ".dynstr");
12175 if (sec != NULL)
12176 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12177 break;
12178
12179 case SHT_MIPS_GPTAB:
12180 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12181 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12182 BFD_ASSERT (name != NULL
12183 && CONST_STRNEQ (name, ".gptab."));
12184 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12185 BFD_ASSERT (sec != NULL);
12186 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12187 break;
12188
12189 case SHT_MIPS_CONTENT:
12190 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12191 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12192 BFD_ASSERT (name != NULL
12193 && CONST_STRNEQ (name, ".MIPS.content"));
12194 sec = bfd_get_section_by_name (abfd,
12195 name + sizeof ".MIPS.content" - 1);
12196 BFD_ASSERT (sec != NULL);
12197 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12198 break;
12199
12200 case SHT_MIPS_SYMBOL_LIB:
12201 sec = bfd_get_section_by_name (abfd, ".dynsym");
12202 if (sec != NULL)
12203 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12204 sec = bfd_get_section_by_name (abfd, ".liblist");
12205 if (sec != NULL)
12206 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12207 break;
12208
12209 case SHT_MIPS_EVENTS:
12210 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12211 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12212 BFD_ASSERT (name != NULL);
12213 if (CONST_STRNEQ (name, ".MIPS.events"))
12214 sec = bfd_get_section_by_name (abfd,
12215 name + sizeof ".MIPS.events" - 1);
12216 else
12217 {
12218 BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12219 sec = bfd_get_section_by_name (abfd,
12220 (name
12221 + sizeof ".MIPS.post_rel" - 1));
12222 }
12223 BFD_ASSERT (sec != NULL);
12224 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12225 break;
12226
12227 }
12228 }
12229 }
12230 \f
12231 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12232 segments. */
12233
12234 int
12235 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12236 struct bfd_link_info *info ATTRIBUTE_UNUSED)
12237 {
12238 asection *s;
12239 int ret = 0;
12240
12241 /* See if we need a PT_MIPS_REGINFO segment. */
12242 s = bfd_get_section_by_name (abfd, ".reginfo");
12243 if (s && (s->flags & SEC_LOAD))
12244 ++ret;
12245
12246 /* See if we need a PT_MIPS_ABIFLAGS segment. */
12247 if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12248 ++ret;
12249
12250 /* See if we need a PT_MIPS_OPTIONS segment. */
12251 if (IRIX_COMPAT (abfd) == ict_irix6
12252 && bfd_get_section_by_name (abfd,
12253 MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12254 ++ret;
12255
12256 /* See if we need a PT_MIPS_RTPROC segment. */
12257 if (IRIX_COMPAT (abfd) == ict_irix5
12258 && bfd_get_section_by_name (abfd, ".dynamic")
12259 && bfd_get_section_by_name (abfd, ".mdebug"))
12260 ++ret;
12261
12262 /* Allocate a PT_NULL header in dynamic objects. See
12263 _bfd_mips_elf_modify_segment_map for details. */
12264 if (!SGI_COMPAT (abfd)
12265 && bfd_get_section_by_name (abfd, ".dynamic"))
12266 ++ret;
12267
12268 return ret;
12269 }
12270
12271 /* Modify the segment map for an IRIX5 executable. */
12272
12273 bfd_boolean
12274 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12275 struct bfd_link_info *info)
12276 {
12277 asection *s;
12278 struct elf_segment_map *m, **pm;
12279 bfd_size_type amt;
12280
12281 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12282 segment. */
12283 s = bfd_get_section_by_name (abfd, ".reginfo");
12284 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12285 {
12286 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12287 if (m->p_type == PT_MIPS_REGINFO)
12288 break;
12289 if (m == NULL)
12290 {
12291 amt = sizeof *m;
12292 m = bfd_zalloc (abfd, amt);
12293 if (m == NULL)
12294 return FALSE;
12295
12296 m->p_type = PT_MIPS_REGINFO;
12297 m->count = 1;
12298 m->sections[0] = s;
12299
12300 /* We want to put it after the PHDR and INTERP segments. */
12301 pm = &elf_seg_map (abfd);
12302 while (*pm != NULL
12303 && ((*pm)->p_type == PT_PHDR
12304 || (*pm)->p_type == PT_INTERP))
12305 pm = &(*pm)->next;
12306
12307 m->next = *pm;
12308 *pm = m;
12309 }
12310 }
12311
12312 /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12313 segment. */
12314 s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12315 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12316 {
12317 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12318 if (m->p_type == PT_MIPS_ABIFLAGS)
12319 break;
12320 if (m == NULL)
12321 {
12322 amt = sizeof *m;
12323 m = bfd_zalloc (abfd, amt);
12324 if (m == NULL)
12325 return FALSE;
12326
12327 m->p_type = PT_MIPS_ABIFLAGS;
12328 m->count = 1;
12329 m->sections[0] = s;
12330
12331 /* We want to put it after the PHDR and INTERP segments. */
12332 pm = &elf_seg_map (abfd);
12333 while (*pm != NULL
12334 && ((*pm)->p_type == PT_PHDR
12335 || (*pm)->p_type == PT_INTERP))
12336 pm = &(*pm)->next;
12337
12338 m->next = *pm;
12339 *pm = m;
12340 }
12341 }
12342
12343 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12344 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
12345 PT_MIPS_OPTIONS segment immediately following the program header
12346 table. */
12347 if (NEWABI_P (abfd)
12348 /* On non-IRIX6 new abi, we'll have already created a segment
12349 for this section, so don't create another. I'm not sure this
12350 is not also the case for IRIX 6, but I can't test it right
12351 now. */
12352 && IRIX_COMPAT (abfd) == ict_irix6)
12353 {
12354 for (s = abfd->sections; s; s = s->next)
12355 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12356 break;
12357
12358 if (s)
12359 {
12360 struct elf_segment_map *options_segment;
12361
12362 pm = &elf_seg_map (abfd);
12363 while (*pm != NULL
12364 && ((*pm)->p_type == PT_PHDR
12365 || (*pm)->p_type == PT_INTERP))
12366 pm = &(*pm)->next;
12367
12368 if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12369 {
12370 amt = sizeof (struct elf_segment_map);
12371 options_segment = bfd_zalloc (abfd, amt);
12372 options_segment->next = *pm;
12373 options_segment->p_type = PT_MIPS_OPTIONS;
12374 options_segment->p_flags = PF_R;
12375 options_segment->p_flags_valid = TRUE;
12376 options_segment->count = 1;
12377 options_segment->sections[0] = s;
12378 *pm = options_segment;
12379 }
12380 }
12381 }
12382 else
12383 {
12384 if (IRIX_COMPAT (abfd) == ict_irix5)
12385 {
12386 /* If there are .dynamic and .mdebug sections, we make a room
12387 for the RTPROC header. FIXME: Rewrite without section names. */
12388 if (bfd_get_section_by_name (abfd, ".interp") == NULL
12389 && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12390 && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12391 {
12392 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12393 if (m->p_type == PT_MIPS_RTPROC)
12394 break;
12395 if (m == NULL)
12396 {
12397 amt = sizeof *m;
12398 m = bfd_zalloc (abfd, amt);
12399 if (m == NULL)
12400 return FALSE;
12401
12402 m->p_type = PT_MIPS_RTPROC;
12403
12404 s = bfd_get_section_by_name (abfd, ".rtproc");
12405 if (s == NULL)
12406 {
12407 m->count = 0;
12408 m->p_flags = 0;
12409 m->p_flags_valid = 1;
12410 }
12411 else
12412 {
12413 m->count = 1;
12414 m->sections[0] = s;
12415 }
12416
12417 /* We want to put it after the DYNAMIC segment. */
12418 pm = &elf_seg_map (abfd);
12419 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12420 pm = &(*pm)->next;
12421 if (*pm != NULL)
12422 pm = &(*pm)->next;
12423
12424 m->next = *pm;
12425 *pm = m;
12426 }
12427 }
12428 }
12429 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12430 .dynstr, .dynsym, and .hash sections, and everything in
12431 between. */
12432 for (pm = &elf_seg_map (abfd); *pm != NULL;
12433 pm = &(*pm)->next)
12434 if ((*pm)->p_type == PT_DYNAMIC)
12435 break;
12436 m = *pm;
12437 /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12438 glibc's dynamic linker has traditionally derived the number of
12439 tags from the p_filesz field, and sometimes allocates stack
12440 arrays of that size. An overly-big PT_DYNAMIC segment can
12441 be actively harmful in such cases. Making PT_DYNAMIC contain
12442 other sections can also make life hard for the prelinker,
12443 which might move one of the other sections to a different
12444 PT_LOAD segment. */
12445 if (SGI_COMPAT (abfd)
12446 && m != NULL
12447 && m->count == 1
12448 && strcmp (m->sections[0]->name, ".dynamic") == 0)
12449 {
12450 static const char *sec_names[] =
12451 {
12452 ".dynamic", ".dynstr", ".dynsym", ".hash"
12453 };
12454 bfd_vma low, high;
12455 unsigned int i, c;
12456 struct elf_segment_map *n;
12457
12458 low = ~(bfd_vma) 0;
12459 high = 0;
12460 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12461 {
12462 s = bfd_get_section_by_name (abfd, sec_names[i]);
12463 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12464 {
12465 bfd_size_type sz;
12466
12467 if (low > s->vma)
12468 low = s->vma;
12469 sz = s->size;
12470 if (high < s->vma + sz)
12471 high = s->vma + sz;
12472 }
12473 }
12474
12475 c = 0;
12476 for (s = abfd->sections; s != NULL; s = s->next)
12477 if ((s->flags & SEC_LOAD) != 0
12478 && s->vma >= low
12479 && s->vma + s->size <= high)
12480 ++c;
12481
12482 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12483 n = bfd_zalloc (abfd, amt);
12484 if (n == NULL)
12485 return FALSE;
12486 *n = *m;
12487 n->count = c;
12488
12489 i = 0;
12490 for (s = abfd->sections; s != NULL; s = s->next)
12491 {
12492 if ((s->flags & SEC_LOAD) != 0
12493 && s->vma >= low
12494 && s->vma + s->size <= high)
12495 {
12496 n->sections[i] = s;
12497 ++i;
12498 }
12499 }
12500
12501 *pm = n;
12502 }
12503 }
12504
12505 /* Allocate a spare program header in dynamic objects so that tools
12506 like the prelinker can add an extra PT_LOAD entry.
12507
12508 If the prelinker needs to make room for a new PT_LOAD entry, its
12509 standard procedure is to move the first (read-only) sections into
12510 the new (writable) segment. However, the MIPS ABI requires
12511 .dynamic to be in a read-only segment, and the section will often
12512 start within sizeof (ElfNN_Phdr) bytes of the last program header.
12513
12514 Although the prelinker could in principle move .dynamic to a
12515 writable segment, it seems better to allocate a spare program
12516 header instead, and avoid the need to move any sections.
12517 There is a long tradition of allocating spare dynamic tags,
12518 so allocating a spare program header seems like a natural
12519 extension.
12520
12521 If INFO is NULL, we may be copying an already prelinked binary
12522 with objcopy or strip, so do not add this header. */
12523 if (info != NULL
12524 && !SGI_COMPAT (abfd)
12525 && bfd_get_section_by_name (abfd, ".dynamic"))
12526 {
12527 for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12528 if ((*pm)->p_type == PT_NULL)
12529 break;
12530 if (*pm == NULL)
12531 {
12532 m = bfd_zalloc (abfd, sizeof (*m));
12533 if (m == NULL)
12534 return FALSE;
12535
12536 m->p_type = PT_NULL;
12537 *pm = m;
12538 }
12539 }
12540
12541 return TRUE;
12542 }
12543 \f
12544 /* Return the section that should be marked against GC for a given
12545 relocation. */
12546
12547 asection *
12548 _bfd_mips_elf_gc_mark_hook (asection *sec,
12549 struct bfd_link_info *info,
12550 Elf_Internal_Rela *rel,
12551 struct elf_link_hash_entry *h,
12552 Elf_Internal_Sym *sym)
12553 {
12554 /* ??? Do mips16 stub sections need to be handled special? */
12555
12556 if (h != NULL)
12557 switch (ELF_R_TYPE (sec->owner, rel->r_info))
12558 {
12559 case R_MIPS_GNU_VTINHERIT:
12560 case R_MIPS_GNU_VTENTRY:
12561 return NULL;
12562 }
12563
12564 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12565 }
12566
12567 /* Update the got entry reference counts for the section being removed. */
12568
12569 bfd_boolean
12570 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12571 struct bfd_link_info *info ATTRIBUTE_UNUSED,
12572 asection *sec ATTRIBUTE_UNUSED,
12573 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12574 {
12575 #if 0
12576 Elf_Internal_Shdr *symtab_hdr;
12577 struct elf_link_hash_entry **sym_hashes;
12578 bfd_signed_vma *local_got_refcounts;
12579 const Elf_Internal_Rela *rel, *relend;
12580 unsigned long r_symndx;
12581 struct elf_link_hash_entry *h;
12582
12583 if (bfd_link_relocatable (info))
12584 return TRUE;
12585
12586 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12587 sym_hashes = elf_sym_hashes (abfd);
12588 local_got_refcounts = elf_local_got_refcounts (abfd);
12589
12590 relend = relocs + sec->reloc_count;
12591 for (rel = relocs; rel < relend; rel++)
12592 switch (ELF_R_TYPE (abfd, rel->r_info))
12593 {
12594 case R_MIPS16_GOT16:
12595 case R_MIPS16_CALL16:
12596 case R_MIPS_GOT16:
12597 case R_MIPS_CALL16:
12598 case R_MIPS_CALL_HI16:
12599 case R_MIPS_CALL_LO16:
12600 case R_MIPS_GOT_HI16:
12601 case R_MIPS_GOT_LO16:
12602 case R_MIPS_GOT_DISP:
12603 case R_MIPS_GOT_PAGE:
12604 case R_MIPS_GOT_OFST:
12605 case R_MICROMIPS_GOT16:
12606 case R_MICROMIPS_CALL16:
12607 case R_MICROMIPS_CALL_HI16:
12608 case R_MICROMIPS_CALL_LO16:
12609 case R_MICROMIPS_GOT_HI16:
12610 case R_MICROMIPS_GOT_LO16:
12611 case R_MICROMIPS_GOT_DISP:
12612 case R_MICROMIPS_GOT_PAGE:
12613 case R_MICROMIPS_GOT_OFST:
12614 /* ??? It would seem that the existing MIPS code does no sort
12615 of reference counting or whatnot on its GOT and PLT entries,
12616 so it is not possible to garbage collect them at this time. */
12617 break;
12618
12619 default:
12620 break;
12621 }
12622 #endif
12623
12624 return TRUE;
12625 }
12626
12627 /* Prevent .MIPS.abiflags from being discarded with --gc-sections. */
12628
12629 bfd_boolean
12630 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12631 elf_gc_mark_hook_fn gc_mark_hook)
12632 {
12633 bfd *sub;
12634
12635 _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12636
12637 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12638 {
12639 asection *o;
12640
12641 if (! is_mips_elf (sub))
12642 continue;
12643
12644 for (o = sub->sections; o != NULL; o = o->next)
12645 if (!o->gc_mark
12646 && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12647 (bfd_get_section_name (sub, o)))
12648 {
12649 if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12650 return FALSE;
12651 }
12652 }
12653
12654 return TRUE;
12655 }
12656 \f
12657 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12658 hiding the old indirect symbol. Process additional relocation
12659 information. Also called for weakdefs, in which case we just let
12660 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
12661
12662 void
12663 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12664 struct elf_link_hash_entry *dir,
12665 struct elf_link_hash_entry *ind)
12666 {
12667 struct mips_elf_link_hash_entry *dirmips, *indmips;
12668
12669 _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12670
12671 dirmips = (struct mips_elf_link_hash_entry *) dir;
12672 indmips = (struct mips_elf_link_hash_entry *) ind;
12673 /* Any absolute non-dynamic relocations against an indirect or weak
12674 definition will be against the target symbol. */
12675 if (indmips->has_static_relocs)
12676 dirmips->has_static_relocs = TRUE;
12677
12678 if (ind->root.type != bfd_link_hash_indirect)
12679 return;
12680
12681 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12682 if (indmips->readonly_reloc)
12683 dirmips->readonly_reloc = TRUE;
12684 if (indmips->no_fn_stub)
12685 dirmips->no_fn_stub = TRUE;
12686 if (indmips->fn_stub)
12687 {
12688 dirmips->fn_stub = indmips->fn_stub;
12689 indmips->fn_stub = NULL;
12690 }
12691 if (indmips->need_fn_stub)
12692 {
12693 dirmips->need_fn_stub = TRUE;
12694 indmips->need_fn_stub = FALSE;
12695 }
12696 if (indmips->call_stub)
12697 {
12698 dirmips->call_stub = indmips->call_stub;
12699 indmips->call_stub = NULL;
12700 }
12701 if (indmips->call_fp_stub)
12702 {
12703 dirmips->call_fp_stub = indmips->call_fp_stub;
12704 indmips->call_fp_stub = NULL;
12705 }
12706 if (indmips->global_got_area < dirmips->global_got_area)
12707 dirmips->global_got_area = indmips->global_got_area;
12708 if (indmips->global_got_area < GGA_NONE)
12709 indmips->global_got_area = GGA_NONE;
12710 if (indmips->has_nonpic_branches)
12711 dirmips->has_nonpic_branches = TRUE;
12712 }
12713 \f
12714 #define PDR_SIZE 32
12715
12716 bfd_boolean
12717 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12718 struct bfd_link_info *info)
12719 {
12720 asection *o;
12721 bfd_boolean ret = FALSE;
12722 unsigned char *tdata;
12723 size_t i, skip;
12724
12725 o = bfd_get_section_by_name (abfd, ".pdr");
12726 if (! o)
12727 return FALSE;
12728 if (o->size == 0)
12729 return FALSE;
12730 if (o->size % PDR_SIZE != 0)
12731 return FALSE;
12732 if (o->output_section != NULL
12733 && bfd_is_abs_section (o->output_section))
12734 return FALSE;
12735
12736 tdata = bfd_zmalloc (o->size / PDR_SIZE);
12737 if (! tdata)
12738 return FALSE;
12739
12740 cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12741 info->keep_memory);
12742 if (!cookie->rels)
12743 {
12744 free (tdata);
12745 return FALSE;
12746 }
12747
12748 cookie->rel = cookie->rels;
12749 cookie->relend = cookie->rels + o->reloc_count;
12750
12751 for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12752 {
12753 if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12754 {
12755 tdata[i] = 1;
12756 skip ++;
12757 }
12758 }
12759
12760 if (skip != 0)
12761 {
12762 mips_elf_section_data (o)->u.tdata = tdata;
12763 if (o->rawsize == 0)
12764 o->rawsize = o->size;
12765 o->size -= skip * PDR_SIZE;
12766 ret = TRUE;
12767 }
12768 else
12769 free (tdata);
12770
12771 if (! info->keep_memory)
12772 free (cookie->rels);
12773
12774 return ret;
12775 }
12776
12777 bfd_boolean
12778 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12779 {
12780 if (strcmp (sec->name, ".pdr") == 0)
12781 return TRUE;
12782 return FALSE;
12783 }
12784
12785 bfd_boolean
12786 _bfd_mips_elf_write_section (bfd *output_bfd,
12787 struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12788 asection *sec, bfd_byte *contents)
12789 {
12790 bfd_byte *to, *from, *end;
12791 int i;
12792
12793 if (strcmp (sec->name, ".pdr") != 0)
12794 return FALSE;
12795
12796 if (mips_elf_section_data (sec)->u.tdata == NULL)
12797 return FALSE;
12798
12799 to = contents;
12800 end = contents + sec->size;
12801 for (from = contents, i = 0;
12802 from < end;
12803 from += PDR_SIZE, i++)
12804 {
12805 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12806 continue;
12807 if (to != from)
12808 memcpy (to, from, PDR_SIZE);
12809 to += PDR_SIZE;
12810 }
12811 bfd_set_section_contents (output_bfd, sec->output_section, contents,
12812 sec->output_offset, sec->size);
12813 return TRUE;
12814 }
12815 \f
12816 /* microMIPS code retains local labels for linker relaxation. Omit them
12817 from output by default for clarity. */
12818
12819 bfd_boolean
12820 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12821 {
12822 return _bfd_elf_is_local_label_name (abfd, sym->name);
12823 }
12824
12825 /* MIPS ELF uses a special find_nearest_line routine in order the
12826 handle the ECOFF debugging information. */
12827
12828 struct mips_elf_find_line
12829 {
12830 struct ecoff_debug_info d;
12831 struct ecoff_find_line i;
12832 };
12833
12834 bfd_boolean
12835 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12836 asection *section, bfd_vma offset,
12837 const char **filename_ptr,
12838 const char **functionname_ptr,
12839 unsigned int *line_ptr,
12840 unsigned int *discriminator_ptr)
12841 {
12842 asection *msec;
12843
12844 if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12845 filename_ptr, functionname_ptr,
12846 line_ptr, discriminator_ptr,
12847 dwarf_debug_sections,
12848 ABI_64_P (abfd) ? 8 : 0,
12849 &elf_tdata (abfd)->dwarf2_find_line_info))
12850 return TRUE;
12851
12852 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12853 filename_ptr, functionname_ptr,
12854 line_ptr))
12855 return TRUE;
12856
12857 msec = bfd_get_section_by_name (abfd, ".mdebug");
12858 if (msec != NULL)
12859 {
12860 flagword origflags;
12861 struct mips_elf_find_line *fi;
12862 const struct ecoff_debug_swap * const swap =
12863 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12864
12865 /* If we are called during a link, mips_elf_final_link may have
12866 cleared the SEC_HAS_CONTENTS field. We force it back on here
12867 if appropriate (which it normally will be). */
12868 origflags = msec->flags;
12869 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12870 msec->flags |= SEC_HAS_CONTENTS;
12871
12872 fi = mips_elf_tdata (abfd)->find_line_info;
12873 if (fi == NULL)
12874 {
12875 bfd_size_type external_fdr_size;
12876 char *fraw_src;
12877 char *fraw_end;
12878 struct fdr *fdr_ptr;
12879 bfd_size_type amt = sizeof (struct mips_elf_find_line);
12880
12881 fi = bfd_zalloc (abfd, amt);
12882 if (fi == NULL)
12883 {
12884 msec->flags = origflags;
12885 return FALSE;
12886 }
12887
12888 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12889 {
12890 msec->flags = origflags;
12891 return FALSE;
12892 }
12893
12894 /* Swap in the FDR information. */
12895 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12896 fi->d.fdr = bfd_alloc (abfd, amt);
12897 if (fi->d.fdr == NULL)
12898 {
12899 msec->flags = origflags;
12900 return FALSE;
12901 }
12902 external_fdr_size = swap->external_fdr_size;
12903 fdr_ptr = fi->d.fdr;
12904 fraw_src = (char *) fi->d.external_fdr;
12905 fraw_end = (fraw_src
12906 + fi->d.symbolic_header.ifdMax * external_fdr_size);
12907 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12908 (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12909
12910 mips_elf_tdata (abfd)->find_line_info = fi;
12911
12912 /* Note that we don't bother to ever free this information.
12913 find_nearest_line is either called all the time, as in
12914 objdump -l, so the information should be saved, or it is
12915 rarely called, as in ld error messages, so the memory
12916 wasted is unimportant. Still, it would probably be a
12917 good idea for free_cached_info to throw it away. */
12918 }
12919
12920 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12921 &fi->i, filename_ptr, functionname_ptr,
12922 line_ptr))
12923 {
12924 msec->flags = origflags;
12925 return TRUE;
12926 }
12927
12928 msec->flags = origflags;
12929 }
12930
12931 /* Fall back on the generic ELF find_nearest_line routine. */
12932
12933 return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12934 filename_ptr, functionname_ptr,
12935 line_ptr, discriminator_ptr);
12936 }
12937
12938 bfd_boolean
12939 _bfd_mips_elf_find_inliner_info (bfd *abfd,
12940 const char **filename_ptr,
12941 const char **functionname_ptr,
12942 unsigned int *line_ptr)
12943 {
12944 bfd_boolean found;
12945 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12946 functionname_ptr, line_ptr,
12947 & elf_tdata (abfd)->dwarf2_find_line_info);
12948 return found;
12949 }
12950
12951 \f
12952 /* When are writing out the .options or .MIPS.options section,
12953 remember the bytes we are writing out, so that we can install the
12954 GP value in the section_processing routine. */
12955
12956 bfd_boolean
12957 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12958 const void *location,
12959 file_ptr offset, bfd_size_type count)
12960 {
12961 if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12962 {
12963 bfd_byte *c;
12964
12965 if (elf_section_data (section) == NULL)
12966 {
12967 bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12968 section->used_by_bfd = bfd_zalloc (abfd, amt);
12969 if (elf_section_data (section) == NULL)
12970 return FALSE;
12971 }
12972 c = mips_elf_section_data (section)->u.tdata;
12973 if (c == NULL)
12974 {
12975 c = bfd_zalloc (abfd, section->size);
12976 if (c == NULL)
12977 return FALSE;
12978 mips_elf_section_data (section)->u.tdata = c;
12979 }
12980
12981 memcpy (c + offset, location, count);
12982 }
12983
12984 return _bfd_elf_set_section_contents (abfd, section, location, offset,
12985 count);
12986 }
12987
12988 /* This is almost identical to bfd_generic_get_... except that some
12989 MIPS relocations need to be handled specially. Sigh. */
12990
12991 bfd_byte *
12992 _bfd_elf_mips_get_relocated_section_contents
12993 (bfd *abfd,
12994 struct bfd_link_info *link_info,
12995 struct bfd_link_order *link_order,
12996 bfd_byte *data,
12997 bfd_boolean relocatable,
12998 asymbol **symbols)
12999 {
13000 /* Get enough memory to hold the stuff */
13001 bfd *input_bfd = link_order->u.indirect.section->owner;
13002 asection *input_section = link_order->u.indirect.section;
13003 bfd_size_type sz;
13004
13005 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
13006 arelent **reloc_vector = NULL;
13007 long reloc_count;
13008
13009 if (reloc_size < 0)
13010 goto error_return;
13011
13012 reloc_vector = bfd_malloc (reloc_size);
13013 if (reloc_vector == NULL && reloc_size != 0)
13014 goto error_return;
13015
13016 /* read in the section */
13017 sz = input_section->rawsize ? input_section->rawsize : input_section->size;
13018 if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
13019 goto error_return;
13020
13021 reloc_count = bfd_canonicalize_reloc (input_bfd,
13022 input_section,
13023 reloc_vector,
13024 symbols);
13025 if (reloc_count < 0)
13026 goto error_return;
13027
13028 if (reloc_count > 0)
13029 {
13030 arelent **parent;
13031 /* for mips */
13032 int gp_found;
13033 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */
13034
13035 {
13036 struct bfd_hash_entry *h;
13037 struct bfd_link_hash_entry *lh;
13038 /* Skip all this stuff if we aren't mixing formats. */
13039 if (abfd && input_bfd
13040 && abfd->xvec == input_bfd->xvec)
13041 lh = 0;
13042 else
13043 {
13044 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
13045 lh = (struct bfd_link_hash_entry *) h;
13046 }
13047 lookup:
13048 if (lh)
13049 {
13050 switch (lh->type)
13051 {
13052 case bfd_link_hash_undefined:
13053 case bfd_link_hash_undefweak:
13054 case bfd_link_hash_common:
13055 gp_found = 0;
13056 break;
13057 case bfd_link_hash_defined:
13058 case bfd_link_hash_defweak:
13059 gp_found = 1;
13060 gp = lh->u.def.value;
13061 break;
13062 case bfd_link_hash_indirect:
13063 case bfd_link_hash_warning:
13064 lh = lh->u.i.link;
13065 /* @@FIXME ignoring warning for now */
13066 goto lookup;
13067 case bfd_link_hash_new:
13068 default:
13069 abort ();
13070 }
13071 }
13072 else
13073 gp_found = 0;
13074 }
13075 /* end mips */
13076 for (parent = reloc_vector; *parent != NULL; parent++)
13077 {
13078 char *error_message = NULL;
13079 bfd_reloc_status_type r;
13080
13081 /* Specific to MIPS: Deal with relocation types that require
13082 knowing the gp of the output bfd. */
13083 asymbol *sym = *(*parent)->sym_ptr_ptr;
13084
13085 /* If we've managed to find the gp and have a special
13086 function for the relocation then go ahead, else default
13087 to the generic handling. */
13088 if (gp_found
13089 && (*parent)->howto->special_function
13090 == _bfd_mips_elf32_gprel16_reloc)
13091 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
13092 input_section, relocatable,
13093 data, gp);
13094 else
13095 r = bfd_perform_relocation (input_bfd, *parent, data,
13096 input_section,
13097 relocatable ? abfd : NULL,
13098 &error_message);
13099
13100 if (relocatable)
13101 {
13102 asection *os = input_section->output_section;
13103
13104 /* A partial link, so keep the relocs */
13105 os->orelocation[os->reloc_count] = *parent;
13106 os->reloc_count++;
13107 }
13108
13109 if (r != bfd_reloc_ok)
13110 {
13111 switch (r)
13112 {
13113 case bfd_reloc_undefined:
13114 (*link_info->callbacks->undefined_symbol)
13115 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13116 input_bfd, input_section, (*parent)->address, TRUE);
13117 break;
13118 case bfd_reloc_dangerous:
13119 BFD_ASSERT (error_message != NULL);
13120 (*link_info->callbacks->reloc_dangerous)
13121 (link_info, error_message,
13122 input_bfd, input_section, (*parent)->address);
13123 break;
13124 case bfd_reloc_overflow:
13125 (*link_info->callbacks->reloc_overflow)
13126 (link_info, NULL,
13127 bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13128 (*parent)->howto->name, (*parent)->addend,
13129 input_bfd, input_section, (*parent)->address);
13130 break;
13131 case bfd_reloc_outofrange:
13132 default:
13133 abort ();
13134 break;
13135 }
13136
13137 }
13138 }
13139 }
13140 if (reloc_vector != NULL)
13141 free (reloc_vector);
13142 return data;
13143
13144 error_return:
13145 if (reloc_vector != NULL)
13146 free (reloc_vector);
13147 return NULL;
13148 }
13149 \f
13150 static bfd_boolean
13151 mips_elf_relax_delete_bytes (bfd *abfd,
13152 asection *sec, bfd_vma addr, int count)
13153 {
13154 Elf_Internal_Shdr *symtab_hdr;
13155 unsigned int sec_shndx;
13156 bfd_byte *contents;
13157 Elf_Internal_Rela *irel, *irelend;
13158 Elf_Internal_Sym *isym;
13159 Elf_Internal_Sym *isymend;
13160 struct elf_link_hash_entry **sym_hashes;
13161 struct elf_link_hash_entry **end_hashes;
13162 struct elf_link_hash_entry **start_hashes;
13163 unsigned int symcount;
13164
13165 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13166 contents = elf_section_data (sec)->this_hdr.contents;
13167
13168 irel = elf_section_data (sec)->relocs;
13169 irelend = irel + sec->reloc_count;
13170
13171 /* Actually delete the bytes. */
13172 memmove (contents + addr, contents + addr + count,
13173 (size_t) (sec->size - addr - count));
13174 sec->size -= count;
13175
13176 /* Adjust all the relocs. */
13177 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13178 {
13179 /* Get the new reloc address. */
13180 if (irel->r_offset > addr)
13181 irel->r_offset -= count;
13182 }
13183
13184 BFD_ASSERT (addr % 2 == 0);
13185 BFD_ASSERT (count % 2 == 0);
13186
13187 /* Adjust the local symbols defined in this section. */
13188 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13189 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13190 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13191 if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13192 isym->st_value -= count;
13193
13194 /* Now adjust the global symbols defined in this section. */
13195 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13196 - symtab_hdr->sh_info);
13197 sym_hashes = start_hashes = elf_sym_hashes (abfd);
13198 end_hashes = sym_hashes + symcount;
13199
13200 for (; sym_hashes < end_hashes; sym_hashes++)
13201 {
13202 struct elf_link_hash_entry *sym_hash = *sym_hashes;
13203
13204 if ((sym_hash->root.type == bfd_link_hash_defined
13205 || sym_hash->root.type == bfd_link_hash_defweak)
13206 && sym_hash->root.u.def.section == sec)
13207 {
13208 bfd_vma value = sym_hash->root.u.def.value;
13209
13210 if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13211 value &= MINUS_TWO;
13212 if (value > addr)
13213 sym_hash->root.u.def.value -= count;
13214 }
13215 }
13216
13217 return TRUE;
13218 }
13219
13220
13221 /* Opcodes needed for microMIPS relaxation as found in
13222 opcodes/micromips-opc.c. */
13223
13224 struct opcode_descriptor {
13225 unsigned long match;
13226 unsigned long mask;
13227 };
13228
13229 /* The $ra register aka $31. */
13230
13231 #define RA 31
13232
13233 /* 32-bit instruction format register fields. */
13234
13235 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13236 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13237
13238 /* Check if a 5-bit register index can be abbreviated to 3 bits. */
13239
13240 #define OP16_VALID_REG(r) \
13241 ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13242
13243
13244 /* 32-bit and 16-bit branches. */
13245
13246 static const struct opcode_descriptor b_insns_32[] = {
13247 { /* "b", "p", */ 0x40400000, 0xffff0000 }, /* bgez 0 */
13248 { /* "b", "p", */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13249 { 0, 0 } /* End marker for find_match(). */
13250 };
13251
13252 static const struct opcode_descriptor bc_insn_32 =
13253 { /* "bc(1|2)(ft)", "N,p", */ 0x42800000, 0xfec30000 };
13254
13255 static const struct opcode_descriptor bz_insn_32 =
13256 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 };
13257
13258 static const struct opcode_descriptor bzal_insn_32 =
13259 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 };
13260
13261 static const struct opcode_descriptor beq_insn_32 =
13262 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 };
13263
13264 static const struct opcode_descriptor b_insn_16 =
13265 { /* "b", "mD", */ 0xcc00, 0xfc00 };
13266
13267 static const struct opcode_descriptor bz_insn_16 =
13268 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 };
13269
13270
13271 /* 32-bit and 16-bit branch EQ and NE zero. */
13272
13273 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13274 eq and second the ne. This convention is used when replacing a
13275 32-bit BEQ/BNE with the 16-bit version. */
13276
13277 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13278
13279 static const struct opcode_descriptor bz_rs_insns_32[] = {
13280 { /* "beqz", "s,p", */ 0x94000000, 0xffe00000 },
13281 { /* "bnez", "s,p", */ 0xb4000000, 0xffe00000 },
13282 { 0, 0 } /* End marker for find_match(). */
13283 };
13284
13285 static const struct opcode_descriptor bz_rt_insns_32[] = {
13286 { /* "beqz", "t,p", */ 0x94000000, 0xfc01f000 },
13287 { /* "bnez", "t,p", */ 0xb4000000, 0xfc01f000 },
13288 { 0, 0 } /* End marker for find_match(). */
13289 };
13290
13291 static const struct opcode_descriptor bzc_insns_32[] = {
13292 { /* "beqzc", "s,p", */ 0x40e00000, 0xffe00000 },
13293 { /* "bnezc", "s,p", */ 0x40a00000, 0xffe00000 },
13294 { 0, 0 } /* End marker for find_match(). */
13295 };
13296
13297 static const struct opcode_descriptor bz_insns_16[] = {
13298 { /* "beqz", "md,mE", */ 0x8c00, 0xfc00 },
13299 { /* "bnez", "md,mE", */ 0xac00, 0xfc00 },
13300 { 0, 0 } /* End marker for find_match(). */
13301 };
13302
13303 /* Switch between a 5-bit register index and its 3-bit shorthand. */
13304
13305 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13306 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13307
13308
13309 /* 32-bit instructions with a delay slot. */
13310
13311 static const struct opcode_descriptor jal_insn_32_bd16 =
13312 { /* "jals", "a", */ 0x74000000, 0xfc000000 };
13313
13314 static const struct opcode_descriptor jal_insn_32_bd32 =
13315 { /* "jal", "a", */ 0xf4000000, 0xfc000000 };
13316
13317 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13318 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 };
13319
13320 static const struct opcode_descriptor j_insn_32 =
13321 { /* "j", "a", */ 0xd4000000, 0xfc000000 };
13322
13323 static const struct opcode_descriptor jalr_insn_32 =
13324 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff };
13325
13326 /* This table can be compacted, because no opcode replacement is made. */
13327
13328 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13329 { /* "jals", "a", */ 0x74000000, 0xfc000000 },
13330
13331 { /* "jalrs[.hb]", "t,s", */ 0x00004f3c, 0xfc00efff },
13332 { /* "b(ge|lt)zals", "s,p", */ 0x42200000, 0xffa00000 },
13333
13334 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 },
13335 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 },
13336 { /* "j", "a", */ 0xd4000000, 0xfc000000 },
13337 { 0, 0 } /* End marker for find_match(). */
13338 };
13339
13340 /* This table can be compacted, because no opcode replacement is made. */
13341
13342 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13343 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 },
13344
13345 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff },
13346 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 },
13347 { 0, 0 } /* End marker for find_match(). */
13348 };
13349
13350
13351 /* 16-bit instructions with a delay slot. */
13352
13353 static const struct opcode_descriptor jalr_insn_16_bd16 =
13354 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 };
13355
13356 static const struct opcode_descriptor jalr_insn_16_bd32 =
13357 { /* "jalr", "my,mj", */ 0x45c0, 0xffe0 };
13358
13359 static const struct opcode_descriptor jr_insn_16 =
13360 { /* "jr", "mj", */ 0x4580, 0xffe0 };
13361
13362 #define JR16_REG(opcode) ((opcode) & 0x1f)
13363
13364 /* This table can be compacted, because no opcode replacement is made. */
13365
13366 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13367 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 },
13368
13369 { /* "b", "mD", */ 0xcc00, 0xfc00 },
13370 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 },
13371 { /* "jr", "mj", */ 0x4580, 0xffe0 },
13372 { 0, 0 } /* End marker for find_match(). */
13373 };
13374
13375
13376 /* LUI instruction. */
13377
13378 static const struct opcode_descriptor lui_insn =
13379 { /* "lui", "s,u", */ 0x41a00000, 0xffe00000 };
13380
13381
13382 /* ADDIU instruction. */
13383
13384 static const struct opcode_descriptor addiu_insn =
13385 { /* "addiu", "t,r,j", */ 0x30000000, 0xfc000000 };
13386
13387 static const struct opcode_descriptor addiupc_insn =
13388 { /* "addiu", "mb,$pc,mQ", */ 0x78000000, 0xfc000000 };
13389
13390 #define ADDIUPC_REG_FIELD(r) \
13391 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13392
13393
13394 /* Relaxable instructions in a JAL delay slot: MOVE. */
13395
13396 /* The 16-bit move has rd in 9:5 and rs in 4:0. The 32-bit moves
13397 (ADDU, OR) have rd in 15:11 and rs in 10:16. */
13398 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13399 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13400
13401 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13402 #define MOVE16_RS_FIELD(r) (((r) & 0x1f) )
13403
13404 static const struct opcode_descriptor move_insns_32[] = {
13405 { /* "move", "d,s", */ 0x00000290, 0xffe007ff }, /* or d,s,$0 */
13406 { /* "move", "d,s", */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13407 { 0, 0 } /* End marker for find_match(). */
13408 };
13409
13410 static const struct opcode_descriptor move_insn_16 =
13411 { /* "move", "mp,mj", */ 0x0c00, 0xfc00 };
13412
13413
13414 /* NOP instructions. */
13415
13416 static const struct opcode_descriptor nop_insn_32 =
13417 { /* "nop", "", */ 0x00000000, 0xffffffff };
13418
13419 static const struct opcode_descriptor nop_insn_16 =
13420 { /* "nop", "", */ 0x0c00, 0xffff };
13421
13422
13423 /* Instruction match support. */
13424
13425 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13426
13427 static int
13428 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13429 {
13430 unsigned long indx;
13431
13432 for (indx = 0; insn[indx].mask != 0; indx++)
13433 if (MATCH (opcode, insn[indx]))
13434 return indx;
13435
13436 return -1;
13437 }
13438
13439
13440 /* Branch and delay slot decoding support. */
13441
13442 /* If PTR points to what *might* be a 16-bit branch or jump, then
13443 return the minimum length of its delay slot, otherwise return 0.
13444 Non-zero results are not definitive as we might be checking against
13445 the second half of another instruction. */
13446
13447 static int
13448 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13449 {
13450 unsigned long opcode;
13451 int bdsize;
13452
13453 opcode = bfd_get_16 (abfd, ptr);
13454 if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13455 /* 16-bit branch/jump with a 32-bit delay slot. */
13456 bdsize = 4;
13457 else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13458 || find_match (opcode, ds_insns_16_bd16) >= 0)
13459 /* 16-bit branch/jump with a 16-bit delay slot. */
13460 bdsize = 2;
13461 else
13462 /* No delay slot. */
13463 bdsize = 0;
13464
13465 return bdsize;
13466 }
13467
13468 /* If PTR points to what *might* be a 32-bit branch or jump, then
13469 return the minimum length of its delay slot, otherwise return 0.
13470 Non-zero results are not definitive as we might be checking against
13471 the second half of another instruction. */
13472
13473 static int
13474 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13475 {
13476 unsigned long opcode;
13477 int bdsize;
13478
13479 opcode = bfd_get_micromips_32 (abfd, ptr);
13480 if (find_match (opcode, ds_insns_32_bd32) >= 0)
13481 /* 32-bit branch/jump with a 32-bit delay slot. */
13482 bdsize = 4;
13483 else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13484 /* 32-bit branch/jump with a 16-bit delay slot. */
13485 bdsize = 2;
13486 else
13487 /* No delay slot. */
13488 bdsize = 0;
13489
13490 return bdsize;
13491 }
13492
13493 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13494 that doesn't fiddle with REG, then return TRUE, otherwise FALSE. */
13495
13496 static bfd_boolean
13497 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13498 {
13499 unsigned long opcode;
13500
13501 opcode = bfd_get_16 (abfd, ptr);
13502 if (MATCH (opcode, b_insn_16)
13503 /* B16 */
13504 || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13505 /* JR16 */
13506 || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13507 /* BEQZ16, BNEZ16 */
13508 || (MATCH (opcode, jalr_insn_16_bd32)
13509 /* JALR16 */
13510 && reg != JR16_REG (opcode) && reg != RA))
13511 return TRUE;
13512
13513 return FALSE;
13514 }
13515
13516 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13517 then return TRUE, otherwise FALSE. */
13518
13519 static bfd_boolean
13520 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13521 {
13522 unsigned long opcode;
13523
13524 opcode = bfd_get_micromips_32 (abfd, ptr);
13525 if (MATCH (opcode, j_insn_32)
13526 /* J */
13527 || MATCH (opcode, bc_insn_32)
13528 /* BC1F, BC1T, BC2F, BC2T */
13529 || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13530 /* JAL, JALX */
13531 || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13532 /* BGEZ, BGTZ, BLEZ, BLTZ */
13533 || (MATCH (opcode, bzal_insn_32)
13534 /* BGEZAL, BLTZAL */
13535 && reg != OP32_SREG (opcode) && reg != RA)
13536 || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13537 /* JALR, JALR.HB, BEQ, BNE */
13538 && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13539 return TRUE;
13540
13541 return FALSE;
13542 }
13543
13544 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13545 IRELEND) at OFFSET indicate that there must be a compact branch there,
13546 then return TRUE, otherwise FALSE. */
13547
13548 static bfd_boolean
13549 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13550 const Elf_Internal_Rela *internal_relocs,
13551 const Elf_Internal_Rela *irelend)
13552 {
13553 const Elf_Internal_Rela *irel;
13554 unsigned long opcode;
13555
13556 opcode = bfd_get_micromips_32 (abfd, ptr);
13557 if (find_match (opcode, bzc_insns_32) < 0)
13558 return FALSE;
13559
13560 for (irel = internal_relocs; irel < irelend; irel++)
13561 if (irel->r_offset == offset
13562 && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13563 return TRUE;
13564
13565 return FALSE;
13566 }
13567
13568 /* Bitsize checking. */
13569 #define IS_BITSIZE(val, N) \
13570 (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1))) \
13571 - (1ULL << ((N) - 1))) == (val))
13572
13573 \f
13574 bfd_boolean
13575 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13576 struct bfd_link_info *link_info,
13577 bfd_boolean *again)
13578 {
13579 bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13580 Elf_Internal_Shdr *symtab_hdr;
13581 Elf_Internal_Rela *internal_relocs;
13582 Elf_Internal_Rela *irel, *irelend;
13583 bfd_byte *contents = NULL;
13584 Elf_Internal_Sym *isymbuf = NULL;
13585
13586 /* Assume nothing changes. */
13587 *again = FALSE;
13588
13589 /* We don't have to do anything for a relocatable link, if
13590 this section does not have relocs, or if this is not a
13591 code section. */
13592
13593 if (bfd_link_relocatable (link_info)
13594 || (sec->flags & SEC_RELOC) == 0
13595 || sec->reloc_count == 0
13596 || (sec->flags & SEC_CODE) == 0)
13597 return TRUE;
13598
13599 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13600
13601 /* Get a copy of the native relocations. */
13602 internal_relocs = (_bfd_elf_link_read_relocs
13603 (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13604 link_info->keep_memory));
13605 if (internal_relocs == NULL)
13606 goto error_return;
13607
13608 /* Walk through them looking for relaxing opportunities. */
13609 irelend = internal_relocs + sec->reloc_count;
13610 for (irel = internal_relocs; irel < irelend; irel++)
13611 {
13612 unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13613 unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13614 bfd_boolean target_is_micromips_code_p;
13615 unsigned long opcode;
13616 bfd_vma symval;
13617 bfd_vma pcrval;
13618 bfd_byte *ptr;
13619 int fndopc;
13620
13621 /* The number of bytes to delete for relaxation and from where
13622 to delete these bytes starting at irel->r_offset. */
13623 int delcnt = 0;
13624 int deloff = 0;
13625
13626 /* If this isn't something that can be relaxed, then ignore
13627 this reloc. */
13628 if (r_type != R_MICROMIPS_HI16
13629 && r_type != R_MICROMIPS_PC16_S1
13630 && r_type != R_MICROMIPS_26_S1)
13631 continue;
13632
13633 /* Get the section contents if we haven't done so already. */
13634 if (contents == NULL)
13635 {
13636 /* Get cached copy if it exists. */
13637 if (elf_section_data (sec)->this_hdr.contents != NULL)
13638 contents = elf_section_data (sec)->this_hdr.contents;
13639 /* Go get them off disk. */
13640 else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13641 goto error_return;
13642 }
13643 ptr = contents + irel->r_offset;
13644
13645 /* Read this BFD's local symbols if we haven't done so already. */
13646 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13647 {
13648 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13649 if (isymbuf == NULL)
13650 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13651 symtab_hdr->sh_info, 0,
13652 NULL, NULL, NULL);
13653 if (isymbuf == NULL)
13654 goto error_return;
13655 }
13656
13657 /* Get the value of the symbol referred to by the reloc. */
13658 if (r_symndx < symtab_hdr->sh_info)
13659 {
13660 /* A local symbol. */
13661 Elf_Internal_Sym *isym;
13662 asection *sym_sec;
13663
13664 isym = isymbuf + r_symndx;
13665 if (isym->st_shndx == SHN_UNDEF)
13666 sym_sec = bfd_und_section_ptr;
13667 else if (isym->st_shndx == SHN_ABS)
13668 sym_sec = bfd_abs_section_ptr;
13669 else if (isym->st_shndx == SHN_COMMON)
13670 sym_sec = bfd_com_section_ptr;
13671 else
13672 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13673 symval = (isym->st_value
13674 + sym_sec->output_section->vma
13675 + sym_sec->output_offset);
13676 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13677 }
13678 else
13679 {
13680 unsigned long indx;
13681 struct elf_link_hash_entry *h;
13682
13683 /* An external symbol. */
13684 indx = r_symndx - symtab_hdr->sh_info;
13685 h = elf_sym_hashes (abfd)[indx];
13686 BFD_ASSERT (h != NULL);
13687
13688 if (h->root.type != bfd_link_hash_defined
13689 && h->root.type != bfd_link_hash_defweak)
13690 /* This appears to be a reference to an undefined
13691 symbol. Just ignore it -- it will be caught by the
13692 regular reloc processing. */
13693 continue;
13694
13695 symval = (h->root.u.def.value
13696 + h->root.u.def.section->output_section->vma
13697 + h->root.u.def.section->output_offset);
13698 target_is_micromips_code_p = (!h->needs_plt
13699 && ELF_ST_IS_MICROMIPS (h->other));
13700 }
13701
13702
13703 /* For simplicity of coding, we are going to modify the
13704 section contents, the section relocs, and the BFD symbol
13705 table. We must tell the rest of the code not to free up this
13706 information. It would be possible to instead create a table
13707 of changes which have to be made, as is done in coff-mips.c;
13708 that would be more work, but would require less memory when
13709 the linker is run. */
13710
13711 /* Only 32-bit instructions relaxed. */
13712 if (irel->r_offset + 4 > sec->size)
13713 continue;
13714
13715 opcode = bfd_get_micromips_32 (abfd, ptr);
13716
13717 /* This is the pc-relative distance from the instruction the
13718 relocation is applied to, to the symbol referred. */
13719 pcrval = (symval
13720 - (sec->output_section->vma + sec->output_offset)
13721 - irel->r_offset);
13722
13723 /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13724 of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13725 R_MICROMIPS_PC23_S2. The R_MICROMIPS_PC23_S2 condition is
13726
13727 (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13728
13729 where pcrval has first to be adjusted to apply against the LO16
13730 location (we make the adjustment later on, when we have figured
13731 out the offset). */
13732 if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13733 {
13734 bfd_boolean bzc = FALSE;
13735 unsigned long nextopc;
13736 unsigned long reg;
13737 bfd_vma offset;
13738
13739 /* Give up if the previous reloc was a HI16 against this symbol
13740 too. */
13741 if (irel > internal_relocs
13742 && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13743 && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13744 continue;
13745
13746 /* Or if the next reloc is not a LO16 against this symbol. */
13747 if (irel + 1 >= irelend
13748 || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13749 || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13750 continue;
13751
13752 /* Or if the second next reloc is a LO16 against this symbol too. */
13753 if (irel + 2 >= irelend
13754 && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13755 && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13756 continue;
13757
13758 /* See if the LUI instruction *might* be in a branch delay slot.
13759 We check whether what looks like a 16-bit branch or jump is
13760 actually an immediate argument to a compact branch, and let
13761 it through if so. */
13762 if (irel->r_offset >= 2
13763 && check_br16_dslot (abfd, ptr - 2)
13764 && !(irel->r_offset >= 4
13765 && (bzc = check_relocated_bzc (abfd,
13766 ptr - 4, irel->r_offset - 4,
13767 internal_relocs, irelend))))
13768 continue;
13769 if (irel->r_offset >= 4
13770 && !bzc
13771 && check_br32_dslot (abfd, ptr - 4))
13772 continue;
13773
13774 reg = OP32_SREG (opcode);
13775
13776 /* We only relax adjacent instructions or ones separated with
13777 a branch or jump that has a delay slot. The branch or jump
13778 must not fiddle with the register used to hold the address.
13779 Subtract 4 for the LUI itself. */
13780 offset = irel[1].r_offset - irel[0].r_offset;
13781 switch (offset - 4)
13782 {
13783 case 0:
13784 break;
13785 case 2:
13786 if (check_br16 (abfd, ptr + 4, reg))
13787 break;
13788 continue;
13789 case 4:
13790 if (check_br32 (abfd, ptr + 4, reg))
13791 break;
13792 continue;
13793 default:
13794 continue;
13795 }
13796
13797 nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13798
13799 /* Give up unless the same register is used with both
13800 relocations. */
13801 if (OP32_SREG (nextopc) != reg)
13802 continue;
13803
13804 /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13805 and rounding up to take masking of the two LSBs into account. */
13806 pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13807
13808 /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16. */
13809 if (IS_BITSIZE (symval, 16))
13810 {
13811 /* Fix the relocation's type. */
13812 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13813
13814 /* Instructions using R_MICROMIPS_LO16 have the base or
13815 source register in bits 20:16. This register becomes $0
13816 (zero) as the result of the R_MICROMIPS_HI16 being 0. */
13817 nextopc &= ~0x001f0000;
13818 bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13819 contents + irel[1].r_offset);
13820 }
13821
13822 /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13823 We add 4 to take LUI deletion into account while checking
13824 the PC-relative distance. */
13825 else if (symval % 4 == 0
13826 && IS_BITSIZE (pcrval + 4, 25)
13827 && MATCH (nextopc, addiu_insn)
13828 && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13829 && OP16_VALID_REG (OP32_TREG (nextopc)))
13830 {
13831 /* Fix the relocation's type. */
13832 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13833
13834 /* Replace ADDIU with the ADDIUPC version. */
13835 nextopc = (addiupc_insn.match
13836 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13837
13838 bfd_put_micromips_32 (abfd, nextopc,
13839 contents + irel[1].r_offset);
13840 }
13841
13842 /* Can't do anything, give up, sigh... */
13843 else
13844 continue;
13845
13846 /* Fix the relocation's type. */
13847 irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13848
13849 /* Delete the LUI instruction: 4 bytes at irel->r_offset. */
13850 delcnt = 4;
13851 deloff = 0;
13852 }
13853
13854 /* Compact branch relaxation -- due to the multitude of macros
13855 employed by the compiler/assembler, compact branches are not
13856 always generated. Obviously, this can/will be fixed elsewhere,
13857 but there is no drawback in double checking it here. */
13858 else if (r_type == R_MICROMIPS_PC16_S1
13859 && irel->r_offset + 5 < sec->size
13860 && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13861 || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13862 && ((!insn32
13863 && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13864 nop_insn_16) ? 2 : 0))
13865 || (irel->r_offset + 7 < sec->size
13866 && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13867 ptr + 4),
13868 nop_insn_32) ? 4 : 0))))
13869 {
13870 unsigned long reg;
13871
13872 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13873
13874 /* Replace BEQZ/BNEZ with the compact version. */
13875 opcode = (bzc_insns_32[fndopc].match
13876 | BZC32_REG_FIELD (reg)
13877 | (opcode & 0xffff)); /* Addend value. */
13878
13879 bfd_put_micromips_32 (abfd, opcode, ptr);
13880
13881 /* Delete the delay slot NOP: two or four bytes from
13882 irel->offset + 4; delcnt has already been set above. */
13883 deloff = 4;
13884 }
13885
13886 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1. We need
13887 to check the distance from the next instruction, so subtract 2. */
13888 else if (!insn32
13889 && r_type == R_MICROMIPS_PC16_S1
13890 && IS_BITSIZE (pcrval - 2, 11)
13891 && find_match (opcode, b_insns_32) >= 0)
13892 {
13893 /* Fix the relocation's type. */
13894 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13895
13896 /* Replace the 32-bit opcode with a 16-bit opcode. */
13897 bfd_put_16 (abfd,
13898 (b_insn_16.match
13899 | (opcode & 0x3ff)), /* Addend value. */
13900 ptr);
13901
13902 /* Delete 2 bytes from irel->r_offset + 2. */
13903 delcnt = 2;
13904 deloff = 2;
13905 }
13906
13907 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1. We need
13908 to check the distance from the next instruction, so subtract 2. */
13909 else if (!insn32
13910 && r_type == R_MICROMIPS_PC16_S1
13911 && IS_BITSIZE (pcrval - 2, 8)
13912 && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13913 && OP16_VALID_REG (OP32_SREG (opcode)))
13914 || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13915 && OP16_VALID_REG (OP32_TREG (opcode)))))
13916 {
13917 unsigned long reg;
13918
13919 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13920
13921 /* Fix the relocation's type. */
13922 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13923
13924 /* Replace the 32-bit opcode with a 16-bit opcode. */
13925 bfd_put_16 (abfd,
13926 (bz_insns_16[fndopc].match
13927 | BZ16_REG_FIELD (reg)
13928 | (opcode & 0x7f)), /* Addend value. */
13929 ptr);
13930
13931 /* Delete 2 bytes from irel->r_offset + 2. */
13932 delcnt = 2;
13933 deloff = 2;
13934 }
13935
13936 /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets. */
13937 else if (!insn32
13938 && r_type == R_MICROMIPS_26_S1
13939 && target_is_micromips_code_p
13940 && irel->r_offset + 7 < sec->size
13941 && MATCH (opcode, jal_insn_32_bd32))
13942 {
13943 unsigned long n32opc;
13944 bfd_boolean relaxed = FALSE;
13945
13946 n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13947
13948 if (MATCH (n32opc, nop_insn_32))
13949 {
13950 /* Replace delay slot 32-bit NOP with a 16-bit NOP. */
13951 bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13952
13953 relaxed = TRUE;
13954 }
13955 else if (find_match (n32opc, move_insns_32) >= 0)
13956 {
13957 /* Replace delay slot 32-bit MOVE with 16-bit MOVE. */
13958 bfd_put_16 (abfd,
13959 (move_insn_16.match
13960 | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13961 | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13962 ptr + 4);
13963
13964 relaxed = TRUE;
13965 }
13966 /* Other 32-bit instructions relaxable to 16-bit
13967 instructions will be handled here later. */
13968
13969 if (relaxed)
13970 {
13971 /* JAL with 32-bit delay slot that is changed to a JALS
13972 with 16-bit delay slot. */
13973 bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13974
13975 /* Delete 2 bytes from irel->r_offset + 6. */
13976 delcnt = 2;
13977 deloff = 6;
13978 }
13979 }
13980
13981 if (delcnt != 0)
13982 {
13983 /* Note that we've changed the relocs, section contents, etc. */
13984 elf_section_data (sec)->relocs = internal_relocs;
13985 elf_section_data (sec)->this_hdr.contents = contents;
13986 symtab_hdr->contents = (unsigned char *) isymbuf;
13987
13988 /* Delete bytes depending on the delcnt and deloff. */
13989 if (!mips_elf_relax_delete_bytes (abfd, sec,
13990 irel->r_offset + deloff, delcnt))
13991 goto error_return;
13992
13993 /* That will change things, so we should relax again.
13994 Note that this is not required, and it may be slow. */
13995 *again = TRUE;
13996 }
13997 }
13998
13999 if (isymbuf != NULL
14000 && symtab_hdr->contents != (unsigned char *) isymbuf)
14001 {
14002 if (! link_info->keep_memory)
14003 free (isymbuf);
14004 else
14005 {
14006 /* Cache the symbols for elf_link_input_bfd. */
14007 symtab_hdr->contents = (unsigned char *) isymbuf;
14008 }
14009 }
14010
14011 if (contents != NULL
14012 && elf_section_data (sec)->this_hdr.contents != contents)
14013 {
14014 if (! link_info->keep_memory)
14015 free (contents);
14016 else
14017 {
14018 /* Cache the section contents for elf_link_input_bfd. */
14019 elf_section_data (sec)->this_hdr.contents = contents;
14020 }
14021 }
14022
14023 if (internal_relocs != NULL
14024 && elf_section_data (sec)->relocs != internal_relocs)
14025 free (internal_relocs);
14026
14027 return TRUE;
14028
14029 error_return:
14030 if (isymbuf != NULL
14031 && symtab_hdr->contents != (unsigned char *) isymbuf)
14032 free (isymbuf);
14033 if (contents != NULL
14034 && elf_section_data (sec)->this_hdr.contents != contents)
14035 free (contents);
14036 if (internal_relocs != NULL
14037 && elf_section_data (sec)->relocs != internal_relocs)
14038 free (internal_relocs);
14039
14040 return FALSE;
14041 }
14042 \f
14043 /* Create a MIPS ELF linker hash table. */
14044
14045 struct bfd_link_hash_table *
14046 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
14047 {
14048 struct mips_elf_link_hash_table *ret;
14049 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
14050
14051 ret = bfd_zmalloc (amt);
14052 if (ret == NULL)
14053 return NULL;
14054
14055 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
14056 mips_elf_link_hash_newfunc,
14057 sizeof (struct mips_elf_link_hash_entry),
14058 MIPS_ELF_DATA))
14059 {
14060 free (ret);
14061 return NULL;
14062 }
14063 ret->root.init_plt_refcount.plist = NULL;
14064 ret->root.init_plt_offset.plist = NULL;
14065
14066 return &ret->root.root;
14067 }
14068
14069 /* Likewise, but indicate that the target is VxWorks. */
14070
14071 struct bfd_link_hash_table *
14072 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
14073 {
14074 struct bfd_link_hash_table *ret;
14075
14076 ret = _bfd_mips_elf_link_hash_table_create (abfd);
14077 if (ret)
14078 {
14079 struct mips_elf_link_hash_table *htab;
14080
14081 htab = (struct mips_elf_link_hash_table *) ret;
14082 htab->use_plts_and_copy_relocs = TRUE;
14083 htab->is_vxworks = TRUE;
14084 }
14085 return ret;
14086 }
14087
14088 /* A function that the linker calls if we are allowed to use PLTs
14089 and copy relocs. */
14090
14091 void
14092 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
14093 {
14094 mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
14095 }
14096
14097 /* A function that the linker calls to select between all or only
14098 32-bit microMIPS instructions. */
14099
14100 void
14101 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
14102 {
14103 mips_elf_hash_table (info)->insn32 = on;
14104 }
14105 \f
14106 /* Structure for saying that BFD machine EXTENSION extends BASE. */
14107
14108 struct mips_mach_extension
14109 {
14110 unsigned long extension, base;
14111 };
14112
14113
14114 /* An array describing how BFD machines relate to one another. The entries
14115 are ordered topologically with MIPS I extensions listed last. */
14116
14117 static const struct mips_mach_extension mips_mach_extensions[] =
14118 {
14119 /* MIPS64r2 extensions. */
14120 { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
14121 { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
14122 { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
14123 { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
14124 { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
14125
14126 /* MIPS64 extensions. */
14127 { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
14128 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
14129 { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
14130
14131 /* MIPS V extensions. */
14132 { bfd_mach_mipsisa64, bfd_mach_mips5 },
14133
14134 /* R10000 extensions. */
14135 { bfd_mach_mips12000, bfd_mach_mips10000 },
14136 { bfd_mach_mips14000, bfd_mach_mips10000 },
14137 { bfd_mach_mips16000, bfd_mach_mips10000 },
14138
14139 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core
14140 vr5400 ISA, but doesn't include the multimedia stuff. It seems
14141 better to allow vr5400 and vr5500 code to be merged anyway, since
14142 many libraries will just use the core ISA. Perhaps we could add
14143 some sort of ASE flag if this ever proves a problem. */
14144 { bfd_mach_mips5500, bfd_mach_mips5400 },
14145 { bfd_mach_mips5400, bfd_mach_mips5000 },
14146
14147 /* MIPS IV extensions. */
14148 { bfd_mach_mips5, bfd_mach_mips8000 },
14149 { bfd_mach_mips10000, bfd_mach_mips8000 },
14150 { bfd_mach_mips5000, bfd_mach_mips8000 },
14151 { bfd_mach_mips7000, bfd_mach_mips8000 },
14152 { bfd_mach_mips9000, bfd_mach_mips8000 },
14153
14154 /* VR4100 extensions. */
14155 { bfd_mach_mips4120, bfd_mach_mips4100 },
14156 { bfd_mach_mips4111, bfd_mach_mips4100 },
14157
14158 /* MIPS III extensions. */
14159 { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14160 { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14161 { bfd_mach_mips8000, bfd_mach_mips4000 },
14162 { bfd_mach_mips4650, bfd_mach_mips4000 },
14163 { bfd_mach_mips4600, bfd_mach_mips4000 },
14164 { bfd_mach_mips4400, bfd_mach_mips4000 },
14165 { bfd_mach_mips4300, bfd_mach_mips4000 },
14166 { bfd_mach_mips4100, bfd_mach_mips4000 },
14167 { bfd_mach_mips4010, bfd_mach_mips4000 },
14168 { bfd_mach_mips5900, bfd_mach_mips4000 },
14169
14170 /* MIPS32 extensions. */
14171 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14172
14173 /* MIPS II extensions. */
14174 { bfd_mach_mips4000, bfd_mach_mips6000 },
14175 { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14176
14177 /* MIPS I extensions. */
14178 { bfd_mach_mips6000, bfd_mach_mips3000 },
14179 { bfd_mach_mips3900, bfd_mach_mips3000 }
14180 };
14181
14182 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */
14183
14184 static bfd_boolean
14185 mips_mach_extends_p (unsigned long base, unsigned long extension)
14186 {
14187 size_t i;
14188
14189 if (extension == base)
14190 return TRUE;
14191
14192 if (base == bfd_mach_mipsisa32
14193 && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14194 return TRUE;
14195
14196 if (base == bfd_mach_mipsisa32r2
14197 && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14198 return TRUE;
14199
14200 for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14201 if (extension == mips_mach_extensions[i].extension)
14202 {
14203 extension = mips_mach_extensions[i].base;
14204 if (extension == base)
14205 return TRUE;
14206 }
14207
14208 return FALSE;
14209 }
14210
14211 /* Return the BFD mach for each .MIPS.abiflags ISA Extension. */
14212
14213 static unsigned long
14214 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14215 {
14216 switch (isa_ext)
14217 {
14218 case AFL_EXT_3900: return bfd_mach_mips3900;
14219 case AFL_EXT_4010: return bfd_mach_mips4010;
14220 case AFL_EXT_4100: return bfd_mach_mips4100;
14221 case AFL_EXT_4111: return bfd_mach_mips4111;
14222 case AFL_EXT_4120: return bfd_mach_mips4120;
14223 case AFL_EXT_4650: return bfd_mach_mips4650;
14224 case AFL_EXT_5400: return bfd_mach_mips5400;
14225 case AFL_EXT_5500: return bfd_mach_mips5500;
14226 case AFL_EXT_5900: return bfd_mach_mips5900;
14227 case AFL_EXT_10000: return bfd_mach_mips10000;
14228 case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14229 case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14230 case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
14231 case AFL_EXT_SB1: return bfd_mach_mips_sb1;
14232 case AFL_EXT_OCTEON: return bfd_mach_mips_octeon;
14233 case AFL_EXT_OCTEONP: return bfd_mach_mips_octeonp;
14234 case AFL_EXT_OCTEON2: return bfd_mach_mips_octeon2;
14235 case AFL_EXT_XLR: return bfd_mach_mips_xlr;
14236 default: return bfd_mach_mips3000;
14237 }
14238 }
14239
14240 /* Return the .MIPS.abiflags value representing each ISA Extension. */
14241
14242 unsigned int
14243 bfd_mips_isa_ext (bfd *abfd)
14244 {
14245 switch (bfd_get_mach (abfd))
14246 {
14247 case bfd_mach_mips3900: return AFL_EXT_3900;
14248 case bfd_mach_mips4010: return AFL_EXT_4010;
14249 case bfd_mach_mips4100: return AFL_EXT_4100;
14250 case bfd_mach_mips4111: return AFL_EXT_4111;
14251 case bfd_mach_mips4120: return AFL_EXT_4120;
14252 case bfd_mach_mips4650: return AFL_EXT_4650;
14253 case bfd_mach_mips5400: return AFL_EXT_5400;
14254 case bfd_mach_mips5500: return AFL_EXT_5500;
14255 case bfd_mach_mips5900: return AFL_EXT_5900;
14256 case bfd_mach_mips10000: return AFL_EXT_10000;
14257 case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14258 case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14259 case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
14260 case bfd_mach_mips_sb1: return AFL_EXT_SB1;
14261 case bfd_mach_mips_octeon: return AFL_EXT_OCTEON;
14262 case bfd_mach_mips_octeonp: return AFL_EXT_OCTEONP;
14263 case bfd_mach_mips_octeon3: return AFL_EXT_OCTEON3;
14264 case bfd_mach_mips_octeon2: return AFL_EXT_OCTEON2;
14265 case bfd_mach_mips_xlr: return AFL_EXT_XLR;
14266 default: return 0;
14267 }
14268 }
14269
14270 /* Encode ISA level and revision as a single value. */
14271 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14272
14273 /* Decode a single value into level and revision. */
14274 #define ISA_LEVEL(LEVREV) ((LEVREV) >> 3)
14275 #define ISA_REV(LEVREV) ((LEVREV) & 0x7)
14276
14277 /* Update the isa_level, isa_rev, isa_ext fields of abiflags. */
14278
14279 static void
14280 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14281 {
14282 int new_isa = 0;
14283 switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14284 {
14285 case E_MIPS_ARCH_1: new_isa = LEVEL_REV (1, 0); break;
14286 case E_MIPS_ARCH_2: new_isa = LEVEL_REV (2, 0); break;
14287 case E_MIPS_ARCH_3: new_isa = LEVEL_REV (3, 0); break;
14288 case E_MIPS_ARCH_4: new_isa = LEVEL_REV (4, 0); break;
14289 case E_MIPS_ARCH_5: new_isa = LEVEL_REV (5, 0); break;
14290 case E_MIPS_ARCH_32: new_isa = LEVEL_REV (32, 1); break;
14291 case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14292 case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14293 case E_MIPS_ARCH_64: new_isa = LEVEL_REV (64, 1); break;
14294 case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14295 case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14296 default:
14297 (*_bfd_error_handler)
14298 (_("%B: Unknown architecture %s"),
14299 abfd, bfd_printable_name (abfd));
14300 }
14301
14302 if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14303 {
14304 abiflags->isa_level = ISA_LEVEL (new_isa);
14305 abiflags->isa_rev = ISA_REV (new_isa);
14306 }
14307
14308 /* Update the isa_ext if ABFD describes a further extension. */
14309 if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14310 bfd_get_mach (abfd)))
14311 abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14312 }
14313
14314 /* Return true if the given ELF header flags describe a 32-bit binary. */
14315
14316 static bfd_boolean
14317 mips_32bit_flags_p (flagword flags)
14318 {
14319 return ((flags & EF_MIPS_32BITMODE) != 0
14320 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14321 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14322 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14323 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14324 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14325 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14326 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14327 }
14328
14329 /* Infer the content of the ABI flags based on the elf header. */
14330
14331 static void
14332 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14333 {
14334 obj_attribute *in_attr;
14335
14336 memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14337 update_mips_abiflags_isa (abfd, abiflags);
14338
14339 if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14340 abiflags->gpr_size = AFL_REG_32;
14341 else
14342 abiflags->gpr_size = AFL_REG_64;
14343
14344 abiflags->cpr1_size = AFL_REG_NONE;
14345
14346 in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14347 abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14348
14349 if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14350 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14351 || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14352 && abiflags->gpr_size == AFL_REG_32))
14353 abiflags->cpr1_size = AFL_REG_32;
14354 else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14355 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14356 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14357 abiflags->cpr1_size = AFL_REG_64;
14358
14359 abiflags->cpr2_size = AFL_REG_NONE;
14360
14361 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14362 abiflags->ases |= AFL_ASE_MDMX;
14363 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14364 abiflags->ases |= AFL_ASE_MIPS16;
14365 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14366 abiflags->ases |= AFL_ASE_MICROMIPS;
14367
14368 if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14369 && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14370 && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14371 && abiflags->isa_level >= 32
14372 && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14373 abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14374 }
14375
14376 /* We need to use a special link routine to handle the .reginfo and
14377 the .mdebug sections. We need to merge all instances of these
14378 sections together, not write them all out sequentially. */
14379
14380 bfd_boolean
14381 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14382 {
14383 asection *o;
14384 struct bfd_link_order *p;
14385 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14386 asection *rtproc_sec, *abiflags_sec;
14387 Elf32_RegInfo reginfo;
14388 struct ecoff_debug_info debug;
14389 struct mips_htab_traverse_info hti;
14390 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14391 const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14392 HDRR *symhdr = &debug.symbolic_header;
14393 void *mdebug_handle = NULL;
14394 asection *s;
14395 EXTR esym;
14396 unsigned int i;
14397 bfd_size_type amt;
14398 struct mips_elf_link_hash_table *htab;
14399
14400 static const char * const secname[] =
14401 {
14402 ".text", ".init", ".fini", ".data",
14403 ".rodata", ".sdata", ".sbss", ".bss"
14404 };
14405 static const int sc[] =
14406 {
14407 scText, scInit, scFini, scData,
14408 scRData, scSData, scSBss, scBss
14409 };
14410
14411 /* Sort the dynamic symbols so that those with GOT entries come after
14412 those without. */
14413 htab = mips_elf_hash_table (info);
14414 BFD_ASSERT (htab != NULL);
14415
14416 if (!mips_elf_sort_hash_table (abfd, info))
14417 return FALSE;
14418
14419 /* Create any scheduled LA25 stubs. */
14420 hti.info = info;
14421 hti.output_bfd = abfd;
14422 hti.error = FALSE;
14423 htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14424 if (hti.error)
14425 return FALSE;
14426
14427 /* Get a value for the GP register. */
14428 if (elf_gp (abfd) == 0)
14429 {
14430 struct bfd_link_hash_entry *h;
14431
14432 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14433 if (h != NULL && h->type == bfd_link_hash_defined)
14434 elf_gp (abfd) = (h->u.def.value
14435 + h->u.def.section->output_section->vma
14436 + h->u.def.section->output_offset);
14437 else if (htab->is_vxworks
14438 && (h = bfd_link_hash_lookup (info->hash,
14439 "_GLOBAL_OFFSET_TABLE_",
14440 FALSE, FALSE, TRUE))
14441 && h->type == bfd_link_hash_defined)
14442 elf_gp (abfd) = (h->u.def.section->output_section->vma
14443 + h->u.def.section->output_offset
14444 + h->u.def.value);
14445 else if (bfd_link_relocatable (info))
14446 {
14447 bfd_vma lo = MINUS_ONE;
14448
14449 /* Find the GP-relative section with the lowest offset. */
14450 for (o = abfd->sections; o != NULL; o = o->next)
14451 if (o->vma < lo
14452 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14453 lo = o->vma;
14454
14455 /* And calculate GP relative to that. */
14456 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14457 }
14458 else
14459 {
14460 /* If the relocate_section function needs to do a reloc
14461 involving the GP value, it should make a reloc_dangerous
14462 callback to warn that GP is not defined. */
14463 }
14464 }
14465
14466 /* Go through the sections and collect the .reginfo and .mdebug
14467 information. */
14468 abiflags_sec = NULL;
14469 reginfo_sec = NULL;
14470 mdebug_sec = NULL;
14471 gptab_data_sec = NULL;
14472 gptab_bss_sec = NULL;
14473 for (o = abfd->sections; o != NULL; o = o->next)
14474 {
14475 if (strcmp (o->name, ".MIPS.abiflags") == 0)
14476 {
14477 /* We have found the .MIPS.abiflags section in the output file.
14478 Look through all the link_orders comprising it and remove them.
14479 The data is merged in _bfd_mips_elf_merge_private_bfd_data. */
14480 for (p = o->map_head.link_order; p != NULL; p = p->next)
14481 {
14482 asection *input_section;
14483
14484 if (p->type != bfd_indirect_link_order)
14485 {
14486 if (p->type == bfd_data_link_order)
14487 continue;
14488 abort ();
14489 }
14490
14491 input_section = p->u.indirect.section;
14492
14493 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14494 elf_link_input_bfd ignores this section. */
14495 input_section->flags &= ~SEC_HAS_CONTENTS;
14496 }
14497
14498 /* Size has been set in _bfd_mips_elf_always_size_sections. */
14499 BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14500
14501 /* Skip this section later on (I don't think this currently
14502 matters, but someday it might). */
14503 o->map_head.link_order = NULL;
14504
14505 abiflags_sec = o;
14506 }
14507
14508 if (strcmp (o->name, ".reginfo") == 0)
14509 {
14510 memset (&reginfo, 0, sizeof reginfo);
14511
14512 /* We have found the .reginfo section in the output file.
14513 Look through all the link_orders comprising it and merge
14514 the information together. */
14515 for (p = o->map_head.link_order; p != NULL; p = p->next)
14516 {
14517 asection *input_section;
14518 bfd *input_bfd;
14519 Elf32_External_RegInfo ext;
14520 Elf32_RegInfo sub;
14521
14522 if (p->type != bfd_indirect_link_order)
14523 {
14524 if (p->type == bfd_data_link_order)
14525 continue;
14526 abort ();
14527 }
14528
14529 input_section = p->u.indirect.section;
14530 input_bfd = input_section->owner;
14531
14532 if (! bfd_get_section_contents (input_bfd, input_section,
14533 &ext, 0, sizeof ext))
14534 return FALSE;
14535
14536 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14537
14538 reginfo.ri_gprmask |= sub.ri_gprmask;
14539 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14540 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14541 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14542 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14543
14544 /* ri_gp_value is set by the function
14545 mips_elf32_section_processing when the section is
14546 finally written out. */
14547
14548 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14549 elf_link_input_bfd ignores this section. */
14550 input_section->flags &= ~SEC_HAS_CONTENTS;
14551 }
14552
14553 /* Size has been set in _bfd_mips_elf_always_size_sections. */
14554 BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14555
14556 /* Skip this section later on (I don't think this currently
14557 matters, but someday it might). */
14558 o->map_head.link_order = NULL;
14559
14560 reginfo_sec = o;
14561 }
14562
14563 if (strcmp (o->name, ".mdebug") == 0)
14564 {
14565 struct extsym_info einfo;
14566 bfd_vma last;
14567
14568 /* We have found the .mdebug section in the output file.
14569 Look through all the link_orders comprising it and merge
14570 the information together. */
14571 symhdr->magic = swap->sym_magic;
14572 /* FIXME: What should the version stamp be? */
14573 symhdr->vstamp = 0;
14574 symhdr->ilineMax = 0;
14575 symhdr->cbLine = 0;
14576 symhdr->idnMax = 0;
14577 symhdr->ipdMax = 0;
14578 symhdr->isymMax = 0;
14579 symhdr->ioptMax = 0;
14580 symhdr->iauxMax = 0;
14581 symhdr->issMax = 0;
14582 symhdr->issExtMax = 0;
14583 symhdr->ifdMax = 0;
14584 symhdr->crfd = 0;
14585 symhdr->iextMax = 0;
14586
14587 /* We accumulate the debugging information itself in the
14588 debug_info structure. */
14589 debug.line = NULL;
14590 debug.external_dnr = NULL;
14591 debug.external_pdr = NULL;
14592 debug.external_sym = NULL;
14593 debug.external_opt = NULL;
14594 debug.external_aux = NULL;
14595 debug.ss = NULL;
14596 debug.ssext = debug.ssext_end = NULL;
14597 debug.external_fdr = NULL;
14598 debug.external_rfd = NULL;
14599 debug.external_ext = debug.external_ext_end = NULL;
14600
14601 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14602 if (mdebug_handle == NULL)
14603 return FALSE;
14604
14605 esym.jmptbl = 0;
14606 esym.cobol_main = 0;
14607 esym.weakext = 0;
14608 esym.reserved = 0;
14609 esym.ifd = ifdNil;
14610 esym.asym.iss = issNil;
14611 esym.asym.st = stLocal;
14612 esym.asym.reserved = 0;
14613 esym.asym.index = indexNil;
14614 last = 0;
14615 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14616 {
14617 esym.asym.sc = sc[i];
14618 s = bfd_get_section_by_name (abfd, secname[i]);
14619 if (s != NULL)
14620 {
14621 esym.asym.value = s->vma;
14622 last = s->vma + s->size;
14623 }
14624 else
14625 esym.asym.value = last;
14626 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14627 secname[i], &esym))
14628 return FALSE;
14629 }
14630
14631 for (p = o->map_head.link_order; p != NULL; p = p->next)
14632 {
14633 asection *input_section;
14634 bfd *input_bfd;
14635 const struct ecoff_debug_swap *input_swap;
14636 struct ecoff_debug_info input_debug;
14637 char *eraw_src;
14638 char *eraw_end;
14639
14640 if (p->type != bfd_indirect_link_order)
14641 {
14642 if (p->type == bfd_data_link_order)
14643 continue;
14644 abort ();
14645 }
14646
14647 input_section = p->u.indirect.section;
14648 input_bfd = input_section->owner;
14649
14650 if (!is_mips_elf (input_bfd))
14651 {
14652 /* I don't know what a non MIPS ELF bfd would be
14653 doing with a .mdebug section, but I don't really
14654 want to deal with it. */
14655 continue;
14656 }
14657
14658 input_swap = (get_elf_backend_data (input_bfd)
14659 ->elf_backend_ecoff_debug_swap);
14660
14661 BFD_ASSERT (p->size == input_section->size);
14662
14663 /* The ECOFF linking code expects that we have already
14664 read in the debugging information and set up an
14665 ecoff_debug_info structure, so we do that now. */
14666 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14667 &input_debug))
14668 return FALSE;
14669
14670 if (! (bfd_ecoff_debug_accumulate
14671 (mdebug_handle, abfd, &debug, swap, input_bfd,
14672 &input_debug, input_swap, info)))
14673 return FALSE;
14674
14675 /* Loop through the external symbols. For each one with
14676 interesting information, try to find the symbol in
14677 the linker global hash table and save the information
14678 for the output external symbols. */
14679 eraw_src = input_debug.external_ext;
14680 eraw_end = (eraw_src
14681 + (input_debug.symbolic_header.iextMax
14682 * input_swap->external_ext_size));
14683 for (;
14684 eraw_src < eraw_end;
14685 eraw_src += input_swap->external_ext_size)
14686 {
14687 EXTR ext;
14688 const char *name;
14689 struct mips_elf_link_hash_entry *h;
14690
14691 (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14692 if (ext.asym.sc == scNil
14693 || ext.asym.sc == scUndefined
14694 || ext.asym.sc == scSUndefined)
14695 continue;
14696
14697 name = input_debug.ssext + ext.asym.iss;
14698 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14699 name, FALSE, FALSE, TRUE);
14700 if (h == NULL || h->esym.ifd != -2)
14701 continue;
14702
14703 if (ext.ifd != -1)
14704 {
14705 BFD_ASSERT (ext.ifd
14706 < input_debug.symbolic_header.ifdMax);
14707 ext.ifd = input_debug.ifdmap[ext.ifd];
14708 }
14709
14710 h->esym = ext;
14711 }
14712
14713 /* Free up the information we just read. */
14714 free (input_debug.line);
14715 free (input_debug.external_dnr);
14716 free (input_debug.external_pdr);
14717 free (input_debug.external_sym);
14718 free (input_debug.external_opt);
14719 free (input_debug.external_aux);
14720 free (input_debug.ss);
14721 free (input_debug.ssext);
14722 free (input_debug.external_fdr);
14723 free (input_debug.external_rfd);
14724 free (input_debug.external_ext);
14725
14726 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14727 elf_link_input_bfd ignores this section. */
14728 input_section->flags &= ~SEC_HAS_CONTENTS;
14729 }
14730
14731 if (SGI_COMPAT (abfd) && bfd_link_pic (info))
14732 {
14733 /* Create .rtproc section. */
14734 rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14735 if (rtproc_sec == NULL)
14736 {
14737 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14738 | SEC_LINKER_CREATED | SEC_READONLY);
14739
14740 rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14741 ".rtproc",
14742 flags);
14743 if (rtproc_sec == NULL
14744 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14745 return FALSE;
14746 }
14747
14748 if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14749 info, rtproc_sec,
14750 &debug))
14751 return FALSE;
14752 }
14753
14754 /* Build the external symbol information. */
14755 einfo.abfd = abfd;
14756 einfo.info = info;
14757 einfo.debug = &debug;
14758 einfo.swap = swap;
14759 einfo.failed = FALSE;
14760 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14761 mips_elf_output_extsym, &einfo);
14762 if (einfo.failed)
14763 return FALSE;
14764
14765 /* Set the size of the .mdebug section. */
14766 o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14767
14768 /* Skip this section later on (I don't think this currently
14769 matters, but someday it might). */
14770 o->map_head.link_order = NULL;
14771
14772 mdebug_sec = o;
14773 }
14774
14775 if (CONST_STRNEQ (o->name, ".gptab."))
14776 {
14777 const char *subname;
14778 unsigned int c;
14779 Elf32_gptab *tab;
14780 Elf32_External_gptab *ext_tab;
14781 unsigned int j;
14782
14783 /* The .gptab.sdata and .gptab.sbss sections hold
14784 information describing how the small data area would
14785 change depending upon the -G switch. These sections
14786 not used in executables files. */
14787 if (! bfd_link_relocatable (info))
14788 {
14789 for (p = o->map_head.link_order; p != NULL; p = p->next)
14790 {
14791 asection *input_section;
14792
14793 if (p->type != bfd_indirect_link_order)
14794 {
14795 if (p->type == bfd_data_link_order)
14796 continue;
14797 abort ();
14798 }
14799
14800 input_section = p->u.indirect.section;
14801
14802 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14803 elf_link_input_bfd ignores this section. */
14804 input_section->flags &= ~SEC_HAS_CONTENTS;
14805 }
14806
14807 /* Skip this section later on (I don't think this
14808 currently matters, but someday it might). */
14809 o->map_head.link_order = NULL;
14810
14811 /* Really remove the section. */
14812 bfd_section_list_remove (abfd, o);
14813 --abfd->section_count;
14814
14815 continue;
14816 }
14817
14818 /* There is one gptab for initialized data, and one for
14819 uninitialized data. */
14820 if (strcmp (o->name, ".gptab.sdata") == 0)
14821 gptab_data_sec = o;
14822 else if (strcmp (o->name, ".gptab.sbss") == 0)
14823 gptab_bss_sec = o;
14824 else
14825 {
14826 (*_bfd_error_handler)
14827 (_("%s: illegal section name `%s'"),
14828 bfd_get_filename (abfd), o->name);
14829 bfd_set_error (bfd_error_nonrepresentable_section);
14830 return FALSE;
14831 }
14832
14833 /* The linker script always combines .gptab.data and
14834 .gptab.sdata into .gptab.sdata, and likewise for
14835 .gptab.bss and .gptab.sbss. It is possible that there is
14836 no .sdata or .sbss section in the output file, in which
14837 case we must change the name of the output section. */
14838 subname = o->name + sizeof ".gptab" - 1;
14839 if (bfd_get_section_by_name (abfd, subname) == NULL)
14840 {
14841 if (o == gptab_data_sec)
14842 o->name = ".gptab.data";
14843 else
14844 o->name = ".gptab.bss";
14845 subname = o->name + sizeof ".gptab" - 1;
14846 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14847 }
14848
14849 /* Set up the first entry. */
14850 c = 1;
14851 amt = c * sizeof (Elf32_gptab);
14852 tab = bfd_malloc (amt);
14853 if (tab == NULL)
14854 return FALSE;
14855 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14856 tab[0].gt_header.gt_unused = 0;
14857
14858 /* Combine the input sections. */
14859 for (p = o->map_head.link_order; p != NULL; p = p->next)
14860 {
14861 asection *input_section;
14862 bfd *input_bfd;
14863 bfd_size_type size;
14864 unsigned long last;
14865 bfd_size_type gpentry;
14866
14867 if (p->type != bfd_indirect_link_order)
14868 {
14869 if (p->type == bfd_data_link_order)
14870 continue;
14871 abort ();
14872 }
14873
14874 input_section = p->u.indirect.section;
14875 input_bfd = input_section->owner;
14876
14877 /* Combine the gptab entries for this input section one
14878 by one. We know that the input gptab entries are
14879 sorted by ascending -G value. */
14880 size = input_section->size;
14881 last = 0;
14882 for (gpentry = sizeof (Elf32_External_gptab);
14883 gpentry < size;
14884 gpentry += sizeof (Elf32_External_gptab))
14885 {
14886 Elf32_External_gptab ext_gptab;
14887 Elf32_gptab int_gptab;
14888 unsigned long val;
14889 unsigned long add;
14890 bfd_boolean exact;
14891 unsigned int look;
14892
14893 if (! (bfd_get_section_contents
14894 (input_bfd, input_section, &ext_gptab, gpentry,
14895 sizeof (Elf32_External_gptab))))
14896 {
14897 free (tab);
14898 return FALSE;
14899 }
14900
14901 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14902 &int_gptab);
14903 val = int_gptab.gt_entry.gt_g_value;
14904 add = int_gptab.gt_entry.gt_bytes - last;
14905
14906 exact = FALSE;
14907 for (look = 1; look < c; look++)
14908 {
14909 if (tab[look].gt_entry.gt_g_value >= val)
14910 tab[look].gt_entry.gt_bytes += add;
14911
14912 if (tab[look].gt_entry.gt_g_value == val)
14913 exact = TRUE;
14914 }
14915
14916 if (! exact)
14917 {
14918 Elf32_gptab *new_tab;
14919 unsigned int max;
14920
14921 /* We need a new table entry. */
14922 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14923 new_tab = bfd_realloc (tab, amt);
14924 if (new_tab == NULL)
14925 {
14926 free (tab);
14927 return FALSE;
14928 }
14929 tab = new_tab;
14930 tab[c].gt_entry.gt_g_value = val;
14931 tab[c].gt_entry.gt_bytes = add;
14932
14933 /* Merge in the size for the next smallest -G
14934 value, since that will be implied by this new
14935 value. */
14936 max = 0;
14937 for (look = 1; look < c; look++)
14938 {
14939 if (tab[look].gt_entry.gt_g_value < val
14940 && (max == 0
14941 || (tab[look].gt_entry.gt_g_value
14942 > tab[max].gt_entry.gt_g_value)))
14943 max = look;
14944 }
14945 if (max != 0)
14946 tab[c].gt_entry.gt_bytes +=
14947 tab[max].gt_entry.gt_bytes;
14948
14949 ++c;
14950 }
14951
14952 last = int_gptab.gt_entry.gt_bytes;
14953 }
14954
14955 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14956 elf_link_input_bfd ignores this section. */
14957 input_section->flags &= ~SEC_HAS_CONTENTS;
14958 }
14959
14960 /* The table must be sorted by -G value. */
14961 if (c > 2)
14962 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14963
14964 /* Swap out the table. */
14965 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14966 ext_tab = bfd_alloc (abfd, amt);
14967 if (ext_tab == NULL)
14968 {
14969 free (tab);
14970 return FALSE;
14971 }
14972
14973 for (j = 0; j < c; j++)
14974 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14975 free (tab);
14976
14977 o->size = c * sizeof (Elf32_External_gptab);
14978 o->contents = (bfd_byte *) ext_tab;
14979
14980 /* Skip this section later on (I don't think this currently
14981 matters, but someday it might). */
14982 o->map_head.link_order = NULL;
14983 }
14984 }
14985
14986 /* Invoke the regular ELF backend linker to do all the work. */
14987 if (!bfd_elf_final_link (abfd, info))
14988 return FALSE;
14989
14990 /* Now write out the computed sections. */
14991
14992 if (abiflags_sec != NULL)
14993 {
14994 Elf_External_ABIFlags_v0 ext;
14995 Elf_Internal_ABIFlags_v0 *abiflags;
14996
14997 abiflags = &mips_elf_tdata (abfd)->abiflags;
14998
14999 /* Set up the abiflags if no valid input sections were found. */
15000 if (!mips_elf_tdata (abfd)->abiflags_valid)
15001 {
15002 infer_mips_abiflags (abfd, abiflags);
15003 mips_elf_tdata (abfd)->abiflags_valid = TRUE;
15004 }
15005 bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
15006 if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
15007 return FALSE;
15008 }
15009
15010 if (reginfo_sec != NULL)
15011 {
15012 Elf32_External_RegInfo ext;
15013
15014 bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
15015 if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
15016 return FALSE;
15017 }
15018
15019 if (mdebug_sec != NULL)
15020 {
15021 BFD_ASSERT (abfd->output_has_begun);
15022 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
15023 swap, info,
15024 mdebug_sec->filepos))
15025 return FALSE;
15026
15027 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
15028 }
15029
15030 if (gptab_data_sec != NULL)
15031 {
15032 if (! bfd_set_section_contents (abfd, gptab_data_sec,
15033 gptab_data_sec->contents,
15034 0, gptab_data_sec->size))
15035 return FALSE;
15036 }
15037
15038 if (gptab_bss_sec != NULL)
15039 {
15040 if (! bfd_set_section_contents (abfd, gptab_bss_sec,
15041 gptab_bss_sec->contents,
15042 0, gptab_bss_sec->size))
15043 return FALSE;
15044 }
15045
15046 if (SGI_COMPAT (abfd))
15047 {
15048 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
15049 if (rtproc_sec != NULL)
15050 {
15051 if (! bfd_set_section_contents (abfd, rtproc_sec,
15052 rtproc_sec->contents,
15053 0, rtproc_sec->size))
15054 return FALSE;
15055 }
15056 }
15057
15058 return TRUE;
15059 }
15060 \f
15061 /* Merge object file header flags from IBFD into OBFD. Raise an error
15062 if there are conflicting settings. */
15063
15064 static bfd_boolean
15065 mips_elf_merge_obj_e_flags (bfd *ibfd, bfd *obfd)
15066 {
15067 struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15068 flagword old_flags;
15069 flagword new_flags;
15070 bfd_boolean ok;
15071
15072 new_flags = elf_elfheader (ibfd)->e_flags;
15073 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
15074 old_flags = elf_elfheader (obfd)->e_flags;
15075
15076 /* Check flag compatibility. */
15077
15078 new_flags &= ~EF_MIPS_NOREORDER;
15079 old_flags &= ~EF_MIPS_NOREORDER;
15080
15081 /* Some IRIX 6 BSD-compatibility objects have this bit set. It
15082 doesn't seem to matter. */
15083 new_flags &= ~EF_MIPS_XGOT;
15084 old_flags &= ~EF_MIPS_XGOT;
15085
15086 /* MIPSpro generates ucode info in n64 objects. Again, we should
15087 just be able to ignore this. */
15088 new_flags &= ~EF_MIPS_UCODE;
15089 old_flags &= ~EF_MIPS_UCODE;
15090
15091 /* DSOs should only be linked with CPIC code. */
15092 if ((ibfd->flags & DYNAMIC) != 0)
15093 new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
15094
15095 if (new_flags == old_flags)
15096 return TRUE;
15097
15098 ok = TRUE;
15099
15100 if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
15101 != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
15102 {
15103 (*_bfd_error_handler)
15104 (_("%B: warning: linking abicalls files with non-abicalls files"),
15105 ibfd);
15106 ok = TRUE;
15107 }
15108
15109 if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
15110 elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
15111 if (! (new_flags & EF_MIPS_PIC))
15112 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
15113
15114 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15115 old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15116
15117 /* Compare the ISAs. */
15118 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
15119 {
15120 (*_bfd_error_handler)
15121 (_("%B: linking 32-bit code with 64-bit code"),
15122 ibfd);
15123 ok = FALSE;
15124 }
15125 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15126 {
15127 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */
15128 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
15129 {
15130 /* Copy the architecture info from IBFD to OBFD. Also copy
15131 the 32-bit flag (if set) so that we continue to recognise
15132 OBFD as a 32-bit binary. */
15133 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15134 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15135 elf_elfheader (obfd)->e_flags
15136 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15137
15138 /* Update the ABI flags isa_level, isa_rev, isa_ext fields. */
15139 update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15140
15141 /* Copy across the ABI flags if OBFD doesn't use them
15142 and if that was what caused us to treat IBFD as 32-bit. */
15143 if ((old_flags & EF_MIPS_ABI) == 0
15144 && mips_32bit_flags_p (new_flags)
15145 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15146 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15147 }
15148 else
15149 {
15150 /* The ISAs aren't compatible. */
15151 (*_bfd_error_handler)
15152 (_("%B: linking %s module with previous %s modules"),
15153 ibfd,
15154 bfd_printable_name (ibfd),
15155 bfd_printable_name (obfd));
15156 ok = FALSE;
15157 }
15158 }
15159
15160 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15161 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15162
15163 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it
15164 does set EI_CLASS differently from any 32-bit ABI. */
15165 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15166 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15167 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15168 {
15169 /* Only error if both are set (to different values). */
15170 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15171 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15172 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15173 {
15174 (*_bfd_error_handler)
15175 (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15176 ibfd,
15177 elf_mips_abi_name (ibfd),
15178 elf_mips_abi_name (obfd));
15179 ok = FALSE;
15180 }
15181 new_flags &= ~EF_MIPS_ABI;
15182 old_flags &= ~EF_MIPS_ABI;
15183 }
15184
15185 /* Compare ASEs. Forbid linking MIPS16 and microMIPS ASE modules together
15186 and allow arbitrary mixing of the remaining ASEs (retain the union). */
15187 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15188 {
15189 int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15190 int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15191 int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15192 int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15193 int micro_mis = old_m16 && new_micro;
15194 int m16_mis = old_micro && new_m16;
15195
15196 if (m16_mis || micro_mis)
15197 {
15198 (*_bfd_error_handler)
15199 (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15200 ibfd,
15201 m16_mis ? "MIPS16" : "microMIPS",
15202 m16_mis ? "microMIPS" : "MIPS16");
15203 ok = FALSE;
15204 }
15205
15206 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15207
15208 new_flags &= ~ EF_MIPS_ARCH_ASE;
15209 old_flags &= ~ EF_MIPS_ARCH_ASE;
15210 }
15211
15212 /* Compare NaN encodings. */
15213 if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15214 {
15215 _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15216 ibfd,
15217 (new_flags & EF_MIPS_NAN2008
15218 ? "-mnan=2008" : "-mnan=legacy"),
15219 (old_flags & EF_MIPS_NAN2008
15220 ? "-mnan=2008" : "-mnan=legacy"));
15221 ok = FALSE;
15222 new_flags &= ~EF_MIPS_NAN2008;
15223 old_flags &= ~EF_MIPS_NAN2008;
15224 }
15225
15226 /* Compare FP64 state. */
15227 if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15228 {
15229 _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15230 ibfd,
15231 (new_flags & EF_MIPS_FP64
15232 ? "-mfp64" : "-mfp32"),
15233 (old_flags & EF_MIPS_FP64
15234 ? "-mfp64" : "-mfp32"));
15235 ok = FALSE;
15236 new_flags &= ~EF_MIPS_FP64;
15237 old_flags &= ~EF_MIPS_FP64;
15238 }
15239
15240 /* Warn about any other mismatches */
15241 if (new_flags != old_flags)
15242 {
15243 (*_bfd_error_handler)
15244 (_("%B: uses different e_flags (0x%lx) fields than previous modules "
15245 "(0x%lx)"),
15246 ibfd, (unsigned long) new_flags,
15247 (unsigned long) old_flags);
15248 ok = FALSE;
15249 }
15250
15251 return ok;
15252 }
15253
15254 /* Merge object attributes from IBFD into OBFD. Raise an error if
15255 there are conflicting attributes. */
15256 static bfd_boolean
15257 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
15258 {
15259 obj_attribute *in_attr;
15260 obj_attribute *out_attr;
15261 bfd *abi_fp_bfd;
15262 bfd *abi_msa_bfd;
15263
15264 abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15265 in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15266 if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15267 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15268
15269 abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15270 if (!abi_msa_bfd
15271 && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15272 mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15273
15274 if (!elf_known_obj_attributes_proc (obfd)[0].i)
15275 {
15276 /* This is the first object. Copy the attributes. */
15277 _bfd_elf_copy_obj_attributes (ibfd, obfd);
15278
15279 /* Use the Tag_null value to indicate the attributes have been
15280 initialized. */
15281 elf_known_obj_attributes_proc (obfd)[0].i = 1;
15282
15283 return TRUE;
15284 }
15285
15286 /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15287 non-conflicting ones. */
15288 out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15289 if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15290 {
15291 int out_fp, in_fp;
15292
15293 out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15294 in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15295 out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15296 if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15297 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15298 else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15299 && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15300 || in_fp == Val_GNU_MIPS_ABI_FP_64
15301 || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15302 {
15303 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15304 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15305 }
15306 else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15307 && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15308 || out_fp == Val_GNU_MIPS_ABI_FP_64
15309 || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15310 /* Keep the current setting. */;
15311 else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15312 && in_fp == Val_GNU_MIPS_ABI_FP_64)
15313 {
15314 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15315 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15316 }
15317 else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15318 && out_fp == Val_GNU_MIPS_ABI_FP_64)
15319 /* Keep the current setting. */;
15320 else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15321 {
15322 const char *out_string, *in_string;
15323
15324 out_string = _bfd_mips_fp_abi_string (out_fp);
15325 in_string = _bfd_mips_fp_abi_string (in_fp);
15326 /* First warn about cases involving unrecognised ABIs. */
15327 if (!out_string && !in_string)
15328 _bfd_error_handler
15329 (_("Warning: %B uses unknown floating point ABI %d "
15330 "(set by %B), %B uses unknown floating point ABI %d"),
15331 obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
15332 else if (!out_string)
15333 _bfd_error_handler
15334 (_("Warning: %B uses unknown floating point ABI %d "
15335 "(set by %B), %B uses %s"),
15336 obfd, abi_fp_bfd, ibfd, out_fp, in_string);
15337 else if (!in_string)
15338 _bfd_error_handler
15339 (_("Warning: %B uses %s (set by %B), "
15340 "%B uses unknown floating point ABI %d"),
15341 obfd, abi_fp_bfd, ibfd, out_string, in_fp);
15342 else
15343 {
15344 /* If one of the bfds is soft-float, the other must be
15345 hard-float. The exact choice of hard-float ABI isn't
15346 really relevant to the error message. */
15347 if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15348 out_string = "-mhard-float";
15349 else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15350 in_string = "-mhard-float";
15351 _bfd_error_handler
15352 (_("Warning: %B uses %s (set by %B), %B uses %s"),
15353 obfd, abi_fp_bfd, ibfd, out_string, in_string);
15354 }
15355 }
15356 }
15357
15358 /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15359 non-conflicting ones. */
15360 if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15361 {
15362 out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15363 if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15364 out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15365 else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15366 switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15367 {
15368 case Val_GNU_MIPS_ABI_MSA_128:
15369 _bfd_error_handler
15370 (_("Warning: %B uses %s (set by %B), "
15371 "%B uses unknown MSA ABI %d"),
15372 obfd, abi_msa_bfd, ibfd,
15373 "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15374 break;
15375
15376 default:
15377 switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15378 {
15379 case Val_GNU_MIPS_ABI_MSA_128:
15380 _bfd_error_handler
15381 (_("Warning: %B uses unknown MSA ABI %d "
15382 "(set by %B), %B uses %s"),
15383 obfd, abi_msa_bfd, ibfd,
15384 out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15385 break;
15386
15387 default:
15388 _bfd_error_handler
15389 (_("Warning: %B uses unknown MSA ABI %d "
15390 "(set by %B), %B uses unknown MSA ABI %d"),
15391 obfd, abi_msa_bfd, ibfd,
15392 out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15393 in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15394 break;
15395 }
15396 }
15397 }
15398
15399 /* Merge Tag_compatibility attributes and any common GNU ones. */
15400 return _bfd_elf_merge_object_attributes (ibfd, obfd);
15401 }
15402
15403 /* Merge object ABI flags from IBFD into OBFD. Raise an error if
15404 there are conflicting settings. */
15405
15406 static bfd_boolean
15407 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15408 {
15409 obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15410 struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15411 struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15412
15413 /* Update the output abiflags fp_abi using the computed fp_abi. */
15414 out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15415
15416 #define max(a, b) ((a) > (b) ? (a) : (b))
15417 /* Merge abiflags. */
15418 out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15419 in_tdata->abiflags.isa_level);
15420 out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15421 in_tdata->abiflags.isa_rev);
15422 out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15423 in_tdata->abiflags.gpr_size);
15424 out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15425 in_tdata->abiflags.cpr1_size);
15426 out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15427 in_tdata->abiflags.cpr2_size);
15428 #undef max
15429 out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15430 out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15431
15432 return TRUE;
15433 }
15434
15435 /* Merge backend specific data from an object file to the output
15436 object file when linking. */
15437
15438 bfd_boolean
15439 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
15440 {
15441 struct mips_elf_obj_tdata *out_tdata;
15442 struct mips_elf_obj_tdata *in_tdata;
15443 bfd_boolean null_input_bfd = TRUE;
15444 asection *sec;
15445 bfd_boolean ok;
15446
15447 /* Check if we have the same endianness. */
15448 if (! _bfd_generic_verify_endian_match (ibfd, obfd))
15449 {
15450 (*_bfd_error_handler)
15451 (_("%B: endianness incompatible with that of the selected emulation"),
15452 ibfd);
15453 return FALSE;
15454 }
15455
15456 if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15457 return TRUE;
15458
15459 in_tdata = mips_elf_tdata (ibfd);
15460 out_tdata = mips_elf_tdata (obfd);
15461
15462 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15463 {
15464 (*_bfd_error_handler)
15465 (_("%B: ABI is incompatible with that of the selected emulation"),
15466 ibfd);
15467 return FALSE;
15468 }
15469
15470 /* Check to see if the input BFD actually contains any sections. If not,
15471 then it has no attributes, and its flags may not have been initialized
15472 either, but it cannot actually cause any incompatibility. */
15473 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15474 {
15475 /* Ignore synthetic sections and empty .text, .data and .bss sections
15476 which are automatically generated by gas. Also ignore fake
15477 (s)common sections, since merely defining a common symbol does
15478 not affect compatibility. */
15479 if ((sec->flags & SEC_IS_COMMON) == 0
15480 && strcmp (sec->name, ".reginfo")
15481 && strcmp (sec->name, ".mdebug")
15482 && (sec->size != 0
15483 || (strcmp (sec->name, ".text")
15484 && strcmp (sec->name, ".data")
15485 && strcmp (sec->name, ".bss"))))
15486 {
15487 null_input_bfd = FALSE;
15488 break;
15489 }
15490 }
15491 if (null_input_bfd)
15492 return TRUE;
15493
15494 /* Populate abiflags using existing information. */
15495 if (in_tdata->abiflags_valid)
15496 {
15497 obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15498 Elf_Internal_ABIFlags_v0 in_abiflags;
15499 Elf_Internal_ABIFlags_v0 abiflags;
15500
15501 /* Set up the FP ABI attribute from the abiflags if it is not already
15502 set. */
15503 if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15504 in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15505
15506 infer_mips_abiflags (ibfd, &abiflags);
15507 in_abiflags = in_tdata->abiflags;
15508
15509 /* It is not possible to infer the correct ISA revision
15510 for R3 or R5 so drop down to R2 for the checks. */
15511 if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15512 in_abiflags.isa_rev = 2;
15513
15514 if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15515 < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15516 (*_bfd_error_handler)
15517 (_("%B: warning: Inconsistent ISA between e_flags and "
15518 ".MIPS.abiflags"), ibfd);
15519 if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15520 && in_abiflags.fp_abi != abiflags.fp_abi)
15521 (*_bfd_error_handler)
15522 (_("%B: warning: Inconsistent FP ABI between .gnu.attributes and "
15523 ".MIPS.abiflags"), ibfd);
15524 if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15525 (*_bfd_error_handler)
15526 (_("%B: warning: Inconsistent ASEs between e_flags and "
15527 ".MIPS.abiflags"), ibfd);
15528 /* The isa_ext is allowed to be an extension of what can be inferred
15529 from e_flags. */
15530 if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15531 bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15532 (*_bfd_error_handler)
15533 (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15534 ".MIPS.abiflags"), ibfd);
15535 if (in_abiflags.flags2 != 0)
15536 (*_bfd_error_handler)
15537 (_("%B: warning: Unexpected flag in the flags2 field of "
15538 ".MIPS.abiflags (0x%lx)"), ibfd,
15539 (unsigned long) in_abiflags.flags2);
15540 }
15541 else
15542 {
15543 infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15544 in_tdata->abiflags_valid = TRUE;
15545 }
15546
15547 if (!out_tdata->abiflags_valid)
15548 {
15549 /* Copy input abiflags if output abiflags are not already valid. */
15550 out_tdata->abiflags = in_tdata->abiflags;
15551 out_tdata->abiflags_valid = TRUE;
15552 }
15553
15554 if (! elf_flags_init (obfd))
15555 {
15556 elf_flags_init (obfd) = TRUE;
15557 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15558 elf_elfheader (obfd)->e_ident[EI_CLASS]
15559 = elf_elfheader (ibfd)->e_ident[EI_CLASS];
15560
15561 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15562 && (bfd_get_arch_info (obfd)->the_default
15563 || mips_mach_extends_p (bfd_get_mach (obfd),
15564 bfd_get_mach (ibfd))))
15565 {
15566 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15567 bfd_get_mach (ibfd)))
15568 return FALSE;
15569
15570 /* Update the ABI flags isa_level, isa_rev and isa_ext fields. */
15571 update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15572 }
15573
15574 ok = TRUE;
15575 }
15576 else
15577 ok = mips_elf_merge_obj_e_flags (ibfd, obfd);
15578
15579 ok = mips_elf_merge_obj_attributes (ibfd, obfd) && ok;
15580
15581 ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15582
15583 if (!ok)
15584 {
15585 bfd_set_error (bfd_error_bad_value);
15586 return FALSE;
15587 }
15588
15589 return TRUE;
15590 }
15591
15592 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
15593
15594 bfd_boolean
15595 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15596 {
15597 BFD_ASSERT (!elf_flags_init (abfd)
15598 || elf_elfheader (abfd)->e_flags == flags);
15599
15600 elf_elfheader (abfd)->e_flags = flags;
15601 elf_flags_init (abfd) = TRUE;
15602 return TRUE;
15603 }
15604
15605 char *
15606 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15607 {
15608 switch (dtag)
15609 {
15610 default: return "";
15611 case DT_MIPS_RLD_VERSION:
15612 return "MIPS_RLD_VERSION";
15613 case DT_MIPS_TIME_STAMP:
15614 return "MIPS_TIME_STAMP";
15615 case DT_MIPS_ICHECKSUM:
15616 return "MIPS_ICHECKSUM";
15617 case DT_MIPS_IVERSION:
15618 return "MIPS_IVERSION";
15619 case DT_MIPS_FLAGS:
15620 return "MIPS_FLAGS";
15621 case DT_MIPS_BASE_ADDRESS:
15622 return "MIPS_BASE_ADDRESS";
15623 case DT_MIPS_MSYM:
15624 return "MIPS_MSYM";
15625 case DT_MIPS_CONFLICT:
15626 return "MIPS_CONFLICT";
15627 case DT_MIPS_LIBLIST:
15628 return "MIPS_LIBLIST";
15629 case DT_MIPS_LOCAL_GOTNO:
15630 return "MIPS_LOCAL_GOTNO";
15631 case DT_MIPS_CONFLICTNO:
15632 return "MIPS_CONFLICTNO";
15633 case DT_MIPS_LIBLISTNO:
15634 return "MIPS_LIBLISTNO";
15635 case DT_MIPS_SYMTABNO:
15636 return "MIPS_SYMTABNO";
15637 case DT_MIPS_UNREFEXTNO:
15638 return "MIPS_UNREFEXTNO";
15639 case DT_MIPS_GOTSYM:
15640 return "MIPS_GOTSYM";
15641 case DT_MIPS_HIPAGENO:
15642 return "MIPS_HIPAGENO";
15643 case DT_MIPS_RLD_MAP:
15644 return "MIPS_RLD_MAP";
15645 case DT_MIPS_RLD_MAP_REL:
15646 return "MIPS_RLD_MAP_REL";
15647 case DT_MIPS_DELTA_CLASS:
15648 return "MIPS_DELTA_CLASS";
15649 case DT_MIPS_DELTA_CLASS_NO:
15650 return "MIPS_DELTA_CLASS_NO";
15651 case DT_MIPS_DELTA_INSTANCE:
15652 return "MIPS_DELTA_INSTANCE";
15653 case DT_MIPS_DELTA_INSTANCE_NO:
15654 return "MIPS_DELTA_INSTANCE_NO";
15655 case DT_MIPS_DELTA_RELOC:
15656 return "MIPS_DELTA_RELOC";
15657 case DT_MIPS_DELTA_RELOC_NO:
15658 return "MIPS_DELTA_RELOC_NO";
15659 case DT_MIPS_DELTA_SYM:
15660 return "MIPS_DELTA_SYM";
15661 case DT_MIPS_DELTA_SYM_NO:
15662 return "MIPS_DELTA_SYM_NO";
15663 case DT_MIPS_DELTA_CLASSSYM:
15664 return "MIPS_DELTA_CLASSSYM";
15665 case DT_MIPS_DELTA_CLASSSYM_NO:
15666 return "MIPS_DELTA_CLASSSYM_NO";
15667 case DT_MIPS_CXX_FLAGS:
15668 return "MIPS_CXX_FLAGS";
15669 case DT_MIPS_PIXIE_INIT:
15670 return "MIPS_PIXIE_INIT";
15671 case DT_MIPS_SYMBOL_LIB:
15672 return "MIPS_SYMBOL_LIB";
15673 case DT_MIPS_LOCALPAGE_GOTIDX:
15674 return "MIPS_LOCALPAGE_GOTIDX";
15675 case DT_MIPS_LOCAL_GOTIDX:
15676 return "MIPS_LOCAL_GOTIDX";
15677 case DT_MIPS_HIDDEN_GOTIDX:
15678 return "MIPS_HIDDEN_GOTIDX";
15679 case DT_MIPS_PROTECTED_GOTIDX:
15680 return "MIPS_PROTECTED_GOT_IDX";
15681 case DT_MIPS_OPTIONS:
15682 return "MIPS_OPTIONS";
15683 case DT_MIPS_INTERFACE:
15684 return "MIPS_INTERFACE";
15685 case DT_MIPS_DYNSTR_ALIGN:
15686 return "DT_MIPS_DYNSTR_ALIGN";
15687 case DT_MIPS_INTERFACE_SIZE:
15688 return "DT_MIPS_INTERFACE_SIZE";
15689 case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15690 return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15691 case DT_MIPS_PERF_SUFFIX:
15692 return "DT_MIPS_PERF_SUFFIX";
15693 case DT_MIPS_COMPACT_SIZE:
15694 return "DT_MIPS_COMPACT_SIZE";
15695 case DT_MIPS_GP_VALUE:
15696 return "DT_MIPS_GP_VALUE";
15697 case DT_MIPS_AUX_DYNAMIC:
15698 return "DT_MIPS_AUX_DYNAMIC";
15699 case DT_MIPS_PLTGOT:
15700 return "DT_MIPS_PLTGOT";
15701 case DT_MIPS_RWPLT:
15702 return "DT_MIPS_RWPLT";
15703 }
15704 }
15705
15706 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15707 not known. */
15708
15709 const char *
15710 _bfd_mips_fp_abi_string (int fp)
15711 {
15712 switch (fp)
15713 {
15714 /* These strings aren't translated because they're simply
15715 option lists. */
15716 case Val_GNU_MIPS_ABI_FP_DOUBLE:
15717 return "-mdouble-float";
15718
15719 case Val_GNU_MIPS_ABI_FP_SINGLE:
15720 return "-msingle-float";
15721
15722 case Val_GNU_MIPS_ABI_FP_SOFT:
15723 return "-msoft-float";
15724
15725 case Val_GNU_MIPS_ABI_FP_OLD_64:
15726 return _("-mips32r2 -mfp64 (12 callee-saved)");
15727
15728 case Val_GNU_MIPS_ABI_FP_XX:
15729 return "-mfpxx";
15730
15731 case Val_GNU_MIPS_ABI_FP_64:
15732 return "-mgp32 -mfp64";
15733
15734 case Val_GNU_MIPS_ABI_FP_64A:
15735 return "-mgp32 -mfp64 -mno-odd-spreg";
15736
15737 default:
15738 return 0;
15739 }
15740 }
15741
15742 static void
15743 print_mips_ases (FILE *file, unsigned int mask)
15744 {
15745 if (mask & AFL_ASE_DSP)
15746 fputs ("\n\tDSP ASE", file);
15747 if (mask & AFL_ASE_DSPR2)
15748 fputs ("\n\tDSP R2 ASE", file);
15749 if (mask & AFL_ASE_DSPR3)
15750 fputs ("\n\tDSP R3 ASE", file);
15751 if (mask & AFL_ASE_EVA)
15752 fputs ("\n\tEnhanced VA Scheme", file);
15753 if (mask & AFL_ASE_MCU)
15754 fputs ("\n\tMCU (MicroController) ASE", file);
15755 if (mask & AFL_ASE_MDMX)
15756 fputs ("\n\tMDMX ASE", file);
15757 if (mask & AFL_ASE_MIPS3D)
15758 fputs ("\n\tMIPS-3D ASE", file);
15759 if (mask & AFL_ASE_MT)
15760 fputs ("\n\tMT ASE", file);
15761 if (mask & AFL_ASE_SMARTMIPS)
15762 fputs ("\n\tSmartMIPS ASE", file);
15763 if (mask & AFL_ASE_VIRT)
15764 fputs ("\n\tVZ ASE", file);
15765 if (mask & AFL_ASE_MSA)
15766 fputs ("\n\tMSA ASE", file);
15767 if (mask & AFL_ASE_MIPS16)
15768 fputs ("\n\tMIPS16 ASE", file);
15769 if (mask & AFL_ASE_MICROMIPS)
15770 fputs ("\n\tMICROMIPS ASE", file);
15771 if (mask & AFL_ASE_XPA)
15772 fputs ("\n\tXPA ASE", file);
15773 if (mask == 0)
15774 fprintf (file, "\n\t%s", _("None"));
15775 else if ((mask & ~AFL_ASE_MASK) != 0)
15776 fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15777 }
15778
15779 static void
15780 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15781 {
15782 switch (isa_ext)
15783 {
15784 case 0:
15785 fputs (_("None"), file);
15786 break;
15787 case AFL_EXT_XLR:
15788 fputs ("RMI XLR", file);
15789 break;
15790 case AFL_EXT_OCTEON3:
15791 fputs ("Cavium Networks Octeon3", file);
15792 break;
15793 case AFL_EXT_OCTEON2:
15794 fputs ("Cavium Networks Octeon2", file);
15795 break;
15796 case AFL_EXT_OCTEONP:
15797 fputs ("Cavium Networks OcteonP", file);
15798 break;
15799 case AFL_EXT_LOONGSON_3A:
15800 fputs ("Loongson 3A", file);
15801 break;
15802 case AFL_EXT_OCTEON:
15803 fputs ("Cavium Networks Octeon", file);
15804 break;
15805 case AFL_EXT_5900:
15806 fputs ("Toshiba R5900", file);
15807 break;
15808 case AFL_EXT_4650:
15809 fputs ("MIPS R4650", file);
15810 break;
15811 case AFL_EXT_4010:
15812 fputs ("LSI R4010", file);
15813 break;
15814 case AFL_EXT_4100:
15815 fputs ("NEC VR4100", file);
15816 break;
15817 case AFL_EXT_3900:
15818 fputs ("Toshiba R3900", file);
15819 break;
15820 case AFL_EXT_10000:
15821 fputs ("MIPS R10000", file);
15822 break;
15823 case AFL_EXT_SB1:
15824 fputs ("Broadcom SB-1", file);
15825 break;
15826 case AFL_EXT_4111:
15827 fputs ("NEC VR4111/VR4181", file);
15828 break;
15829 case AFL_EXT_4120:
15830 fputs ("NEC VR4120", file);
15831 break;
15832 case AFL_EXT_5400:
15833 fputs ("NEC VR5400", file);
15834 break;
15835 case AFL_EXT_5500:
15836 fputs ("NEC VR5500", file);
15837 break;
15838 case AFL_EXT_LOONGSON_2E:
15839 fputs ("ST Microelectronics Loongson 2E", file);
15840 break;
15841 case AFL_EXT_LOONGSON_2F:
15842 fputs ("ST Microelectronics Loongson 2F", file);
15843 break;
15844 default:
15845 fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15846 break;
15847 }
15848 }
15849
15850 static void
15851 print_mips_fp_abi_value (FILE *file, int val)
15852 {
15853 switch (val)
15854 {
15855 case Val_GNU_MIPS_ABI_FP_ANY:
15856 fprintf (file, _("Hard or soft float\n"));
15857 break;
15858 case Val_GNU_MIPS_ABI_FP_DOUBLE:
15859 fprintf (file, _("Hard float (double precision)\n"));
15860 break;
15861 case Val_GNU_MIPS_ABI_FP_SINGLE:
15862 fprintf (file, _("Hard float (single precision)\n"));
15863 break;
15864 case Val_GNU_MIPS_ABI_FP_SOFT:
15865 fprintf (file, _("Soft float\n"));
15866 break;
15867 case Val_GNU_MIPS_ABI_FP_OLD_64:
15868 fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15869 break;
15870 case Val_GNU_MIPS_ABI_FP_XX:
15871 fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15872 break;
15873 case Val_GNU_MIPS_ABI_FP_64:
15874 fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15875 break;
15876 case Val_GNU_MIPS_ABI_FP_64A:
15877 fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15878 break;
15879 default:
15880 fprintf (file, "??? (%d)\n", val);
15881 break;
15882 }
15883 }
15884
15885 static int
15886 get_mips_reg_size (int reg_size)
15887 {
15888 return (reg_size == AFL_REG_NONE) ? 0
15889 : (reg_size == AFL_REG_32) ? 32
15890 : (reg_size == AFL_REG_64) ? 64
15891 : (reg_size == AFL_REG_128) ? 128
15892 : -1;
15893 }
15894
15895 bfd_boolean
15896 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15897 {
15898 FILE *file = ptr;
15899
15900 BFD_ASSERT (abfd != NULL && ptr != NULL);
15901
15902 /* Print normal ELF private data. */
15903 _bfd_elf_print_private_bfd_data (abfd, ptr);
15904
15905 /* xgettext:c-format */
15906 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15907
15908 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15909 fprintf (file, _(" [abi=O32]"));
15910 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15911 fprintf (file, _(" [abi=O64]"));
15912 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15913 fprintf (file, _(" [abi=EABI32]"));
15914 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15915 fprintf (file, _(" [abi=EABI64]"));
15916 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15917 fprintf (file, _(" [abi unknown]"));
15918 else if (ABI_N32_P (abfd))
15919 fprintf (file, _(" [abi=N32]"));
15920 else if (ABI_64_P (abfd))
15921 fprintf (file, _(" [abi=64]"));
15922 else
15923 fprintf (file, _(" [no abi set]"));
15924
15925 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15926 fprintf (file, " [mips1]");
15927 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15928 fprintf (file, " [mips2]");
15929 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15930 fprintf (file, " [mips3]");
15931 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15932 fprintf (file, " [mips4]");
15933 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15934 fprintf (file, " [mips5]");
15935 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15936 fprintf (file, " [mips32]");
15937 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15938 fprintf (file, " [mips64]");
15939 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15940 fprintf (file, " [mips32r2]");
15941 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15942 fprintf (file, " [mips64r2]");
15943 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15944 fprintf (file, " [mips32r6]");
15945 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15946 fprintf (file, " [mips64r6]");
15947 else
15948 fprintf (file, _(" [unknown ISA]"));
15949
15950 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15951 fprintf (file, " [mdmx]");
15952
15953 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15954 fprintf (file, " [mips16]");
15955
15956 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15957 fprintf (file, " [micromips]");
15958
15959 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15960 fprintf (file, " [nan2008]");
15961
15962 if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15963 fprintf (file, " [old fp64]");
15964
15965 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15966 fprintf (file, " [32bitmode]");
15967 else
15968 fprintf (file, _(" [not 32bitmode]"));
15969
15970 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
15971 fprintf (file, " [noreorder]");
15972
15973 if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
15974 fprintf (file, " [PIC]");
15975
15976 if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
15977 fprintf (file, " [CPIC]");
15978
15979 if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
15980 fprintf (file, " [XGOT]");
15981
15982 if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
15983 fprintf (file, " [UCODE]");
15984
15985 fputc ('\n', file);
15986
15987 if (mips_elf_tdata (abfd)->abiflags_valid)
15988 {
15989 Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15990 fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15991 fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15992 if (abiflags->isa_rev > 1)
15993 fprintf (file, "r%d", abiflags->isa_rev);
15994 fprintf (file, "\nGPR size: %d",
15995 get_mips_reg_size (abiflags->gpr_size));
15996 fprintf (file, "\nCPR1 size: %d",
15997 get_mips_reg_size (abiflags->cpr1_size));
15998 fprintf (file, "\nCPR2 size: %d",
15999 get_mips_reg_size (abiflags->cpr2_size));
16000 fputs ("\nFP ABI: ", file);
16001 print_mips_fp_abi_value (file, abiflags->fp_abi);
16002 fputs ("ISA Extension: ", file);
16003 print_mips_isa_ext (file, abiflags->isa_ext);
16004 fputs ("\nASEs:", file);
16005 print_mips_ases (file, abiflags->ases);
16006 fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
16007 fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
16008 fputc ('\n', file);
16009 }
16010
16011 return TRUE;
16012 }
16013
16014 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
16015 {
16016 { STRING_COMMA_LEN (".lit4"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16017 { STRING_COMMA_LEN (".lit8"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16018 { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
16019 { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16020 { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16021 { STRING_COMMA_LEN (".ucode"), 0, SHT_MIPS_UCODE, 0 },
16022 { NULL, 0, 0, 0, 0 }
16023 };
16024
16025 /* Merge non visibility st_other attributes. Ensure that the
16026 STO_OPTIONAL flag is copied into h->other, even if this is not a
16027 definiton of the symbol. */
16028 void
16029 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
16030 const Elf_Internal_Sym *isym,
16031 bfd_boolean definition,
16032 bfd_boolean dynamic ATTRIBUTE_UNUSED)
16033 {
16034 if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
16035 {
16036 unsigned char other;
16037
16038 other = (definition ? isym->st_other : h->other);
16039 other &= ~ELF_ST_VISIBILITY (-1);
16040 h->other = other | ELF_ST_VISIBILITY (h->other);
16041 }
16042
16043 if (!definition
16044 && ELF_MIPS_IS_OPTIONAL (isym->st_other))
16045 h->other |= STO_OPTIONAL;
16046 }
16047
16048 /* Decide whether an undefined symbol is special and can be ignored.
16049 This is the case for OPTIONAL symbols on IRIX. */
16050 bfd_boolean
16051 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
16052 {
16053 return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
16054 }
16055
16056 bfd_boolean
16057 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
16058 {
16059 return (sym->st_shndx == SHN_COMMON
16060 || sym->st_shndx == SHN_MIPS_ACOMMON
16061 || sym->st_shndx == SHN_MIPS_SCOMMON);
16062 }
16063
16064 /* Return address for Ith PLT stub in section PLT, for relocation REL
16065 or (bfd_vma) -1 if it should not be included. */
16066
16067 bfd_vma
16068 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
16069 const arelent *rel ATTRIBUTE_UNUSED)
16070 {
16071 return (plt->vma
16072 + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
16073 + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
16074 }
16075
16076 /* Build a table of synthetic symbols to represent the PLT. As with MIPS16
16077 and microMIPS PLT slots we may have a many-to-one mapping between .plt
16078 and .got.plt and also the slots may be of a different size each we walk
16079 the PLT manually fetching instructions and matching them against known
16080 patterns. To make things easier standard MIPS slots, if any, always come
16081 first. As we don't create proper ELF symbols we use the UDATA.I member
16082 of ASYMBOL to carry ISA annotation. The encoding used is the same as
16083 with the ST_OTHER member of the ELF symbol. */
16084
16085 long
16086 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
16087 long symcount ATTRIBUTE_UNUSED,
16088 asymbol **syms ATTRIBUTE_UNUSED,
16089 long dynsymcount, asymbol **dynsyms,
16090 asymbol **ret)
16091 {
16092 static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
16093 static const char microsuffix[] = "@micromipsplt";
16094 static const char m16suffix[] = "@mips16plt";
16095 static const char mipssuffix[] = "@plt";
16096
16097 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
16098 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
16099 bfd_boolean micromips_p = MICROMIPS_P (abfd);
16100 Elf_Internal_Shdr *hdr;
16101 bfd_byte *plt_data;
16102 bfd_vma plt_offset;
16103 unsigned int other;
16104 bfd_vma entry_size;
16105 bfd_vma plt0_size;
16106 asection *relplt;
16107 bfd_vma opcode;
16108 asection *plt;
16109 asymbol *send;
16110 size_t size;
16111 char *names;
16112 long counti;
16113 arelent *p;
16114 asymbol *s;
16115 char *nend;
16116 long count;
16117 long pi;
16118 long i;
16119 long n;
16120
16121 *ret = NULL;
16122
16123 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
16124 return 0;
16125
16126 relplt = bfd_get_section_by_name (abfd, ".rel.plt");
16127 if (relplt == NULL)
16128 return 0;
16129
16130 hdr = &elf_section_data (relplt)->this_hdr;
16131 if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
16132 return 0;
16133
16134 plt = bfd_get_section_by_name (abfd, ".plt");
16135 if (plt == NULL)
16136 return 0;
16137
16138 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
16139 if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
16140 return -1;
16141 p = relplt->relocation;
16142
16143 /* Calculating the exact amount of space required for symbols would
16144 require two passes over the PLT, so just pessimise assuming two
16145 PLT slots per relocation. */
16146 count = relplt->size / hdr->sh_entsize;
16147 counti = count * bed->s->int_rels_per_ext_rel;
16148 size = 2 * count * sizeof (asymbol);
16149 size += count * (sizeof (mipssuffix) +
16150 (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16151 for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16152 size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16153
16154 /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too. */
16155 size += sizeof (asymbol) + sizeof (pltname);
16156
16157 if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16158 return -1;
16159
16160 if (plt->size < 16)
16161 return -1;
16162
16163 s = *ret = bfd_malloc (size);
16164 if (s == NULL)
16165 return -1;
16166 send = s + 2 * count + 1;
16167
16168 names = (char *) send;
16169 nend = (char *) s + size;
16170 n = 0;
16171
16172 opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16173 if (opcode == 0x3302fffe)
16174 {
16175 if (!micromips_p)
16176 return -1;
16177 plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16178 other = STO_MICROMIPS;
16179 }
16180 else if (opcode == 0x0398c1d0)
16181 {
16182 if (!micromips_p)
16183 return -1;
16184 plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16185 other = STO_MICROMIPS;
16186 }
16187 else
16188 {
16189 plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16190 other = 0;
16191 }
16192
16193 s->the_bfd = abfd;
16194 s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16195 s->section = plt;
16196 s->value = 0;
16197 s->name = names;
16198 s->udata.i = other;
16199 memcpy (names, pltname, sizeof (pltname));
16200 names += sizeof (pltname);
16201 ++s, ++n;
16202
16203 pi = 0;
16204 for (plt_offset = plt0_size;
16205 plt_offset + 8 <= plt->size && s < send;
16206 plt_offset += entry_size)
16207 {
16208 bfd_vma gotplt_addr;
16209 const char *suffix;
16210 bfd_vma gotplt_hi;
16211 bfd_vma gotplt_lo;
16212 size_t suffixlen;
16213
16214 opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16215
16216 /* Check if the second word matches the expected MIPS16 instruction. */
16217 if (opcode == 0x651aeb00)
16218 {
16219 if (micromips_p)
16220 return -1;
16221 /* Truncated table??? */
16222 if (plt_offset + 16 > plt->size)
16223 break;
16224 gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16225 entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16226 suffixlen = sizeof (m16suffix);
16227 suffix = m16suffix;
16228 other = STO_MIPS16;
16229 }
16230 /* Likewise the expected microMIPS instruction (no insn32 mode). */
16231 else if (opcode == 0xff220000)
16232 {
16233 if (!micromips_p)
16234 return -1;
16235 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16236 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16237 gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16238 gotplt_lo <<= 2;
16239 gotplt_addr = gotplt_hi + gotplt_lo;
16240 gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16241 entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16242 suffixlen = sizeof (microsuffix);
16243 suffix = microsuffix;
16244 other = STO_MICROMIPS;
16245 }
16246 /* Likewise the expected microMIPS instruction (insn32 mode). */
16247 else if ((opcode & 0xffff0000) == 0xff2f0000)
16248 {
16249 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16250 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16251 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16252 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16253 gotplt_addr = gotplt_hi + gotplt_lo;
16254 entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16255 suffixlen = sizeof (microsuffix);
16256 suffix = microsuffix;
16257 other = STO_MICROMIPS;
16258 }
16259 /* Otherwise assume standard MIPS code. */
16260 else
16261 {
16262 gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16263 gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16264 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16265 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16266 gotplt_addr = gotplt_hi + gotplt_lo;
16267 entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16268 suffixlen = sizeof (mipssuffix);
16269 suffix = mipssuffix;
16270 other = 0;
16271 }
16272 /* Truncated table??? */
16273 if (plt_offset + entry_size > plt->size)
16274 break;
16275
16276 for (i = 0;
16277 i < count && p[pi].address != gotplt_addr;
16278 i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16279
16280 if (i < count)
16281 {
16282 size_t namelen;
16283 size_t len;
16284
16285 *s = **p[pi].sym_ptr_ptr;
16286 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
16287 we are defining a symbol, ensure one of them is set. */
16288 if ((s->flags & BSF_LOCAL) == 0)
16289 s->flags |= BSF_GLOBAL;
16290 s->flags |= BSF_SYNTHETIC;
16291 s->section = plt;
16292 s->value = plt_offset;
16293 s->name = names;
16294 s->udata.i = other;
16295
16296 len = strlen ((*p[pi].sym_ptr_ptr)->name);
16297 namelen = len + suffixlen;
16298 if (names + namelen > nend)
16299 break;
16300
16301 memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16302 names += len;
16303 memcpy (names, suffix, suffixlen);
16304 names += suffixlen;
16305
16306 ++s, ++n;
16307 pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16308 }
16309 }
16310
16311 free (plt_data);
16312
16313 return n;
16314 }
16315
16316 void
16317 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16318 {
16319 struct mips_elf_link_hash_table *htab;
16320 Elf_Internal_Ehdr *i_ehdrp;
16321
16322 i_ehdrp = elf_elfheader (abfd);
16323 if (link_info)
16324 {
16325 htab = mips_elf_hash_table (link_info);
16326 BFD_ASSERT (htab != NULL);
16327
16328 if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16329 i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16330 }
16331
16332 _bfd_elf_post_process_headers (abfd, link_info);
16333
16334 if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16335 || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16336 i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16337
16338 if (elf_stack_flags (abfd) && !(elf_stack_flags (abfd) & PF_X))
16339 i_ehdrp->e_ident[EI_ABIVERSION] = 5;
16340 }
16341
16342 int
16343 _bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16344 {
16345 return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16346 }
16347
16348 /* Return the opcode for can't unwind. */
16349
16350 int
16351 _bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16352 {
16353 return COMPACT_EH_CANT_UNWIND_OPCODE;
16354 }
This page took 0.358177 seconds and 5 git commands to generate.