MIPS/BFD: Add microMIPS annotation to LA25 stub symbols
[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 use_trampoline_p = (value != 0 || s->alignment_power > 4);
1968
1969 h->la25_stub = stub;
1970 return (use_trampoline_p
1971 ? mips_elf_add_la25_trampoline (stub, info)
1972 : mips_elf_add_la25_intro (stub, info));
1973 }
1974
1975 /* A mips_elf_link_hash_traverse callback that is called before sizing
1976 sections. DATA points to a mips_htab_traverse_info structure. */
1977
1978 static bfd_boolean
1979 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1980 {
1981 struct mips_htab_traverse_info *hti;
1982
1983 hti = (struct mips_htab_traverse_info *) data;
1984 if (!bfd_link_relocatable (hti->info))
1985 mips_elf_check_mips16_stubs (hti->info, h);
1986
1987 if (mips_elf_local_pic_function_p (h))
1988 {
1989 /* PR 12845: If H is in a section that has been garbage
1990 collected it will have its output section set to *ABS*. */
1991 if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1992 return TRUE;
1993
1994 /* H is a function that might need $25 to be valid on entry.
1995 If we're creating a non-PIC relocatable object, mark H as
1996 being PIC. If we're creating a non-relocatable object with
1997 non-PIC branches and jumps to H, make sure that H has an la25
1998 stub. */
1999 if (bfd_link_relocatable (hti->info))
2000 {
2001 if (!PIC_OBJECT_P (hti->output_bfd))
2002 h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
2003 }
2004 else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
2005 {
2006 hti->error = TRUE;
2007 return FALSE;
2008 }
2009 }
2010 return TRUE;
2011 }
2012 \f
2013 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2014 Most mips16 instructions are 16 bits, but these instructions
2015 are 32 bits.
2016
2017 The format of these instructions is:
2018
2019 +--------------+--------------------------------+
2020 | JALX | X| Imm 20:16 | Imm 25:21 |
2021 +--------------+--------------------------------+
2022 | Immediate 15:0 |
2023 +-----------------------------------------------+
2024
2025 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
2026 Note that the immediate value in the first word is swapped.
2027
2028 When producing a relocatable object file, R_MIPS16_26 is
2029 handled mostly like R_MIPS_26. In particular, the addend is
2030 stored as a straight 26-bit value in a 32-bit instruction.
2031 (gas makes life simpler for itself by never adjusting a
2032 R_MIPS16_26 reloc to be against a section, so the addend is
2033 always zero). However, the 32 bit instruction is stored as 2
2034 16-bit values, rather than a single 32-bit value. In a
2035 big-endian file, the result is the same; in a little-endian
2036 file, the two 16-bit halves of the 32 bit value are swapped.
2037 This is so that a disassembler can recognize the jal
2038 instruction.
2039
2040 When doing a final link, R_MIPS16_26 is treated as a 32 bit
2041 instruction stored as two 16-bit values. The addend A is the
2042 contents of the targ26 field. The calculation is the same as
2043 R_MIPS_26. When storing the calculated value, reorder the
2044 immediate value as shown above, and don't forget to store the
2045 value as two 16-bit values.
2046
2047 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2048 defined as
2049
2050 big-endian:
2051 +--------+----------------------+
2052 | | |
2053 | | targ26-16 |
2054 |31 26|25 0|
2055 +--------+----------------------+
2056
2057 little-endian:
2058 +----------+------+-------------+
2059 | | | |
2060 | sub1 | | sub2 |
2061 |0 9|10 15|16 31|
2062 +----------+--------------------+
2063 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2064 ((sub1 << 16) | sub2)).
2065
2066 When producing a relocatable object file, the calculation is
2067 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2068 When producing a fully linked file, the calculation is
2069 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2070 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2071
2072 The table below lists the other MIPS16 instruction relocations.
2073 Each one is calculated in the same way as the non-MIPS16 relocation
2074 given on the right, but using the extended MIPS16 layout of 16-bit
2075 immediate fields:
2076
2077 R_MIPS16_GPREL R_MIPS_GPREL16
2078 R_MIPS16_GOT16 R_MIPS_GOT16
2079 R_MIPS16_CALL16 R_MIPS_CALL16
2080 R_MIPS16_HI16 R_MIPS_HI16
2081 R_MIPS16_LO16 R_MIPS_LO16
2082
2083 A typical instruction will have a format like this:
2084
2085 +--------------+--------------------------------+
2086 | EXTEND | Imm 10:5 | Imm 15:11 |
2087 +--------------+--------------------------------+
2088 | Major | rx | ry | Imm 4:0 |
2089 +--------------+--------------------------------+
2090
2091 EXTEND is the five bit value 11110. Major is the instruction
2092 opcode.
2093
2094 All we need to do here is shuffle the bits appropriately.
2095 As above, the two 16-bit halves must be swapped on a
2096 little-endian system.
2097
2098 Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the
2099 relocatable field is shifted by 1 rather than 2 and the same bit
2100 shuffling is done as with the relocations above. */
2101
2102 static inline bfd_boolean
2103 mips16_reloc_p (int r_type)
2104 {
2105 switch (r_type)
2106 {
2107 case R_MIPS16_26:
2108 case R_MIPS16_GPREL:
2109 case R_MIPS16_GOT16:
2110 case R_MIPS16_CALL16:
2111 case R_MIPS16_HI16:
2112 case R_MIPS16_LO16:
2113 case R_MIPS16_TLS_GD:
2114 case R_MIPS16_TLS_LDM:
2115 case R_MIPS16_TLS_DTPREL_HI16:
2116 case R_MIPS16_TLS_DTPREL_LO16:
2117 case R_MIPS16_TLS_GOTTPREL:
2118 case R_MIPS16_TLS_TPREL_HI16:
2119 case R_MIPS16_TLS_TPREL_LO16:
2120 case R_MIPS16_PC16_S1:
2121 return TRUE;
2122
2123 default:
2124 return FALSE;
2125 }
2126 }
2127
2128 /* Check if a microMIPS reloc. */
2129
2130 static inline bfd_boolean
2131 micromips_reloc_p (unsigned int r_type)
2132 {
2133 return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2134 }
2135
2136 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2137 on a little-endian system. This does not apply to R_MICROMIPS_PC7_S1
2138 and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions. */
2139
2140 static inline bfd_boolean
2141 micromips_reloc_shuffle_p (unsigned int r_type)
2142 {
2143 return (micromips_reloc_p (r_type)
2144 && r_type != R_MICROMIPS_PC7_S1
2145 && r_type != R_MICROMIPS_PC10_S1);
2146 }
2147
2148 static inline bfd_boolean
2149 got16_reloc_p (int r_type)
2150 {
2151 return (r_type == R_MIPS_GOT16
2152 || r_type == R_MIPS16_GOT16
2153 || r_type == R_MICROMIPS_GOT16);
2154 }
2155
2156 static inline bfd_boolean
2157 call16_reloc_p (int r_type)
2158 {
2159 return (r_type == R_MIPS_CALL16
2160 || r_type == R_MIPS16_CALL16
2161 || r_type == R_MICROMIPS_CALL16);
2162 }
2163
2164 static inline bfd_boolean
2165 got_disp_reloc_p (unsigned int r_type)
2166 {
2167 return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2168 }
2169
2170 static inline bfd_boolean
2171 got_page_reloc_p (unsigned int r_type)
2172 {
2173 return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2174 }
2175
2176 static inline bfd_boolean
2177 got_lo16_reloc_p (unsigned int r_type)
2178 {
2179 return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2180 }
2181
2182 static inline bfd_boolean
2183 call_hi16_reloc_p (unsigned int r_type)
2184 {
2185 return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2186 }
2187
2188 static inline bfd_boolean
2189 call_lo16_reloc_p (unsigned int r_type)
2190 {
2191 return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2192 }
2193
2194 static inline bfd_boolean
2195 hi16_reloc_p (int r_type)
2196 {
2197 return (r_type == R_MIPS_HI16
2198 || r_type == R_MIPS16_HI16
2199 || r_type == R_MICROMIPS_HI16
2200 || r_type == R_MIPS_PCHI16);
2201 }
2202
2203 static inline bfd_boolean
2204 lo16_reloc_p (int r_type)
2205 {
2206 return (r_type == R_MIPS_LO16
2207 || r_type == R_MIPS16_LO16
2208 || r_type == R_MICROMIPS_LO16
2209 || r_type == R_MIPS_PCLO16);
2210 }
2211
2212 static inline bfd_boolean
2213 mips16_call_reloc_p (int r_type)
2214 {
2215 return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2216 }
2217
2218 static inline bfd_boolean
2219 jal_reloc_p (int r_type)
2220 {
2221 return (r_type == R_MIPS_26
2222 || r_type == R_MIPS16_26
2223 || r_type == R_MICROMIPS_26_S1);
2224 }
2225
2226 static inline bfd_boolean
2227 b_reloc_p (int r_type)
2228 {
2229 return (r_type == R_MIPS_PC26_S2
2230 || r_type == R_MIPS_PC21_S2
2231 || r_type == R_MIPS_PC16
2232 || r_type == R_MIPS_GNU_REL16_S2
2233 || r_type == R_MIPS16_PC16_S1
2234 || r_type == R_MICROMIPS_PC16_S1
2235 || r_type == R_MICROMIPS_PC10_S1
2236 || r_type == R_MICROMIPS_PC7_S1);
2237 }
2238
2239 static inline bfd_boolean
2240 aligned_pcrel_reloc_p (int r_type)
2241 {
2242 return (r_type == R_MIPS_PC18_S3
2243 || r_type == R_MIPS_PC19_S2);
2244 }
2245
2246 static inline bfd_boolean
2247 branch_reloc_p (int r_type)
2248 {
2249 return (r_type == R_MIPS_26
2250 || r_type == R_MIPS_PC26_S2
2251 || r_type == R_MIPS_PC21_S2
2252 || r_type == R_MIPS_PC16
2253 || r_type == R_MIPS_GNU_REL16_S2);
2254 }
2255
2256 static inline bfd_boolean
2257 mips16_branch_reloc_p (int r_type)
2258 {
2259 return (r_type == R_MIPS16_26
2260 || r_type == R_MIPS16_PC16_S1);
2261 }
2262
2263 static inline bfd_boolean
2264 micromips_branch_reloc_p (int r_type)
2265 {
2266 return (r_type == R_MICROMIPS_26_S1
2267 || r_type == R_MICROMIPS_PC16_S1
2268 || r_type == R_MICROMIPS_PC10_S1
2269 || r_type == R_MICROMIPS_PC7_S1);
2270 }
2271
2272 static inline bfd_boolean
2273 tls_gd_reloc_p (unsigned int r_type)
2274 {
2275 return (r_type == R_MIPS_TLS_GD
2276 || r_type == R_MIPS16_TLS_GD
2277 || r_type == R_MICROMIPS_TLS_GD);
2278 }
2279
2280 static inline bfd_boolean
2281 tls_ldm_reloc_p (unsigned int r_type)
2282 {
2283 return (r_type == R_MIPS_TLS_LDM
2284 || r_type == R_MIPS16_TLS_LDM
2285 || r_type == R_MICROMIPS_TLS_LDM);
2286 }
2287
2288 static inline bfd_boolean
2289 tls_gottprel_reloc_p (unsigned int r_type)
2290 {
2291 return (r_type == R_MIPS_TLS_GOTTPREL
2292 || r_type == R_MIPS16_TLS_GOTTPREL
2293 || r_type == R_MICROMIPS_TLS_GOTTPREL);
2294 }
2295
2296 void
2297 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2298 bfd_boolean jal_shuffle, bfd_byte *data)
2299 {
2300 bfd_vma first, second, val;
2301
2302 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2303 return;
2304
2305 /* Pick up the first and second halfwords of the instruction. */
2306 first = bfd_get_16 (abfd, data);
2307 second = bfd_get_16 (abfd, data + 2);
2308 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2309 val = first << 16 | second;
2310 else if (r_type != R_MIPS16_26)
2311 val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2312 | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2313 else
2314 val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2315 | ((first & 0x1f) << 21) | second);
2316 bfd_put_32 (abfd, val, data);
2317 }
2318
2319 void
2320 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2321 bfd_boolean jal_shuffle, bfd_byte *data)
2322 {
2323 bfd_vma first, second, val;
2324
2325 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2326 return;
2327
2328 val = bfd_get_32 (abfd, data);
2329 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2330 {
2331 second = val & 0xffff;
2332 first = val >> 16;
2333 }
2334 else if (r_type != R_MIPS16_26)
2335 {
2336 second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2337 first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2338 }
2339 else
2340 {
2341 second = val & 0xffff;
2342 first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2343 | ((val >> 21) & 0x1f);
2344 }
2345 bfd_put_16 (abfd, second, data + 2);
2346 bfd_put_16 (abfd, first, data);
2347 }
2348
2349 bfd_reloc_status_type
2350 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2351 arelent *reloc_entry, asection *input_section,
2352 bfd_boolean relocatable, void *data, bfd_vma gp)
2353 {
2354 bfd_vma relocation;
2355 bfd_signed_vma val;
2356 bfd_reloc_status_type status;
2357
2358 if (bfd_is_com_section (symbol->section))
2359 relocation = 0;
2360 else
2361 relocation = symbol->value;
2362
2363 relocation += symbol->section->output_section->vma;
2364 relocation += symbol->section->output_offset;
2365
2366 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2367 return bfd_reloc_outofrange;
2368
2369 /* Set val to the offset into the section or symbol. */
2370 val = reloc_entry->addend;
2371
2372 _bfd_mips_elf_sign_extend (val, 16);
2373
2374 /* Adjust val for the final section location and GP value. If we
2375 are producing relocatable output, we don't want to do this for
2376 an external symbol. */
2377 if (! relocatable
2378 || (symbol->flags & BSF_SECTION_SYM) != 0)
2379 val += relocation - gp;
2380
2381 if (reloc_entry->howto->partial_inplace)
2382 {
2383 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2384 (bfd_byte *) data
2385 + reloc_entry->address);
2386 if (status != bfd_reloc_ok)
2387 return status;
2388 }
2389 else
2390 reloc_entry->addend = val;
2391
2392 if (relocatable)
2393 reloc_entry->address += input_section->output_offset;
2394
2395 return bfd_reloc_ok;
2396 }
2397
2398 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2399 R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section
2400 that contains the relocation field and DATA points to the start of
2401 INPUT_SECTION. */
2402
2403 struct mips_hi16
2404 {
2405 struct mips_hi16 *next;
2406 bfd_byte *data;
2407 asection *input_section;
2408 arelent rel;
2409 };
2410
2411 /* FIXME: This should not be a static variable. */
2412
2413 static struct mips_hi16 *mips_hi16_list;
2414
2415 /* A howto special_function for REL *HI16 relocations. We can only
2416 calculate the correct value once we've seen the partnering
2417 *LO16 relocation, so just save the information for later.
2418
2419 The ABI requires that the *LO16 immediately follow the *HI16.
2420 However, as a GNU extension, we permit an arbitrary number of
2421 *HI16s to be associated with a single *LO16. This significantly
2422 simplies the relocation handling in gcc. */
2423
2424 bfd_reloc_status_type
2425 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2426 asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2427 asection *input_section, bfd *output_bfd,
2428 char **error_message ATTRIBUTE_UNUSED)
2429 {
2430 struct mips_hi16 *n;
2431
2432 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2433 return bfd_reloc_outofrange;
2434
2435 n = bfd_malloc (sizeof *n);
2436 if (n == NULL)
2437 return bfd_reloc_outofrange;
2438
2439 n->next = mips_hi16_list;
2440 n->data = data;
2441 n->input_section = input_section;
2442 n->rel = *reloc_entry;
2443 mips_hi16_list = n;
2444
2445 if (output_bfd != NULL)
2446 reloc_entry->address += input_section->output_offset;
2447
2448 return bfd_reloc_ok;
2449 }
2450
2451 /* A howto special_function for REL R_MIPS*_GOT16 relocations. This is just
2452 like any other 16-bit relocation when applied to global symbols, but is
2453 treated in the same as R_MIPS_HI16 when applied to local symbols. */
2454
2455 bfd_reloc_status_type
2456 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2457 void *data, asection *input_section,
2458 bfd *output_bfd, char **error_message)
2459 {
2460 if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2461 || bfd_is_und_section (bfd_get_section (symbol))
2462 || bfd_is_com_section (bfd_get_section (symbol)))
2463 /* The relocation is against a global symbol. */
2464 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2465 input_section, output_bfd,
2466 error_message);
2467
2468 return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2469 input_section, output_bfd, error_message);
2470 }
2471
2472 /* A howto special_function for REL *LO16 relocations. The *LO16 itself
2473 is a straightforward 16 bit inplace relocation, but we must deal with
2474 any partnering high-part relocations as well. */
2475
2476 bfd_reloc_status_type
2477 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2478 void *data, asection *input_section,
2479 bfd *output_bfd, char **error_message)
2480 {
2481 bfd_vma vallo;
2482 bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2483
2484 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2485 return bfd_reloc_outofrange;
2486
2487 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2488 location);
2489 vallo = bfd_get_32 (abfd, location);
2490 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2491 location);
2492
2493 while (mips_hi16_list != NULL)
2494 {
2495 bfd_reloc_status_type ret;
2496 struct mips_hi16 *hi;
2497
2498 hi = mips_hi16_list;
2499
2500 /* R_MIPS*_GOT16 relocations are something of a special case. We
2501 want to install the addend in the same way as for a R_MIPS*_HI16
2502 relocation (with a rightshift of 16). However, since GOT16
2503 relocations can also be used with global symbols, their howto
2504 has a rightshift of 0. */
2505 if (hi->rel.howto->type == R_MIPS_GOT16)
2506 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2507 else if (hi->rel.howto->type == R_MIPS16_GOT16)
2508 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2509 else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2510 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2511
2512 /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any
2513 carry or borrow will induce a change of +1 or -1 in the high part. */
2514 hi->rel.addend += (vallo + 0x8000) & 0xffff;
2515
2516 ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2517 hi->input_section, output_bfd,
2518 error_message);
2519 if (ret != bfd_reloc_ok)
2520 return ret;
2521
2522 mips_hi16_list = hi->next;
2523 free (hi);
2524 }
2525
2526 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2527 input_section, output_bfd,
2528 error_message);
2529 }
2530
2531 /* A generic howto special_function. This calculates and installs the
2532 relocation itself, thus avoiding the oft-discussed problems in
2533 bfd_perform_relocation and bfd_install_relocation. */
2534
2535 bfd_reloc_status_type
2536 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2537 asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2538 asection *input_section, bfd *output_bfd,
2539 char **error_message ATTRIBUTE_UNUSED)
2540 {
2541 bfd_signed_vma val;
2542 bfd_reloc_status_type status;
2543 bfd_boolean relocatable;
2544
2545 relocatable = (output_bfd != NULL);
2546
2547 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2548 return bfd_reloc_outofrange;
2549
2550 /* Build up the field adjustment in VAL. */
2551 val = 0;
2552 if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2553 {
2554 /* Either we're calculating the final field value or we have a
2555 relocation against a section symbol. Add in the section's
2556 offset or address. */
2557 val += symbol->section->output_section->vma;
2558 val += symbol->section->output_offset;
2559 }
2560
2561 if (!relocatable)
2562 {
2563 /* We're calculating the final field value. Add in the symbol's value
2564 and, if pc-relative, subtract the address of the field itself. */
2565 val += symbol->value;
2566 if (reloc_entry->howto->pc_relative)
2567 {
2568 val -= input_section->output_section->vma;
2569 val -= input_section->output_offset;
2570 val -= reloc_entry->address;
2571 }
2572 }
2573
2574 /* VAL is now the final adjustment. If we're keeping this relocation
2575 in the output file, and if the relocation uses a separate addend,
2576 we just need to add VAL to that addend. Otherwise we need to add
2577 VAL to the relocation field itself. */
2578 if (relocatable && !reloc_entry->howto->partial_inplace)
2579 reloc_entry->addend += val;
2580 else
2581 {
2582 bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2583
2584 /* Add in the separate addend, if any. */
2585 val += reloc_entry->addend;
2586
2587 /* Add VAL to the relocation field. */
2588 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2589 location);
2590 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2591 location);
2592 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2593 location);
2594
2595 if (status != bfd_reloc_ok)
2596 return status;
2597 }
2598
2599 if (relocatable)
2600 reloc_entry->address += input_section->output_offset;
2601
2602 return bfd_reloc_ok;
2603 }
2604 \f
2605 /* Swap an entry in a .gptab section. Note that these routines rely
2606 on the equivalence of the two elements of the union. */
2607
2608 static void
2609 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2610 Elf32_gptab *in)
2611 {
2612 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2613 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2614 }
2615
2616 static void
2617 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2618 Elf32_External_gptab *ex)
2619 {
2620 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2621 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2622 }
2623
2624 static void
2625 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2626 Elf32_External_compact_rel *ex)
2627 {
2628 H_PUT_32 (abfd, in->id1, ex->id1);
2629 H_PUT_32 (abfd, in->num, ex->num);
2630 H_PUT_32 (abfd, in->id2, ex->id2);
2631 H_PUT_32 (abfd, in->offset, ex->offset);
2632 H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2633 H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2634 }
2635
2636 static void
2637 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2638 Elf32_External_crinfo *ex)
2639 {
2640 unsigned long l;
2641
2642 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2643 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2644 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2645 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2646 H_PUT_32 (abfd, l, ex->info);
2647 H_PUT_32 (abfd, in->konst, ex->konst);
2648 H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2649 }
2650 \f
2651 /* A .reginfo section holds a single Elf32_RegInfo structure. These
2652 routines swap this structure in and out. They are used outside of
2653 BFD, so they are globally visible. */
2654
2655 void
2656 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2657 Elf32_RegInfo *in)
2658 {
2659 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2660 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2661 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2662 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2663 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2664 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2665 }
2666
2667 void
2668 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2669 Elf32_External_RegInfo *ex)
2670 {
2671 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2672 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2673 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2674 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2675 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2676 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2677 }
2678
2679 /* In the 64 bit ABI, the .MIPS.options section holds register
2680 information in an Elf64_Reginfo structure. These routines swap
2681 them in and out. They are globally visible because they are used
2682 outside of BFD. These routines are here so that gas can call them
2683 without worrying about whether the 64 bit ABI has been included. */
2684
2685 void
2686 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2687 Elf64_Internal_RegInfo *in)
2688 {
2689 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2690 in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2691 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2692 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2693 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2694 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2695 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2696 }
2697
2698 void
2699 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2700 Elf64_External_RegInfo *ex)
2701 {
2702 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2703 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2704 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2705 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2706 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2707 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2708 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2709 }
2710
2711 /* Swap in an options header. */
2712
2713 void
2714 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2715 Elf_Internal_Options *in)
2716 {
2717 in->kind = H_GET_8 (abfd, ex->kind);
2718 in->size = H_GET_8 (abfd, ex->size);
2719 in->section = H_GET_16 (abfd, ex->section);
2720 in->info = H_GET_32 (abfd, ex->info);
2721 }
2722
2723 /* Swap out an options header. */
2724
2725 void
2726 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2727 Elf_External_Options *ex)
2728 {
2729 H_PUT_8 (abfd, in->kind, ex->kind);
2730 H_PUT_8 (abfd, in->size, ex->size);
2731 H_PUT_16 (abfd, in->section, ex->section);
2732 H_PUT_32 (abfd, in->info, ex->info);
2733 }
2734
2735 /* Swap in an abiflags structure. */
2736
2737 void
2738 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2739 const Elf_External_ABIFlags_v0 *ex,
2740 Elf_Internal_ABIFlags_v0 *in)
2741 {
2742 in->version = H_GET_16 (abfd, ex->version);
2743 in->isa_level = H_GET_8 (abfd, ex->isa_level);
2744 in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2745 in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2746 in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2747 in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2748 in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2749 in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2750 in->ases = H_GET_32 (abfd, ex->ases);
2751 in->flags1 = H_GET_32 (abfd, ex->flags1);
2752 in->flags2 = H_GET_32 (abfd, ex->flags2);
2753 }
2754
2755 /* Swap out an abiflags structure. */
2756
2757 void
2758 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2759 const Elf_Internal_ABIFlags_v0 *in,
2760 Elf_External_ABIFlags_v0 *ex)
2761 {
2762 H_PUT_16 (abfd, in->version, ex->version);
2763 H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2764 H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2765 H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2766 H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2767 H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2768 H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2769 H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2770 H_PUT_32 (abfd, in->ases, ex->ases);
2771 H_PUT_32 (abfd, in->flags1, ex->flags1);
2772 H_PUT_32 (abfd, in->flags2, ex->flags2);
2773 }
2774 \f
2775 /* This function is called via qsort() to sort the dynamic relocation
2776 entries by increasing r_symndx value. */
2777
2778 static int
2779 sort_dynamic_relocs (const void *arg1, const void *arg2)
2780 {
2781 Elf_Internal_Rela int_reloc1;
2782 Elf_Internal_Rela int_reloc2;
2783 int diff;
2784
2785 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2786 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2787
2788 diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2789 if (diff != 0)
2790 return diff;
2791
2792 if (int_reloc1.r_offset < int_reloc2.r_offset)
2793 return -1;
2794 if (int_reloc1.r_offset > int_reloc2.r_offset)
2795 return 1;
2796 return 0;
2797 }
2798
2799 /* Like sort_dynamic_relocs, but used for elf64 relocations. */
2800
2801 static int
2802 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2803 const void *arg2 ATTRIBUTE_UNUSED)
2804 {
2805 #ifdef BFD64
2806 Elf_Internal_Rela int_reloc1[3];
2807 Elf_Internal_Rela int_reloc2[3];
2808
2809 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2810 (reldyn_sorting_bfd, arg1, int_reloc1);
2811 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2812 (reldyn_sorting_bfd, arg2, int_reloc2);
2813
2814 if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2815 return -1;
2816 if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2817 return 1;
2818
2819 if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2820 return -1;
2821 if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2822 return 1;
2823 return 0;
2824 #else
2825 abort ();
2826 #endif
2827 }
2828
2829
2830 /* This routine is used to write out ECOFF debugging external symbol
2831 information. It is called via mips_elf_link_hash_traverse. The
2832 ECOFF external symbol information must match the ELF external
2833 symbol information. Unfortunately, at this point we don't know
2834 whether a symbol is required by reloc information, so the two
2835 tables may wind up being different. We must sort out the external
2836 symbol information before we can set the final size of the .mdebug
2837 section, and we must set the size of the .mdebug section before we
2838 can relocate any sections, and we can't know which symbols are
2839 required by relocation until we relocate the sections.
2840 Fortunately, it is relatively unlikely that any symbol will be
2841 stripped but required by a reloc. In particular, it can not happen
2842 when generating a final executable. */
2843
2844 static bfd_boolean
2845 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2846 {
2847 struct extsym_info *einfo = data;
2848 bfd_boolean strip;
2849 asection *sec, *output_section;
2850
2851 if (h->root.indx == -2)
2852 strip = FALSE;
2853 else if ((h->root.def_dynamic
2854 || h->root.ref_dynamic
2855 || h->root.type == bfd_link_hash_new)
2856 && !h->root.def_regular
2857 && !h->root.ref_regular)
2858 strip = TRUE;
2859 else if (einfo->info->strip == strip_all
2860 || (einfo->info->strip == strip_some
2861 && bfd_hash_lookup (einfo->info->keep_hash,
2862 h->root.root.root.string,
2863 FALSE, FALSE) == NULL))
2864 strip = TRUE;
2865 else
2866 strip = FALSE;
2867
2868 if (strip)
2869 return TRUE;
2870
2871 if (h->esym.ifd == -2)
2872 {
2873 h->esym.jmptbl = 0;
2874 h->esym.cobol_main = 0;
2875 h->esym.weakext = 0;
2876 h->esym.reserved = 0;
2877 h->esym.ifd = ifdNil;
2878 h->esym.asym.value = 0;
2879 h->esym.asym.st = stGlobal;
2880
2881 if (h->root.root.type == bfd_link_hash_undefined
2882 || h->root.root.type == bfd_link_hash_undefweak)
2883 {
2884 const char *name;
2885
2886 /* Use undefined class. Also, set class and type for some
2887 special symbols. */
2888 name = h->root.root.root.string;
2889 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2890 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2891 {
2892 h->esym.asym.sc = scData;
2893 h->esym.asym.st = stLabel;
2894 h->esym.asym.value = 0;
2895 }
2896 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2897 {
2898 h->esym.asym.sc = scAbs;
2899 h->esym.asym.st = stLabel;
2900 h->esym.asym.value =
2901 mips_elf_hash_table (einfo->info)->procedure_count;
2902 }
2903 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2904 {
2905 h->esym.asym.sc = scAbs;
2906 h->esym.asym.st = stLabel;
2907 h->esym.asym.value = elf_gp (einfo->abfd);
2908 }
2909 else
2910 h->esym.asym.sc = scUndefined;
2911 }
2912 else if (h->root.root.type != bfd_link_hash_defined
2913 && h->root.root.type != bfd_link_hash_defweak)
2914 h->esym.asym.sc = scAbs;
2915 else
2916 {
2917 const char *name;
2918
2919 sec = h->root.root.u.def.section;
2920 output_section = sec->output_section;
2921
2922 /* When making a shared library and symbol h is the one from
2923 the another shared library, OUTPUT_SECTION may be null. */
2924 if (output_section == NULL)
2925 h->esym.asym.sc = scUndefined;
2926 else
2927 {
2928 name = bfd_section_name (output_section->owner, output_section);
2929
2930 if (strcmp (name, ".text") == 0)
2931 h->esym.asym.sc = scText;
2932 else if (strcmp (name, ".data") == 0)
2933 h->esym.asym.sc = scData;
2934 else if (strcmp (name, ".sdata") == 0)
2935 h->esym.asym.sc = scSData;
2936 else if (strcmp (name, ".rodata") == 0
2937 || strcmp (name, ".rdata") == 0)
2938 h->esym.asym.sc = scRData;
2939 else if (strcmp (name, ".bss") == 0)
2940 h->esym.asym.sc = scBss;
2941 else if (strcmp (name, ".sbss") == 0)
2942 h->esym.asym.sc = scSBss;
2943 else if (strcmp (name, ".init") == 0)
2944 h->esym.asym.sc = scInit;
2945 else if (strcmp (name, ".fini") == 0)
2946 h->esym.asym.sc = scFini;
2947 else
2948 h->esym.asym.sc = scAbs;
2949 }
2950 }
2951
2952 h->esym.asym.reserved = 0;
2953 h->esym.asym.index = indexNil;
2954 }
2955
2956 if (h->root.root.type == bfd_link_hash_common)
2957 h->esym.asym.value = h->root.root.u.c.size;
2958 else if (h->root.root.type == bfd_link_hash_defined
2959 || h->root.root.type == bfd_link_hash_defweak)
2960 {
2961 if (h->esym.asym.sc == scCommon)
2962 h->esym.asym.sc = scBss;
2963 else if (h->esym.asym.sc == scSCommon)
2964 h->esym.asym.sc = scSBss;
2965
2966 sec = h->root.root.u.def.section;
2967 output_section = sec->output_section;
2968 if (output_section != NULL)
2969 h->esym.asym.value = (h->root.root.u.def.value
2970 + sec->output_offset
2971 + output_section->vma);
2972 else
2973 h->esym.asym.value = 0;
2974 }
2975 else
2976 {
2977 struct mips_elf_link_hash_entry *hd = h;
2978
2979 while (hd->root.root.type == bfd_link_hash_indirect)
2980 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2981
2982 if (hd->needs_lazy_stub)
2983 {
2984 BFD_ASSERT (hd->root.plt.plist != NULL);
2985 BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
2986 /* Set type and value for a symbol with a function stub. */
2987 h->esym.asym.st = stProc;
2988 sec = hd->root.root.u.def.section;
2989 if (sec == NULL)
2990 h->esym.asym.value = 0;
2991 else
2992 {
2993 output_section = sec->output_section;
2994 if (output_section != NULL)
2995 h->esym.asym.value = (hd->root.plt.plist->stub_offset
2996 + sec->output_offset
2997 + output_section->vma);
2998 else
2999 h->esym.asym.value = 0;
3000 }
3001 }
3002 }
3003
3004 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
3005 h->root.root.root.string,
3006 &h->esym))
3007 {
3008 einfo->failed = TRUE;
3009 return FALSE;
3010 }
3011
3012 return TRUE;
3013 }
3014
3015 /* A comparison routine used to sort .gptab entries. */
3016
3017 static int
3018 gptab_compare (const void *p1, const void *p2)
3019 {
3020 const Elf32_gptab *a1 = p1;
3021 const Elf32_gptab *a2 = p2;
3022
3023 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
3024 }
3025 \f
3026 /* Functions to manage the got entry hash table. */
3027
3028 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3029 hash number. */
3030
3031 static INLINE hashval_t
3032 mips_elf_hash_bfd_vma (bfd_vma addr)
3033 {
3034 #ifdef BFD64
3035 return addr + (addr >> 32);
3036 #else
3037 return addr;
3038 #endif
3039 }
3040
3041 static hashval_t
3042 mips_elf_got_entry_hash (const void *entry_)
3043 {
3044 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3045
3046 return (entry->symndx
3047 + ((entry->tls_type == GOT_TLS_LDM) << 18)
3048 + (entry->tls_type == GOT_TLS_LDM ? 0
3049 : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3050 : entry->symndx >= 0 ? (entry->abfd->id
3051 + mips_elf_hash_bfd_vma (entry->d.addend))
3052 : entry->d.h->root.root.root.hash));
3053 }
3054
3055 static int
3056 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3057 {
3058 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3059 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3060
3061 return (e1->symndx == e2->symndx
3062 && e1->tls_type == e2->tls_type
3063 && (e1->tls_type == GOT_TLS_LDM ? TRUE
3064 : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3065 : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3066 && e1->d.addend == e2->d.addend)
3067 : e2->abfd && e1->d.h == e2->d.h));
3068 }
3069
3070 static hashval_t
3071 mips_got_page_ref_hash (const void *ref_)
3072 {
3073 const struct mips_got_page_ref *ref;
3074
3075 ref = (const struct mips_got_page_ref *) ref_;
3076 return ((ref->symndx >= 0
3077 ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3078 : ref->u.h->root.root.root.hash)
3079 + mips_elf_hash_bfd_vma (ref->addend));
3080 }
3081
3082 static int
3083 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3084 {
3085 const struct mips_got_page_ref *ref1, *ref2;
3086
3087 ref1 = (const struct mips_got_page_ref *) ref1_;
3088 ref2 = (const struct mips_got_page_ref *) ref2_;
3089 return (ref1->symndx == ref2->symndx
3090 && (ref1->symndx < 0
3091 ? ref1->u.h == ref2->u.h
3092 : ref1->u.abfd == ref2->u.abfd)
3093 && ref1->addend == ref2->addend);
3094 }
3095
3096 static hashval_t
3097 mips_got_page_entry_hash (const void *entry_)
3098 {
3099 const struct mips_got_page_entry *entry;
3100
3101 entry = (const struct mips_got_page_entry *) entry_;
3102 return entry->sec->id;
3103 }
3104
3105 static int
3106 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3107 {
3108 const struct mips_got_page_entry *entry1, *entry2;
3109
3110 entry1 = (const struct mips_got_page_entry *) entry1_;
3111 entry2 = (const struct mips_got_page_entry *) entry2_;
3112 return entry1->sec == entry2->sec;
3113 }
3114 \f
3115 /* Create and return a new mips_got_info structure. */
3116
3117 static struct mips_got_info *
3118 mips_elf_create_got_info (bfd *abfd)
3119 {
3120 struct mips_got_info *g;
3121
3122 g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3123 if (g == NULL)
3124 return NULL;
3125
3126 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3127 mips_elf_got_entry_eq, NULL);
3128 if (g->got_entries == NULL)
3129 return NULL;
3130
3131 g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3132 mips_got_page_ref_eq, NULL);
3133 if (g->got_page_refs == NULL)
3134 return NULL;
3135
3136 return g;
3137 }
3138
3139 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3140 CREATE_P and if ABFD doesn't already have a GOT. */
3141
3142 static struct mips_got_info *
3143 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3144 {
3145 struct mips_elf_obj_tdata *tdata;
3146
3147 if (!is_mips_elf (abfd))
3148 return NULL;
3149
3150 tdata = mips_elf_tdata (abfd);
3151 if (!tdata->got && create_p)
3152 tdata->got = mips_elf_create_got_info (abfd);
3153 return tdata->got;
3154 }
3155
3156 /* Record that ABFD should use output GOT G. */
3157
3158 static void
3159 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3160 {
3161 struct mips_elf_obj_tdata *tdata;
3162
3163 BFD_ASSERT (is_mips_elf (abfd));
3164 tdata = mips_elf_tdata (abfd);
3165 if (tdata->got)
3166 {
3167 /* The GOT structure itself and the hash table entries are
3168 allocated to a bfd, but the hash tables aren't. */
3169 htab_delete (tdata->got->got_entries);
3170 htab_delete (tdata->got->got_page_refs);
3171 if (tdata->got->got_page_entries)
3172 htab_delete (tdata->got->got_page_entries);
3173 }
3174 tdata->got = g;
3175 }
3176
3177 /* Return the dynamic relocation section. If it doesn't exist, try to
3178 create a new it if CREATE_P, otherwise return NULL. Also return NULL
3179 if creation fails. */
3180
3181 static asection *
3182 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3183 {
3184 const char *dname;
3185 asection *sreloc;
3186 bfd *dynobj;
3187
3188 dname = MIPS_ELF_REL_DYN_NAME (info);
3189 dynobj = elf_hash_table (info)->dynobj;
3190 sreloc = bfd_get_linker_section (dynobj, dname);
3191 if (sreloc == NULL && create_p)
3192 {
3193 sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3194 (SEC_ALLOC
3195 | SEC_LOAD
3196 | SEC_HAS_CONTENTS
3197 | SEC_IN_MEMORY
3198 | SEC_LINKER_CREATED
3199 | SEC_READONLY));
3200 if (sreloc == NULL
3201 || ! bfd_set_section_alignment (dynobj, sreloc,
3202 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3203 return NULL;
3204 }
3205 return sreloc;
3206 }
3207
3208 /* Return the GOT_TLS_* type required by relocation type R_TYPE. */
3209
3210 static int
3211 mips_elf_reloc_tls_type (unsigned int r_type)
3212 {
3213 if (tls_gd_reloc_p (r_type))
3214 return GOT_TLS_GD;
3215
3216 if (tls_ldm_reloc_p (r_type))
3217 return GOT_TLS_LDM;
3218
3219 if (tls_gottprel_reloc_p (r_type))
3220 return GOT_TLS_IE;
3221
3222 return GOT_TLS_NONE;
3223 }
3224
3225 /* Return the number of GOT slots needed for GOT TLS type TYPE. */
3226
3227 static int
3228 mips_tls_got_entries (unsigned int type)
3229 {
3230 switch (type)
3231 {
3232 case GOT_TLS_GD:
3233 case GOT_TLS_LDM:
3234 return 2;
3235
3236 case GOT_TLS_IE:
3237 return 1;
3238
3239 case GOT_TLS_NONE:
3240 return 0;
3241 }
3242 abort ();
3243 }
3244
3245 /* Count the number of relocations needed for a TLS GOT entry, with
3246 access types from TLS_TYPE, and symbol H (or a local symbol if H
3247 is NULL). */
3248
3249 static int
3250 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3251 struct elf_link_hash_entry *h)
3252 {
3253 int indx = 0;
3254 bfd_boolean need_relocs = FALSE;
3255 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3256
3257 if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3258 && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3259 indx = h->dynindx;
3260
3261 if ((bfd_link_pic (info) || indx != 0)
3262 && (h == NULL
3263 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3264 || h->root.type != bfd_link_hash_undefweak))
3265 need_relocs = TRUE;
3266
3267 if (!need_relocs)
3268 return 0;
3269
3270 switch (tls_type)
3271 {
3272 case GOT_TLS_GD:
3273 return indx != 0 ? 2 : 1;
3274
3275 case GOT_TLS_IE:
3276 return 1;
3277
3278 case GOT_TLS_LDM:
3279 return bfd_link_pic (info) ? 1 : 0;
3280
3281 default:
3282 return 0;
3283 }
3284 }
3285
3286 /* Add the number of GOT entries and TLS relocations required by ENTRY
3287 to G. */
3288
3289 static void
3290 mips_elf_count_got_entry (struct bfd_link_info *info,
3291 struct mips_got_info *g,
3292 struct mips_got_entry *entry)
3293 {
3294 if (entry->tls_type)
3295 {
3296 g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3297 g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3298 entry->symndx < 0
3299 ? &entry->d.h->root : NULL);
3300 }
3301 else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3302 g->local_gotno += 1;
3303 else
3304 g->global_gotno += 1;
3305 }
3306
3307 /* Output a simple dynamic relocation into SRELOC. */
3308
3309 static void
3310 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3311 asection *sreloc,
3312 unsigned long reloc_index,
3313 unsigned long indx,
3314 int r_type,
3315 bfd_vma offset)
3316 {
3317 Elf_Internal_Rela rel[3];
3318
3319 memset (rel, 0, sizeof (rel));
3320
3321 rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3322 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3323
3324 if (ABI_64_P (output_bfd))
3325 {
3326 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3327 (output_bfd, &rel[0],
3328 (sreloc->contents
3329 + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3330 }
3331 else
3332 bfd_elf32_swap_reloc_out
3333 (output_bfd, &rel[0],
3334 (sreloc->contents
3335 + reloc_index * sizeof (Elf32_External_Rel)));
3336 }
3337
3338 /* Initialize a set of TLS GOT entries for one symbol. */
3339
3340 static void
3341 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3342 struct mips_got_entry *entry,
3343 struct mips_elf_link_hash_entry *h,
3344 bfd_vma value)
3345 {
3346 struct mips_elf_link_hash_table *htab;
3347 int indx;
3348 asection *sreloc, *sgot;
3349 bfd_vma got_offset, got_offset2;
3350 bfd_boolean need_relocs = FALSE;
3351
3352 htab = mips_elf_hash_table (info);
3353 if (htab == NULL)
3354 return;
3355
3356 sgot = htab->sgot;
3357
3358 indx = 0;
3359 if (h != NULL)
3360 {
3361 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3362
3363 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
3364 &h->root)
3365 && (!bfd_link_pic (info)
3366 || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3367 indx = h->root.dynindx;
3368 }
3369
3370 if (entry->tls_initialized)
3371 return;
3372
3373 if ((bfd_link_pic (info) || indx != 0)
3374 && (h == NULL
3375 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3376 || h->root.type != bfd_link_hash_undefweak))
3377 need_relocs = TRUE;
3378
3379 /* MINUS_ONE means the symbol is not defined in this object. It may not
3380 be defined at all; assume that the value doesn't matter in that
3381 case. Otherwise complain if we would use the value. */
3382 BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3383 || h->root.root.type == bfd_link_hash_undefweak);
3384
3385 /* Emit necessary relocations. */
3386 sreloc = mips_elf_rel_dyn_section (info, FALSE);
3387 got_offset = entry->gotidx;
3388
3389 switch (entry->tls_type)
3390 {
3391 case GOT_TLS_GD:
3392 /* General Dynamic. */
3393 got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3394
3395 if (need_relocs)
3396 {
3397 mips_elf_output_dynamic_relocation
3398 (abfd, sreloc, sreloc->reloc_count++, indx,
3399 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3400 sgot->output_offset + sgot->output_section->vma + got_offset);
3401
3402 if (indx)
3403 mips_elf_output_dynamic_relocation
3404 (abfd, sreloc, sreloc->reloc_count++, indx,
3405 ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3406 sgot->output_offset + sgot->output_section->vma + got_offset2);
3407 else
3408 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3409 sgot->contents + got_offset2);
3410 }
3411 else
3412 {
3413 MIPS_ELF_PUT_WORD (abfd, 1,
3414 sgot->contents + got_offset);
3415 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3416 sgot->contents + got_offset2);
3417 }
3418 break;
3419
3420 case GOT_TLS_IE:
3421 /* Initial Exec model. */
3422 if (need_relocs)
3423 {
3424 if (indx == 0)
3425 MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3426 sgot->contents + got_offset);
3427 else
3428 MIPS_ELF_PUT_WORD (abfd, 0,
3429 sgot->contents + got_offset);
3430
3431 mips_elf_output_dynamic_relocation
3432 (abfd, sreloc, sreloc->reloc_count++, indx,
3433 ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3434 sgot->output_offset + sgot->output_section->vma + got_offset);
3435 }
3436 else
3437 MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3438 sgot->contents + got_offset);
3439 break;
3440
3441 case GOT_TLS_LDM:
3442 /* The initial offset is zero, and the LD offsets will include the
3443 bias by DTP_OFFSET. */
3444 MIPS_ELF_PUT_WORD (abfd, 0,
3445 sgot->contents + got_offset
3446 + MIPS_ELF_GOT_SIZE (abfd));
3447
3448 if (!bfd_link_pic (info))
3449 MIPS_ELF_PUT_WORD (abfd, 1,
3450 sgot->contents + got_offset);
3451 else
3452 mips_elf_output_dynamic_relocation
3453 (abfd, sreloc, sreloc->reloc_count++, indx,
3454 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3455 sgot->output_offset + sgot->output_section->vma + got_offset);
3456 break;
3457
3458 default:
3459 abort ();
3460 }
3461
3462 entry->tls_initialized = TRUE;
3463 }
3464
3465 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3466 for global symbol H. .got.plt comes before the GOT, so the offset
3467 will be negative. */
3468
3469 static bfd_vma
3470 mips_elf_gotplt_index (struct bfd_link_info *info,
3471 struct elf_link_hash_entry *h)
3472 {
3473 bfd_vma got_address, got_value;
3474 struct mips_elf_link_hash_table *htab;
3475
3476 htab = mips_elf_hash_table (info);
3477 BFD_ASSERT (htab != NULL);
3478
3479 BFD_ASSERT (h->plt.plist != NULL);
3480 BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3481
3482 /* Calculate the address of the associated .got.plt entry. */
3483 got_address = (htab->sgotplt->output_section->vma
3484 + htab->sgotplt->output_offset
3485 + (h->plt.plist->gotplt_index
3486 * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3487
3488 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
3489 got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3490 + htab->root.hgot->root.u.def.section->output_offset
3491 + htab->root.hgot->root.u.def.value);
3492
3493 return got_address - got_value;
3494 }
3495
3496 /* Return the GOT offset for address VALUE. If there is not yet a GOT
3497 entry for this value, create one. If R_SYMNDX refers to a TLS symbol,
3498 create a TLS GOT entry instead. Return -1 if no satisfactory GOT
3499 offset can be found. */
3500
3501 static bfd_vma
3502 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3503 bfd_vma value, unsigned long r_symndx,
3504 struct mips_elf_link_hash_entry *h, int r_type)
3505 {
3506 struct mips_elf_link_hash_table *htab;
3507 struct mips_got_entry *entry;
3508
3509 htab = mips_elf_hash_table (info);
3510 BFD_ASSERT (htab != NULL);
3511
3512 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3513 r_symndx, h, r_type);
3514 if (!entry)
3515 return MINUS_ONE;
3516
3517 if (entry->tls_type)
3518 mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3519 return entry->gotidx;
3520 }
3521
3522 /* Return the GOT index of global symbol H in the primary GOT. */
3523
3524 static bfd_vma
3525 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3526 struct elf_link_hash_entry *h)
3527 {
3528 struct mips_elf_link_hash_table *htab;
3529 long global_got_dynindx;
3530 struct mips_got_info *g;
3531 bfd_vma got_index;
3532
3533 htab = mips_elf_hash_table (info);
3534 BFD_ASSERT (htab != NULL);
3535
3536 global_got_dynindx = 0;
3537 if (htab->global_gotsym != NULL)
3538 global_got_dynindx = htab->global_gotsym->dynindx;
3539
3540 /* Once we determine the global GOT entry with the lowest dynamic
3541 symbol table index, we must put all dynamic symbols with greater
3542 indices into the primary GOT. That makes it easy to calculate the
3543 GOT offset. */
3544 BFD_ASSERT (h->dynindx >= global_got_dynindx);
3545 g = mips_elf_bfd_got (obfd, FALSE);
3546 got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3547 * MIPS_ELF_GOT_SIZE (obfd));
3548 BFD_ASSERT (got_index < htab->sgot->size);
3549
3550 return got_index;
3551 }
3552
3553 /* Return the GOT index for the global symbol indicated by H, which is
3554 referenced by a relocation of type R_TYPE in IBFD. */
3555
3556 static bfd_vma
3557 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3558 struct elf_link_hash_entry *h, int r_type)
3559 {
3560 struct mips_elf_link_hash_table *htab;
3561 struct mips_got_info *g;
3562 struct mips_got_entry lookup, *entry;
3563 bfd_vma gotidx;
3564
3565 htab = mips_elf_hash_table (info);
3566 BFD_ASSERT (htab != NULL);
3567
3568 g = mips_elf_bfd_got (ibfd, FALSE);
3569 BFD_ASSERT (g);
3570
3571 lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3572 if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3573 return mips_elf_primary_global_got_index (obfd, info, h);
3574
3575 lookup.abfd = ibfd;
3576 lookup.symndx = -1;
3577 lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3578 entry = htab_find (g->got_entries, &lookup);
3579 BFD_ASSERT (entry);
3580
3581 gotidx = entry->gotidx;
3582 BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3583
3584 if (lookup.tls_type)
3585 {
3586 bfd_vma value = MINUS_ONE;
3587
3588 if ((h->root.type == bfd_link_hash_defined
3589 || h->root.type == bfd_link_hash_defweak)
3590 && h->root.u.def.section->output_section)
3591 value = (h->root.u.def.value
3592 + h->root.u.def.section->output_offset
3593 + h->root.u.def.section->output_section->vma);
3594
3595 mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3596 }
3597 return gotidx;
3598 }
3599
3600 /* Find a GOT page entry that points to within 32KB of VALUE. These
3601 entries are supposed to be placed at small offsets in the GOT, i.e.,
3602 within 32KB of GP. Return the index of the GOT entry, or -1 if no
3603 entry could be created. If OFFSETP is nonnull, use it to return the
3604 offset of the GOT entry from VALUE. */
3605
3606 static bfd_vma
3607 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3608 bfd_vma value, bfd_vma *offsetp)
3609 {
3610 bfd_vma page, got_index;
3611 struct mips_got_entry *entry;
3612
3613 page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3614 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3615 NULL, R_MIPS_GOT_PAGE);
3616
3617 if (!entry)
3618 return MINUS_ONE;
3619
3620 got_index = entry->gotidx;
3621
3622 if (offsetp)
3623 *offsetp = value - entry->d.address;
3624
3625 return got_index;
3626 }
3627
3628 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3629 EXTERNAL is true if the relocation was originally against a global
3630 symbol that binds locally. */
3631
3632 static bfd_vma
3633 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3634 bfd_vma value, bfd_boolean external)
3635 {
3636 struct mips_got_entry *entry;
3637
3638 /* GOT16 relocations against local symbols are followed by a LO16
3639 relocation; those against global symbols are not. Thus if the
3640 symbol was originally local, the GOT16 relocation should load the
3641 equivalent of %hi(VALUE), otherwise it should load VALUE itself. */
3642 if (! external)
3643 value = mips_elf_high (value) << 16;
3644
3645 /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3646 R_MIPS16_GOT16, R_MIPS_CALL16, etc. The format of the entry is the
3647 same in all cases. */
3648 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3649 NULL, R_MIPS_GOT16);
3650 if (entry)
3651 return entry->gotidx;
3652 else
3653 return MINUS_ONE;
3654 }
3655
3656 /* Returns the offset for the entry at the INDEXth position
3657 in the GOT. */
3658
3659 static bfd_vma
3660 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3661 bfd *input_bfd, bfd_vma got_index)
3662 {
3663 struct mips_elf_link_hash_table *htab;
3664 asection *sgot;
3665 bfd_vma gp;
3666
3667 htab = mips_elf_hash_table (info);
3668 BFD_ASSERT (htab != NULL);
3669
3670 sgot = htab->sgot;
3671 gp = _bfd_get_gp_value (output_bfd)
3672 + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3673
3674 return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3675 }
3676
3677 /* Create and return a local GOT entry for VALUE, which was calculated
3678 from a symbol belonging to INPUT_SECTON. Return NULL if it could not
3679 be created. If R_SYMNDX refers to a TLS symbol, create a TLS entry
3680 instead. */
3681
3682 static struct mips_got_entry *
3683 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3684 bfd *ibfd, bfd_vma value,
3685 unsigned long r_symndx,
3686 struct mips_elf_link_hash_entry *h,
3687 int r_type)
3688 {
3689 struct mips_got_entry lookup, *entry;
3690 void **loc;
3691 struct mips_got_info *g;
3692 struct mips_elf_link_hash_table *htab;
3693 bfd_vma gotidx;
3694
3695 htab = mips_elf_hash_table (info);
3696 BFD_ASSERT (htab != NULL);
3697
3698 g = mips_elf_bfd_got (ibfd, FALSE);
3699 if (g == NULL)
3700 {
3701 g = mips_elf_bfd_got (abfd, FALSE);
3702 BFD_ASSERT (g != NULL);
3703 }
3704
3705 /* This function shouldn't be called for symbols that live in the global
3706 area of the GOT. */
3707 BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3708
3709 lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3710 if (lookup.tls_type)
3711 {
3712 lookup.abfd = ibfd;
3713 if (tls_ldm_reloc_p (r_type))
3714 {
3715 lookup.symndx = 0;
3716 lookup.d.addend = 0;
3717 }
3718 else if (h == NULL)
3719 {
3720 lookup.symndx = r_symndx;
3721 lookup.d.addend = 0;
3722 }
3723 else
3724 {
3725 lookup.symndx = -1;
3726 lookup.d.h = h;
3727 }
3728
3729 entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3730 BFD_ASSERT (entry);
3731
3732 gotidx = entry->gotidx;
3733 BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3734
3735 return entry;
3736 }
3737
3738 lookup.abfd = NULL;
3739 lookup.symndx = -1;
3740 lookup.d.address = value;
3741 loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3742 if (!loc)
3743 return NULL;
3744
3745 entry = (struct mips_got_entry *) *loc;
3746 if (entry)
3747 return entry;
3748
3749 if (g->assigned_low_gotno > g->assigned_high_gotno)
3750 {
3751 /* We didn't allocate enough space in the GOT. */
3752 (*_bfd_error_handler)
3753 (_("not enough GOT space for local GOT entries"));
3754 bfd_set_error (bfd_error_bad_value);
3755 return NULL;
3756 }
3757
3758 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3759 if (!entry)
3760 return NULL;
3761
3762 if (got16_reloc_p (r_type)
3763 || call16_reloc_p (r_type)
3764 || got_page_reloc_p (r_type)
3765 || got_disp_reloc_p (r_type))
3766 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3767 else
3768 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3769
3770 *entry = lookup;
3771 *loc = entry;
3772
3773 MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3774
3775 /* These GOT entries need a dynamic relocation on VxWorks. */
3776 if (htab->is_vxworks)
3777 {
3778 Elf_Internal_Rela outrel;
3779 asection *s;
3780 bfd_byte *rloc;
3781 bfd_vma got_address;
3782
3783 s = mips_elf_rel_dyn_section (info, FALSE);
3784 got_address = (htab->sgot->output_section->vma
3785 + htab->sgot->output_offset
3786 + entry->gotidx);
3787
3788 rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3789 outrel.r_offset = got_address;
3790 outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3791 outrel.r_addend = value;
3792 bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3793 }
3794
3795 return entry;
3796 }
3797
3798 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3799 The number might be exact or a worst-case estimate, depending on how
3800 much information is available to elf_backend_omit_section_dynsym at
3801 the current linking stage. */
3802
3803 static bfd_size_type
3804 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3805 {
3806 bfd_size_type count;
3807
3808 count = 0;
3809 if (bfd_link_pic (info)
3810 || elf_hash_table (info)->is_relocatable_executable)
3811 {
3812 asection *p;
3813 const struct elf_backend_data *bed;
3814
3815 bed = get_elf_backend_data (output_bfd);
3816 for (p = output_bfd->sections; p ; p = p->next)
3817 if ((p->flags & SEC_EXCLUDE) == 0
3818 && (p->flags & SEC_ALLOC) != 0
3819 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3820 ++count;
3821 }
3822 return count;
3823 }
3824
3825 /* Sort the dynamic symbol table so that symbols that need GOT entries
3826 appear towards the end. */
3827
3828 static bfd_boolean
3829 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3830 {
3831 struct mips_elf_link_hash_table *htab;
3832 struct mips_elf_hash_sort_data hsd;
3833 struct mips_got_info *g;
3834
3835 if (elf_hash_table (info)->dynsymcount == 0)
3836 return TRUE;
3837
3838 htab = mips_elf_hash_table (info);
3839 BFD_ASSERT (htab != NULL);
3840
3841 g = htab->got_info;
3842 if (g == NULL)
3843 return TRUE;
3844
3845 hsd.low = NULL;
3846 hsd.max_unref_got_dynindx
3847 = hsd.min_got_dynindx
3848 = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3849 hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3850 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3851 elf_hash_table (info)),
3852 mips_elf_sort_hash_table_f,
3853 &hsd);
3854
3855 /* There should have been enough room in the symbol table to
3856 accommodate both the GOT and non-GOT symbols. */
3857 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3858 BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3859 == elf_hash_table (info)->dynsymcount);
3860 BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3861 == g->global_gotno);
3862
3863 /* Now we know which dynamic symbol has the lowest dynamic symbol
3864 table index in the GOT. */
3865 htab->global_gotsym = hsd.low;
3866
3867 return TRUE;
3868 }
3869
3870 /* If H needs a GOT entry, assign it the highest available dynamic
3871 index. Otherwise, assign it the lowest available dynamic
3872 index. */
3873
3874 static bfd_boolean
3875 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3876 {
3877 struct mips_elf_hash_sort_data *hsd = data;
3878
3879 /* Symbols without dynamic symbol table entries aren't interesting
3880 at all. */
3881 if (h->root.dynindx == -1)
3882 return TRUE;
3883
3884 switch (h->global_got_area)
3885 {
3886 case GGA_NONE:
3887 h->root.dynindx = hsd->max_non_got_dynindx++;
3888 break;
3889
3890 case GGA_NORMAL:
3891 h->root.dynindx = --hsd->min_got_dynindx;
3892 hsd->low = (struct elf_link_hash_entry *) h;
3893 break;
3894
3895 case GGA_RELOC_ONLY:
3896 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3897 hsd->low = (struct elf_link_hash_entry *) h;
3898 h->root.dynindx = hsd->max_unref_got_dynindx++;
3899 break;
3900 }
3901
3902 return TRUE;
3903 }
3904
3905 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3906 (which is owned by the caller and shouldn't be added to the
3907 hash table directly). */
3908
3909 static bfd_boolean
3910 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3911 struct mips_got_entry *lookup)
3912 {
3913 struct mips_elf_link_hash_table *htab;
3914 struct mips_got_entry *entry;
3915 struct mips_got_info *g;
3916 void **loc, **bfd_loc;
3917
3918 /* Make sure there's a slot for this entry in the master GOT. */
3919 htab = mips_elf_hash_table (info);
3920 g = htab->got_info;
3921 loc = htab_find_slot (g->got_entries, lookup, INSERT);
3922 if (!loc)
3923 return FALSE;
3924
3925 /* Populate the entry if it isn't already. */
3926 entry = (struct mips_got_entry *) *loc;
3927 if (!entry)
3928 {
3929 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3930 if (!entry)
3931 return FALSE;
3932
3933 lookup->tls_initialized = FALSE;
3934 lookup->gotidx = -1;
3935 *entry = *lookup;
3936 *loc = entry;
3937 }
3938
3939 /* Reuse the same GOT entry for the BFD's GOT. */
3940 g = mips_elf_bfd_got (abfd, TRUE);
3941 if (!g)
3942 return FALSE;
3943
3944 bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3945 if (!bfd_loc)
3946 return FALSE;
3947
3948 if (!*bfd_loc)
3949 *bfd_loc = entry;
3950 return TRUE;
3951 }
3952
3953 /* ABFD has a GOT relocation of type R_TYPE against H. Reserve a GOT
3954 entry for it. FOR_CALL is true if the caller is only interested in
3955 using the GOT entry for calls. */
3956
3957 static bfd_boolean
3958 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3959 bfd *abfd, struct bfd_link_info *info,
3960 bfd_boolean for_call, int r_type)
3961 {
3962 struct mips_elf_link_hash_table *htab;
3963 struct mips_elf_link_hash_entry *hmips;
3964 struct mips_got_entry entry;
3965 unsigned char tls_type;
3966
3967 htab = mips_elf_hash_table (info);
3968 BFD_ASSERT (htab != NULL);
3969
3970 hmips = (struct mips_elf_link_hash_entry *) h;
3971 if (!for_call)
3972 hmips->got_only_for_calls = FALSE;
3973
3974 /* A global symbol in the GOT must also be in the dynamic symbol
3975 table. */
3976 if (h->dynindx == -1)
3977 {
3978 switch (ELF_ST_VISIBILITY (h->other))
3979 {
3980 case STV_INTERNAL:
3981 case STV_HIDDEN:
3982 _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3983 break;
3984 }
3985 if (!bfd_elf_link_record_dynamic_symbol (info, h))
3986 return FALSE;
3987 }
3988
3989 tls_type = mips_elf_reloc_tls_type (r_type);
3990 if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3991 hmips->global_got_area = GGA_NORMAL;
3992
3993 entry.abfd = abfd;
3994 entry.symndx = -1;
3995 entry.d.h = (struct mips_elf_link_hash_entry *) h;
3996 entry.tls_type = tls_type;
3997 return mips_elf_record_got_entry (info, abfd, &entry);
3998 }
3999
4000 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
4001 where SYMNDX is a local symbol. Reserve a GOT entry for it. */
4002
4003 static bfd_boolean
4004 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
4005 struct bfd_link_info *info, int r_type)
4006 {
4007 struct mips_elf_link_hash_table *htab;
4008 struct mips_got_info *g;
4009 struct mips_got_entry entry;
4010
4011 htab = mips_elf_hash_table (info);
4012 BFD_ASSERT (htab != NULL);
4013
4014 g = htab->got_info;
4015 BFD_ASSERT (g != NULL);
4016
4017 entry.abfd = abfd;
4018 entry.symndx = symndx;
4019 entry.d.addend = addend;
4020 entry.tls_type = mips_elf_reloc_tls_type (r_type);
4021 return mips_elf_record_got_entry (info, abfd, &entry);
4022 }
4023
4024 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
4025 H is the symbol's hash table entry, or null if SYMNDX is local
4026 to ABFD. */
4027
4028 static bfd_boolean
4029 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4030 long symndx, struct elf_link_hash_entry *h,
4031 bfd_signed_vma addend)
4032 {
4033 struct mips_elf_link_hash_table *htab;
4034 struct mips_got_info *g1, *g2;
4035 struct mips_got_page_ref lookup, *entry;
4036 void **loc, **bfd_loc;
4037
4038 htab = mips_elf_hash_table (info);
4039 BFD_ASSERT (htab != NULL);
4040
4041 g1 = htab->got_info;
4042 BFD_ASSERT (g1 != NULL);
4043
4044 if (h)
4045 {
4046 lookup.symndx = -1;
4047 lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4048 }
4049 else
4050 {
4051 lookup.symndx = symndx;
4052 lookup.u.abfd = abfd;
4053 }
4054 lookup.addend = addend;
4055 loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4056 if (loc == NULL)
4057 return FALSE;
4058
4059 entry = (struct mips_got_page_ref *) *loc;
4060 if (!entry)
4061 {
4062 entry = bfd_alloc (abfd, sizeof (*entry));
4063 if (!entry)
4064 return FALSE;
4065
4066 *entry = lookup;
4067 *loc = entry;
4068 }
4069
4070 /* Add the same entry to the BFD's GOT. */
4071 g2 = mips_elf_bfd_got (abfd, TRUE);
4072 if (!g2)
4073 return FALSE;
4074
4075 bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4076 if (!bfd_loc)
4077 return FALSE;
4078
4079 if (!*bfd_loc)
4080 *bfd_loc = entry;
4081
4082 return TRUE;
4083 }
4084
4085 /* Add room for N relocations to the .rel(a).dyn section in ABFD. */
4086
4087 static void
4088 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4089 unsigned int n)
4090 {
4091 asection *s;
4092 struct mips_elf_link_hash_table *htab;
4093
4094 htab = mips_elf_hash_table (info);
4095 BFD_ASSERT (htab != NULL);
4096
4097 s = mips_elf_rel_dyn_section (info, FALSE);
4098 BFD_ASSERT (s != NULL);
4099
4100 if (htab->is_vxworks)
4101 s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4102 else
4103 {
4104 if (s->size == 0)
4105 {
4106 /* Make room for a null element. */
4107 s->size += MIPS_ELF_REL_SIZE (abfd);
4108 ++s->reloc_count;
4109 }
4110 s->size += n * MIPS_ELF_REL_SIZE (abfd);
4111 }
4112 }
4113 \f
4114 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4115 mips_elf_traverse_got_arg structure. Count the number of GOT
4116 entries and TLS relocs. Set DATA->value to true if we need
4117 to resolve indirect or warning symbols and then recreate the GOT. */
4118
4119 static int
4120 mips_elf_check_recreate_got (void **entryp, void *data)
4121 {
4122 struct mips_got_entry *entry;
4123 struct mips_elf_traverse_got_arg *arg;
4124
4125 entry = (struct mips_got_entry *) *entryp;
4126 arg = (struct mips_elf_traverse_got_arg *) data;
4127 if (entry->abfd != NULL && entry->symndx == -1)
4128 {
4129 struct mips_elf_link_hash_entry *h;
4130
4131 h = entry->d.h;
4132 if (h->root.root.type == bfd_link_hash_indirect
4133 || h->root.root.type == bfd_link_hash_warning)
4134 {
4135 arg->value = TRUE;
4136 return 0;
4137 }
4138 }
4139 mips_elf_count_got_entry (arg->info, arg->g, entry);
4140 return 1;
4141 }
4142
4143 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4144 mips_elf_traverse_got_arg structure. Add all entries to DATA->g,
4145 converting entries for indirect and warning symbols into entries
4146 for the target symbol. Set DATA->g to null on error. */
4147
4148 static int
4149 mips_elf_recreate_got (void **entryp, void *data)
4150 {
4151 struct mips_got_entry new_entry, *entry;
4152 struct mips_elf_traverse_got_arg *arg;
4153 void **slot;
4154
4155 entry = (struct mips_got_entry *) *entryp;
4156 arg = (struct mips_elf_traverse_got_arg *) data;
4157 if (entry->abfd != NULL
4158 && entry->symndx == -1
4159 && (entry->d.h->root.root.type == bfd_link_hash_indirect
4160 || entry->d.h->root.root.type == bfd_link_hash_warning))
4161 {
4162 struct mips_elf_link_hash_entry *h;
4163
4164 new_entry = *entry;
4165 entry = &new_entry;
4166 h = entry->d.h;
4167 do
4168 {
4169 BFD_ASSERT (h->global_got_area == GGA_NONE);
4170 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4171 }
4172 while (h->root.root.type == bfd_link_hash_indirect
4173 || h->root.root.type == bfd_link_hash_warning);
4174 entry->d.h = h;
4175 }
4176 slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4177 if (slot == NULL)
4178 {
4179 arg->g = NULL;
4180 return 0;
4181 }
4182 if (*slot == NULL)
4183 {
4184 if (entry == &new_entry)
4185 {
4186 entry = bfd_alloc (entry->abfd, sizeof (*entry));
4187 if (!entry)
4188 {
4189 arg->g = NULL;
4190 return 0;
4191 }
4192 *entry = new_entry;
4193 }
4194 *slot = entry;
4195 mips_elf_count_got_entry (arg->info, arg->g, entry);
4196 }
4197 return 1;
4198 }
4199
4200 /* Return the maximum number of GOT page entries required for RANGE. */
4201
4202 static bfd_vma
4203 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4204 {
4205 return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4206 }
4207
4208 /* Record that G requires a page entry that can reach SEC + ADDEND. */
4209
4210 static bfd_boolean
4211 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4212 asection *sec, bfd_signed_vma addend)
4213 {
4214 struct mips_got_info *g = arg->g;
4215 struct mips_got_page_entry lookup, *entry;
4216 struct mips_got_page_range **range_ptr, *range;
4217 bfd_vma old_pages, new_pages;
4218 void **loc;
4219
4220 /* Find the mips_got_page_entry hash table entry for this section. */
4221 lookup.sec = sec;
4222 loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4223 if (loc == NULL)
4224 return FALSE;
4225
4226 /* Create a mips_got_page_entry if this is the first time we've
4227 seen the section. */
4228 entry = (struct mips_got_page_entry *) *loc;
4229 if (!entry)
4230 {
4231 entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4232 if (!entry)
4233 return FALSE;
4234
4235 entry->sec = sec;
4236 *loc = entry;
4237 }
4238
4239 /* Skip over ranges whose maximum extent cannot share a page entry
4240 with ADDEND. */
4241 range_ptr = &entry->ranges;
4242 while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4243 range_ptr = &(*range_ptr)->next;
4244
4245 /* If we scanned to the end of the list, or found a range whose
4246 minimum extent cannot share a page entry with ADDEND, create
4247 a new singleton range. */
4248 range = *range_ptr;
4249 if (!range || addend < range->min_addend - 0xffff)
4250 {
4251 range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4252 if (!range)
4253 return FALSE;
4254
4255 range->next = *range_ptr;
4256 range->min_addend = addend;
4257 range->max_addend = addend;
4258
4259 *range_ptr = range;
4260 entry->num_pages++;
4261 g->page_gotno++;
4262 return TRUE;
4263 }
4264
4265 /* Remember how many pages the old range contributed. */
4266 old_pages = mips_elf_pages_for_range (range);
4267
4268 /* Update the ranges. */
4269 if (addend < range->min_addend)
4270 range->min_addend = addend;
4271 else if (addend > range->max_addend)
4272 {
4273 if (range->next && addend >= range->next->min_addend - 0xffff)
4274 {
4275 old_pages += mips_elf_pages_for_range (range->next);
4276 range->max_addend = range->next->max_addend;
4277 range->next = range->next->next;
4278 }
4279 else
4280 range->max_addend = addend;
4281 }
4282
4283 /* Record any change in the total estimate. */
4284 new_pages = mips_elf_pages_for_range (range);
4285 if (old_pages != new_pages)
4286 {
4287 entry->num_pages += new_pages - old_pages;
4288 g->page_gotno += new_pages - old_pages;
4289 }
4290
4291 return TRUE;
4292 }
4293
4294 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4295 and for which DATA points to a mips_elf_traverse_got_arg. Work out
4296 whether the page reference described by *REFP needs a GOT page entry,
4297 and record that entry in DATA->g if so. Set DATA->g to null on failure. */
4298
4299 static bfd_boolean
4300 mips_elf_resolve_got_page_ref (void **refp, void *data)
4301 {
4302 struct mips_got_page_ref *ref;
4303 struct mips_elf_traverse_got_arg *arg;
4304 struct mips_elf_link_hash_table *htab;
4305 asection *sec;
4306 bfd_vma addend;
4307
4308 ref = (struct mips_got_page_ref *) *refp;
4309 arg = (struct mips_elf_traverse_got_arg *) data;
4310 htab = mips_elf_hash_table (arg->info);
4311
4312 if (ref->symndx < 0)
4313 {
4314 struct mips_elf_link_hash_entry *h;
4315
4316 /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries. */
4317 h = ref->u.h;
4318 if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4319 return 1;
4320
4321 /* Ignore undefined symbols; we'll issue an error later if
4322 appropriate. */
4323 if (!((h->root.root.type == bfd_link_hash_defined
4324 || h->root.root.type == bfd_link_hash_defweak)
4325 && h->root.root.u.def.section))
4326 return 1;
4327
4328 sec = h->root.root.u.def.section;
4329 addend = h->root.root.u.def.value + ref->addend;
4330 }
4331 else
4332 {
4333 Elf_Internal_Sym *isym;
4334
4335 /* Read in the symbol. */
4336 isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4337 ref->symndx);
4338 if (isym == NULL)
4339 {
4340 arg->g = NULL;
4341 return 0;
4342 }
4343
4344 /* Get the associated input section. */
4345 sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4346 if (sec == NULL)
4347 {
4348 arg->g = NULL;
4349 return 0;
4350 }
4351
4352 /* If this is a mergable section, work out the section and offset
4353 of the merged data. For section symbols, the addend specifies
4354 of the offset _of_ the first byte in the data, otherwise it
4355 specifies the offset _from_ the first byte. */
4356 if (sec->flags & SEC_MERGE)
4357 {
4358 void *secinfo;
4359
4360 secinfo = elf_section_data (sec)->sec_info;
4361 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4362 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4363 isym->st_value + ref->addend);
4364 else
4365 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4366 isym->st_value) + ref->addend;
4367 }
4368 else
4369 addend = isym->st_value + ref->addend;
4370 }
4371 if (!mips_elf_record_got_page_entry (arg, sec, addend))
4372 {
4373 arg->g = NULL;
4374 return 0;
4375 }
4376 return 1;
4377 }
4378
4379 /* If any entries in G->got_entries are for indirect or warning symbols,
4380 replace them with entries for the target symbol. Convert g->got_page_refs
4381 into got_page_entry structures and estimate the number of page entries
4382 that they require. */
4383
4384 static bfd_boolean
4385 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4386 struct mips_got_info *g)
4387 {
4388 struct mips_elf_traverse_got_arg tga;
4389 struct mips_got_info oldg;
4390
4391 oldg = *g;
4392
4393 tga.info = info;
4394 tga.g = g;
4395 tga.value = FALSE;
4396 htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4397 if (tga.value)
4398 {
4399 *g = oldg;
4400 g->got_entries = htab_create (htab_size (oldg.got_entries),
4401 mips_elf_got_entry_hash,
4402 mips_elf_got_entry_eq, NULL);
4403 if (!g->got_entries)
4404 return FALSE;
4405
4406 htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4407 if (!tga.g)
4408 return FALSE;
4409
4410 htab_delete (oldg.got_entries);
4411 }
4412
4413 g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4414 mips_got_page_entry_eq, NULL);
4415 if (g->got_page_entries == NULL)
4416 return FALSE;
4417
4418 tga.info = info;
4419 tga.g = g;
4420 htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4421
4422 return TRUE;
4423 }
4424
4425 /* Return true if a GOT entry for H should live in the local rather than
4426 global GOT area. */
4427
4428 static bfd_boolean
4429 mips_use_local_got_p (struct bfd_link_info *info,
4430 struct mips_elf_link_hash_entry *h)
4431 {
4432 /* Symbols that aren't in the dynamic symbol table must live in the
4433 local GOT. This includes symbols that are completely undefined
4434 and which therefore don't bind locally. We'll report undefined
4435 symbols later if appropriate. */
4436 if (h->root.dynindx == -1)
4437 return TRUE;
4438
4439 /* Symbols that bind locally can (and in the case of forced-local
4440 symbols, must) live in the local GOT. */
4441 if (h->got_only_for_calls
4442 ? SYMBOL_CALLS_LOCAL (info, &h->root)
4443 : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4444 return TRUE;
4445
4446 /* If this is an executable that must provide a definition of the symbol,
4447 either though PLTs or copy relocations, then that address should go in
4448 the local rather than global GOT. */
4449 if (bfd_link_executable (info) && h->has_static_relocs)
4450 return TRUE;
4451
4452 return FALSE;
4453 }
4454
4455 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4456 link_info structure. Decide whether the hash entry needs an entry in
4457 the global part of the primary GOT, setting global_got_area accordingly.
4458 Count the number of global symbols that are in the primary GOT only
4459 because they have relocations against them (reloc_only_gotno). */
4460
4461 static int
4462 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4463 {
4464 struct bfd_link_info *info;
4465 struct mips_elf_link_hash_table *htab;
4466 struct mips_got_info *g;
4467
4468 info = (struct bfd_link_info *) data;
4469 htab = mips_elf_hash_table (info);
4470 g = htab->got_info;
4471 if (h->global_got_area != GGA_NONE)
4472 {
4473 /* Make a final decision about whether the symbol belongs in the
4474 local or global GOT. */
4475 if (mips_use_local_got_p (info, h))
4476 /* The symbol belongs in the local GOT. We no longer need this
4477 entry if it was only used for relocations; those relocations
4478 will be against the null or section symbol instead of H. */
4479 h->global_got_area = GGA_NONE;
4480 else if (htab->is_vxworks
4481 && h->got_only_for_calls
4482 && h->root.plt.plist->mips_offset != MINUS_ONE)
4483 /* On VxWorks, calls can refer directly to the .got.plt entry;
4484 they don't need entries in the regular GOT. .got.plt entries
4485 will be allocated by _bfd_mips_elf_adjust_dynamic_symbol. */
4486 h->global_got_area = GGA_NONE;
4487 else if (h->global_got_area == GGA_RELOC_ONLY)
4488 {
4489 g->reloc_only_gotno++;
4490 g->global_gotno++;
4491 }
4492 }
4493 return 1;
4494 }
4495 \f
4496 /* A htab_traverse callback for GOT entries. Add each one to the GOT
4497 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */
4498
4499 static int
4500 mips_elf_add_got_entry (void **entryp, void *data)
4501 {
4502 struct mips_got_entry *entry;
4503 struct mips_elf_traverse_got_arg *arg;
4504 void **slot;
4505
4506 entry = (struct mips_got_entry *) *entryp;
4507 arg = (struct mips_elf_traverse_got_arg *) data;
4508 slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4509 if (!slot)
4510 {
4511 arg->g = NULL;
4512 return 0;
4513 }
4514 if (!*slot)
4515 {
4516 *slot = entry;
4517 mips_elf_count_got_entry (arg->info, arg->g, entry);
4518 }
4519 return 1;
4520 }
4521
4522 /* A htab_traverse callback for GOT page entries. Add each one to the GOT
4523 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */
4524
4525 static int
4526 mips_elf_add_got_page_entry (void **entryp, void *data)
4527 {
4528 struct mips_got_page_entry *entry;
4529 struct mips_elf_traverse_got_arg *arg;
4530 void **slot;
4531
4532 entry = (struct mips_got_page_entry *) *entryp;
4533 arg = (struct mips_elf_traverse_got_arg *) data;
4534 slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4535 if (!slot)
4536 {
4537 arg->g = NULL;
4538 return 0;
4539 }
4540 if (!*slot)
4541 {
4542 *slot = entry;
4543 arg->g->page_gotno += entry->num_pages;
4544 }
4545 return 1;
4546 }
4547
4548 /* Consider merging FROM, which is ABFD's GOT, into TO. Return -1 if
4549 this would lead to overflow, 1 if they were merged successfully,
4550 and 0 if a merge failed due to lack of memory. (These values are chosen
4551 so that nonnegative return values can be returned by a htab_traverse
4552 callback.) */
4553
4554 static int
4555 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4556 struct mips_got_info *to,
4557 struct mips_elf_got_per_bfd_arg *arg)
4558 {
4559 struct mips_elf_traverse_got_arg tga;
4560 unsigned int estimate;
4561
4562 /* Work out how many page entries we would need for the combined GOT. */
4563 estimate = arg->max_pages;
4564 if (estimate >= from->page_gotno + to->page_gotno)
4565 estimate = from->page_gotno + to->page_gotno;
4566
4567 /* And conservatively estimate how many local and TLS entries
4568 would be needed. */
4569 estimate += from->local_gotno + to->local_gotno;
4570 estimate += from->tls_gotno + to->tls_gotno;
4571
4572 /* If we're merging with the primary got, any TLS relocations will
4573 come after the full set of global entries. Otherwise estimate those
4574 conservatively as well. */
4575 if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4576 estimate += arg->global_count;
4577 else
4578 estimate += from->global_gotno + to->global_gotno;
4579
4580 /* Bail out if the combined GOT might be too big. */
4581 if (estimate > arg->max_count)
4582 return -1;
4583
4584 /* Transfer the bfd's got information from FROM to TO. */
4585 tga.info = arg->info;
4586 tga.g = to;
4587 htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4588 if (!tga.g)
4589 return 0;
4590
4591 htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4592 if (!tga.g)
4593 return 0;
4594
4595 mips_elf_replace_bfd_got (abfd, to);
4596 return 1;
4597 }
4598
4599 /* Attempt to merge GOT G, which belongs to ABFD. Try to use as much
4600 as possible of the primary got, since it doesn't require explicit
4601 dynamic relocations, but don't use bfds that would reference global
4602 symbols out of the addressable range. Failing the primary got,
4603 attempt to merge with the current got, or finish the current got
4604 and then make make the new got current. */
4605
4606 static bfd_boolean
4607 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4608 struct mips_elf_got_per_bfd_arg *arg)
4609 {
4610 unsigned int estimate;
4611 int result;
4612
4613 if (!mips_elf_resolve_final_got_entries (arg->info, g))
4614 return FALSE;
4615
4616 /* Work out the number of page, local and TLS entries. */
4617 estimate = arg->max_pages;
4618 if (estimate > g->page_gotno)
4619 estimate = g->page_gotno;
4620 estimate += g->local_gotno + g->tls_gotno;
4621
4622 /* We place TLS GOT entries after both locals and globals. The globals
4623 for the primary GOT may overflow the normal GOT size limit, so be
4624 sure not to merge a GOT which requires TLS with the primary GOT in that
4625 case. This doesn't affect non-primary GOTs. */
4626 estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4627
4628 if (estimate <= arg->max_count)
4629 {
4630 /* If we don't have a primary GOT, use it as
4631 a starting point for the primary GOT. */
4632 if (!arg->primary)
4633 {
4634 arg->primary = g;
4635 return TRUE;
4636 }
4637
4638 /* Try merging with the primary GOT. */
4639 result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4640 if (result >= 0)
4641 return result;
4642 }
4643
4644 /* If we can merge with the last-created got, do it. */
4645 if (arg->current)
4646 {
4647 result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4648 if (result >= 0)
4649 return result;
4650 }
4651
4652 /* Well, we couldn't merge, so create a new GOT. Don't check if it
4653 fits; if it turns out that it doesn't, we'll get relocation
4654 overflows anyway. */
4655 g->next = arg->current;
4656 arg->current = g;
4657
4658 return TRUE;
4659 }
4660
4661 /* ENTRYP is a hash table entry for a mips_got_entry. Set its gotidx
4662 to GOTIDX, duplicating the entry if it has already been assigned
4663 an index in a different GOT. */
4664
4665 static bfd_boolean
4666 mips_elf_set_gotidx (void **entryp, long gotidx)
4667 {
4668 struct mips_got_entry *entry;
4669
4670 entry = (struct mips_got_entry *) *entryp;
4671 if (entry->gotidx > 0)
4672 {
4673 struct mips_got_entry *new_entry;
4674
4675 new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4676 if (!new_entry)
4677 return FALSE;
4678
4679 *new_entry = *entry;
4680 *entryp = new_entry;
4681 entry = new_entry;
4682 }
4683 entry->gotidx = gotidx;
4684 return TRUE;
4685 }
4686
4687 /* Set the TLS GOT index for the GOT entry in ENTRYP. DATA points to a
4688 mips_elf_traverse_got_arg in which DATA->value is the size of one
4689 GOT entry. Set DATA->g to null on failure. */
4690
4691 static int
4692 mips_elf_initialize_tls_index (void **entryp, void *data)
4693 {
4694 struct mips_got_entry *entry;
4695 struct mips_elf_traverse_got_arg *arg;
4696
4697 /* We're only interested in TLS symbols. */
4698 entry = (struct mips_got_entry *) *entryp;
4699 if (entry->tls_type == GOT_TLS_NONE)
4700 return 1;
4701
4702 arg = (struct mips_elf_traverse_got_arg *) data;
4703 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4704 {
4705 arg->g = NULL;
4706 return 0;
4707 }
4708
4709 /* Account for the entries we've just allocated. */
4710 arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4711 return 1;
4712 }
4713
4714 /* A htab_traverse callback for GOT entries, where DATA points to a
4715 mips_elf_traverse_got_arg. Set the global_got_area of each global
4716 symbol to DATA->value. */
4717
4718 static int
4719 mips_elf_set_global_got_area (void **entryp, void *data)
4720 {
4721 struct mips_got_entry *entry;
4722 struct mips_elf_traverse_got_arg *arg;
4723
4724 entry = (struct mips_got_entry *) *entryp;
4725 arg = (struct mips_elf_traverse_got_arg *) data;
4726 if (entry->abfd != NULL
4727 && entry->symndx == -1
4728 && entry->d.h->global_got_area != GGA_NONE)
4729 entry->d.h->global_got_area = arg->value;
4730 return 1;
4731 }
4732
4733 /* A htab_traverse callback for secondary GOT entries, where DATA points
4734 to a mips_elf_traverse_got_arg. Assign GOT indices to global entries
4735 and record the number of relocations they require. DATA->value is
4736 the size of one GOT entry. Set DATA->g to null on failure. */
4737
4738 static int
4739 mips_elf_set_global_gotidx (void **entryp, void *data)
4740 {
4741 struct mips_got_entry *entry;
4742 struct mips_elf_traverse_got_arg *arg;
4743
4744 entry = (struct mips_got_entry *) *entryp;
4745 arg = (struct mips_elf_traverse_got_arg *) data;
4746 if (entry->abfd != NULL
4747 && entry->symndx == -1
4748 && entry->d.h->global_got_area != GGA_NONE)
4749 {
4750 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4751 {
4752 arg->g = NULL;
4753 return 0;
4754 }
4755 arg->g->assigned_low_gotno += 1;
4756
4757 if (bfd_link_pic (arg->info)
4758 || (elf_hash_table (arg->info)->dynamic_sections_created
4759 && entry->d.h->root.def_dynamic
4760 && !entry->d.h->root.def_regular))
4761 arg->g->relocs += 1;
4762 }
4763
4764 return 1;
4765 }
4766
4767 /* A htab_traverse callback for GOT entries for which DATA is the
4768 bfd_link_info. Forbid any global symbols from having traditional
4769 lazy-binding stubs. */
4770
4771 static int
4772 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4773 {
4774 struct bfd_link_info *info;
4775 struct mips_elf_link_hash_table *htab;
4776 struct mips_got_entry *entry;
4777
4778 entry = (struct mips_got_entry *) *entryp;
4779 info = (struct bfd_link_info *) data;
4780 htab = mips_elf_hash_table (info);
4781 BFD_ASSERT (htab != NULL);
4782
4783 if (entry->abfd != NULL
4784 && entry->symndx == -1
4785 && entry->d.h->needs_lazy_stub)
4786 {
4787 entry->d.h->needs_lazy_stub = FALSE;
4788 htab->lazy_stub_count--;
4789 }
4790
4791 return 1;
4792 }
4793
4794 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4795 the primary GOT. */
4796 static bfd_vma
4797 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4798 {
4799 if (!g->next)
4800 return 0;
4801
4802 g = mips_elf_bfd_got (ibfd, FALSE);
4803 if (! g)
4804 return 0;
4805
4806 BFD_ASSERT (g->next);
4807
4808 g = g->next;
4809
4810 return (g->local_gotno + g->global_gotno + g->tls_gotno)
4811 * MIPS_ELF_GOT_SIZE (abfd);
4812 }
4813
4814 /* Turn a single GOT that is too big for 16-bit addressing into
4815 a sequence of GOTs, each one 16-bit addressable. */
4816
4817 static bfd_boolean
4818 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4819 asection *got, bfd_size_type pages)
4820 {
4821 struct mips_elf_link_hash_table *htab;
4822 struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4823 struct mips_elf_traverse_got_arg tga;
4824 struct mips_got_info *g, *gg;
4825 unsigned int assign, needed_relocs;
4826 bfd *dynobj, *ibfd;
4827
4828 dynobj = elf_hash_table (info)->dynobj;
4829 htab = mips_elf_hash_table (info);
4830 BFD_ASSERT (htab != NULL);
4831
4832 g = htab->got_info;
4833
4834 got_per_bfd_arg.obfd = abfd;
4835 got_per_bfd_arg.info = info;
4836 got_per_bfd_arg.current = NULL;
4837 got_per_bfd_arg.primary = NULL;
4838 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4839 / MIPS_ELF_GOT_SIZE (abfd))
4840 - htab->reserved_gotno);
4841 got_per_bfd_arg.max_pages = pages;
4842 /* The number of globals that will be included in the primary GOT.
4843 See the calls to mips_elf_set_global_got_area below for more
4844 information. */
4845 got_per_bfd_arg.global_count = g->global_gotno;
4846
4847 /* Try to merge the GOTs of input bfds together, as long as they
4848 don't seem to exceed the maximum GOT size, choosing one of them
4849 to be the primary GOT. */
4850 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4851 {
4852 gg = mips_elf_bfd_got (ibfd, FALSE);
4853 if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4854 return FALSE;
4855 }
4856
4857 /* If we do not find any suitable primary GOT, create an empty one. */
4858 if (got_per_bfd_arg.primary == NULL)
4859 g->next = mips_elf_create_got_info (abfd);
4860 else
4861 g->next = got_per_bfd_arg.primary;
4862 g->next->next = got_per_bfd_arg.current;
4863
4864 /* GG is now the master GOT, and G is the primary GOT. */
4865 gg = g;
4866 g = g->next;
4867
4868 /* Map the output bfd to the primary got. That's what we're going
4869 to use for bfds that use GOT16 or GOT_PAGE relocations that we
4870 didn't mark in check_relocs, and we want a quick way to find it.
4871 We can't just use gg->next because we're going to reverse the
4872 list. */
4873 mips_elf_replace_bfd_got (abfd, g);
4874
4875 /* Every symbol that is referenced in a dynamic relocation must be
4876 present in the primary GOT, so arrange for them to appear after
4877 those that are actually referenced. */
4878 gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4879 g->global_gotno = gg->global_gotno;
4880
4881 tga.info = info;
4882 tga.value = GGA_RELOC_ONLY;
4883 htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4884 tga.value = GGA_NORMAL;
4885 htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4886
4887 /* Now go through the GOTs assigning them offset ranges.
4888 [assigned_low_gotno, local_gotno[ will be set to the range of local
4889 entries in each GOT. We can then compute the end of a GOT by
4890 adding local_gotno to global_gotno. We reverse the list and make
4891 it circular since then we'll be able to quickly compute the
4892 beginning of a GOT, by computing the end of its predecessor. To
4893 avoid special cases for the primary GOT, while still preserving
4894 assertions that are valid for both single- and multi-got links,
4895 we arrange for the main got struct to have the right number of
4896 global entries, but set its local_gotno such that the initial
4897 offset of the primary GOT is zero. Remember that the primary GOT
4898 will become the last item in the circular linked list, so it
4899 points back to the master GOT. */
4900 gg->local_gotno = -g->global_gotno;
4901 gg->global_gotno = g->global_gotno;
4902 gg->tls_gotno = 0;
4903 assign = 0;
4904 gg->next = gg;
4905
4906 do
4907 {
4908 struct mips_got_info *gn;
4909
4910 assign += htab->reserved_gotno;
4911 g->assigned_low_gotno = assign;
4912 g->local_gotno += assign;
4913 g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4914 g->assigned_high_gotno = g->local_gotno - 1;
4915 assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4916
4917 /* Take g out of the direct list, and push it onto the reversed
4918 list that gg points to. g->next is guaranteed to be nonnull after
4919 this operation, as required by mips_elf_initialize_tls_index. */
4920 gn = g->next;
4921 g->next = gg->next;
4922 gg->next = g;
4923
4924 /* Set up any TLS entries. We always place the TLS entries after
4925 all non-TLS entries. */
4926 g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4927 tga.g = g;
4928 tga.value = MIPS_ELF_GOT_SIZE (abfd);
4929 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4930 if (!tga.g)
4931 return FALSE;
4932 BFD_ASSERT (g->tls_assigned_gotno == assign);
4933
4934 /* Move onto the next GOT. It will be a secondary GOT if nonull. */
4935 g = gn;
4936
4937 /* Forbid global symbols in every non-primary GOT from having
4938 lazy-binding stubs. */
4939 if (g)
4940 htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4941 }
4942 while (g);
4943
4944 got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4945
4946 needed_relocs = 0;
4947 for (g = gg->next; g && g->next != gg; g = g->next)
4948 {
4949 unsigned int save_assign;
4950
4951 /* Assign offsets to global GOT entries and count how many
4952 relocations they need. */
4953 save_assign = g->assigned_low_gotno;
4954 g->assigned_low_gotno = g->local_gotno;
4955 tga.info = info;
4956 tga.value = MIPS_ELF_GOT_SIZE (abfd);
4957 tga.g = g;
4958 htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4959 if (!tga.g)
4960 return FALSE;
4961 BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4962 g->assigned_low_gotno = save_assign;
4963
4964 if (bfd_link_pic (info))
4965 {
4966 g->relocs += g->local_gotno - g->assigned_low_gotno;
4967 BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
4968 + g->next->global_gotno
4969 + g->next->tls_gotno
4970 + htab->reserved_gotno);
4971 }
4972 needed_relocs += g->relocs;
4973 }
4974 needed_relocs += g->relocs;
4975
4976 if (needed_relocs)
4977 mips_elf_allocate_dynamic_relocations (dynobj, info,
4978 needed_relocs);
4979
4980 return TRUE;
4981 }
4982
4983 \f
4984 /* Returns the first relocation of type r_type found, beginning with
4985 RELOCATION. RELEND is one-past-the-end of the relocation table. */
4986
4987 static const Elf_Internal_Rela *
4988 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4989 const Elf_Internal_Rela *relocation,
4990 const Elf_Internal_Rela *relend)
4991 {
4992 unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4993
4994 while (relocation < relend)
4995 {
4996 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4997 && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4998 return relocation;
4999
5000 ++relocation;
5001 }
5002
5003 /* We didn't find it. */
5004 return NULL;
5005 }
5006
5007 /* Return whether an input relocation is against a local symbol. */
5008
5009 static bfd_boolean
5010 mips_elf_local_relocation_p (bfd *input_bfd,
5011 const Elf_Internal_Rela *relocation,
5012 asection **local_sections)
5013 {
5014 unsigned long r_symndx;
5015 Elf_Internal_Shdr *symtab_hdr;
5016 size_t extsymoff;
5017
5018 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5019 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5020 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
5021
5022 if (r_symndx < extsymoff)
5023 return TRUE;
5024 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
5025 return TRUE;
5026
5027 return FALSE;
5028 }
5029 \f
5030 /* Sign-extend VALUE, which has the indicated number of BITS. */
5031
5032 bfd_vma
5033 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5034 {
5035 if (value & ((bfd_vma) 1 << (bits - 1)))
5036 /* VALUE is negative. */
5037 value |= ((bfd_vma) - 1) << bits;
5038
5039 return value;
5040 }
5041
5042 /* Return non-zero if the indicated VALUE has overflowed the maximum
5043 range expressible by a signed number with the indicated number of
5044 BITS. */
5045
5046 static bfd_boolean
5047 mips_elf_overflow_p (bfd_vma value, int bits)
5048 {
5049 bfd_signed_vma svalue = (bfd_signed_vma) value;
5050
5051 if (svalue > (1 << (bits - 1)) - 1)
5052 /* The value is too big. */
5053 return TRUE;
5054 else if (svalue < -(1 << (bits - 1)))
5055 /* The value is too small. */
5056 return TRUE;
5057
5058 /* All is well. */
5059 return FALSE;
5060 }
5061
5062 /* Calculate the %high function. */
5063
5064 static bfd_vma
5065 mips_elf_high (bfd_vma value)
5066 {
5067 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5068 }
5069
5070 /* Calculate the %higher function. */
5071
5072 static bfd_vma
5073 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5074 {
5075 #ifdef BFD64
5076 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5077 #else
5078 abort ();
5079 return MINUS_ONE;
5080 #endif
5081 }
5082
5083 /* Calculate the %highest function. */
5084
5085 static bfd_vma
5086 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5087 {
5088 #ifdef BFD64
5089 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5090 #else
5091 abort ();
5092 return MINUS_ONE;
5093 #endif
5094 }
5095 \f
5096 /* Create the .compact_rel section. */
5097
5098 static bfd_boolean
5099 mips_elf_create_compact_rel_section
5100 (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5101 {
5102 flagword flags;
5103 register asection *s;
5104
5105 if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5106 {
5107 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5108 | SEC_READONLY);
5109
5110 s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5111 if (s == NULL
5112 || ! bfd_set_section_alignment (abfd, s,
5113 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5114 return FALSE;
5115
5116 s->size = sizeof (Elf32_External_compact_rel);
5117 }
5118
5119 return TRUE;
5120 }
5121
5122 /* Create the .got section to hold the global offset table. */
5123
5124 static bfd_boolean
5125 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5126 {
5127 flagword flags;
5128 register asection *s;
5129 struct elf_link_hash_entry *h;
5130 struct bfd_link_hash_entry *bh;
5131 struct mips_elf_link_hash_table *htab;
5132
5133 htab = mips_elf_hash_table (info);
5134 BFD_ASSERT (htab != NULL);
5135
5136 /* This function may be called more than once. */
5137 if (htab->sgot)
5138 return TRUE;
5139
5140 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5141 | SEC_LINKER_CREATED);
5142
5143 /* We have to use an alignment of 2**4 here because this is hardcoded
5144 in the function stub generation and in the linker script. */
5145 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5146 if (s == NULL
5147 || ! bfd_set_section_alignment (abfd, s, 4))
5148 return FALSE;
5149 htab->sgot = s;
5150
5151 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
5152 linker script because we don't want to define the symbol if we
5153 are not creating a global offset table. */
5154 bh = NULL;
5155 if (! (_bfd_generic_link_add_one_symbol
5156 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5157 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5158 return FALSE;
5159
5160 h = (struct elf_link_hash_entry *) bh;
5161 h->non_elf = 0;
5162 h->def_regular = 1;
5163 h->type = STT_OBJECT;
5164 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5165 elf_hash_table (info)->hgot = h;
5166
5167 if (bfd_link_pic (info)
5168 && ! bfd_elf_link_record_dynamic_symbol (info, h))
5169 return FALSE;
5170
5171 htab->got_info = mips_elf_create_got_info (abfd);
5172 mips_elf_section_data (s)->elf.this_hdr.sh_flags
5173 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5174
5175 /* We also need a .got.plt section when generating PLTs. */
5176 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5177 SEC_ALLOC | SEC_LOAD
5178 | SEC_HAS_CONTENTS
5179 | SEC_IN_MEMORY
5180 | SEC_LINKER_CREATED);
5181 if (s == NULL)
5182 return FALSE;
5183 htab->sgotplt = s;
5184
5185 return TRUE;
5186 }
5187 \f
5188 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5189 __GOTT_INDEX__ symbols. These symbols are only special for
5190 shared objects; they are not used in executables. */
5191
5192 static bfd_boolean
5193 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5194 {
5195 return (mips_elf_hash_table (info)->is_vxworks
5196 && bfd_link_pic (info)
5197 && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5198 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5199 }
5200
5201 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5202 require an la25 stub. See also mips_elf_local_pic_function_p,
5203 which determines whether the destination function ever requires a
5204 stub. */
5205
5206 static bfd_boolean
5207 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5208 bfd_boolean target_is_16_bit_code_p)
5209 {
5210 /* We specifically ignore branches and jumps from EF_PIC objects,
5211 where the onus is on the compiler or programmer to perform any
5212 necessary initialization of $25. Sometimes such initialization
5213 is unnecessary; for example, -mno-shared functions do not use
5214 the incoming value of $25, and may therefore be called directly. */
5215 if (PIC_OBJECT_P (input_bfd))
5216 return FALSE;
5217
5218 switch (r_type)
5219 {
5220 case R_MIPS_26:
5221 case R_MIPS_PC16:
5222 case R_MIPS_PC21_S2:
5223 case R_MIPS_PC26_S2:
5224 case R_MICROMIPS_26_S1:
5225 case R_MICROMIPS_PC7_S1:
5226 case R_MICROMIPS_PC10_S1:
5227 case R_MICROMIPS_PC16_S1:
5228 case R_MICROMIPS_PC23_S2:
5229 return TRUE;
5230
5231 case R_MIPS16_26:
5232 return !target_is_16_bit_code_p;
5233
5234 default:
5235 return FALSE;
5236 }
5237 }
5238 \f
5239 /* Calculate the value produced by the RELOCATION (which comes from
5240 the INPUT_BFD). The ADDEND is the addend to use for this
5241 RELOCATION; RELOCATION->R_ADDEND is ignored.
5242
5243 The result of the relocation calculation is stored in VALUEP.
5244 On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5245 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5246
5247 This function returns bfd_reloc_continue if the caller need take no
5248 further action regarding this relocation, bfd_reloc_notsupported if
5249 something goes dramatically wrong, bfd_reloc_overflow if an
5250 overflow occurs, and bfd_reloc_ok to indicate success. */
5251
5252 static bfd_reloc_status_type
5253 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5254 asection *input_section,
5255 struct bfd_link_info *info,
5256 const Elf_Internal_Rela *relocation,
5257 bfd_vma addend, reloc_howto_type *howto,
5258 Elf_Internal_Sym *local_syms,
5259 asection **local_sections, bfd_vma *valuep,
5260 const char **namep,
5261 bfd_boolean *cross_mode_jump_p,
5262 bfd_boolean save_addend)
5263 {
5264 /* The eventual value we will return. */
5265 bfd_vma value;
5266 /* The address of the symbol against which the relocation is
5267 occurring. */
5268 bfd_vma symbol = 0;
5269 /* The final GP value to be used for the relocatable, executable, or
5270 shared object file being produced. */
5271 bfd_vma gp;
5272 /* The place (section offset or address) of the storage unit being
5273 relocated. */
5274 bfd_vma p;
5275 /* The value of GP used to create the relocatable object. */
5276 bfd_vma gp0;
5277 /* The offset into the global offset table at which the address of
5278 the relocation entry symbol, adjusted by the addend, resides
5279 during execution. */
5280 bfd_vma g = MINUS_ONE;
5281 /* The section in which the symbol referenced by the relocation is
5282 located. */
5283 asection *sec = NULL;
5284 struct mips_elf_link_hash_entry *h = NULL;
5285 /* TRUE if the symbol referred to by this relocation is a local
5286 symbol. */
5287 bfd_boolean local_p, was_local_p;
5288 /* TRUE if the symbol referred to by this relocation is a section
5289 symbol. */
5290 bfd_boolean section_p = FALSE;
5291 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */
5292 bfd_boolean gp_disp_p = FALSE;
5293 /* TRUE if the symbol referred to by this relocation is
5294 "__gnu_local_gp". */
5295 bfd_boolean gnu_local_gp_p = FALSE;
5296 Elf_Internal_Shdr *symtab_hdr;
5297 size_t extsymoff;
5298 unsigned long r_symndx;
5299 int r_type;
5300 /* TRUE if overflow occurred during the calculation of the
5301 relocation value. */
5302 bfd_boolean overflowed_p;
5303 /* TRUE if this relocation refers to a MIPS16 function. */
5304 bfd_boolean target_is_16_bit_code_p = FALSE;
5305 bfd_boolean target_is_micromips_code_p = FALSE;
5306 struct mips_elf_link_hash_table *htab;
5307 bfd *dynobj;
5308
5309 dynobj = elf_hash_table (info)->dynobj;
5310 htab = mips_elf_hash_table (info);
5311 BFD_ASSERT (htab != NULL);
5312
5313 /* Parse the relocation. */
5314 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5315 r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5316 p = (input_section->output_section->vma
5317 + input_section->output_offset
5318 + relocation->r_offset);
5319
5320 /* Assume that there will be no overflow. */
5321 overflowed_p = FALSE;
5322
5323 /* Figure out whether or not the symbol is local, and get the offset
5324 used in the array of hash table entries. */
5325 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5326 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5327 local_sections);
5328 was_local_p = local_p;
5329 if (! elf_bad_symtab (input_bfd))
5330 extsymoff = symtab_hdr->sh_info;
5331 else
5332 {
5333 /* The symbol table does not follow the rule that local symbols
5334 must come before globals. */
5335 extsymoff = 0;
5336 }
5337
5338 /* Figure out the value of the symbol. */
5339 if (local_p)
5340 {
5341 bfd_boolean micromips_p = MICROMIPS_P (abfd);
5342 Elf_Internal_Sym *sym;
5343
5344 sym = local_syms + r_symndx;
5345 sec = local_sections[r_symndx];
5346
5347 section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION;
5348
5349 symbol = sec->output_section->vma + sec->output_offset;
5350 if (!section_p || (sec->flags & SEC_MERGE))
5351 symbol += sym->st_value;
5352 if ((sec->flags & SEC_MERGE) && section_p)
5353 {
5354 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5355 addend -= symbol;
5356 addend += sec->output_section->vma + sec->output_offset;
5357 }
5358
5359 /* MIPS16/microMIPS text labels should be treated as odd. */
5360 if (ELF_ST_IS_COMPRESSED (sym->st_other))
5361 ++symbol;
5362
5363 /* Record the name of this symbol, for our caller. */
5364 *namep = bfd_elf_string_from_elf_section (input_bfd,
5365 symtab_hdr->sh_link,
5366 sym->st_name);
5367 if (*namep == NULL || **namep == '\0')
5368 *namep = bfd_section_name (input_bfd, sec);
5369
5370 /* For relocations against a section symbol and ones against no
5371 symbol (absolute relocations) infer the ISA mode from the addend. */
5372 if (section_p || r_symndx == STN_UNDEF)
5373 {
5374 target_is_16_bit_code_p = (addend & 1) && !micromips_p;
5375 target_is_micromips_code_p = (addend & 1) && micromips_p;
5376 }
5377 /* For relocations against an absolute symbol infer the ISA mode
5378 from the value of the symbol plus addend. */
5379 else if (bfd_is_abs_section (sec))
5380 {
5381 target_is_16_bit_code_p = ((symbol + addend) & 1) && !micromips_p;
5382 target_is_micromips_code_p = ((symbol + addend) & 1) && micromips_p;
5383 }
5384 /* Otherwise just use the regular symbol annotation available. */
5385 else
5386 {
5387 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5388 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5389 }
5390 }
5391 else
5392 {
5393 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */
5394
5395 /* For global symbols we look up the symbol in the hash-table. */
5396 h = ((struct mips_elf_link_hash_entry *)
5397 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5398 /* Find the real hash-table entry for this symbol. */
5399 while (h->root.root.type == bfd_link_hash_indirect
5400 || h->root.root.type == bfd_link_hash_warning)
5401 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5402
5403 /* Record the name of this symbol, for our caller. */
5404 *namep = h->root.root.root.string;
5405
5406 /* See if this is the special _gp_disp symbol. Note that such a
5407 symbol must always be a global symbol. */
5408 if (strcmp (*namep, "_gp_disp") == 0
5409 && ! NEWABI_P (input_bfd))
5410 {
5411 /* Relocations against _gp_disp are permitted only with
5412 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
5413 if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5414 return bfd_reloc_notsupported;
5415
5416 gp_disp_p = TRUE;
5417 }
5418 /* See if this is the special _gp symbol. Note that such a
5419 symbol must always be a global symbol. */
5420 else if (strcmp (*namep, "__gnu_local_gp") == 0)
5421 gnu_local_gp_p = TRUE;
5422
5423
5424 /* If this symbol is defined, calculate its address. Note that
5425 _gp_disp is a magic symbol, always implicitly defined by the
5426 linker, so it's inappropriate to check to see whether or not
5427 its defined. */
5428 else if ((h->root.root.type == bfd_link_hash_defined
5429 || h->root.root.type == bfd_link_hash_defweak)
5430 && h->root.root.u.def.section)
5431 {
5432 sec = h->root.root.u.def.section;
5433 if (sec->output_section)
5434 symbol = (h->root.root.u.def.value
5435 + sec->output_section->vma
5436 + sec->output_offset);
5437 else
5438 symbol = h->root.root.u.def.value;
5439 }
5440 else if (h->root.root.type == bfd_link_hash_undefweak)
5441 /* We allow relocations against undefined weak symbols, giving
5442 it the value zero, so that you can undefined weak functions
5443 and check to see if they exist by looking at their
5444 addresses. */
5445 symbol = 0;
5446 else if (info->unresolved_syms_in_objects == RM_IGNORE
5447 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5448 symbol = 0;
5449 else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5450 ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5451 {
5452 /* If this is a dynamic link, we should have created a
5453 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5454 in in _bfd_mips_elf_create_dynamic_sections.
5455 Otherwise, we should define the symbol with a value of 0.
5456 FIXME: It should probably get into the symbol table
5457 somehow as well. */
5458 BFD_ASSERT (! bfd_link_pic (info));
5459 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5460 symbol = 0;
5461 }
5462 else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5463 {
5464 /* This is an optional symbol - an Irix specific extension to the
5465 ELF spec. Ignore it for now.
5466 XXX - FIXME - there is more to the spec for OPTIONAL symbols
5467 than simply ignoring them, but we do not handle this for now.
5468 For information see the "64-bit ELF Object File Specification"
5469 which is available from here:
5470 http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */
5471 symbol = 0;
5472 }
5473 else
5474 {
5475 (*info->callbacks->undefined_symbol)
5476 (info, h->root.root.root.string, input_bfd,
5477 input_section, relocation->r_offset,
5478 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5479 || ELF_ST_VISIBILITY (h->root.other));
5480 return bfd_reloc_undefined;
5481 }
5482
5483 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5484 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5485 }
5486
5487 /* If this is a reference to a 16-bit function with a stub, we need
5488 to redirect the relocation to the stub unless:
5489
5490 (a) the relocation is for a MIPS16 JAL;
5491
5492 (b) the relocation is for a MIPS16 PIC call, and there are no
5493 non-MIPS16 uses of the GOT slot; or
5494
5495 (c) the section allows direct references to MIPS16 functions. */
5496 if (r_type != R_MIPS16_26
5497 && !bfd_link_relocatable (info)
5498 && ((h != NULL
5499 && h->fn_stub != NULL
5500 && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5501 || (local_p
5502 && mips_elf_tdata (input_bfd)->local_stubs != NULL
5503 && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5504 && !section_allows_mips16_refs_p (input_section))
5505 {
5506 /* This is a 32- or 64-bit call to a 16-bit function. We should
5507 have already noticed that we were going to need the
5508 stub. */
5509 if (local_p)
5510 {
5511 sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5512 value = 0;
5513 }
5514 else
5515 {
5516 BFD_ASSERT (h->need_fn_stub);
5517 if (h->la25_stub)
5518 {
5519 /* If a LA25 header for the stub itself exists, point to the
5520 prepended LUI/ADDIU sequence. */
5521 sec = h->la25_stub->stub_section;
5522 value = h->la25_stub->offset;
5523 }
5524 else
5525 {
5526 sec = h->fn_stub;
5527 value = 0;
5528 }
5529 }
5530
5531 symbol = sec->output_section->vma + sec->output_offset + value;
5532 /* The target is 16-bit, but the stub isn't. */
5533 target_is_16_bit_code_p = FALSE;
5534 }
5535 /* If this is a MIPS16 call with a stub, that is made through the PLT or
5536 to a standard MIPS function, we need to redirect the call to the stub.
5537 Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5538 indirect calls should use an indirect stub instead. */
5539 else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5540 && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5541 || (local_p
5542 && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5543 && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5544 && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5545 {
5546 if (local_p)
5547 sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5548 else
5549 {
5550 /* If both call_stub and call_fp_stub are defined, we can figure
5551 out which one to use by checking which one appears in the input
5552 file. */
5553 if (h->call_stub != NULL && h->call_fp_stub != NULL)
5554 {
5555 asection *o;
5556
5557 sec = NULL;
5558 for (o = input_bfd->sections; o != NULL; o = o->next)
5559 {
5560 if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5561 {
5562 sec = h->call_fp_stub;
5563 break;
5564 }
5565 }
5566 if (sec == NULL)
5567 sec = h->call_stub;
5568 }
5569 else if (h->call_stub != NULL)
5570 sec = h->call_stub;
5571 else
5572 sec = h->call_fp_stub;
5573 }
5574
5575 BFD_ASSERT (sec->size > 0);
5576 symbol = sec->output_section->vma + sec->output_offset;
5577 }
5578 /* If this is a direct call to a PIC function, redirect to the
5579 non-PIC stub. */
5580 else if (h != NULL && h->la25_stub
5581 && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5582 target_is_16_bit_code_p))
5583 {
5584 symbol = (h->la25_stub->stub_section->output_section->vma
5585 + h->la25_stub->stub_section->output_offset
5586 + h->la25_stub->offset);
5587 if (ELF_ST_IS_MICROMIPS (h->root.other))
5588 symbol |= 1;
5589 }
5590 /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5591 entry is used if a standard PLT entry has also been made. In this
5592 case the symbol will have been set by mips_elf_set_plt_sym_value
5593 to point to the standard PLT entry, so redirect to the compressed
5594 one. */
5595 else if ((mips16_branch_reloc_p (r_type)
5596 || micromips_branch_reloc_p (r_type))
5597 && !bfd_link_relocatable (info)
5598 && h != NULL
5599 && h->use_plt_entry
5600 && h->root.plt.plist->comp_offset != MINUS_ONE
5601 && h->root.plt.plist->mips_offset != MINUS_ONE)
5602 {
5603 bfd_boolean micromips_p = MICROMIPS_P (abfd);
5604
5605 sec = htab->splt;
5606 symbol = (sec->output_section->vma
5607 + sec->output_offset
5608 + htab->plt_header_size
5609 + htab->plt_mips_offset
5610 + h->root.plt.plist->comp_offset
5611 + 1);
5612
5613 target_is_16_bit_code_p = !micromips_p;
5614 target_is_micromips_code_p = micromips_p;
5615 }
5616
5617 /* Make sure MIPS16 and microMIPS are not used together. */
5618 if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p)
5619 || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5620 {
5621 (*_bfd_error_handler)
5622 (_("MIPS16 and microMIPS functions cannot call each other"));
5623 return bfd_reloc_notsupported;
5624 }
5625
5626 /* Calls from 16-bit code to 32-bit code and vice versa require the
5627 mode change. However, we can ignore calls to undefined weak symbols,
5628 which should never be executed at runtime. This exception is important
5629 because the assembly writer may have "known" that any definition of the
5630 symbol would be 16-bit code, and that direct jumps were therefore
5631 acceptable. */
5632 *cross_mode_jump_p = (!bfd_link_relocatable (info)
5633 && !(h && h->root.root.type == bfd_link_hash_undefweak)
5634 && ((mips16_branch_reloc_p (r_type)
5635 && !target_is_16_bit_code_p)
5636 || (micromips_branch_reloc_p (r_type)
5637 && !target_is_micromips_code_p)
5638 || ((branch_reloc_p (r_type)
5639 || r_type == R_MIPS_JALR)
5640 && (target_is_16_bit_code_p
5641 || target_is_micromips_code_p))));
5642
5643 local_p = (h == NULL || mips_use_local_got_p (info, h));
5644
5645 gp0 = _bfd_get_gp_value (input_bfd);
5646 gp = _bfd_get_gp_value (abfd);
5647 if (htab->got_info)
5648 gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5649
5650 if (gnu_local_gp_p)
5651 symbol = gp;
5652
5653 /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5654 to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP. The addend is applied by the
5655 corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST. */
5656 if (got_page_reloc_p (r_type) && !local_p)
5657 {
5658 r_type = (micromips_reloc_p (r_type)
5659 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5660 addend = 0;
5661 }
5662
5663 /* If we haven't already determined the GOT offset, and we're going
5664 to need it, get it now. */
5665 switch (r_type)
5666 {
5667 case R_MIPS16_CALL16:
5668 case R_MIPS16_GOT16:
5669 case R_MIPS_CALL16:
5670 case R_MIPS_GOT16:
5671 case R_MIPS_GOT_DISP:
5672 case R_MIPS_GOT_HI16:
5673 case R_MIPS_CALL_HI16:
5674 case R_MIPS_GOT_LO16:
5675 case R_MIPS_CALL_LO16:
5676 case R_MICROMIPS_CALL16:
5677 case R_MICROMIPS_GOT16:
5678 case R_MICROMIPS_GOT_DISP:
5679 case R_MICROMIPS_GOT_HI16:
5680 case R_MICROMIPS_CALL_HI16:
5681 case R_MICROMIPS_GOT_LO16:
5682 case R_MICROMIPS_CALL_LO16:
5683 case R_MIPS_TLS_GD:
5684 case R_MIPS_TLS_GOTTPREL:
5685 case R_MIPS_TLS_LDM:
5686 case R_MIPS16_TLS_GD:
5687 case R_MIPS16_TLS_GOTTPREL:
5688 case R_MIPS16_TLS_LDM:
5689 case R_MICROMIPS_TLS_GD:
5690 case R_MICROMIPS_TLS_GOTTPREL:
5691 case R_MICROMIPS_TLS_LDM:
5692 /* Find the index into the GOT where this value is located. */
5693 if (tls_ldm_reloc_p (r_type))
5694 {
5695 g = mips_elf_local_got_index (abfd, input_bfd, info,
5696 0, 0, NULL, r_type);
5697 if (g == MINUS_ONE)
5698 return bfd_reloc_outofrange;
5699 }
5700 else if (!local_p)
5701 {
5702 /* On VxWorks, CALL relocations should refer to the .got.plt
5703 entry, which is initialized to point at the PLT stub. */
5704 if (htab->is_vxworks
5705 && (call_hi16_reloc_p (r_type)
5706 || call_lo16_reloc_p (r_type)
5707 || call16_reloc_p (r_type)))
5708 {
5709 BFD_ASSERT (addend == 0);
5710 BFD_ASSERT (h->root.needs_plt);
5711 g = mips_elf_gotplt_index (info, &h->root);
5712 }
5713 else
5714 {
5715 BFD_ASSERT (addend == 0);
5716 g = mips_elf_global_got_index (abfd, info, input_bfd,
5717 &h->root, r_type);
5718 if (!TLS_RELOC_P (r_type)
5719 && !elf_hash_table (info)->dynamic_sections_created)
5720 /* This is a static link. We must initialize the GOT entry. */
5721 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5722 }
5723 }
5724 else if (!htab->is_vxworks
5725 && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5726 /* The calculation below does not involve "g". */
5727 break;
5728 else
5729 {
5730 g = mips_elf_local_got_index (abfd, input_bfd, info,
5731 symbol + addend, r_symndx, h, r_type);
5732 if (g == MINUS_ONE)
5733 return bfd_reloc_outofrange;
5734 }
5735
5736 /* Convert GOT indices to actual offsets. */
5737 g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5738 break;
5739 }
5740
5741 /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5742 symbols are resolved by the loader. Add them to .rela.dyn. */
5743 if (h != NULL && is_gott_symbol (info, &h->root))
5744 {
5745 Elf_Internal_Rela outrel;
5746 bfd_byte *loc;
5747 asection *s;
5748
5749 s = mips_elf_rel_dyn_section (info, FALSE);
5750 loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5751
5752 outrel.r_offset = (input_section->output_section->vma
5753 + input_section->output_offset
5754 + relocation->r_offset);
5755 outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5756 outrel.r_addend = addend;
5757 bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5758
5759 /* If we've written this relocation for a readonly section,
5760 we need to set DF_TEXTREL again, so that we do not delete the
5761 DT_TEXTREL tag. */
5762 if (MIPS_ELF_READONLY_SECTION (input_section))
5763 info->flags |= DF_TEXTREL;
5764
5765 *valuep = 0;
5766 return bfd_reloc_ok;
5767 }
5768
5769 /* Figure out what kind of relocation is being performed. */
5770 switch (r_type)
5771 {
5772 case R_MIPS_NONE:
5773 return bfd_reloc_continue;
5774
5775 case R_MIPS_16:
5776 if (howto->partial_inplace)
5777 addend = _bfd_mips_elf_sign_extend (addend, 16);
5778 value = symbol + addend;
5779 overflowed_p = mips_elf_overflow_p (value, 16);
5780 break;
5781
5782 case R_MIPS_32:
5783 case R_MIPS_REL32:
5784 case R_MIPS_64:
5785 if ((bfd_link_pic (info)
5786 || (htab->root.dynamic_sections_created
5787 && h != NULL
5788 && h->root.def_dynamic
5789 && !h->root.def_regular
5790 && !h->has_static_relocs))
5791 && r_symndx != STN_UNDEF
5792 && (h == NULL
5793 || h->root.root.type != bfd_link_hash_undefweak
5794 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5795 && (input_section->flags & SEC_ALLOC) != 0)
5796 {
5797 /* If we're creating a shared library, then we can't know
5798 where the symbol will end up. So, we create a relocation
5799 record in the output, and leave the job up to the dynamic
5800 linker. We must do the same for executable references to
5801 shared library symbols, unless we've decided to use copy
5802 relocs or PLTs instead. */
5803 value = addend;
5804 if (!mips_elf_create_dynamic_relocation (abfd,
5805 info,
5806 relocation,
5807 h,
5808 sec,
5809 symbol,
5810 &value,
5811 input_section))
5812 return bfd_reloc_undefined;
5813 }
5814 else
5815 {
5816 if (r_type != R_MIPS_REL32)
5817 value = symbol + addend;
5818 else
5819 value = addend;
5820 }
5821 value &= howto->dst_mask;
5822 break;
5823
5824 case R_MIPS_PC32:
5825 value = symbol + addend - p;
5826 value &= howto->dst_mask;
5827 break;
5828
5829 case R_MIPS16_26:
5830 /* The calculation for R_MIPS16_26 is just the same as for an
5831 R_MIPS_26. It's only the storage of the relocated field into
5832 the output file that's different. That's handled in
5833 mips_elf_perform_relocation. So, we just fall through to the
5834 R_MIPS_26 case here. */
5835 case R_MIPS_26:
5836 case R_MICROMIPS_26_S1:
5837 {
5838 unsigned int shift;
5839
5840 /* Shift is 2, unusually, for microMIPS JALX. */
5841 shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5842
5843 if (howto->partial_inplace && !section_p)
5844 value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5845 else
5846 value = addend;
5847 value += symbol;
5848
5849 /* Make sure the target of a jump is suitably aligned. Bit 0 must
5850 be the correct ISA mode selector except for weak undefined
5851 symbols. */
5852 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5853 && (*cross_mode_jump_p
5854 ? (value & 3) != (r_type == R_MIPS_26)
5855 : (value & ((1 << shift) - 1)) != (r_type != R_MIPS_26)))
5856 return bfd_reloc_outofrange;
5857
5858 value >>= shift;
5859 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5860 overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5861 value &= howto->dst_mask;
5862 }
5863 break;
5864
5865 case R_MIPS_TLS_DTPREL_HI16:
5866 case R_MIPS16_TLS_DTPREL_HI16:
5867 case R_MICROMIPS_TLS_DTPREL_HI16:
5868 value = (mips_elf_high (addend + symbol - dtprel_base (info))
5869 & howto->dst_mask);
5870 break;
5871
5872 case R_MIPS_TLS_DTPREL_LO16:
5873 case R_MIPS_TLS_DTPREL32:
5874 case R_MIPS_TLS_DTPREL64:
5875 case R_MIPS16_TLS_DTPREL_LO16:
5876 case R_MICROMIPS_TLS_DTPREL_LO16:
5877 value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5878 break;
5879
5880 case R_MIPS_TLS_TPREL_HI16:
5881 case R_MIPS16_TLS_TPREL_HI16:
5882 case R_MICROMIPS_TLS_TPREL_HI16:
5883 value = (mips_elf_high (addend + symbol - tprel_base (info))
5884 & howto->dst_mask);
5885 break;
5886
5887 case R_MIPS_TLS_TPREL_LO16:
5888 case R_MIPS_TLS_TPREL32:
5889 case R_MIPS_TLS_TPREL64:
5890 case R_MIPS16_TLS_TPREL_LO16:
5891 case R_MICROMIPS_TLS_TPREL_LO16:
5892 value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5893 break;
5894
5895 case R_MIPS_HI16:
5896 case R_MIPS16_HI16:
5897 case R_MICROMIPS_HI16:
5898 if (!gp_disp_p)
5899 {
5900 value = mips_elf_high (addend + symbol);
5901 value &= howto->dst_mask;
5902 }
5903 else
5904 {
5905 /* For MIPS16 ABI code we generate this sequence
5906 0: li $v0,%hi(_gp_disp)
5907 4: addiupc $v1,%lo(_gp_disp)
5908 8: sll $v0,16
5909 12: addu $v0,$v1
5910 14: move $gp,$v0
5911 So the offsets of hi and lo relocs are the same, but the
5912 base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5913 ADDIUPC clears the low two bits of the instruction address,
5914 so the base is ($t9 + 4) & ~3. */
5915 if (r_type == R_MIPS16_HI16)
5916 value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5917 /* The microMIPS .cpload sequence uses the same assembly
5918 instructions as the traditional psABI version, but the
5919 incoming $t9 has the low bit set. */
5920 else if (r_type == R_MICROMIPS_HI16)
5921 value = mips_elf_high (addend + gp - p - 1);
5922 else
5923 value = mips_elf_high (addend + gp - p);
5924 overflowed_p = mips_elf_overflow_p (value, 16);
5925 }
5926 break;
5927
5928 case R_MIPS_LO16:
5929 case R_MIPS16_LO16:
5930 case R_MICROMIPS_LO16:
5931 case R_MICROMIPS_HI0_LO16:
5932 if (!gp_disp_p)
5933 value = (symbol + addend) & howto->dst_mask;
5934 else
5935 {
5936 /* See the comment for R_MIPS16_HI16 above for the reason
5937 for this conditional. */
5938 if (r_type == R_MIPS16_LO16)
5939 value = addend + gp - (p & ~(bfd_vma) 0x3);
5940 else if (r_type == R_MICROMIPS_LO16
5941 || r_type == R_MICROMIPS_HI0_LO16)
5942 value = addend + gp - p + 3;
5943 else
5944 value = addend + gp - p + 4;
5945 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5946 for overflow. But, on, say, IRIX5, relocations against
5947 _gp_disp are normally generated from the .cpload
5948 pseudo-op. It generates code that normally looks like
5949 this:
5950
5951 lui $gp,%hi(_gp_disp)
5952 addiu $gp,$gp,%lo(_gp_disp)
5953 addu $gp,$gp,$t9
5954
5955 Here $t9 holds the address of the function being called,
5956 as required by the MIPS ELF ABI. The R_MIPS_LO16
5957 relocation can easily overflow in this situation, but the
5958 R_MIPS_HI16 relocation will handle the overflow.
5959 Therefore, we consider this a bug in the MIPS ABI, and do
5960 not check for overflow here. */
5961 }
5962 break;
5963
5964 case R_MIPS_LITERAL:
5965 case R_MICROMIPS_LITERAL:
5966 /* Because we don't merge literal sections, we can handle this
5967 just like R_MIPS_GPREL16. In the long run, we should merge
5968 shared literals, and then we will need to additional work
5969 here. */
5970
5971 /* Fall through. */
5972
5973 case R_MIPS16_GPREL:
5974 /* The R_MIPS16_GPREL performs the same calculation as
5975 R_MIPS_GPREL16, but stores the relocated bits in a different
5976 order. We don't need to do anything special here; the
5977 differences are handled in mips_elf_perform_relocation. */
5978 case R_MIPS_GPREL16:
5979 case R_MICROMIPS_GPREL7_S2:
5980 case R_MICROMIPS_GPREL16:
5981 /* Only sign-extend the addend if it was extracted from the
5982 instruction. If the addend was separate, leave it alone,
5983 otherwise we may lose significant bits. */
5984 if (howto->partial_inplace)
5985 addend = _bfd_mips_elf_sign_extend (addend, 16);
5986 value = symbol + addend - gp;
5987 /* If the symbol was local, any earlier relocatable links will
5988 have adjusted its addend with the gp offset, so compensate
5989 for that now. Don't do it for symbols forced local in this
5990 link, though, since they won't have had the gp offset applied
5991 to them before. */
5992 if (was_local_p)
5993 value += gp0;
5994 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5995 overflowed_p = mips_elf_overflow_p (value, 16);
5996 break;
5997
5998 case R_MIPS16_GOT16:
5999 case R_MIPS16_CALL16:
6000 case R_MIPS_GOT16:
6001 case R_MIPS_CALL16:
6002 case R_MICROMIPS_GOT16:
6003 case R_MICROMIPS_CALL16:
6004 /* VxWorks does not have separate local and global semantics for
6005 R_MIPS*_GOT16; every relocation evaluates to "G". */
6006 if (!htab->is_vxworks && local_p)
6007 {
6008 value = mips_elf_got16_entry (abfd, input_bfd, info,
6009 symbol + addend, !was_local_p);
6010 if (value == MINUS_ONE)
6011 return bfd_reloc_outofrange;
6012 value
6013 = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6014 overflowed_p = mips_elf_overflow_p (value, 16);
6015 break;
6016 }
6017
6018 /* Fall through. */
6019
6020 case R_MIPS_TLS_GD:
6021 case R_MIPS_TLS_GOTTPREL:
6022 case R_MIPS_TLS_LDM:
6023 case R_MIPS_GOT_DISP:
6024 case R_MIPS16_TLS_GD:
6025 case R_MIPS16_TLS_GOTTPREL:
6026 case R_MIPS16_TLS_LDM:
6027 case R_MICROMIPS_TLS_GD:
6028 case R_MICROMIPS_TLS_GOTTPREL:
6029 case R_MICROMIPS_TLS_LDM:
6030 case R_MICROMIPS_GOT_DISP:
6031 value = g;
6032 overflowed_p = mips_elf_overflow_p (value, 16);
6033 break;
6034
6035 case R_MIPS_GPREL32:
6036 value = (addend + symbol + gp0 - gp);
6037 if (!save_addend)
6038 value &= howto->dst_mask;
6039 break;
6040
6041 case R_MIPS_PC16:
6042 case R_MIPS_GNU_REL16_S2:
6043 if (howto->partial_inplace)
6044 addend = _bfd_mips_elf_sign_extend (addend, 18);
6045
6046 /* No need to exclude weak undefined symbols here as they resolve
6047 to 0 and never set `*cross_mode_jump_p', so this alignment check
6048 will never trigger for them. */
6049 if (*cross_mode_jump_p
6050 ? ((symbol + addend) & 3) != 1
6051 : ((symbol + addend) & 3) != 0)
6052 return bfd_reloc_outofrange;
6053
6054 value = symbol + addend - p;
6055 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6056 overflowed_p = mips_elf_overflow_p (value, 18);
6057 value >>= howto->rightshift;
6058 value &= howto->dst_mask;
6059 break;
6060
6061 case R_MIPS16_PC16_S1:
6062 if (howto->partial_inplace)
6063 addend = _bfd_mips_elf_sign_extend (addend, 17);
6064
6065 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6066 && (*cross_mode_jump_p
6067 ? ((symbol + addend) & 3) != 0
6068 : ((symbol + addend) & 1) == 0))
6069 return bfd_reloc_outofrange;
6070
6071 value = symbol + addend - p;
6072 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6073 overflowed_p = mips_elf_overflow_p (value, 17);
6074 value >>= howto->rightshift;
6075 value &= howto->dst_mask;
6076 break;
6077
6078 case R_MIPS_PC21_S2:
6079 if (howto->partial_inplace)
6080 addend = _bfd_mips_elf_sign_extend (addend, 23);
6081
6082 if ((symbol + addend) & 3)
6083 return bfd_reloc_outofrange;
6084
6085 value = symbol + addend - p;
6086 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6087 overflowed_p = mips_elf_overflow_p (value, 23);
6088 value >>= howto->rightshift;
6089 value &= howto->dst_mask;
6090 break;
6091
6092 case R_MIPS_PC26_S2:
6093 if (howto->partial_inplace)
6094 addend = _bfd_mips_elf_sign_extend (addend, 28);
6095
6096 if ((symbol + addend) & 3)
6097 return bfd_reloc_outofrange;
6098
6099 value = symbol + addend - p;
6100 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6101 overflowed_p = mips_elf_overflow_p (value, 28);
6102 value >>= howto->rightshift;
6103 value &= howto->dst_mask;
6104 break;
6105
6106 case R_MIPS_PC18_S3:
6107 if (howto->partial_inplace)
6108 addend = _bfd_mips_elf_sign_extend (addend, 21);
6109
6110 if ((symbol + addend) & 7)
6111 return bfd_reloc_outofrange;
6112
6113 value = symbol + addend - ((p | 7) ^ 7);
6114 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6115 overflowed_p = mips_elf_overflow_p (value, 21);
6116 value >>= howto->rightshift;
6117 value &= howto->dst_mask;
6118 break;
6119
6120 case R_MIPS_PC19_S2:
6121 if (howto->partial_inplace)
6122 addend = _bfd_mips_elf_sign_extend (addend, 21);
6123
6124 if ((symbol + addend) & 3)
6125 return bfd_reloc_outofrange;
6126
6127 value = symbol + addend - p;
6128 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6129 overflowed_p = mips_elf_overflow_p (value, 21);
6130 value >>= howto->rightshift;
6131 value &= howto->dst_mask;
6132 break;
6133
6134 case R_MIPS_PCHI16:
6135 value = mips_elf_high (symbol + addend - p);
6136 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6137 overflowed_p = mips_elf_overflow_p (value, 16);
6138 value &= howto->dst_mask;
6139 break;
6140
6141 case R_MIPS_PCLO16:
6142 if (howto->partial_inplace)
6143 addend = _bfd_mips_elf_sign_extend (addend, 16);
6144 value = symbol + addend - p;
6145 value &= howto->dst_mask;
6146 break;
6147
6148 case R_MICROMIPS_PC7_S1:
6149 if (howto->partial_inplace)
6150 addend = _bfd_mips_elf_sign_extend (addend, 8);
6151
6152 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6153 && (*cross_mode_jump_p
6154 ? ((symbol + addend + 2) & 3) != 0
6155 : ((symbol + addend + 2) & 1) == 0))
6156 return bfd_reloc_outofrange;
6157
6158 value = symbol + addend - p;
6159 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6160 overflowed_p = mips_elf_overflow_p (value, 8);
6161 value >>= howto->rightshift;
6162 value &= howto->dst_mask;
6163 break;
6164
6165 case R_MICROMIPS_PC10_S1:
6166 if (howto->partial_inplace)
6167 addend = _bfd_mips_elf_sign_extend (addend, 11);
6168
6169 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6170 && (*cross_mode_jump_p
6171 ? ((symbol + addend + 2) & 3) != 0
6172 : ((symbol + addend + 2) & 1) == 0))
6173 return bfd_reloc_outofrange;
6174
6175 value = symbol + addend - p;
6176 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6177 overflowed_p = mips_elf_overflow_p (value, 11);
6178 value >>= howto->rightshift;
6179 value &= howto->dst_mask;
6180 break;
6181
6182 case R_MICROMIPS_PC16_S1:
6183 if (howto->partial_inplace)
6184 addend = _bfd_mips_elf_sign_extend (addend, 17);
6185
6186 if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6187 && (*cross_mode_jump_p
6188 ? ((symbol + addend) & 3) != 0
6189 : ((symbol + addend) & 1) == 0))
6190 return bfd_reloc_outofrange;
6191
6192 value = symbol + addend - p;
6193 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6194 overflowed_p = mips_elf_overflow_p (value, 17);
6195 value >>= howto->rightshift;
6196 value &= howto->dst_mask;
6197 break;
6198
6199 case R_MICROMIPS_PC23_S2:
6200 if (howto->partial_inplace)
6201 addend = _bfd_mips_elf_sign_extend (addend, 25);
6202 value = symbol + addend - ((p | 3) ^ 3);
6203 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6204 overflowed_p = mips_elf_overflow_p (value, 25);
6205 value >>= howto->rightshift;
6206 value &= howto->dst_mask;
6207 break;
6208
6209 case R_MIPS_GOT_HI16:
6210 case R_MIPS_CALL_HI16:
6211 case R_MICROMIPS_GOT_HI16:
6212 case R_MICROMIPS_CALL_HI16:
6213 /* We're allowed to handle these two relocations identically.
6214 The dynamic linker is allowed to handle the CALL relocations
6215 differently by creating a lazy evaluation stub. */
6216 value = g;
6217 value = mips_elf_high (value);
6218 value &= howto->dst_mask;
6219 break;
6220
6221 case R_MIPS_GOT_LO16:
6222 case R_MIPS_CALL_LO16:
6223 case R_MICROMIPS_GOT_LO16:
6224 case R_MICROMIPS_CALL_LO16:
6225 value = g & howto->dst_mask;
6226 break;
6227
6228 case R_MIPS_GOT_PAGE:
6229 case R_MICROMIPS_GOT_PAGE:
6230 value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6231 if (value == MINUS_ONE)
6232 return bfd_reloc_outofrange;
6233 value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6234 overflowed_p = mips_elf_overflow_p (value, 16);
6235 break;
6236
6237 case R_MIPS_GOT_OFST:
6238 case R_MICROMIPS_GOT_OFST:
6239 if (local_p)
6240 mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6241 else
6242 value = addend;
6243 overflowed_p = mips_elf_overflow_p (value, 16);
6244 break;
6245
6246 case R_MIPS_SUB:
6247 case R_MICROMIPS_SUB:
6248 value = symbol - addend;
6249 value &= howto->dst_mask;
6250 break;
6251
6252 case R_MIPS_HIGHER:
6253 case R_MICROMIPS_HIGHER:
6254 value = mips_elf_higher (addend + symbol);
6255 value &= howto->dst_mask;
6256 break;
6257
6258 case R_MIPS_HIGHEST:
6259 case R_MICROMIPS_HIGHEST:
6260 value = mips_elf_highest (addend + symbol);
6261 value &= howto->dst_mask;
6262 break;
6263
6264 case R_MIPS_SCN_DISP:
6265 case R_MICROMIPS_SCN_DISP:
6266 value = symbol + addend - sec->output_offset;
6267 value &= howto->dst_mask;
6268 break;
6269
6270 case R_MIPS_JALR:
6271 case R_MICROMIPS_JALR:
6272 /* This relocation is only a hint. In some cases, we optimize
6273 it into a bal instruction. But we don't try to optimize
6274 when the symbol does not resolve locally. */
6275 if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6276 return bfd_reloc_continue;
6277 value = symbol + addend;
6278 break;
6279
6280 case R_MIPS_PJUMP:
6281 case R_MIPS_GNU_VTINHERIT:
6282 case R_MIPS_GNU_VTENTRY:
6283 /* We don't do anything with these at present. */
6284 return bfd_reloc_continue;
6285
6286 default:
6287 /* An unrecognized relocation type. */
6288 return bfd_reloc_notsupported;
6289 }
6290
6291 /* Store the VALUE for our caller. */
6292 *valuep = value;
6293 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6294 }
6295
6296 /* Obtain the field relocated by RELOCATION. */
6297
6298 static bfd_vma
6299 mips_elf_obtain_contents (reloc_howto_type *howto,
6300 const Elf_Internal_Rela *relocation,
6301 bfd *input_bfd, bfd_byte *contents)
6302 {
6303 bfd_vma x = 0;
6304 bfd_byte *location = contents + relocation->r_offset;
6305 unsigned int size = bfd_get_reloc_size (howto);
6306
6307 /* Obtain the bytes. */
6308 if (size != 0)
6309 x = bfd_get (8 * size, input_bfd, location);
6310
6311 return x;
6312 }
6313
6314 /* It has been determined that the result of the RELOCATION is the
6315 VALUE. Use HOWTO to place VALUE into the output file at the
6316 appropriate position. The SECTION is the section to which the
6317 relocation applies.
6318 CROSS_MODE_JUMP_P is true if the relocation field
6319 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6320
6321 Returns FALSE if anything goes wrong. */
6322
6323 static bfd_boolean
6324 mips_elf_perform_relocation (struct bfd_link_info *info,
6325 reloc_howto_type *howto,
6326 const Elf_Internal_Rela *relocation,
6327 bfd_vma value, bfd *input_bfd,
6328 asection *input_section, bfd_byte *contents,
6329 bfd_boolean cross_mode_jump_p)
6330 {
6331 bfd_vma x;
6332 bfd_byte *location;
6333 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6334 unsigned int size;
6335
6336 /* Figure out where the relocation is occurring. */
6337 location = contents + relocation->r_offset;
6338
6339 _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6340
6341 /* Obtain the current value. */
6342 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6343
6344 /* Clear the field we are setting. */
6345 x &= ~howto->dst_mask;
6346
6347 /* Set the field. */
6348 x |= (value & howto->dst_mask);
6349
6350 /* Detect incorrect JALX usage. If required, turn JAL or BAL into JALX. */
6351 if (!cross_mode_jump_p && jal_reloc_p (r_type))
6352 {
6353 bfd_vma opcode = x >> 26;
6354
6355 if (r_type == R_MIPS16_26 ? opcode == 0x7
6356 : r_type == R_MICROMIPS_26_S1 ? opcode == 0x3c
6357 : opcode == 0x1d)
6358 {
6359 info->callbacks->einfo
6360 (_("%X%H: Unsupported JALX to the same ISA mode\n"),
6361 input_bfd, input_section, relocation->r_offset);
6362 return TRUE;
6363 }
6364 }
6365 if (cross_mode_jump_p && jal_reloc_p (r_type))
6366 {
6367 bfd_boolean ok;
6368 bfd_vma opcode = x >> 26;
6369 bfd_vma jalx_opcode;
6370
6371 /* Check to see if the opcode is already JAL or JALX. */
6372 if (r_type == R_MIPS16_26)
6373 {
6374 ok = ((opcode == 0x6) || (opcode == 0x7));
6375 jalx_opcode = 0x7;
6376 }
6377 else if (r_type == R_MICROMIPS_26_S1)
6378 {
6379 ok = ((opcode == 0x3d) || (opcode == 0x3c));
6380 jalx_opcode = 0x3c;
6381 }
6382 else
6383 {
6384 ok = ((opcode == 0x3) || (opcode == 0x1d));
6385 jalx_opcode = 0x1d;
6386 }
6387
6388 /* If the opcode is not JAL or JALX, there's a problem. We cannot
6389 convert J or JALS to JALX. */
6390 if (!ok)
6391 {
6392 info->callbacks->einfo
6393 (_("%X%H: Unsupported jump between ISA modes; "
6394 "consider recompiling with interlinking enabled\n"),
6395 input_bfd, input_section, relocation->r_offset);
6396 return TRUE;
6397 }
6398
6399 /* Make this the JALX opcode. */
6400 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6401 }
6402 else if (cross_mode_jump_p && b_reloc_p (r_type))
6403 {
6404 bfd_boolean ok = FALSE;
6405 bfd_vma opcode = x >> 16;
6406 bfd_vma jalx_opcode = 0;
6407 bfd_vma addr;
6408 bfd_vma dest;
6409
6410 if (r_type == R_MICROMIPS_PC16_S1)
6411 {
6412 ok = opcode == 0x4060;
6413 jalx_opcode = 0x3c;
6414 value <<= 1;
6415 }
6416 else if (r_type == R_MIPS_PC16 || r_type == R_MIPS_GNU_REL16_S2)
6417 {
6418 ok = opcode == 0x411;
6419 jalx_opcode = 0x1d;
6420 value <<= 2;
6421 }
6422
6423 if (bfd_link_pic (info) || !ok)
6424 {
6425 info->callbacks->einfo
6426 (_("%X%H: Unsupported branch between ISA modes\n"),
6427 input_bfd, input_section, relocation->r_offset);
6428 return TRUE;
6429 }
6430
6431 addr = (input_section->output_section->vma
6432 + input_section->output_offset
6433 + relocation->r_offset
6434 + 4);
6435 dest = addr + (((value & 0x3ffff) ^ 0x20000) - 0x20000);
6436
6437 if ((addr >> 28) << 28 != (dest >> 28) << 28)
6438 {
6439 info->callbacks->einfo
6440 (_("%X%H: Cannot convert branch between ISA modes "
6441 "to JALX: relocation out of range\n"),
6442 input_bfd, input_section, relocation->r_offset);
6443 return TRUE;
6444 }
6445
6446 /* Make this the JALX opcode. */
6447 x = ((dest >> 2) & 0x3ffffff) | jalx_opcode << 26;
6448 }
6449
6450 /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6451 range. */
6452 if (!bfd_link_relocatable (info)
6453 && !cross_mode_jump_p
6454 && ((JAL_TO_BAL_P (input_bfd)
6455 && r_type == R_MIPS_26
6456 && (x >> 26) == 0x3) /* jal addr */
6457 || (JALR_TO_BAL_P (input_bfd)
6458 && r_type == R_MIPS_JALR
6459 && x == 0x0320f809) /* jalr t9 */
6460 || (JR_TO_B_P (input_bfd)
6461 && r_type == R_MIPS_JALR
6462 && x == 0x03200008))) /* jr t9 */
6463 {
6464 bfd_vma addr;
6465 bfd_vma dest;
6466 bfd_signed_vma off;
6467
6468 addr = (input_section->output_section->vma
6469 + input_section->output_offset
6470 + relocation->r_offset
6471 + 4);
6472 if (r_type == R_MIPS_26)
6473 dest = (value << 2) | ((addr >> 28) << 28);
6474 else
6475 dest = value;
6476 off = dest - addr;
6477 if (off <= 0x1ffff && off >= -0x20000)
6478 {
6479 if (x == 0x03200008) /* jr t9 */
6480 x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff); /* b addr */
6481 else
6482 x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff); /* bal addr */
6483 }
6484 }
6485
6486 /* Put the value into the output. */
6487 size = bfd_get_reloc_size (howto);
6488 if (size != 0)
6489 bfd_put (8 * size, input_bfd, x, location);
6490
6491 _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6492 location);
6493
6494 return TRUE;
6495 }
6496 \f
6497 /* Create a rel.dyn relocation for the dynamic linker to resolve. REL
6498 is the original relocation, which is now being transformed into a
6499 dynamic relocation. The ADDENDP is adjusted if necessary; the
6500 caller should store the result in place of the original addend. */
6501
6502 static bfd_boolean
6503 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6504 struct bfd_link_info *info,
6505 const Elf_Internal_Rela *rel,
6506 struct mips_elf_link_hash_entry *h,
6507 asection *sec, bfd_vma symbol,
6508 bfd_vma *addendp, asection *input_section)
6509 {
6510 Elf_Internal_Rela outrel[3];
6511 asection *sreloc;
6512 bfd *dynobj;
6513 int r_type;
6514 long indx;
6515 bfd_boolean defined_p;
6516 struct mips_elf_link_hash_table *htab;
6517
6518 htab = mips_elf_hash_table (info);
6519 BFD_ASSERT (htab != NULL);
6520
6521 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6522 dynobj = elf_hash_table (info)->dynobj;
6523 sreloc = mips_elf_rel_dyn_section (info, FALSE);
6524 BFD_ASSERT (sreloc != NULL);
6525 BFD_ASSERT (sreloc->contents != NULL);
6526 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6527 < sreloc->size);
6528
6529 outrel[0].r_offset =
6530 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6531 if (ABI_64_P (output_bfd))
6532 {
6533 outrel[1].r_offset =
6534 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6535 outrel[2].r_offset =
6536 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6537 }
6538
6539 if (outrel[0].r_offset == MINUS_ONE)
6540 /* The relocation field has been deleted. */
6541 return TRUE;
6542
6543 if (outrel[0].r_offset == MINUS_TWO)
6544 {
6545 /* The relocation field has been converted into a relative value of
6546 some sort. Functions like _bfd_elf_write_section_eh_frame expect
6547 the field to be fully relocated, so add in the symbol's value. */
6548 *addendp += symbol;
6549 return TRUE;
6550 }
6551
6552 /* We must now calculate the dynamic symbol table index to use
6553 in the relocation. */
6554 if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6555 {
6556 BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6557 indx = h->root.dynindx;
6558 if (SGI_COMPAT (output_bfd))
6559 defined_p = h->root.def_regular;
6560 else
6561 /* ??? glibc's ld.so just adds the final GOT entry to the
6562 relocation field. It therefore treats relocs against
6563 defined symbols in the same way as relocs against
6564 undefined symbols. */
6565 defined_p = FALSE;
6566 }
6567 else
6568 {
6569 if (sec != NULL && bfd_is_abs_section (sec))
6570 indx = 0;
6571 else if (sec == NULL || sec->owner == NULL)
6572 {
6573 bfd_set_error (bfd_error_bad_value);
6574 return FALSE;
6575 }
6576 else
6577 {
6578 indx = elf_section_data (sec->output_section)->dynindx;
6579 if (indx == 0)
6580 {
6581 asection *osec = htab->root.text_index_section;
6582 indx = elf_section_data (osec)->dynindx;
6583 }
6584 if (indx == 0)
6585 abort ();
6586 }
6587
6588 /* Instead of generating a relocation using the section
6589 symbol, we may as well make it a fully relative
6590 relocation. We want to avoid generating relocations to
6591 local symbols because we used to generate them
6592 incorrectly, without adding the original symbol value,
6593 which is mandated by the ABI for section symbols. In
6594 order to give dynamic loaders and applications time to
6595 phase out the incorrect use, we refrain from emitting
6596 section-relative relocations. It's not like they're
6597 useful, after all. This should be a bit more efficient
6598 as well. */
6599 /* ??? Although this behavior is compatible with glibc's ld.so,
6600 the ABI says that relocations against STN_UNDEF should have
6601 a symbol value of 0. Irix rld honors this, so relocations
6602 against STN_UNDEF have no effect. */
6603 if (!SGI_COMPAT (output_bfd))
6604 indx = 0;
6605 defined_p = TRUE;
6606 }
6607
6608 /* If the relocation was previously an absolute relocation and
6609 this symbol will not be referred to by the relocation, we must
6610 adjust it by the value we give it in the dynamic symbol table.
6611 Otherwise leave the job up to the dynamic linker. */
6612 if (defined_p && r_type != R_MIPS_REL32)
6613 *addendp += symbol;
6614
6615 if (htab->is_vxworks)
6616 /* VxWorks uses non-relative relocations for this. */
6617 outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6618 else
6619 /* The relocation is always an REL32 relocation because we don't
6620 know where the shared library will wind up at load-time. */
6621 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6622 R_MIPS_REL32);
6623
6624 /* For strict adherence to the ABI specification, we should
6625 generate a R_MIPS_64 relocation record by itself before the
6626 _REL32/_64 record as well, such that the addend is read in as
6627 a 64-bit value (REL32 is a 32-bit relocation, after all).
6628 However, since none of the existing ELF64 MIPS dynamic
6629 loaders seems to care, we don't waste space with these
6630 artificial relocations. If this turns out to not be true,
6631 mips_elf_allocate_dynamic_relocation() should be tweaked so
6632 as to make room for a pair of dynamic relocations per
6633 invocation if ABI_64_P, and here we should generate an
6634 additional relocation record with R_MIPS_64 by itself for a
6635 NULL symbol before this relocation record. */
6636 outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6637 ABI_64_P (output_bfd)
6638 ? R_MIPS_64
6639 : R_MIPS_NONE);
6640 outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6641
6642 /* Adjust the output offset of the relocation to reference the
6643 correct location in the output file. */
6644 outrel[0].r_offset += (input_section->output_section->vma
6645 + input_section->output_offset);
6646 outrel[1].r_offset += (input_section->output_section->vma
6647 + input_section->output_offset);
6648 outrel[2].r_offset += (input_section->output_section->vma
6649 + input_section->output_offset);
6650
6651 /* Put the relocation back out. We have to use the special
6652 relocation outputter in the 64-bit case since the 64-bit
6653 relocation format is non-standard. */
6654 if (ABI_64_P (output_bfd))
6655 {
6656 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6657 (output_bfd, &outrel[0],
6658 (sreloc->contents
6659 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6660 }
6661 else if (htab->is_vxworks)
6662 {
6663 /* VxWorks uses RELA rather than REL dynamic relocations. */
6664 outrel[0].r_addend = *addendp;
6665 bfd_elf32_swap_reloca_out
6666 (output_bfd, &outrel[0],
6667 (sreloc->contents
6668 + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6669 }
6670 else
6671 bfd_elf32_swap_reloc_out
6672 (output_bfd, &outrel[0],
6673 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6674
6675 /* We've now added another relocation. */
6676 ++sreloc->reloc_count;
6677
6678 /* Make sure the output section is writable. The dynamic linker
6679 will be writing to it. */
6680 elf_section_data (input_section->output_section)->this_hdr.sh_flags
6681 |= SHF_WRITE;
6682
6683 /* On IRIX5, make an entry of compact relocation info. */
6684 if (IRIX_COMPAT (output_bfd) == ict_irix5)
6685 {
6686 asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6687 bfd_byte *cr;
6688
6689 if (scpt)
6690 {
6691 Elf32_crinfo cptrel;
6692
6693 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6694 cptrel.vaddr = (rel->r_offset
6695 + input_section->output_section->vma
6696 + input_section->output_offset);
6697 if (r_type == R_MIPS_REL32)
6698 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6699 else
6700 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6701 mips_elf_set_cr_dist2to (cptrel, 0);
6702 cptrel.konst = *addendp;
6703
6704 cr = (scpt->contents
6705 + sizeof (Elf32_External_compact_rel));
6706 mips_elf_set_cr_relvaddr (cptrel, 0);
6707 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6708 ((Elf32_External_crinfo *) cr
6709 + scpt->reloc_count));
6710 ++scpt->reloc_count;
6711 }
6712 }
6713
6714 /* If we've written this relocation for a readonly section,
6715 we need to set DF_TEXTREL again, so that we do not delete the
6716 DT_TEXTREL tag. */
6717 if (MIPS_ELF_READONLY_SECTION (input_section))
6718 info->flags |= DF_TEXTREL;
6719
6720 return TRUE;
6721 }
6722 \f
6723 /* Return the MACH for a MIPS e_flags value. */
6724
6725 unsigned long
6726 _bfd_elf_mips_mach (flagword flags)
6727 {
6728 switch (flags & EF_MIPS_MACH)
6729 {
6730 case E_MIPS_MACH_3900:
6731 return bfd_mach_mips3900;
6732
6733 case E_MIPS_MACH_4010:
6734 return bfd_mach_mips4010;
6735
6736 case E_MIPS_MACH_4100:
6737 return bfd_mach_mips4100;
6738
6739 case E_MIPS_MACH_4111:
6740 return bfd_mach_mips4111;
6741
6742 case E_MIPS_MACH_4120:
6743 return bfd_mach_mips4120;
6744
6745 case E_MIPS_MACH_4650:
6746 return bfd_mach_mips4650;
6747
6748 case E_MIPS_MACH_5400:
6749 return bfd_mach_mips5400;
6750
6751 case E_MIPS_MACH_5500:
6752 return bfd_mach_mips5500;
6753
6754 case E_MIPS_MACH_5900:
6755 return bfd_mach_mips5900;
6756
6757 case E_MIPS_MACH_9000:
6758 return bfd_mach_mips9000;
6759
6760 case E_MIPS_MACH_SB1:
6761 return bfd_mach_mips_sb1;
6762
6763 case E_MIPS_MACH_LS2E:
6764 return bfd_mach_mips_loongson_2e;
6765
6766 case E_MIPS_MACH_LS2F:
6767 return bfd_mach_mips_loongson_2f;
6768
6769 case E_MIPS_MACH_LS3A:
6770 return bfd_mach_mips_loongson_3a;
6771
6772 case E_MIPS_MACH_OCTEON3:
6773 return bfd_mach_mips_octeon3;
6774
6775 case E_MIPS_MACH_OCTEON2:
6776 return bfd_mach_mips_octeon2;
6777
6778 case E_MIPS_MACH_OCTEON:
6779 return bfd_mach_mips_octeon;
6780
6781 case E_MIPS_MACH_XLR:
6782 return bfd_mach_mips_xlr;
6783
6784 default:
6785 switch (flags & EF_MIPS_ARCH)
6786 {
6787 default:
6788 case E_MIPS_ARCH_1:
6789 return bfd_mach_mips3000;
6790
6791 case E_MIPS_ARCH_2:
6792 return bfd_mach_mips6000;
6793
6794 case E_MIPS_ARCH_3:
6795 return bfd_mach_mips4000;
6796
6797 case E_MIPS_ARCH_4:
6798 return bfd_mach_mips8000;
6799
6800 case E_MIPS_ARCH_5:
6801 return bfd_mach_mips5;
6802
6803 case E_MIPS_ARCH_32:
6804 return bfd_mach_mipsisa32;
6805
6806 case E_MIPS_ARCH_64:
6807 return bfd_mach_mipsisa64;
6808
6809 case E_MIPS_ARCH_32R2:
6810 return bfd_mach_mipsisa32r2;
6811
6812 case E_MIPS_ARCH_64R2:
6813 return bfd_mach_mipsisa64r2;
6814
6815 case E_MIPS_ARCH_32R6:
6816 return bfd_mach_mipsisa32r6;
6817
6818 case E_MIPS_ARCH_64R6:
6819 return bfd_mach_mipsisa64r6;
6820 }
6821 }
6822
6823 return 0;
6824 }
6825
6826 /* Return printable name for ABI. */
6827
6828 static INLINE char *
6829 elf_mips_abi_name (bfd *abfd)
6830 {
6831 flagword flags;
6832
6833 flags = elf_elfheader (abfd)->e_flags;
6834 switch (flags & EF_MIPS_ABI)
6835 {
6836 case 0:
6837 if (ABI_N32_P (abfd))
6838 return "N32";
6839 else if (ABI_64_P (abfd))
6840 return "64";
6841 else
6842 return "none";
6843 case E_MIPS_ABI_O32:
6844 return "O32";
6845 case E_MIPS_ABI_O64:
6846 return "O64";
6847 case E_MIPS_ABI_EABI32:
6848 return "EABI32";
6849 case E_MIPS_ABI_EABI64:
6850 return "EABI64";
6851 default:
6852 return "unknown abi";
6853 }
6854 }
6855 \f
6856 /* MIPS ELF uses two common sections. One is the usual one, and the
6857 other is for small objects. All the small objects are kept
6858 together, and then referenced via the gp pointer, which yields
6859 faster assembler code. This is what we use for the small common
6860 section. This approach is copied from ecoff.c. */
6861 static asection mips_elf_scom_section;
6862 static asymbol mips_elf_scom_symbol;
6863 static asymbol *mips_elf_scom_symbol_ptr;
6864
6865 /* MIPS ELF also uses an acommon section, which represents an
6866 allocated common symbol which may be overridden by a
6867 definition in a shared library. */
6868 static asection mips_elf_acom_section;
6869 static asymbol mips_elf_acom_symbol;
6870 static asymbol *mips_elf_acom_symbol_ptr;
6871
6872 /* This is used for both the 32-bit and the 64-bit ABI. */
6873
6874 void
6875 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6876 {
6877 elf_symbol_type *elfsym;
6878
6879 /* Handle the special MIPS section numbers that a symbol may use. */
6880 elfsym = (elf_symbol_type *) asym;
6881 switch (elfsym->internal_elf_sym.st_shndx)
6882 {
6883 case SHN_MIPS_ACOMMON:
6884 /* This section is used in a dynamically linked executable file.
6885 It is an allocated common section. The dynamic linker can
6886 either resolve these symbols to something in a shared
6887 library, or it can just leave them here. For our purposes,
6888 we can consider these symbols to be in a new section. */
6889 if (mips_elf_acom_section.name == NULL)
6890 {
6891 /* Initialize the acommon section. */
6892 mips_elf_acom_section.name = ".acommon";
6893 mips_elf_acom_section.flags = SEC_ALLOC;
6894 mips_elf_acom_section.output_section = &mips_elf_acom_section;
6895 mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6896 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6897 mips_elf_acom_symbol.name = ".acommon";
6898 mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6899 mips_elf_acom_symbol.section = &mips_elf_acom_section;
6900 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6901 }
6902 asym->section = &mips_elf_acom_section;
6903 break;
6904
6905 case SHN_COMMON:
6906 /* Common symbols less than the GP size are automatically
6907 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
6908 if (asym->value > elf_gp_size (abfd)
6909 || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6910 || IRIX_COMPAT (abfd) == ict_irix6)
6911 break;
6912 /* Fall through. */
6913 case SHN_MIPS_SCOMMON:
6914 if (mips_elf_scom_section.name == NULL)
6915 {
6916 /* Initialize the small common section. */
6917 mips_elf_scom_section.name = ".scommon";
6918 mips_elf_scom_section.flags = SEC_IS_COMMON;
6919 mips_elf_scom_section.output_section = &mips_elf_scom_section;
6920 mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6921 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6922 mips_elf_scom_symbol.name = ".scommon";
6923 mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6924 mips_elf_scom_symbol.section = &mips_elf_scom_section;
6925 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6926 }
6927 asym->section = &mips_elf_scom_section;
6928 asym->value = elfsym->internal_elf_sym.st_size;
6929 break;
6930
6931 case SHN_MIPS_SUNDEFINED:
6932 asym->section = bfd_und_section_ptr;
6933 break;
6934
6935 case SHN_MIPS_TEXT:
6936 {
6937 asection *section = bfd_get_section_by_name (abfd, ".text");
6938
6939 if (section != NULL)
6940 {
6941 asym->section = section;
6942 /* MIPS_TEXT is a bit special, the address is not an offset
6943 to the base of the .text section. So substract the section
6944 base address to make it an offset. */
6945 asym->value -= section->vma;
6946 }
6947 }
6948 break;
6949
6950 case SHN_MIPS_DATA:
6951 {
6952 asection *section = bfd_get_section_by_name (abfd, ".data");
6953
6954 if (section != NULL)
6955 {
6956 asym->section = section;
6957 /* MIPS_DATA is a bit special, the address is not an offset
6958 to the base of the .data section. So substract the section
6959 base address to make it an offset. */
6960 asym->value -= section->vma;
6961 }
6962 }
6963 break;
6964 }
6965
6966 /* If this is an odd-valued function symbol, assume it's a MIPS16
6967 or microMIPS one. */
6968 if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6969 && (asym->value & 1) != 0)
6970 {
6971 asym->value--;
6972 if (MICROMIPS_P (abfd))
6973 elfsym->internal_elf_sym.st_other
6974 = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6975 else
6976 elfsym->internal_elf_sym.st_other
6977 = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6978 }
6979 }
6980 \f
6981 /* Implement elf_backend_eh_frame_address_size. This differs from
6982 the default in the way it handles EABI64.
6983
6984 EABI64 was originally specified as an LP64 ABI, and that is what
6985 -mabi=eabi normally gives on a 64-bit target. However, gcc has
6986 historically accepted the combination of -mabi=eabi and -mlong32,
6987 and this ILP32 variation has become semi-official over time.
6988 Both forms use elf32 and have pointer-sized FDE addresses.
6989
6990 If an EABI object was generated by GCC 4.0 or above, it will have
6991 an empty .gcc_compiled_longXX section, where XX is the size of longs
6992 in bits. Unfortunately, ILP32 objects generated by earlier compilers
6993 have no special marking to distinguish them from LP64 objects.
6994
6995 We don't want users of the official LP64 ABI to be punished for the
6996 existence of the ILP32 variant, but at the same time, we don't want
6997 to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6998 We therefore take the following approach:
6999
7000 - If ABFD contains a .gcc_compiled_longXX section, use it to
7001 determine the pointer size.
7002
7003 - Otherwise check the type of the first relocation. Assume that
7004 the LP64 ABI is being used if the relocation is of type R_MIPS_64.
7005
7006 - Otherwise punt.
7007
7008 The second check is enough to detect LP64 objects generated by pre-4.0
7009 compilers because, in the kind of output generated by those compilers,
7010 the first relocation will be associated with either a CIE personality
7011 routine or an FDE start address. Furthermore, the compilers never
7012 used a special (non-pointer) encoding for this ABI.
7013
7014 Checking the relocation type should also be safe because there is no
7015 reason to use R_MIPS_64 in an ILP32 object. Pre-4.0 compilers never
7016 did so. */
7017
7018 unsigned int
7019 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
7020 {
7021 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
7022 return 8;
7023 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
7024 {
7025 bfd_boolean long32_p, long64_p;
7026
7027 long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
7028 long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
7029 if (long32_p && long64_p)
7030 return 0;
7031 if (long32_p)
7032 return 4;
7033 if (long64_p)
7034 return 8;
7035
7036 if (sec->reloc_count > 0
7037 && elf_section_data (sec)->relocs != NULL
7038 && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
7039 == R_MIPS_64))
7040 return 8;
7041
7042 return 0;
7043 }
7044 return 4;
7045 }
7046 \f
7047 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
7048 relocations against two unnamed section symbols to resolve to the
7049 same address. For example, if we have code like:
7050
7051 lw $4,%got_disp(.data)($gp)
7052 lw $25,%got_disp(.text)($gp)
7053 jalr $25
7054
7055 then the linker will resolve both relocations to .data and the program
7056 will jump there rather than to .text.
7057
7058 We can work around this problem by giving names to local section symbols.
7059 This is also what the MIPSpro tools do. */
7060
7061 bfd_boolean
7062 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
7063 {
7064 return SGI_COMPAT (abfd);
7065 }
7066 \f
7067 /* Work over a section just before writing it out. This routine is
7068 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
7069 sections that need the SHF_MIPS_GPREL flag by name; there has to be
7070 a better way. */
7071
7072 bfd_boolean
7073 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
7074 {
7075 if (hdr->sh_type == SHT_MIPS_REGINFO
7076 && hdr->sh_size > 0)
7077 {
7078 bfd_byte buf[4];
7079
7080 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
7081 BFD_ASSERT (hdr->contents == NULL);
7082
7083 if (bfd_seek (abfd,
7084 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
7085 SEEK_SET) != 0)
7086 return FALSE;
7087 H_PUT_32 (abfd, elf_gp (abfd), buf);
7088 if (bfd_bwrite (buf, 4, abfd) != 4)
7089 return FALSE;
7090 }
7091
7092 if (hdr->sh_type == SHT_MIPS_OPTIONS
7093 && hdr->bfd_section != NULL
7094 && mips_elf_section_data (hdr->bfd_section) != NULL
7095 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
7096 {
7097 bfd_byte *contents, *l, *lend;
7098
7099 /* We stored the section contents in the tdata field in the
7100 set_section_contents routine. We save the section contents
7101 so that we don't have to read them again.
7102 At this point we know that elf_gp is set, so we can look
7103 through the section contents to see if there is an
7104 ODK_REGINFO structure. */
7105
7106 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
7107 l = contents;
7108 lend = contents + hdr->sh_size;
7109 while (l + sizeof (Elf_External_Options) <= lend)
7110 {
7111 Elf_Internal_Options intopt;
7112
7113 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7114 &intopt);
7115 if (intopt.size < sizeof (Elf_External_Options))
7116 {
7117 (*_bfd_error_handler)
7118 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
7119 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7120 break;
7121 }
7122 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7123 {
7124 bfd_byte buf[8];
7125
7126 if (bfd_seek (abfd,
7127 (hdr->sh_offset
7128 + (l - contents)
7129 + sizeof (Elf_External_Options)
7130 + (sizeof (Elf64_External_RegInfo) - 8)),
7131 SEEK_SET) != 0)
7132 return FALSE;
7133 H_PUT_64 (abfd, elf_gp (abfd), buf);
7134 if (bfd_bwrite (buf, 8, abfd) != 8)
7135 return FALSE;
7136 }
7137 else if (intopt.kind == ODK_REGINFO)
7138 {
7139 bfd_byte buf[4];
7140
7141 if (bfd_seek (abfd,
7142 (hdr->sh_offset
7143 + (l - contents)
7144 + sizeof (Elf_External_Options)
7145 + (sizeof (Elf32_External_RegInfo) - 4)),
7146 SEEK_SET) != 0)
7147 return FALSE;
7148 H_PUT_32 (abfd, elf_gp (abfd), buf);
7149 if (bfd_bwrite (buf, 4, abfd) != 4)
7150 return FALSE;
7151 }
7152 l += intopt.size;
7153 }
7154 }
7155
7156 if (hdr->bfd_section != NULL)
7157 {
7158 const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
7159
7160 /* .sbss is not handled specially here because the GNU/Linux
7161 prelinker can convert .sbss from NOBITS to PROGBITS and
7162 changing it back to NOBITS breaks the binary. The entry in
7163 _bfd_mips_elf_special_sections will ensure the correct flags
7164 are set on .sbss if BFD creates it without reading it from an
7165 input file, and without special handling here the flags set
7166 on it in an input file will be followed. */
7167 if (strcmp (name, ".sdata") == 0
7168 || strcmp (name, ".lit8") == 0
7169 || strcmp (name, ".lit4") == 0)
7170 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7171 else if (strcmp (name, ".srdata") == 0)
7172 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7173 else if (strcmp (name, ".compact_rel") == 0)
7174 hdr->sh_flags = 0;
7175 else if (strcmp (name, ".rtproc") == 0)
7176 {
7177 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7178 {
7179 unsigned int adjust;
7180
7181 adjust = hdr->sh_size % hdr->sh_addralign;
7182 if (adjust != 0)
7183 hdr->sh_size += hdr->sh_addralign - adjust;
7184 }
7185 }
7186 }
7187
7188 return TRUE;
7189 }
7190
7191 /* Handle a MIPS specific section when reading an object file. This
7192 is called when elfcode.h finds a section with an unknown type.
7193 This routine supports both the 32-bit and 64-bit ELF ABI.
7194
7195 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7196 how to. */
7197
7198 bfd_boolean
7199 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7200 Elf_Internal_Shdr *hdr,
7201 const char *name,
7202 int shindex)
7203 {
7204 flagword flags = 0;
7205
7206 /* There ought to be a place to keep ELF backend specific flags, but
7207 at the moment there isn't one. We just keep track of the
7208 sections by their name, instead. Fortunately, the ABI gives
7209 suggested names for all the MIPS specific sections, so we will
7210 probably get away with this. */
7211 switch (hdr->sh_type)
7212 {
7213 case SHT_MIPS_LIBLIST:
7214 if (strcmp (name, ".liblist") != 0)
7215 return FALSE;
7216 break;
7217 case SHT_MIPS_MSYM:
7218 if (strcmp (name, ".msym") != 0)
7219 return FALSE;
7220 break;
7221 case SHT_MIPS_CONFLICT:
7222 if (strcmp (name, ".conflict") != 0)
7223 return FALSE;
7224 break;
7225 case SHT_MIPS_GPTAB:
7226 if (! CONST_STRNEQ (name, ".gptab."))
7227 return FALSE;
7228 break;
7229 case SHT_MIPS_UCODE:
7230 if (strcmp (name, ".ucode") != 0)
7231 return FALSE;
7232 break;
7233 case SHT_MIPS_DEBUG:
7234 if (strcmp (name, ".mdebug") != 0)
7235 return FALSE;
7236 flags = SEC_DEBUGGING;
7237 break;
7238 case SHT_MIPS_REGINFO:
7239 if (strcmp (name, ".reginfo") != 0
7240 || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7241 return FALSE;
7242 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7243 break;
7244 case SHT_MIPS_IFACE:
7245 if (strcmp (name, ".MIPS.interfaces") != 0)
7246 return FALSE;
7247 break;
7248 case SHT_MIPS_CONTENT:
7249 if (! CONST_STRNEQ (name, ".MIPS.content"))
7250 return FALSE;
7251 break;
7252 case SHT_MIPS_OPTIONS:
7253 if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7254 return FALSE;
7255 break;
7256 case SHT_MIPS_ABIFLAGS:
7257 if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7258 return FALSE;
7259 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7260 break;
7261 case SHT_MIPS_DWARF:
7262 if (! CONST_STRNEQ (name, ".debug_")
7263 && ! CONST_STRNEQ (name, ".zdebug_"))
7264 return FALSE;
7265 break;
7266 case SHT_MIPS_SYMBOL_LIB:
7267 if (strcmp (name, ".MIPS.symlib") != 0)
7268 return FALSE;
7269 break;
7270 case SHT_MIPS_EVENTS:
7271 if (! CONST_STRNEQ (name, ".MIPS.events")
7272 && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7273 return FALSE;
7274 break;
7275 default:
7276 break;
7277 }
7278
7279 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7280 return FALSE;
7281
7282 if (flags)
7283 {
7284 if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7285 (bfd_get_section_flags (abfd,
7286 hdr->bfd_section)
7287 | flags)))
7288 return FALSE;
7289 }
7290
7291 if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7292 {
7293 Elf_External_ABIFlags_v0 ext;
7294
7295 if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7296 &ext, 0, sizeof ext))
7297 return FALSE;
7298 bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7299 &mips_elf_tdata (abfd)->abiflags);
7300 if (mips_elf_tdata (abfd)->abiflags.version != 0)
7301 return FALSE;
7302 mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7303 }
7304
7305 /* FIXME: We should record sh_info for a .gptab section. */
7306
7307 /* For a .reginfo section, set the gp value in the tdata information
7308 from the contents of this section. We need the gp value while
7309 processing relocs, so we just get it now. The .reginfo section
7310 is not used in the 64-bit MIPS ELF ABI. */
7311 if (hdr->sh_type == SHT_MIPS_REGINFO)
7312 {
7313 Elf32_External_RegInfo ext;
7314 Elf32_RegInfo s;
7315
7316 if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7317 &ext, 0, sizeof ext))
7318 return FALSE;
7319 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7320 elf_gp (abfd) = s.ri_gp_value;
7321 }
7322
7323 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7324 set the gp value based on what we find. We may see both
7325 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7326 they should agree. */
7327 if (hdr->sh_type == SHT_MIPS_OPTIONS)
7328 {
7329 bfd_byte *contents, *l, *lend;
7330
7331 contents = bfd_malloc (hdr->sh_size);
7332 if (contents == NULL)
7333 return FALSE;
7334 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7335 0, hdr->sh_size))
7336 {
7337 free (contents);
7338 return FALSE;
7339 }
7340 l = contents;
7341 lend = contents + hdr->sh_size;
7342 while (l + sizeof (Elf_External_Options) <= lend)
7343 {
7344 Elf_Internal_Options intopt;
7345
7346 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7347 &intopt);
7348 if (intopt.size < sizeof (Elf_External_Options))
7349 {
7350 (*_bfd_error_handler)
7351 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
7352 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7353 break;
7354 }
7355 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7356 {
7357 Elf64_Internal_RegInfo intreg;
7358
7359 bfd_mips_elf64_swap_reginfo_in
7360 (abfd,
7361 ((Elf64_External_RegInfo *)
7362 (l + sizeof (Elf_External_Options))),
7363 &intreg);
7364 elf_gp (abfd) = intreg.ri_gp_value;
7365 }
7366 else if (intopt.kind == ODK_REGINFO)
7367 {
7368 Elf32_RegInfo intreg;
7369
7370 bfd_mips_elf32_swap_reginfo_in
7371 (abfd,
7372 ((Elf32_External_RegInfo *)
7373 (l + sizeof (Elf_External_Options))),
7374 &intreg);
7375 elf_gp (abfd) = intreg.ri_gp_value;
7376 }
7377 l += intopt.size;
7378 }
7379 free (contents);
7380 }
7381
7382 return TRUE;
7383 }
7384
7385 /* Set the correct type for a MIPS ELF section. We do this by the
7386 section name, which is a hack, but ought to work. This routine is
7387 used by both the 32-bit and the 64-bit ABI. */
7388
7389 bfd_boolean
7390 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7391 {
7392 const char *name = bfd_get_section_name (abfd, sec);
7393
7394 if (strcmp (name, ".liblist") == 0)
7395 {
7396 hdr->sh_type = SHT_MIPS_LIBLIST;
7397 hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7398 /* The sh_link field is set in final_write_processing. */
7399 }
7400 else if (strcmp (name, ".conflict") == 0)
7401 hdr->sh_type = SHT_MIPS_CONFLICT;
7402 else if (CONST_STRNEQ (name, ".gptab."))
7403 {
7404 hdr->sh_type = SHT_MIPS_GPTAB;
7405 hdr->sh_entsize = sizeof (Elf32_External_gptab);
7406 /* The sh_info field is set in final_write_processing. */
7407 }
7408 else if (strcmp (name, ".ucode") == 0)
7409 hdr->sh_type = SHT_MIPS_UCODE;
7410 else if (strcmp (name, ".mdebug") == 0)
7411 {
7412 hdr->sh_type = SHT_MIPS_DEBUG;
7413 /* In a shared object on IRIX 5.3, the .mdebug section has an
7414 entsize of 0. FIXME: Does this matter? */
7415 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7416 hdr->sh_entsize = 0;
7417 else
7418 hdr->sh_entsize = 1;
7419 }
7420 else if (strcmp (name, ".reginfo") == 0)
7421 {
7422 hdr->sh_type = SHT_MIPS_REGINFO;
7423 /* In a shared object on IRIX 5.3, the .reginfo section has an
7424 entsize of 0x18. FIXME: Does this matter? */
7425 if (SGI_COMPAT (abfd))
7426 {
7427 if ((abfd->flags & DYNAMIC) != 0)
7428 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7429 else
7430 hdr->sh_entsize = 1;
7431 }
7432 else
7433 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7434 }
7435 else if (SGI_COMPAT (abfd)
7436 && (strcmp (name, ".hash") == 0
7437 || strcmp (name, ".dynamic") == 0
7438 || strcmp (name, ".dynstr") == 0))
7439 {
7440 if (SGI_COMPAT (abfd))
7441 hdr->sh_entsize = 0;
7442 #if 0
7443 /* This isn't how the IRIX6 linker behaves. */
7444 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7445 #endif
7446 }
7447 else if (strcmp (name, ".got") == 0
7448 || strcmp (name, ".srdata") == 0
7449 || strcmp (name, ".sdata") == 0
7450 || strcmp (name, ".sbss") == 0
7451 || strcmp (name, ".lit4") == 0
7452 || strcmp (name, ".lit8") == 0)
7453 hdr->sh_flags |= SHF_MIPS_GPREL;
7454 else if (strcmp (name, ".MIPS.interfaces") == 0)
7455 {
7456 hdr->sh_type = SHT_MIPS_IFACE;
7457 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7458 }
7459 else if (CONST_STRNEQ (name, ".MIPS.content"))
7460 {
7461 hdr->sh_type = SHT_MIPS_CONTENT;
7462 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7463 /* The sh_info field is set in final_write_processing. */
7464 }
7465 else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7466 {
7467 hdr->sh_type = SHT_MIPS_OPTIONS;
7468 hdr->sh_entsize = 1;
7469 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7470 }
7471 else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7472 {
7473 hdr->sh_type = SHT_MIPS_ABIFLAGS;
7474 hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7475 }
7476 else if (CONST_STRNEQ (name, ".debug_")
7477 || CONST_STRNEQ (name, ".zdebug_"))
7478 {
7479 hdr->sh_type = SHT_MIPS_DWARF;
7480
7481 /* Irix facilities such as libexc expect a single .debug_frame
7482 per executable, the system ones have NOSTRIP set and the linker
7483 doesn't merge sections with different flags so ... */
7484 if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7485 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7486 }
7487 else if (strcmp (name, ".MIPS.symlib") == 0)
7488 {
7489 hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7490 /* The sh_link and sh_info fields are set in
7491 final_write_processing. */
7492 }
7493 else if (CONST_STRNEQ (name, ".MIPS.events")
7494 || CONST_STRNEQ (name, ".MIPS.post_rel"))
7495 {
7496 hdr->sh_type = SHT_MIPS_EVENTS;
7497 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7498 /* The sh_link field is set in final_write_processing. */
7499 }
7500 else if (strcmp (name, ".msym") == 0)
7501 {
7502 hdr->sh_type = SHT_MIPS_MSYM;
7503 hdr->sh_flags |= SHF_ALLOC;
7504 hdr->sh_entsize = 8;
7505 }
7506
7507 /* The generic elf_fake_sections will set up REL_HDR using the default
7508 kind of relocations. We used to set up a second header for the
7509 non-default kind of relocations here, but only NewABI would use
7510 these, and the IRIX ld doesn't like resulting empty RELA sections.
7511 Thus we create those header only on demand now. */
7512
7513 return TRUE;
7514 }
7515
7516 /* Given a BFD section, try to locate the corresponding ELF section
7517 index. This is used by both the 32-bit and the 64-bit ABI.
7518 Actually, it's not clear to me that the 64-bit ABI supports these,
7519 but for non-PIC objects we will certainly want support for at least
7520 the .scommon section. */
7521
7522 bfd_boolean
7523 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7524 asection *sec, int *retval)
7525 {
7526 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7527 {
7528 *retval = SHN_MIPS_SCOMMON;
7529 return TRUE;
7530 }
7531 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7532 {
7533 *retval = SHN_MIPS_ACOMMON;
7534 return TRUE;
7535 }
7536 return FALSE;
7537 }
7538 \f
7539 /* Hook called by the linker routine which adds symbols from an object
7540 file. We must handle the special MIPS section numbers here. */
7541
7542 bfd_boolean
7543 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7544 Elf_Internal_Sym *sym, const char **namep,
7545 flagword *flagsp ATTRIBUTE_UNUSED,
7546 asection **secp, bfd_vma *valp)
7547 {
7548 if (SGI_COMPAT (abfd)
7549 && (abfd->flags & DYNAMIC) != 0
7550 && strcmp (*namep, "_rld_new_interface") == 0)
7551 {
7552 /* Skip IRIX5 rld entry name. */
7553 *namep = NULL;
7554 return TRUE;
7555 }
7556
7557 /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7558 a SECTION *ABS*. This causes ld to think it can resolve _gp_disp
7559 by setting a DT_NEEDED for the shared object. Since _gp_disp is
7560 a magic symbol resolved by the linker, we ignore this bogus definition
7561 of _gp_disp. New ABI objects do not suffer from this problem so this
7562 is not done for them. */
7563 if (!NEWABI_P(abfd)
7564 && (sym->st_shndx == SHN_ABS)
7565 && (strcmp (*namep, "_gp_disp") == 0))
7566 {
7567 *namep = NULL;
7568 return TRUE;
7569 }
7570
7571 switch (sym->st_shndx)
7572 {
7573 case SHN_COMMON:
7574 /* Common symbols less than the GP size are automatically
7575 treated as SHN_MIPS_SCOMMON symbols. */
7576 if (sym->st_size > elf_gp_size (abfd)
7577 || ELF_ST_TYPE (sym->st_info) == STT_TLS
7578 || IRIX_COMPAT (abfd) == ict_irix6)
7579 break;
7580 /* Fall through. */
7581 case SHN_MIPS_SCOMMON:
7582 *secp = bfd_make_section_old_way (abfd, ".scommon");
7583 (*secp)->flags |= SEC_IS_COMMON;
7584 *valp = sym->st_size;
7585 break;
7586
7587 case SHN_MIPS_TEXT:
7588 /* This section is used in a shared object. */
7589 if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7590 {
7591 asymbol *elf_text_symbol;
7592 asection *elf_text_section;
7593 bfd_size_type amt = sizeof (asection);
7594
7595 elf_text_section = bfd_zalloc (abfd, amt);
7596 if (elf_text_section == NULL)
7597 return FALSE;
7598
7599 amt = sizeof (asymbol);
7600 elf_text_symbol = bfd_zalloc (abfd, amt);
7601 if (elf_text_symbol == NULL)
7602 return FALSE;
7603
7604 /* Initialize the section. */
7605
7606 mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7607 mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7608
7609 elf_text_section->symbol = elf_text_symbol;
7610 elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7611
7612 elf_text_section->name = ".text";
7613 elf_text_section->flags = SEC_NO_FLAGS;
7614 elf_text_section->output_section = NULL;
7615 elf_text_section->owner = abfd;
7616 elf_text_symbol->name = ".text";
7617 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7618 elf_text_symbol->section = elf_text_section;
7619 }
7620 /* This code used to do *secp = bfd_und_section_ptr if
7621 bfd_link_pic (info). I don't know why, and that doesn't make sense,
7622 so I took it out. */
7623 *secp = mips_elf_tdata (abfd)->elf_text_section;
7624 break;
7625
7626 case SHN_MIPS_ACOMMON:
7627 /* Fall through. XXX Can we treat this as allocated data? */
7628 case SHN_MIPS_DATA:
7629 /* This section is used in a shared object. */
7630 if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7631 {
7632 asymbol *elf_data_symbol;
7633 asection *elf_data_section;
7634 bfd_size_type amt = sizeof (asection);
7635
7636 elf_data_section = bfd_zalloc (abfd, amt);
7637 if (elf_data_section == NULL)
7638 return FALSE;
7639
7640 amt = sizeof (asymbol);
7641 elf_data_symbol = bfd_zalloc (abfd, amt);
7642 if (elf_data_symbol == NULL)
7643 return FALSE;
7644
7645 /* Initialize the section. */
7646
7647 mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7648 mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7649
7650 elf_data_section->symbol = elf_data_symbol;
7651 elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7652
7653 elf_data_section->name = ".data";
7654 elf_data_section->flags = SEC_NO_FLAGS;
7655 elf_data_section->output_section = NULL;
7656 elf_data_section->owner = abfd;
7657 elf_data_symbol->name = ".data";
7658 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7659 elf_data_symbol->section = elf_data_section;
7660 }
7661 /* This code used to do *secp = bfd_und_section_ptr if
7662 bfd_link_pic (info). I don't know why, and that doesn't make sense,
7663 so I took it out. */
7664 *secp = mips_elf_tdata (abfd)->elf_data_section;
7665 break;
7666
7667 case SHN_MIPS_SUNDEFINED:
7668 *secp = bfd_und_section_ptr;
7669 break;
7670 }
7671
7672 if (SGI_COMPAT (abfd)
7673 && ! bfd_link_pic (info)
7674 && info->output_bfd->xvec == abfd->xvec
7675 && strcmp (*namep, "__rld_obj_head") == 0)
7676 {
7677 struct elf_link_hash_entry *h;
7678 struct bfd_link_hash_entry *bh;
7679
7680 /* Mark __rld_obj_head as dynamic. */
7681 bh = NULL;
7682 if (! (_bfd_generic_link_add_one_symbol
7683 (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7684 get_elf_backend_data (abfd)->collect, &bh)))
7685 return FALSE;
7686
7687 h = (struct elf_link_hash_entry *) bh;
7688 h->non_elf = 0;
7689 h->def_regular = 1;
7690 h->type = STT_OBJECT;
7691
7692 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7693 return FALSE;
7694
7695 mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7696 mips_elf_hash_table (info)->rld_symbol = h;
7697 }
7698
7699 /* If this is a mips16 text symbol, add 1 to the value to make it
7700 odd. This will cause something like .word SYM to come up with
7701 the right value when it is loaded into the PC. */
7702 if (ELF_ST_IS_COMPRESSED (sym->st_other))
7703 ++*valp;
7704
7705 return TRUE;
7706 }
7707
7708 /* This hook function is called before the linker writes out a global
7709 symbol. We mark symbols as small common if appropriate. This is
7710 also where we undo the increment of the value for a mips16 symbol. */
7711
7712 int
7713 _bfd_mips_elf_link_output_symbol_hook
7714 (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7715 const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7716 asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7717 {
7718 /* If we see a common symbol, which implies a relocatable link, then
7719 if a symbol was small common in an input file, mark it as small
7720 common in the output file. */
7721 if (sym->st_shndx == SHN_COMMON
7722 && strcmp (input_sec->name, ".scommon") == 0)
7723 sym->st_shndx = SHN_MIPS_SCOMMON;
7724
7725 if (ELF_ST_IS_COMPRESSED (sym->st_other))
7726 sym->st_value &= ~1;
7727
7728 return 1;
7729 }
7730 \f
7731 /* Functions for the dynamic linker. */
7732
7733 /* Create dynamic sections when linking against a dynamic object. */
7734
7735 bfd_boolean
7736 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7737 {
7738 struct elf_link_hash_entry *h;
7739 struct bfd_link_hash_entry *bh;
7740 flagword flags;
7741 register asection *s;
7742 const char * const *namep;
7743 struct mips_elf_link_hash_table *htab;
7744
7745 htab = mips_elf_hash_table (info);
7746 BFD_ASSERT (htab != NULL);
7747
7748 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7749 | SEC_LINKER_CREATED | SEC_READONLY);
7750
7751 /* The psABI requires a read-only .dynamic section, but the VxWorks
7752 EABI doesn't. */
7753 if (!htab->is_vxworks)
7754 {
7755 s = bfd_get_linker_section (abfd, ".dynamic");
7756 if (s != NULL)
7757 {
7758 if (! bfd_set_section_flags (abfd, s, flags))
7759 return FALSE;
7760 }
7761 }
7762
7763 /* We need to create .got section. */
7764 if (!mips_elf_create_got_section (abfd, info))
7765 return FALSE;
7766
7767 if (! mips_elf_rel_dyn_section (info, TRUE))
7768 return FALSE;
7769
7770 /* Create .stub section. */
7771 s = bfd_make_section_anyway_with_flags (abfd,
7772 MIPS_ELF_STUB_SECTION_NAME (abfd),
7773 flags | SEC_CODE);
7774 if (s == NULL
7775 || ! bfd_set_section_alignment (abfd, s,
7776 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7777 return FALSE;
7778 htab->sstubs = s;
7779
7780 if (!mips_elf_hash_table (info)->use_rld_obj_head
7781 && bfd_link_executable (info)
7782 && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7783 {
7784 s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7785 flags &~ (flagword) SEC_READONLY);
7786 if (s == NULL
7787 || ! bfd_set_section_alignment (abfd, s,
7788 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7789 return FALSE;
7790 }
7791
7792 /* On IRIX5, we adjust add some additional symbols and change the
7793 alignments of several sections. There is no ABI documentation
7794 indicating that this is necessary on IRIX6, nor any evidence that
7795 the linker takes such action. */
7796 if (IRIX_COMPAT (abfd) == ict_irix5)
7797 {
7798 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7799 {
7800 bh = NULL;
7801 if (! (_bfd_generic_link_add_one_symbol
7802 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7803 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7804 return FALSE;
7805
7806 h = (struct elf_link_hash_entry *) bh;
7807 h->non_elf = 0;
7808 h->def_regular = 1;
7809 h->type = STT_SECTION;
7810
7811 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7812 return FALSE;
7813 }
7814
7815 /* We need to create a .compact_rel section. */
7816 if (SGI_COMPAT (abfd))
7817 {
7818 if (!mips_elf_create_compact_rel_section (abfd, info))
7819 return FALSE;
7820 }
7821
7822 /* Change alignments of some sections. */
7823 s = bfd_get_linker_section (abfd, ".hash");
7824 if (s != NULL)
7825 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7826
7827 s = bfd_get_linker_section (abfd, ".dynsym");
7828 if (s != NULL)
7829 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7830
7831 s = bfd_get_linker_section (abfd, ".dynstr");
7832 if (s != NULL)
7833 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7834
7835 /* ??? */
7836 s = bfd_get_section_by_name (abfd, ".reginfo");
7837 if (s != NULL)
7838 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7839
7840 s = bfd_get_linker_section (abfd, ".dynamic");
7841 if (s != NULL)
7842 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7843 }
7844
7845 if (bfd_link_executable (info))
7846 {
7847 const char *name;
7848
7849 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7850 bh = NULL;
7851 if (!(_bfd_generic_link_add_one_symbol
7852 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7853 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7854 return FALSE;
7855
7856 h = (struct elf_link_hash_entry *) bh;
7857 h->non_elf = 0;
7858 h->def_regular = 1;
7859 h->type = STT_SECTION;
7860
7861 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7862 return FALSE;
7863
7864 if (! mips_elf_hash_table (info)->use_rld_obj_head)
7865 {
7866 /* __rld_map is a four byte word located in the .data section
7867 and is filled in by the rtld to contain a pointer to
7868 the _r_debug structure. Its symbol value will be set in
7869 _bfd_mips_elf_finish_dynamic_symbol. */
7870 s = bfd_get_linker_section (abfd, ".rld_map");
7871 BFD_ASSERT (s != NULL);
7872
7873 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7874 bh = NULL;
7875 if (!(_bfd_generic_link_add_one_symbol
7876 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7877 get_elf_backend_data (abfd)->collect, &bh)))
7878 return FALSE;
7879
7880 h = (struct elf_link_hash_entry *) bh;
7881 h->non_elf = 0;
7882 h->def_regular = 1;
7883 h->type = STT_OBJECT;
7884
7885 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7886 return FALSE;
7887 mips_elf_hash_table (info)->rld_symbol = h;
7888 }
7889 }
7890
7891 /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7892 Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol. */
7893 if (!_bfd_elf_create_dynamic_sections (abfd, info))
7894 return FALSE;
7895
7896 /* Cache the sections created above. */
7897 htab->splt = bfd_get_linker_section (abfd, ".plt");
7898 htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7899 if (htab->is_vxworks)
7900 {
7901 htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7902 htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7903 }
7904 else
7905 htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7906 if (!htab->sdynbss
7907 || (htab->is_vxworks && !htab->srelbss && !bfd_link_pic (info))
7908 || !htab->srelplt
7909 || !htab->splt)
7910 abort ();
7911
7912 /* Do the usual VxWorks handling. */
7913 if (htab->is_vxworks
7914 && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7915 return FALSE;
7916
7917 return TRUE;
7918 }
7919 \f
7920 /* Return true if relocation REL against section SEC is a REL rather than
7921 RELA relocation. RELOCS is the first relocation in the section and
7922 ABFD is the bfd that contains SEC. */
7923
7924 static bfd_boolean
7925 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7926 const Elf_Internal_Rela *relocs,
7927 const Elf_Internal_Rela *rel)
7928 {
7929 Elf_Internal_Shdr *rel_hdr;
7930 const struct elf_backend_data *bed;
7931
7932 /* To determine which flavor of relocation this is, we depend on the
7933 fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR. */
7934 rel_hdr = elf_section_data (sec)->rel.hdr;
7935 if (rel_hdr == NULL)
7936 return FALSE;
7937 bed = get_elf_backend_data (abfd);
7938 return ((size_t) (rel - relocs)
7939 < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7940 }
7941
7942 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7943 HOWTO is the relocation's howto and CONTENTS points to the contents
7944 of the section that REL is against. */
7945
7946 static bfd_vma
7947 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7948 reloc_howto_type *howto, bfd_byte *contents)
7949 {
7950 bfd_byte *location;
7951 unsigned int r_type;
7952 bfd_vma addend;
7953 bfd_vma bytes;
7954
7955 r_type = ELF_R_TYPE (abfd, rel->r_info);
7956 location = contents + rel->r_offset;
7957
7958 /* Get the addend, which is stored in the input file. */
7959 _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7960 bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
7961 _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7962
7963 addend = bytes & howto->src_mask;
7964
7965 /* Shift is 2, unusually, for microMIPS JALX. Adjust the addend
7966 accordingly. */
7967 if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
7968 addend <<= 1;
7969
7970 return addend;
7971 }
7972
7973 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7974 and *ADDEND is the addend for REL itself. Look for the LO16 relocation
7975 and update *ADDEND with the final addend. Return true on success
7976 or false if the LO16 could not be found. RELEND is the exclusive
7977 upper bound on the relocations for REL's section. */
7978
7979 static bfd_boolean
7980 mips_elf_add_lo16_rel_addend (bfd *abfd,
7981 const Elf_Internal_Rela *rel,
7982 const Elf_Internal_Rela *relend,
7983 bfd_byte *contents, bfd_vma *addend)
7984 {
7985 unsigned int r_type, lo16_type;
7986 const Elf_Internal_Rela *lo16_relocation;
7987 reloc_howto_type *lo16_howto;
7988 bfd_vma l;
7989
7990 r_type = ELF_R_TYPE (abfd, rel->r_info);
7991 if (mips16_reloc_p (r_type))
7992 lo16_type = R_MIPS16_LO16;
7993 else if (micromips_reloc_p (r_type))
7994 lo16_type = R_MICROMIPS_LO16;
7995 else if (r_type == R_MIPS_PCHI16)
7996 lo16_type = R_MIPS_PCLO16;
7997 else
7998 lo16_type = R_MIPS_LO16;
7999
8000 /* The combined value is the sum of the HI16 addend, left-shifted by
8001 sixteen bits, and the LO16 addend, sign extended. (Usually, the
8002 code does a `lui' of the HI16 value, and then an `addiu' of the
8003 LO16 value.)
8004
8005 Scan ahead to find a matching LO16 relocation.
8006
8007 According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
8008 be immediately following. However, for the IRIX6 ABI, the next
8009 relocation may be a composed relocation consisting of several
8010 relocations for the same address. In that case, the R_MIPS_LO16
8011 relocation may occur as one of these. We permit a similar
8012 extension in general, as that is useful for GCC.
8013
8014 In some cases GCC dead code elimination removes the LO16 but keeps
8015 the corresponding HI16. This is strictly speaking a violation of
8016 the ABI but not immediately harmful. */
8017 lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
8018 if (lo16_relocation == NULL)
8019 return FALSE;
8020
8021 /* Obtain the addend kept there. */
8022 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
8023 l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
8024
8025 l <<= lo16_howto->rightshift;
8026 l = _bfd_mips_elf_sign_extend (l, 16);
8027
8028 *addend <<= 16;
8029 *addend += l;
8030 return TRUE;
8031 }
8032
8033 /* Try to read the contents of section SEC in bfd ABFD. Return true and
8034 store the contents in *CONTENTS on success. Assume that *CONTENTS
8035 already holds the contents if it is nonull on entry. */
8036
8037 static bfd_boolean
8038 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
8039 {
8040 if (*contents)
8041 return TRUE;
8042
8043 /* Get cached copy if it exists. */
8044 if (elf_section_data (sec)->this_hdr.contents != NULL)
8045 {
8046 *contents = elf_section_data (sec)->this_hdr.contents;
8047 return TRUE;
8048 }
8049
8050 return bfd_malloc_and_get_section (abfd, sec, contents);
8051 }
8052
8053 /* Make a new PLT record to keep internal data. */
8054
8055 static struct plt_entry *
8056 mips_elf_make_plt_record (bfd *abfd)
8057 {
8058 struct plt_entry *entry;
8059
8060 entry = bfd_zalloc (abfd, sizeof (*entry));
8061 if (entry == NULL)
8062 return NULL;
8063
8064 entry->stub_offset = MINUS_ONE;
8065 entry->mips_offset = MINUS_ONE;
8066 entry->comp_offset = MINUS_ONE;
8067 entry->gotplt_index = MINUS_ONE;
8068 return entry;
8069 }
8070
8071 /* Look through the relocs for a section during the first phase, and
8072 allocate space in the global offset table and record the need for
8073 standard MIPS and compressed procedure linkage table entries. */
8074
8075 bfd_boolean
8076 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
8077 asection *sec, const Elf_Internal_Rela *relocs)
8078 {
8079 const char *name;
8080 bfd *dynobj;
8081 Elf_Internal_Shdr *symtab_hdr;
8082 struct elf_link_hash_entry **sym_hashes;
8083 size_t extsymoff;
8084 const Elf_Internal_Rela *rel;
8085 const Elf_Internal_Rela *rel_end;
8086 asection *sreloc;
8087 const struct elf_backend_data *bed;
8088 struct mips_elf_link_hash_table *htab;
8089 bfd_byte *contents;
8090 bfd_vma addend;
8091 reloc_howto_type *howto;
8092
8093 if (bfd_link_relocatable (info))
8094 return TRUE;
8095
8096 htab = mips_elf_hash_table (info);
8097 BFD_ASSERT (htab != NULL);
8098
8099 dynobj = elf_hash_table (info)->dynobj;
8100 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8101 sym_hashes = elf_sym_hashes (abfd);
8102 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8103
8104 bed = get_elf_backend_data (abfd);
8105 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
8106
8107 /* Check for the mips16 stub sections. */
8108
8109 name = bfd_get_section_name (abfd, sec);
8110 if (FN_STUB_P (name))
8111 {
8112 unsigned long r_symndx;
8113
8114 /* Look at the relocation information to figure out which symbol
8115 this is for. */
8116
8117 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8118 if (r_symndx == 0)
8119 {
8120 (*_bfd_error_handler)
8121 (_("%B: Warning: cannot determine the target function for"
8122 " stub section `%s'"),
8123 abfd, name);
8124 bfd_set_error (bfd_error_bad_value);
8125 return FALSE;
8126 }
8127
8128 if (r_symndx < extsymoff
8129 || sym_hashes[r_symndx - extsymoff] == NULL)
8130 {
8131 asection *o;
8132
8133 /* This stub is for a local symbol. This stub will only be
8134 needed if there is some relocation in this BFD, other
8135 than a 16 bit function call, which refers to this symbol. */
8136 for (o = abfd->sections; o != NULL; o = o->next)
8137 {
8138 Elf_Internal_Rela *sec_relocs;
8139 const Elf_Internal_Rela *r, *rend;
8140
8141 /* We can ignore stub sections when looking for relocs. */
8142 if ((o->flags & SEC_RELOC) == 0
8143 || o->reloc_count == 0
8144 || section_allows_mips16_refs_p (o))
8145 continue;
8146
8147 sec_relocs
8148 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8149 info->keep_memory);
8150 if (sec_relocs == NULL)
8151 return FALSE;
8152
8153 rend = sec_relocs + o->reloc_count;
8154 for (r = sec_relocs; r < rend; r++)
8155 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8156 && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
8157 break;
8158
8159 if (elf_section_data (o)->relocs != sec_relocs)
8160 free (sec_relocs);
8161
8162 if (r < rend)
8163 break;
8164 }
8165
8166 if (o == NULL)
8167 {
8168 /* There is no non-call reloc for this stub, so we do
8169 not need it. Since this function is called before
8170 the linker maps input sections to output sections, we
8171 can easily discard it by setting the SEC_EXCLUDE
8172 flag. */
8173 sec->flags |= SEC_EXCLUDE;
8174 return TRUE;
8175 }
8176
8177 /* Record this stub in an array of local symbol stubs for
8178 this BFD. */
8179 if (mips_elf_tdata (abfd)->local_stubs == NULL)
8180 {
8181 unsigned long symcount;
8182 asection **n;
8183 bfd_size_type amt;
8184
8185 if (elf_bad_symtab (abfd))
8186 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8187 else
8188 symcount = symtab_hdr->sh_info;
8189 amt = symcount * sizeof (asection *);
8190 n = bfd_zalloc (abfd, amt);
8191 if (n == NULL)
8192 return FALSE;
8193 mips_elf_tdata (abfd)->local_stubs = n;
8194 }
8195
8196 sec->flags |= SEC_KEEP;
8197 mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8198
8199 /* We don't need to set mips16_stubs_seen in this case.
8200 That flag is used to see whether we need to look through
8201 the global symbol table for stubs. We don't need to set
8202 it here, because we just have a local stub. */
8203 }
8204 else
8205 {
8206 struct mips_elf_link_hash_entry *h;
8207
8208 h = ((struct mips_elf_link_hash_entry *)
8209 sym_hashes[r_symndx - extsymoff]);
8210
8211 while (h->root.root.type == bfd_link_hash_indirect
8212 || h->root.root.type == bfd_link_hash_warning)
8213 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8214
8215 /* H is the symbol this stub is for. */
8216
8217 /* If we already have an appropriate stub for this function, we
8218 don't need another one, so we can discard this one. Since
8219 this function is called before the linker maps input sections
8220 to output sections, we can easily discard it by setting the
8221 SEC_EXCLUDE flag. */
8222 if (h->fn_stub != NULL)
8223 {
8224 sec->flags |= SEC_EXCLUDE;
8225 return TRUE;
8226 }
8227
8228 sec->flags |= SEC_KEEP;
8229 h->fn_stub = sec;
8230 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8231 }
8232 }
8233 else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8234 {
8235 unsigned long r_symndx;
8236 struct mips_elf_link_hash_entry *h;
8237 asection **loc;
8238
8239 /* Look at the relocation information to figure out which symbol
8240 this is for. */
8241
8242 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8243 if (r_symndx == 0)
8244 {
8245 (*_bfd_error_handler)
8246 (_("%B: Warning: cannot determine the target function for"
8247 " stub section `%s'"),
8248 abfd, name);
8249 bfd_set_error (bfd_error_bad_value);
8250 return FALSE;
8251 }
8252
8253 if (r_symndx < extsymoff
8254 || sym_hashes[r_symndx - extsymoff] == NULL)
8255 {
8256 asection *o;
8257
8258 /* This stub is for a local symbol. This stub will only be
8259 needed if there is some relocation (R_MIPS16_26) in this BFD
8260 that refers to this symbol. */
8261 for (o = abfd->sections; o != NULL; o = o->next)
8262 {
8263 Elf_Internal_Rela *sec_relocs;
8264 const Elf_Internal_Rela *r, *rend;
8265
8266 /* We can ignore stub sections when looking for relocs. */
8267 if ((o->flags & SEC_RELOC) == 0
8268 || o->reloc_count == 0
8269 || section_allows_mips16_refs_p (o))
8270 continue;
8271
8272 sec_relocs
8273 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8274 info->keep_memory);
8275 if (sec_relocs == NULL)
8276 return FALSE;
8277
8278 rend = sec_relocs + o->reloc_count;
8279 for (r = sec_relocs; r < rend; r++)
8280 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8281 && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8282 break;
8283
8284 if (elf_section_data (o)->relocs != sec_relocs)
8285 free (sec_relocs);
8286
8287 if (r < rend)
8288 break;
8289 }
8290
8291 if (o == NULL)
8292 {
8293 /* There is no non-call reloc for this stub, so we do
8294 not need it. Since this function is called before
8295 the linker maps input sections to output sections, we
8296 can easily discard it by setting the SEC_EXCLUDE
8297 flag. */
8298 sec->flags |= SEC_EXCLUDE;
8299 return TRUE;
8300 }
8301
8302 /* Record this stub in an array of local symbol call_stubs for
8303 this BFD. */
8304 if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8305 {
8306 unsigned long symcount;
8307 asection **n;
8308 bfd_size_type amt;
8309
8310 if (elf_bad_symtab (abfd))
8311 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8312 else
8313 symcount = symtab_hdr->sh_info;
8314 amt = symcount * sizeof (asection *);
8315 n = bfd_zalloc (abfd, amt);
8316 if (n == NULL)
8317 return FALSE;
8318 mips_elf_tdata (abfd)->local_call_stubs = n;
8319 }
8320
8321 sec->flags |= SEC_KEEP;
8322 mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8323
8324 /* We don't need to set mips16_stubs_seen in this case.
8325 That flag is used to see whether we need to look through
8326 the global symbol table for stubs. We don't need to set
8327 it here, because we just have a local stub. */
8328 }
8329 else
8330 {
8331 h = ((struct mips_elf_link_hash_entry *)
8332 sym_hashes[r_symndx - extsymoff]);
8333
8334 /* H is the symbol this stub is for. */
8335
8336 if (CALL_FP_STUB_P (name))
8337 loc = &h->call_fp_stub;
8338 else
8339 loc = &h->call_stub;
8340
8341 /* If we already have an appropriate stub for this function, we
8342 don't need another one, so we can discard this one. Since
8343 this function is called before the linker maps input sections
8344 to output sections, we can easily discard it by setting the
8345 SEC_EXCLUDE flag. */
8346 if (*loc != NULL)
8347 {
8348 sec->flags |= SEC_EXCLUDE;
8349 return TRUE;
8350 }
8351
8352 sec->flags |= SEC_KEEP;
8353 *loc = sec;
8354 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8355 }
8356 }
8357
8358 sreloc = NULL;
8359 contents = NULL;
8360 for (rel = relocs; rel < rel_end; ++rel)
8361 {
8362 unsigned long r_symndx;
8363 unsigned int r_type;
8364 struct elf_link_hash_entry *h;
8365 bfd_boolean can_make_dynamic_p;
8366 bfd_boolean call_reloc_p;
8367 bfd_boolean constrain_symbol_p;
8368
8369 r_symndx = ELF_R_SYM (abfd, rel->r_info);
8370 r_type = ELF_R_TYPE (abfd, rel->r_info);
8371
8372 if (r_symndx < extsymoff)
8373 h = NULL;
8374 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8375 {
8376 (*_bfd_error_handler)
8377 (_("%B: Malformed reloc detected for section %s"),
8378 abfd, name);
8379 bfd_set_error (bfd_error_bad_value);
8380 return FALSE;
8381 }
8382 else
8383 {
8384 h = sym_hashes[r_symndx - extsymoff];
8385 if (h != NULL)
8386 {
8387 while (h->root.type == bfd_link_hash_indirect
8388 || h->root.type == bfd_link_hash_warning)
8389 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8390
8391 /* PR15323, ref flags aren't set for references in the
8392 same object. */
8393 h->root.non_ir_ref = 1;
8394 }
8395 }
8396
8397 /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8398 relocation into a dynamic one. */
8399 can_make_dynamic_p = FALSE;
8400
8401 /* Set CALL_RELOC_P to true if the relocation is for a call,
8402 and if pointer equality therefore doesn't matter. */
8403 call_reloc_p = FALSE;
8404
8405 /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8406 into account when deciding how to define the symbol.
8407 Relocations in nonallocatable sections such as .pdr and
8408 .debug* should have no effect. */
8409 constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8410
8411 switch (r_type)
8412 {
8413 case R_MIPS_CALL16:
8414 case R_MIPS_CALL_HI16:
8415 case R_MIPS_CALL_LO16:
8416 case R_MIPS16_CALL16:
8417 case R_MICROMIPS_CALL16:
8418 case R_MICROMIPS_CALL_HI16:
8419 case R_MICROMIPS_CALL_LO16:
8420 call_reloc_p = TRUE;
8421 /* Fall through. */
8422
8423 case R_MIPS_GOT16:
8424 case R_MIPS_GOT_HI16:
8425 case R_MIPS_GOT_LO16:
8426 case R_MIPS_GOT_PAGE:
8427 case R_MIPS_GOT_OFST:
8428 case R_MIPS_GOT_DISP:
8429 case R_MIPS_TLS_GOTTPREL:
8430 case R_MIPS_TLS_GD:
8431 case R_MIPS_TLS_LDM:
8432 case R_MIPS16_GOT16:
8433 case R_MIPS16_TLS_GOTTPREL:
8434 case R_MIPS16_TLS_GD:
8435 case R_MIPS16_TLS_LDM:
8436 case R_MICROMIPS_GOT16:
8437 case R_MICROMIPS_GOT_HI16:
8438 case R_MICROMIPS_GOT_LO16:
8439 case R_MICROMIPS_GOT_PAGE:
8440 case R_MICROMIPS_GOT_OFST:
8441 case R_MICROMIPS_GOT_DISP:
8442 case R_MICROMIPS_TLS_GOTTPREL:
8443 case R_MICROMIPS_TLS_GD:
8444 case R_MICROMIPS_TLS_LDM:
8445 if (dynobj == NULL)
8446 elf_hash_table (info)->dynobj = dynobj = abfd;
8447 if (!mips_elf_create_got_section (dynobj, info))
8448 return FALSE;
8449 if (htab->is_vxworks && !bfd_link_pic (info))
8450 {
8451 (*_bfd_error_handler)
8452 (_("%B: GOT reloc at 0x%lx not expected in executables"),
8453 abfd, (unsigned long) rel->r_offset);
8454 bfd_set_error (bfd_error_bad_value);
8455 return FALSE;
8456 }
8457 can_make_dynamic_p = TRUE;
8458 break;
8459
8460 case R_MIPS_NONE:
8461 case R_MIPS_JALR:
8462 case R_MICROMIPS_JALR:
8463 /* These relocations have empty fields and are purely there to
8464 provide link information. The symbol value doesn't matter. */
8465 constrain_symbol_p = FALSE;
8466 break;
8467
8468 case R_MIPS_GPREL16:
8469 case R_MIPS_GPREL32:
8470 case R_MIPS16_GPREL:
8471 case R_MICROMIPS_GPREL16:
8472 /* GP-relative relocations always resolve to a definition in a
8473 regular input file, ignoring the one-definition rule. This is
8474 important for the GP setup sequence in NewABI code, which
8475 always resolves to a local function even if other relocations
8476 against the symbol wouldn't. */
8477 constrain_symbol_p = FALSE;
8478 break;
8479
8480 case R_MIPS_32:
8481 case R_MIPS_REL32:
8482 case R_MIPS_64:
8483 /* In VxWorks executables, references to external symbols
8484 must be handled using copy relocs or PLT entries; it is not
8485 possible to convert this relocation into a dynamic one.
8486
8487 For executables that use PLTs and copy-relocs, we have a
8488 choice between converting the relocation into a dynamic
8489 one or using copy relocations or PLT entries. It is
8490 usually better to do the former, unless the relocation is
8491 against a read-only section. */
8492 if ((bfd_link_pic (info)
8493 || (h != NULL
8494 && !htab->is_vxworks
8495 && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8496 && !(!info->nocopyreloc
8497 && !PIC_OBJECT_P (abfd)
8498 && MIPS_ELF_READONLY_SECTION (sec))))
8499 && (sec->flags & SEC_ALLOC) != 0)
8500 {
8501 can_make_dynamic_p = TRUE;
8502 if (dynobj == NULL)
8503 elf_hash_table (info)->dynobj = dynobj = abfd;
8504 }
8505 break;
8506
8507 case R_MIPS_26:
8508 case R_MIPS_PC16:
8509 case R_MIPS_PC21_S2:
8510 case R_MIPS_PC26_S2:
8511 case R_MIPS16_26:
8512 case R_MIPS16_PC16_S1:
8513 case R_MICROMIPS_26_S1:
8514 case R_MICROMIPS_PC7_S1:
8515 case R_MICROMIPS_PC10_S1:
8516 case R_MICROMIPS_PC16_S1:
8517 case R_MICROMIPS_PC23_S2:
8518 call_reloc_p = TRUE;
8519 break;
8520 }
8521
8522 if (h)
8523 {
8524 if (constrain_symbol_p)
8525 {
8526 if (!can_make_dynamic_p)
8527 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8528
8529 if (!call_reloc_p)
8530 h->pointer_equality_needed = 1;
8531
8532 /* We must not create a stub for a symbol that has
8533 relocations related to taking the function's address.
8534 This doesn't apply to VxWorks, where CALL relocs refer
8535 to a .got.plt entry instead of a normal .got entry. */
8536 if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8537 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8538 }
8539
8540 /* Relocations against the special VxWorks __GOTT_BASE__ and
8541 __GOTT_INDEX__ symbols must be left to the loader. Allocate
8542 room for them in .rela.dyn. */
8543 if (is_gott_symbol (info, h))
8544 {
8545 if (sreloc == NULL)
8546 {
8547 sreloc = mips_elf_rel_dyn_section (info, TRUE);
8548 if (sreloc == NULL)
8549 return FALSE;
8550 }
8551 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8552 if (MIPS_ELF_READONLY_SECTION (sec))
8553 /* We tell the dynamic linker that there are
8554 relocations against the text segment. */
8555 info->flags |= DF_TEXTREL;
8556 }
8557 }
8558 else if (call_lo16_reloc_p (r_type)
8559 || got_lo16_reloc_p (r_type)
8560 || got_disp_reloc_p (r_type)
8561 || (got16_reloc_p (r_type) && htab->is_vxworks))
8562 {
8563 /* We may need a local GOT entry for this relocation. We
8564 don't count R_MIPS_GOT_PAGE because we can estimate the
8565 maximum number of pages needed by looking at the size of
8566 the segment. Similar comments apply to R_MIPS*_GOT16 and
8567 R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8568 always evaluate to "G". We don't count R_MIPS_GOT_HI16, or
8569 R_MIPS_CALL_HI16 because these are always followed by an
8570 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */
8571 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8572 rel->r_addend, info, r_type))
8573 return FALSE;
8574 }
8575
8576 if (h != NULL
8577 && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8578 ELF_ST_IS_MIPS16 (h->other)))
8579 ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8580
8581 switch (r_type)
8582 {
8583 case R_MIPS_CALL16:
8584 case R_MIPS16_CALL16:
8585 case R_MICROMIPS_CALL16:
8586 if (h == NULL)
8587 {
8588 (*_bfd_error_handler)
8589 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8590 abfd, (unsigned long) rel->r_offset);
8591 bfd_set_error (bfd_error_bad_value);
8592 return FALSE;
8593 }
8594 /* Fall through. */
8595
8596 case R_MIPS_CALL_HI16:
8597 case R_MIPS_CALL_LO16:
8598 case R_MICROMIPS_CALL_HI16:
8599 case R_MICROMIPS_CALL_LO16:
8600 if (h != NULL)
8601 {
8602 /* Make sure there is room in the regular GOT to hold the
8603 function's address. We may eliminate it in favour of
8604 a .got.plt entry later; see mips_elf_count_got_symbols. */
8605 if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8606 r_type))
8607 return FALSE;
8608
8609 /* We need a stub, not a plt entry for the undefined
8610 function. But we record it as if it needs plt. See
8611 _bfd_elf_adjust_dynamic_symbol. */
8612 h->needs_plt = 1;
8613 h->type = STT_FUNC;
8614 }
8615 break;
8616
8617 case R_MIPS_GOT_PAGE:
8618 case R_MICROMIPS_GOT_PAGE:
8619 case R_MIPS16_GOT16:
8620 case R_MIPS_GOT16:
8621 case R_MIPS_GOT_HI16:
8622 case R_MIPS_GOT_LO16:
8623 case R_MICROMIPS_GOT16:
8624 case R_MICROMIPS_GOT_HI16:
8625 case R_MICROMIPS_GOT_LO16:
8626 if (!h || got_page_reloc_p (r_type))
8627 {
8628 /* This relocation needs (or may need, if h != NULL) a
8629 page entry in the GOT. For R_MIPS_GOT_PAGE we do not
8630 know for sure until we know whether the symbol is
8631 preemptible. */
8632 if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8633 {
8634 if (!mips_elf_get_section_contents (abfd, sec, &contents))
8635 return FALSE;
8636 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8637 addend = mips_elf_read_rel_addend (abfd, rel,
8638 howto, contents);
8639 if (got16_reloc_p (r_type))
8640 mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8641 contents, &addend);
8642 else
8643 addend <<= howto->rightshift;
8644 }
8645 else
8646 addend = rel->r_addend;
8647 if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8648 h, addend))
8649 return FALSE;
8650
8651 if (h)
8652 {
8653 struct mips_elf_link_hash_entry *hmips =
8654 (struct mips_elf_link_hash_entry *) h;
8655
8656 /* This symbol is definitely not overridable. */
8657 if (hmips->root.def_regular
8658 && ! (bfd_link_pic (info) && ! info->symbolic
8659 && ! hmips->root.forced_local))
8660 h = NULL;
8661 }
8662 }
8663 /* If this is a global, overridable symbol, GOT_PAGE will
8664 decay to GOT_DISP, so we'll need a GOT entry for it. */
8665 /* Fall through. */
8666
8667 case R_MIPS_GOT_DISP:
8668 case R_MICROMIPS_GOT_DISP:
8669 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8670 FALSE, r_type))
8671 return FALSE;
8672 break;
8673
8674 case R_MIPS_TLS_GOTTPREL:
8675 case R_MIPS16_TLS_GOTTPREL:
8676 case R_MICROMIPS_TLS_GOTTPREL:
8677 if (bfd_link_pic (info))
8678 info->flags |= DF_STATIC_TLS;
8679 /* Fall through */
8680
8681 case R_MIPS_TLS_LDM:
8682 case R_MIPS16_TLS_LDM:
8683 case R_MICROMIPS_TLS_LDM:
8684 if (tls_ldm_reloc_p (r_type))
8685 {
8686 r_symndx = STN_UNDEF;
8687 h = NULL;
8688 }
8689 /* Fall through */
8690
8691 case R_MIPS_TLS_GD:
8692 case R_MIPS16_TLS_GD:
8693 case R_MICROMIPS_TLS_GD:
8694 /* This symbol requires a global offset table entry, or two
8695 for TLS GD relocations. */
8696 if (h != NULL)
8697 {
8698 if (!mips_elf_record_global_got_symbol (h, abfd, info,
8699 FALSE, r_type))
8700 return FALSE;
8701 }
8702 else
8703 {
8704 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8705 rel->r_addend,
8706 info, r_type))
8707 return FALSE;
8708 }
8709 break;
8710
8711 case R_MIPS_32:
8712 case R_MIPS_REL32:
8713 case R_MIPS_64:
8714 /* In VxWorks executables, references to external symbols
8715 are handled using copy relocs or PLT stubs, so there's
8716 no need to add a .rela.dyn entry for this relocation. */
8717 if (can_make_dynamic_p)
8718 {
8719 if (sreloc == NULL)
8720 {
8721 sreloc = mips_elf_rel_dyn_section (info, TRUE);
8722 if (sreloc == NULL)
8723 return FALSE;
8724 }
8725 if (bfd_link_pic (info) && h == NULL)
8726 {
8727 /* When creating a shared object, we must copy these
8728 reloc types into the output file as R_MIPS_REL32
8729 relocs. Make room for this reloc in .rel(a).dyn. */
8730 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8731 if (MIPS_ELF_READONLY_SECTION (sec))
8732 /* We tell the dynamic linker that there are
8733 relocations against the text segment. */
8734 info->flags |= DF_TEXTREL;
8735 }
8736 else
8737 {
8738 struct mips_elf_link_hash_entry *hmips;
8739
8740 /* For a shared object, we must copy this relocation
8741 unless the symbol turns out to be undefined and
8742 weak with non-default visibility, in which case
8743 it will be left as zero.
8744
8745 We could elide R_MIPS_REL32 for locally binding symbols
8746 in shared libraries, but do not yet do so.
8747
8748 For an executable, we only need to copy this
8749 reloc if the symbol is defined in a dynamic
8750 object. */
8751 hmips = (struct mips_elf_link_hash_entry *) h;
8752 ++hmips->possibly_dynamic_relocs;
8753 if (MIPS_ELF_READONLY_SECTION (sec))
8754 /* We need it to tell the dynamic linker if there
8755 are relocations against the text segment. */
8756 hmips->readonly_reloc = TRUE;
8757 }
8758 }
8759
8760 if (SGI_COMPAT (abfd))
8761 mips_elf_hash_table (info)->compact_rel_size +=
8762 sizeof (Elf32_External_crinfo);
8763 break;
8764
8765 case R_MIPS_26:
8766 case R_MIPS_GPREL16:
8767 case R_MIPS_LITERAL:
8768 case R_MIPS_GPREL32:
8769 case R_MICROMIPS_26_S1:
8770 case R_MICROMIPS_GPREL16:
8771 case R_MICROMIPS_LITERAL:
8772 case R_MICROMIPS_GPREL7_S2:
8773 if (SGI_COMPAT (abfd))
8774 mips_elf_hash_table (info)->compact_rel_size +=
8775 sizeof (Elf32_External_crinfo);
8776 break;
8777
8778 /* This relocation describes the C++ object vtable hierarchy.
8779 Reconstruct it for later use during GC. */
8780 case R_MIPS_GNU_VTINHERIT:
8781 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8782 return FALSE;
8783 break;
8784
8785 /* This relocation describes which C++ vtable entries are actually
8786 used. Record for later use during GC. */
8787 case R_MIPS_GNU_VTENTRY:
8788 BFD_ASSERT (h != NULL);
8789 if (h != NULL
8790 && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8791 return FALSE;
8792 break;
8793
8794 default:
8795 break;
8796 }
8797
8798 /* Record the need for a PLT entry. At this point we don't know
8799 yet if we are going to create a PLT in the first place, but
8800 we only record whether the relocation requires a standard MIPS
8801 or a compressed code entry anyway. If we don't make a PLT after
8802 all, then we'll just ignore these arrangements. Likewise if
8803 a PLT entry is not created because the symbol is satisfied
8804 locally. */
8805 if (h != NULL
8806 && (branch_reloc_p (r_type)
8807 || mips16_branch_reloc_p (r_type)
8808 || micromips_branch_reloc_p (r_type))
8809 && !SYMBOL_CALLS_LOCAL (info, h))
8810 {
8811 if (h->plt.plist == NULL)
8812 h->plt.plist = mips_elf_make_plt_record (abfd);
8813 if (h->plt.plist == NULL)
8814 return FALSE;
8815
8816 if (branch_reloc_p (r_type))
8817 h->plt.plist->need_mips = TRUE;
8818 else
8819 h->plt.plist->need_comp = TRUE;
8820 }
8821
8822 /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8823 if there is one. We only need to handle global symbols here;
8824 we decide whether to keep or delete stubs for local symbols
8825 when processing the stub's relocations. */
8826 if (h != NULL
8827 && !mips16_call_reloc_p (r_type)
8828 && !section_allows_mips16_refs_p (sec))
8829 {
8830 struct mips_elf_link_hash_entry *mh;
8831
8832 mh = (struct mips_elf_link_hash_entry *) h;
8833 mh->need_fn_stub = TRUE;
8834 }
8835
8836 /* Refuse some position-dependent relocations when creating a
8837 shared library. Do not refuse R_MIPS_32 / R_MIPS_64; they're
8838 not PIC, but we can create dynamic relocations and the result
8839 will be fine. Also do not refuse R_MIPS_LO16, which can be
8840 combined with R_MIPS_GOT16. */
8841 if (bfd_link_pic (info))
8842 {
8843 switch (r_type)
8844 {
8845 case R_MIPS16_HI16:
8846 case R_MIPS_HI16:
8847 case R_MIPS_HIGHER:
8848 case R_MIPS_HIGHEST:
8849 case R_MICROMIPS_HI16:
8850 case R_MICROMIPS_HIGHER:
8851 case R_MICROMIPS_HIGHEST:
8852 /* Don't refuse a high part relocation if it's against
8853 no symbol (e.g. part of a compound relocation). */
8854 if (r_symndx == STN_UNDEF)
8855 break;
8856
8857 /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8858 and has a special meaning. */
8859 if (!NEWABI_P (abfd) && h != NULL
8860 && strcmp (h->root.root.string, "_gp_disp") == 0)
8861 break;
8862
8863 /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks. */
8864 if (is_gott_symbol (info, h))
8865 break;
8866
8867 /* FALLTHROUGH */
8868
8869 case R_MIPS16_26:
8870 case R_MIPS_26:
8871 case R_MICROMIPS_26_S1:
8872 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8873 (*_bfd_error_handler)
8874 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8875 abfd, howto->name,
8876 (h) ? h->root.root.string : "a local symbol");
8877 bfd_set_error (bfd_error_bad_value);
8878 return FALSE;
8879 default:
8880 break;
8881 }
8882 }
8883 }
8884
8885 return TRUE;
8886 }
8887 \f
8888 bfd_boolean
8889 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8890 struct bfd_link_info *link_info,
8891 bfd_boolean *again)
8892 {
8893 Elf_Internal_Rela *internal_relocs;
8894 Elf_Internal_Rela *irel, *irelend;
8895 Elf_Internal_Shdr *symtab_hdr;
8896 bfd_byte *contents = NULL;
8897 size_t extsymoff;
8898 bfd_boolean changed_contents = FALSE;
8899 bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8900 Elf_Internal_Sym *isymbuf = NULL;
8901
8902 /* We are not currently changing any sizes, so only one pass. */
8903 *again = FALSE;
8904
8905 if (bfd_link_relocatable (link_info))
8906 return TRUE;
8907
8908 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8909 link_info->keep_memory);
8910 if (internal_relocs == NULL)
8911 return TRUE;
8912
8913 irelend = internal_relocs + sec->reloc_count
8914 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8915 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8916 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8917
8918 for (irel = internal_relocs; irel < irelend; irel++)
8919 {
8920 bfd_vma symval;
8921 bfd_signed_vma sym_offset;
8922 unsigned int r_type;
8923 unsigned long r_symndx;
8924 asection *sym_sec;
8925 unsigned long instruction;
8926
8927 /* Turn jalr into bgezal, and jr into beq, if they're marked
8928 with a JALR relocation, that indicate where they jump to.
8929 This saves some pipeline bubbles. */
8930 r_type = ELF_R_TYPE (abfd, irel->r_info);
8931 if (r_type != R_MIPS_JALR)
8932 continue;
8933
8934 r_symndx = ELF_R_SYM (abfd, irel->r_info);
8935 /* Compute the address of the jump target. */
8936 if (r_symndx >= extsymoff)
8937 {
8938 struct mips_elf_link_hash_entry *h
8939 = ((struct mips_elf_link_hash_entry *)
8940 elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8941
8942 while (h->root.root.type == bfd_link_hash_indirect
8943 || h->root.root.type == bfd_link_hash_warning)
8944 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8945
8946 /* If a symbol is undefined, or if it may be overridden,
8947 skip it. */
8948 if (! ((h->root.root.type == bfd_link_hash_defined
8949 || h->root.root.type == bfd_link_hash_defweak)
8950 && h->root.root.u.def.section)
8951 || (bfd_link_pic (link_info) && ! link_info->symbolic
8952 && !h->root.forced_local))
8953 continue;
8954
8955 sym_sec = h->root.root.u.def.section;
8956 if (sym_sec->output_section)
8957 symval = (h->root.root.u.def.value
8958 + sym_sec->output_section->vma
8959 + sym_sec->output_offset);
8960 else
8961 symval = h->root.root.u.def.value;
8962 }
8963 else
8964 {
8965 Elf_Internal_Sym *isym;
8966
8967 /* Read this BFD's symbols if we haven't done so already. */
8968 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8969 {
8970 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8971 if (isymbuf == NULL)
8972 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8973 symtab_hdr->sh_info, 0,
8974 NULL, NULL, NULL);
8975 if (isymbuf == NULL)
8976 goto relax_return;
8977 }
8978
8979 isym = isymbuf + r_symndx;
8980 if (isym->st_shndx == SHN_UNDEF)
8981 continue;
8982 else if (isym->st_shndx == SHN_ABS)
8983 sym_sec = bfd_abs_section_ptr;
8984 else if (isym->st_shndx == SHN_COMMON)
8985 sym_sec = bfd_com_section_ptr;
8986 else
8987 sym_sec
8988 = bfd_section_from_elf_index (abfd, isym->st_shndx);
8989 symval = isym->st_value
8990 + sym_sec->output_section->vma
8991 + sym_sec->output_offset;
8992 }
8993
8994 /* Compute branch offset, from delay slot of the jump to the
8995 branch target. */
8996 sym_offset = (symval + irel->r_addend)
8997 - (sec_start + irel->r_offset + 4);
8998
8999 /* Branch offset must be properly aligned. */
9000 if ((sym_offset & 3) != 0)
9001 continue;
9002
9003 sym_offset >>= 2;
9004
9005 /* Check that it's in range. */
9006 if (sym_offset < -0x8000 || sym_offset >= 0x8000)
9007 continue;
9008
9009 /* Get the section contents if we haven't done so already. */
9010 if (!mips_elf_get_section_contents (abfd, sec, &contents))
9011 goto relax_return;
9012
9013 instruction = bfd_get_32 (abfd, contents + irel->r_offset);
9014
9015 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */
9016 if ((instruction & 0xfc1fffff) == 0x0000f809)
9017 instruction = 0x04110000;
9018 /* If it was jr <reg>, turn it into b <target>. */
9019 else if ((instruction & 0xfc1fffff) == 0x00000008)
9020 instruction = 0x10000000;
9021 else
9022 continue;
9023
9024 instruction |= (sym_offset & 0xffff);
9025 bfd_put_32 (abfd, instruction, contents + irel->r_offset);
9026 changed_contents = TRUE;
9027 }
9028
9029 if (contents != NULL
9030 && elf_section_data (sec)->this_hdr.contents != contents)
9031 {
9032 if (!changed_contents && !link_info->keep_memory)
9033 free (contents);
9034 else
9035 {
9036 /* Cache the section contents for elf_link_input_bfd. */
9037 elf_section_data (sec)->this_hdr.contents = contents;
9038 }
9039 }
9040 return TRUE;
9041
9042 relax_return:
9043 if (contents != NULL
9044 && elf_section_data (sec)->this_hdr.contents != contents)
9045 free (contents);
9046 return FALSE;
9047 }
9048 \f
9049 /* Allocate space for global sym dynamic relocs. */
9050
9051 static bfd_boolean
9052 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9053 {
9054 struct bfd_link_info *info = inf;
9055 bfd *dynobj;
9056 struct mips_elf_link_hash_entry *hmips;
9057 struct mips_elf_link_hash_table *htab;
9058
9059 htab = mips_elf_hash_table (info);
9060 BFD_ASSERT (htab != NULL);
9061
9062 dynobj = elf_hash_table (info)->dynobj;
9063 hmips = (struct mips_elf_link_hash_entry *) h;
9064
9065 /* VxWorks executables are handled elsewhere; we only need to
9066 allocate relocations in shared objects. */
9067 if (htab->is_vxworks && !bfd_link_pic (info))
9068 return TRUE;
9069
9070 /* Ignore indirect symbols. All relocations against such symbols
9071 will be redirected to the target symbol. */
9072 if (h->root.type == bfd_link_hash_indirect)
9073 return TRUE;
9074
9075 /* If this symbol is defined in a dynamic object, or we are creating
9076 a shared library, we will need to copy any R_MIPS_32 or
9077 R_MIPS_REL32 relocs against it into the output file. */
9078 if (! bfd_link_relocatable (info)
9079 && hmips->possibly_dynamic_relocs != 0
9080 && (h->root.type == bfd_link_hash_defweak
9081 || (!h->def_regular && !ELF_COMMON_DEF_P (h))
9082 || bfd_link_pic (info)))
9083 {
9084 bfd_boolean do_copy = TRUE;
9085
9086 if (h->root.type == bfd_link_hash_undefweak)
9087 {
9088 /* Do not copy relocations for undefined weak symbols with
9089 non-default visibility. */
9090 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9091 do_copy = FALSE;
9092
9093 /* Make sure undefined weak symbols are output as a dynamic
9094 symbol in PIEs. */
9095 else if (h->dynindx == -1 && !h->forced_local)
9096 {
9097 if (! bfd_elf_link_record_dynamic_symbol (info, h))
9098 return FALSE;
9099 }
9100 }
9101
9102 if (do_copy)
9103 {
9104 /* Even though we don't directly need a GOT entry for this symbol,
9105 the SVR4 psABI requires it to have a dynamic symbol table
9106 index greater that DT_MIPS_GOTSYM if there are dynamic
9107 relocations against it.
9108
9109 VxWorks does not enforce the same mapping between the GOT
9110 and the symbol table, so the same requirement does not
9111 apply there. */
9112 if (!htab->is_vxworks)
9113 {
9114 if (hmips->global_got_area > GGA_RELOC_ONLY)
9115 hmips->global_got_area = GGA_RELOC_ONLY;
9116 hmips->got_only_for_calls = FALSE;
9117 }
9118
9119 mips_elf_allocate_dynamic_relocations
9120 (dynobj, info, hmips->possibly_dynamic_relocs);
9121 if (hmips->readonly_reloc)
9122 /* We tell the dynamic linker that there are relocations
9123 against the text segment. */
9124 info->flags |= DF_TEXTREL;
9125 }
9126 }
9127
9128 return TRUE;
9129 }
9130
9131 /* Adjust a symbol defined by a dynamic object and referenced by a
9132 regular object. The current definition is in some section of the
9133 dynamic object, but we're not including those sections. We have to
9134 change the definition to something the rest of the link can
9135 understand. */
9136
9137 bfd_boolean
9138 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9139 struct elf_link_hash_entry *h)
9140 {
9141 bfd *dynobj;
9142 struct mips_elf_link_hash_entry *hmips;
9143 struct mips_elf_link_hash_table *htab;
9144
9145 htab = mips_elf_hash_table (info);
9146 BFD_ASSERT (htab != NULL);
9147
9148 dynobj = elf_hash_table (info)->dynobj;
9149 hmips = (struct mips_elf_link_hash_entry *) h;
9150
9151 /* Make sure we know what is going on here. */
9152 BFD_ASSERT (dynobj != NULL
9153 && (h->needs_plt
9154 || h->u.weakdef != NULL
9155 || (h->def_dynamic
9156 && h->ref_regular
9157 && !h->def_regular)));
9158
9159 hmips = (struct mips_elf_link_hash_entry *) h;
9160
9161 /* If there are call relocations against an externally-defined symbol,
9162 see whether we can create a MIPS lazy-binding stub for it. We can
9163 only do this if all references to the function are through call
9164 relocations, and in that case, the traditional lazy-binding stubs
9165 are much more efficient than PLT entries.
9166
9167 Traditional stubs are only available on SVR4 psABI-based systems;
9168 VxWorks always uses PLTs instead. */
9169 if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9170 {
9171 if (! elf_hash_table (info)->dynamic_sections_created)
9172 return TRUE;
9173
9174 /* If this symbol is not defined in a regular file, then set
9175 the symbol to the stub location. This is required to make
9176 function pointers compare as equal between the normal
9177 executable and the shared library. */
9178 if (!h->def_regular)
9179 {
9180 hmips->needs_lazy_stub = TRUE;
9181 htab->lazy_stub_count++;
9182 return TRUE;
9183 }
9184 }
9185 /* As above, VxWorks requires PLT entries for externally-defined
9186 functions that are only accessed through call relocations.
9187
9188 Both VxWorks and non-VxWorks targets also need PLT entries if there
9189 are static-only relocations against an externally-defined function.
9190 This can technically occur for shared libraries if there are
9191 branches to the symbol, although it is unlikely that this will be
9192 used in practice due to the short ranges involved. It can occur
9193 for any relative or absolute relocation in executables; in that
9194 case, the PLT entry becomes the function's canonical address. */
9195 else if (((h->needs_plt && !hmips->no_fn_stub)
9196 || (h->type == STT_FUNC && hmips->has_static_relocs))
9197 && htab->use_plts_and_copy_relocs
9198 && !SYMBOL_CALLS_LOCAL (info, h)
9199 && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9200 && h->root.type == bfd_link_hash_undefweak))
9201 {
9202 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9203 bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9204
9205 /* If this is the first symbol to need a PLT entry, then make some
9206 basic setup. Also work out PLT entry sizes. We'll need them
9207 for PLT offset calculations. */
9208 if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9209 {
9210 BFD_ASSERT (htab->sgotplt->size == 0);
9211 BFD_ASSERT (htab->plt_got_index == 0);
9212
9213 /* If we're using the PLT additions to the psABI, each PLT
9214 entry is 16 bytes and the PLT0 entry is 32 bytes.
9215 Encourage better cache usage by aligning. We do this
9216 lazily to avoid pessimizing traditional objects. */
9217 if (!htab->is_vxworks
9218 && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9219 return FALSE;
9220
9221 /* Make sure that .got.plt is word-aligned. We do this lazily
9222 for the same reason as above. */
9223 if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9224 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9225 return FALSE;
9226
9227 /* On non-VxWorks targets, the first two entries in .got.plt
9228 are reserved. */
9229 if (!htab->is_vxworks)
9230 htab->plt_got_index
9231 += (get_elf_backend_data (dynobj)->got_header_size
9232 / MIPS_ELF_GOT_SIZE (dynobj));
9233
9234 /* On VxWorks, also allocate room for the header's
9235 .rela.plt.unloaded entries. */
9236 if (htab->is_vxworks && !bfd_link_pic (info))
9237 htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9238
9239 /* Now work out the sizes of individual PLT entries. */
9240 if (htab->is_vxworks && bfd_link_pic (info))
9241 htab->plt_mips_entry_size
9242 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9243 else if (htab->is_vxworks)
9244 htab->plt_mips_entry_size
9245 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9246 else if (newabi_p)
9247 htab->plt_mips_entry_size
9248 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9249 else if (!micromips_p)
9250 {
9251 htab->plt_mips_entry_size
9252 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9253 htab->plt_comp_entry_size
9254 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9255 }
9256 else if (htab->insn32)
9257 {
9258 htab->plt_mips_entry_size
9259 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9260 htab->plt_comp_entry_size
9261 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9262 }
9263 else
9264 {
9265 htab->plt_mips_entry_size
9266 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9267 htab->plt_comp_entry_size
9268 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9269 }
9270 }
9271
9272 if (h->plt.plist == NULL)
9273 h->plt.plist = mips_elf_make_plt_record (dynobj);
9274 if (h->plt.plist == NULL)
9275 return FALSE;
9276
9277 /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9278 n32 or n64, so always use a standard entry there.
9279
9280 If the symbol has a MIPS16 call stub and gets a PLT entry, then
9281 all MIPS16 calls will go via that stub, and there is no benefit
9282 to having a MIPS16 entry. And in the case of call_stub a
9283 standard entry actually has to be used as the stub ends with a J
9284 instruction. */
9285 if (newabi_p
9286 || htab->is_vxworks
9287 || hmips->call_stub
9288 || hmips->call_fp_stub)
9289 {
9290 h->plt.plist->need_mips = TRUE;
9291 h->plt.plist->need_comp = FALSE;
9292 }
9293
9294 /* Otherwise, if there are no direct calls to the function, we
9295 have a free choice of whether to use standard or compressed
9296 entries. Prefer microMIPS entries if the object is known to
9297 contain microMIPS code, so that it becomes possible to create
9298 pure microMIPS binaries. Prefer standard entries otherwise,
9299 because MIPS16 ones are no smaller and are usually slower. */
9300 if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9301 {
9302 if (micromips_p)
9303 h->plt.plist->need_comp = TRUE;
9304 else
9305 h->plt.plist->need_mips = TRUE;
9306 }
9307
9308 if (h->plt.plist->need_mips)
9309 {
9310 h->plt.plist->mips_offset = htab->plt_mips_offset;
9311 htab->plt_mips_offset += htab->plt_mips_entry_size;
9312 }
9313 if (h->plt.plist->need_comp)
9314 {
9315 h->plt.plist->comp_offset = htab->plt_comp_offset;
9316 htab->plt_comp_offset += htab->plt_comp_entry_size;
9317 }
9318
9319 /* Reserve the corresponding .got.plt entry now too. */
9320 h->plt.plist->gotplt_index = htab->plt_got_index++;
9321
9322 /* If the output file has no definition of the symbol, set the
9323 symbol's value to the address of the stub. */
9324 if (!bfd_link_pic (info) && !h->def_regular)
9325 hmips->use_plt_entry = TRUE;
9326
9327 /* Make room for the R_MIPS_JUMP_SLOT relocation. */
9328 htab->srelplt->size += (htab->is_vxworks
9329 ? MIPS_ELF_RELA_SIZE (dynobj)
9330 : MIPS_ELF_REL_SIZE (dynobj));
9331
9332 /* Make room for the .rela.plt.unloaded relocations. */
9333 if (htab->is_vxworks && !bfd_link_pic (info))
9334 htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9335
9336 /* All relocations against this symbol that could have been made
9337 dynamic will now refer to the PLT entry instead. */
9338 hmips->possibly_dynamic_relocs = 0;
9339
9340 return TRUE;
9341 }
9342
9343 /* If this is a weak symbol, and there is a real definition, the
9344 processor independent code will have arranged for us to see the
9345 real definition first, and we can just use the same value. */
9346 if (h->u.weakdef != NULL)
9347 {
9348 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9349 || h->u.weakdef->root.type == bfd_link_hash_defweak);
9350 h->root.u.def.section = h->u.weakdef->root.u.def.section;
9351 h->root.u.def.value = h->u.weakdef->root.u.def.value;
9352 return TRUE;
9353 }
9354
9355 /* Otherwise, there is nothing further to do for symbols defined
9356 in regular objects. */
9357 if (h->def_regular)
9358 return TRUE;
9359
9360 /* There's also nothing more to do if we'll convert all relocations
9361 against this symbol into dynamic relocations. */
9362 if (!hmips->has_static_relocs)
9363 return TRUE;
9364
9365 /* We're now relying on copy relocations. Complain if we have
9366 some that we can't convert. */
9367 if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9368 {
9369 (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9370 "dynamic symbol %s"),
9371 h->root.root.string);
9372 bfd_set_error (bfd_error_bad_value);
9373 return FALSE;
9374 }
9375
9376 /* We must allocate the symbol in our .dynbss section, which will
9377 become part of the .bss section of the executable. There will be
9378 an entry for this symbol in the .dynsym section. The dynamic
9379 object will contain position independent code, so all references
9380 from the dynamic object to this symbol will go through the global
9381 offset table. The dynamic linker will use the .dynsym entry to
9382 determine the address it must put in the global offset table, so
9383 both the dynamic object and the regular object will refer to the
9384 same memory location for the variable. */
9385
9386 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9387 {
9388 if (htab->is_vxworks)
9389 htab->srelbss->size += sizeof (Elf32_External_Rela);
9390 else
9391 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9392 h->needs_copy = 1;
9393 }
9394
9395 /* All relocations against this symbol that could have been made
9396 dynamic will now refer to the local copy instead. */
9397 hmips->possibly_dynamic_relocs = 0;
9398
9399 return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
9400 }
9401 \f
9402 /* This function is called after all the input files have been read,
9403 and the input sections have been assigned to output sections. We
9404 check for any mips16 stub sections that we can discard. */
9405
9406 bfd_boolean
9407 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9408 struct bfd_link_info *info)
9409 {
9410 asection *sect;
9411 struct mips_elf_link_hash_table *htab;
9412 struct mips_htab_traverse_info hti;
9413
9414 htab = mips_elf_hash_table (info);
9415 BFD_ASSERT (htab != NULL);
9416
9417 /* The .reginfo section has a fixed size. */
9418 sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9419 if (sect != NULL)
9420 bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9421
9422 /* The .MIPS.abiflags section has a fixed size. */
9423 sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9424 if (sect != NULL)
9425 bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9426
9427 hti.info = info;
9428 hti.output_bfd = output_bfd;
9429 hti.error = FALSE;
9430 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9431 mips_elf_check_symbols, &hti);
9432 if (hti.error)
9433 return FALSE;
9434
9435 return TRUE;
9436 }
9437
9438 /* If the link uses a GOT, lay it out and work out its size. */
9439
9440 static bfd_boolean
9441 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9442 {
9443 bfd *dynobj;
9444 asection *s;
9445 struct mips_got_info *g;
9446 bfd_size_type loadable_size = 0;
9447 bfd_size_type page_gotno;
9448 bfd *ibfd;
9449 struct mips_elf_traverse_got_arg tga;
9450 struct mips_elf_link_hash_table *htab;
9451
9452 htab = mips_elf_hash_table (info);
9453 BFD_ASSERT (htab != NULL);
9454
9455 s = htab->sgot;
9456 if (s == NULL)
9457 return TRUE;
9458
9459 dynobj = elf_hash_table (info)->dynobj;
9460 g = htab->got_info;
9461
9462 /* Allocate room for the reserved entries. VxWorks always reserves
9463 3 entries; other objects only reserve 2 entries. */
9464 BFD_ASSERT (g->assigned_low_gotno == 0);
9465 if (htab->is_vxworks)
9466 htab->reserved_gotno = 3;
9467 else
9468 htab->reserved_gotno = 2;
9469 g->local_gotno += htab->reserved_gotno;
9470 g->assigned_low_gotno = htab->reserved_gotno;
9471
9472 /* Decide which symbols need to go in the global part of the GOT and
9473 count the number of reloc-only GOT symbols. */
9474 mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9475
9476 if (!mips_elf_resolve_final_got_entries (info, g))
9477 return FALSE;
9478
9479 /* Calculate the total loadable size of the output. That
9480 will give us the maximum number of GOT_PAGE entries
9481 required. */
9482 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9483 {
9484 asection *subsection;
9485
9486 for (subsection = ibfd->sections;
9487 subsection;
9488 subsection = subsection->next)
9489 {
9490 if ((subsection->flags & SEC_ALLOC) == 0)
9491 continue;
9492 loadable_size += ((subsection->size + 0xf)
9493 &~ (bfd_size_type) 0xf);
9494 }
9495 }
9496
9497 if (htab->is_vxworks)
9498 /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9499 relocations against local symbols evaluate to "G", and the EABI does
9500 not include R_MIPS_GOT_PAGE. */
9501 page_gotno = 0;
9502 else
9503 /* Assume there are two loadable segments consisting of contiguous
9504 sections. Is 5 enough? */
9505 page_gotno = (loadable_size >> 16) + 5;
9506
9507 /* Choose the smaller of the two page estimates; both are intended to be
9508 conservative. */
9509 if (page_gotno > g->page_gotno)
9510 page_gotno = g->page_gotno;
9511
9512 g->local_gotno += page_gotno;
9513 g->assigned_high_gotno = g->local_gotno - 1;
9514
9515 s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9516 s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9517 s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9518
9519 /* VxWorks does not support multiple GOTs. It initializes $gp to
9520 __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9521 dynamic loader. */
9522 if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9523 {
9524 if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9525 return FALSE;
9526 }
9527 else
9528 {
9529 /* Record that all bfds use G. This also has the effect of freeing
9530 the per-bfd GOTs, which we no longer need. */
9531 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9532 if (mips_elf_bfd_got (ibfd, FALSE))
9533 mips_elf_replace_bfd_got (ibfd, g);
9534 mips_elf_replace_bfd_got (output_bfd, g);
9535
9536 /* Set up TLS entries. */
9537 g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9538 tga.info = info;
9539 tga.g = g;
9540 tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9541 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9542 if (!tga.g)
9543 return FALSE;
9544 BFD_ASSERT (g->tls_assigned_gotno
9545 == g->global_gotno + g->local_gotno + g->tls_gotno);
9546
9547 /* Each VxWorks GOT entry needs an explicit relocation. */
9548 if (htab->is_vxworks && bfd_link_pic (info))
9549 g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9550
9551 /* Allocate room for the TLS relocations. */
9552 if (g->relocs)
9553 mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9554 }
9555
9556 return TRUE;
9557 }
9558
9559 /* Estimate the size of the .MIPS.stubs section. */
9560
9561 static void
9562 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9563 {
9564 struct mips_elf_link_hash_table *htab;
9565 bfd_size_type dynsymcount;
9566
9567 htab = mips_elf_hash_table (info);
9568 BFD_ASSERT (htab != NULL);
9569
9570 if (htab->lazy_stub_count == 0)
9571 return;
9572
9573 /* IRIX rld assumes that a function stub isn't at the end of the .text
9574 section, so add a dummy entry to the end. */
9575 htab->lazy_stub_count++;
9576
9577 /* Get a worst-case estimate of the number of dynamic symbols needed.
9578 At this point, dynsymcount does not account for section symbols
9579 and count_section_dynsyms may overestimate the number that will
9580 be needed. */
9581 dynsymcount = (elf_hash_table (info)->dynsymcount
9582 + count_section_dynsyms (output_bfd, info));
9583
9584 /* Determine the size of one stub entry. There's no disadvantage
9585 from using microMIPS code here, so for the sake of pure-microMIPS
9586 binaries we prefer it whenever there's any microMIPS code in
9587 output produced at all. This has a benefit of stubs being
9588 shorter by 4 bytes each too, unless in the insn32 mode. */
9589 if (!MICROMIPS_P (output_bfd))
9590 htab->function_stub_size = (dynsymcount > 0x10000
9591 ? MIPS_FUNCTION_STUB_BIG_SIZE
9592 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9593 else if (htab->insn32)
9594 htab->function_stub_size = (dynsymcount > 0x10000
9595 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9596 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9597 else
9598 htab->function_stub_size = (dynsymcount > 0x10000
9599 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9600 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9601
9602 htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9603 }
9604
9605 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9606 mips_htab_traverse_info. If H needs a traditional MIPS lazy-binding
9607 stub, allocate an entry in the stubs section. */
9608
9609 static bfd_boolean
9610 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9611 {
9612 struct mips_htab_traverse_info *hti = data;
9613 struct mips_elf_link_hash_table *htab;
9614 struct bfd_link_info *info;
9615 bfd *output_bfd;
9616
9617 info = hti->info;
9618 output_bfd = hti->output_bfd;
9619 htab = mips_elf_hash_table (info);
9620 BFD_ASSERT (htab != NULL);
9621
9622 if (h->needs_lazy_stub)
9623 {
9624 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9625 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9626 bfd_vma isa_bit = micromips_p;
9627
9628 BFD_ASSERT (htab->root.dynobj != NULL);
9629 if (h->root.plt.plist == NULL)
9630 h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9631 if (h->root.plt.plist == NULL)
9632 {
9633 hti->error = TRUE;
9634 return FALSE;
9635 }
9636 h->root.root.u.def.section = htab->sstubs;
9637 h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9638 h->root.plt.plist->stub_offset = htab->sstubs->size;
9639 h->root.other = other;
9640 htab->sstubs->size += htab->function_stub_size;
9641 }
9642 return TRUE;
9643 }
9644
9645 /* Allocate offsets in the stubs section to each symbol that needs one.
9646 Set the final size of the .MIPS.stub section. */
9647
9648 static bfd_boolean
9649 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9650 {
9651 bfd *output_bfd = info->output_bfd;
9652 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9653 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9654 bfd_vma isa_bit = micromips_p;
9655 struct mips_elf_link_hash_table *htab;
9656 struct mips_htab_traverse_info hti;
9657 struct elf_link_hash_entry *h;
9658 bfd *dynobj;
9659
9660 htab = mips_elf_hash_table (info);
9661 BFD_ASSERT (htab != NULL);
9662
9663 if (htab->lazy_stub_count == 0)
9664 return TRUE;
9665
9666 htab->sstubs->size = 0;
9667 hti.info = info;
9668 hti.output_bfd = output_bfd;
9669 hti.error = FALSE;
9670 mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9671 if (hti.error)
9672 return FALSE;
9673 htab->sstubs->size += htab->function_stub_size;
9674 BFD_ASSERT (htab->sstubs->size
9675 == htab->lazy_stub_count * htab->function_stub_size);
9676
9677 dynobj = elf_hash_table (info)->dynobj;
9678 BFD_ASSERT (dynobj != NULL);
9679 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9680 if (h == NULL)
9681 return FALSE;
9682 h->root.u.def.value = isa_bit;
9683 h->other = other;
9684 h->type = STT_FUNC;
9685
9686 return TRUE;
9687 }
9688
9689 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9690 bfd_link_info. If H uses the address of a PLT entry as the value
9691 of the symbol, then set the entry in the symbol table now. Prefer
9692 a standard MIPS PLT entry. */
9693
9694 static bfd_boolean
9695 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9696 {
9697 struct bfd_link_info *info = data;
9698 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9699 struct mips_elf_link_hash_table *htab;
9700 unsigned int other;
9701 bfd_vma isa_bit;
9702 bfd_vma val;
9703
9704 htab = mips_elf_hash_table (info);
9705 BFD_ASSERT (htab != NULL);
9706
9707 if (h->use_plt_entry)
9708 {
9709 BFD_ASSERT (h->root.plt.plist != NULL);
9710 BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9711 || h->root.plt.plist->comp_offset != MINUS_ONE);
9712
9713 val = htab->plt_header_size;
9714 if (h->root.plt.plist->mips_offset != MINUS_ONE)
9715 {
9716 isa_bit = 0;
9717 val += h->root.plt.plist->mips_offset;
9718 other = 0;
9719 }
9720 else
9721 {
9722 isa_bit = 1;
9723 val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9724 other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9725 }
9726 val += isa_bit;
9727 /* For VxWorks, point at the PLT load stub rather than the lazy
9728 resolution stub; this stub will become the canonical function
9729 address. */
9730 if (htab->is_vxworks)
9731 val += 8;
9732
9733 h->root.root.u.def.section = htab->splt;
9734 h->root.root.u.def.value = val;
9735 h->root.other = other;
9736 }
9737
9738 return TRUE;
9739 }
9740
9741 /* Set the sizes of the dynamic sections. */
9742
9743 bfd_boolean
9744 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9745 struct bfd_link_info *info)
9746 {
9747 bfd *dynobj;
9748 asection *s, *sreldyn;
9749 bfd_boolean reltext;
9750 struct mips_elf_link_hash_table *htab;
9751
9752 htab = mips_elf_hash_table (info);
9753 BFD_ASSERT (htab != NULL);
9754 dynobj = elf_hash_table (info)->dynobj;
9755 BFD_ASSERT (dynobj != NULL);
9756
9757 if (elf_hash_table (info)->dynamic_sections_created)
9758 {
9759 /* Set the contents of the .interp section to the interpreter. */
9760 if (bfd_link_executable (info) && !info->nointerp)
9761 {
9762 s = bfd_get_linker_section (dynobj, ".interp");
9763 BFD_ASSERT (s != NULL);
9764 s->size
9765 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9766 s->contents
9767 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9768 }
9769
9770 /* Figure out the size of the PLT header if we know that we
9771 are using it. For the sake of cache alignment always use
9772 a standard header whenever any standard entries are present
9773 even if microMIPS entries are present as well. This also
9774 lets the microMIPS header rely on the value of $v0 only set
9775 by microMIPS entries, for a small size reduction.
9776
9777 Set symbol table entry values for symbols that use the
9778 address of their PLT entry now that we can calculate it.
9779
9780 Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9781 haven't already in _bfd_elf_create_dynamic_sections. */
9782 if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9783 {
9784 bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9785 && !htab->plt_mips_offset);
9786 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9787 bfd_vma isa_bit = micromips_p;
9788 struct elf_link_hash_entry *h;
9789 bfd_vma size;
9790
9791 BFD_ASSERT (htab->use_plts_and_copy_relocs);
9792 BFD_ASSERT (htab->sgotplt->size == 0);
9793 BFD_ASSERT (htab->splt->size == 0);
9794
9795 if (htab->is_vxworks && bfd_link_pic (info))
9796 size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9797 else if (htab->is_vxworks)
9798 size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9799 else if (ABI_64_P (output_bfd))
9800 size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9801 else if (ABI_N32_P (output_bfd))
9802 size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9803 else if (!micromips_p)
9804 size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9805 else if (htab->insn32)
9806 size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9807 else
9808 size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9809
9810 htab->plt_header_is_comp = micromips_p;
9811 htab->plt_header_size = size;
9812 htab->splt->size = (size
9813 + htab->plt_mips_offset
9814 + htab->plt_comp_offset);
9815 htab->sgotplt->size = (htab->plt_got_index
9816 * MIPS_ELF_GOT_SIZE (dynobj));
9817
9818 mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9819
9820 if (htab->root.hplt == NULL)
9821 {
9822 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9823 "_PROCEDURE_LINKAGE_TABLE_");
9824 htab->root.hplt = h;
9825 if (h == NULL)
9826 return FALSE;
9827 }
9828
9829 h = htab->root.hplt;
9830 h->root.u.def.value = isa_bit;
9831 h->other = other;
9832 h->type = STT_FUNC;
9833 }
9834 }
9835
9836 /* Allocate space for global sym dynamic relocs. */
9837 elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9838
9839 mips_elf_estimate_stub_size (output_bfd, info);
9840
9841 if (!mips_elf_lay_out_got (output_bfd, info))
9842 return FALSE;
9843
9844 mips_elf_lay_out_lazy_stubs (info);
9845
9846 /* The check_relocs and adjust_dynamic_symbol entry points have
9847 determined the sizes of the various dynamic sections. Allocate
9848 memory for them. */
9849 reltext = FALSE;
9850 for (s = dynobj->sections; s != NULL; s = s->next)
9851 {
9852 const char *name;
9853
9854 /* It's OK to base decisions on the section name, because none
9855 of the dynobj section names depend upon the input files. */
9856 name = bfd_get_section_name (dynobj, s);
9857
9858 if ((s->flags & SEC_LINKER_CREATED) == 0)
9859 continue;
9860
9861 if (CONST_STRNEQ (name, ".rel"))
9862 {
9863 if (s->size != 0)
9864 {
9865 const char *outname;
9866 asection *target;
9867
9868 /* If this relocation section applies to a read only
9869 section, then we probably need a DT_TEXTREL entry.
9870 If the relocation section is .rel(a).dyn, we always
9871 assert a DT_TEXTREL entry rather than testing whether
9872 there exists a relocation to a read only section or
9873 not. */
9874 outname = bfd_get_section_name (output_bfd,
9875 s->output_section);
9876 target = bfd_get_section_by_name (output_bfd, outname + 4);
9877 if ((target != NULL
9878 && (target->flags & SEC_READONLY) != 0
9879 && (target->flags & SEC_ALLOC) != 0)
9880 || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9881 reltext = TRUE;
9882
9883 /* We use the reloc_count field as a counter if we need
9884 to copy relocs into the output file. */
9885 if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9886 s->reloc_count = 0;
9887
9888 /* If combreloc is enabled, elf_link_sort_relocs() will
9889 sort relocations, but in a different way than we do,
9890 and before we're done creating relocations. Also, it
9891 will move them around between input sections'
9892 relocation's contents, so our sorting would be
9893 broken, so don't let it run. */
9894 info->combreloc = 0;
9895 }
9896 }
9897 else if (bfd_link_executable (info)
9898 && ! mips_elf_hash_table (info)->use_rld_obj_head
9899 && CONST_STRNEQ (name, ".rld_map"))
9900 {
9901 /* We add a room for __rld_map. It will be filled in by the
9902 rtld to contain a pointer to the _r_debug structure. */
9903 s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9904 }
9905 else if (SGI_COMPAT (output_bfd)
9906 && CONST_STRNEQ (name, ".compact_rel"))
9907 s->size += mips_elf_hash_table (info)->compact_rel_size;
9908 else if (s == htab->splt)
9909 {
9910 /* If the last PLT entry has a branch delay slot, allocate
9911 room for an extra nop to fill the delay slot. This is
9912 for CPUs without load interlocking. */
9913 if (! LOAD_INTERLOCKS_P (output_bfd)
9914 && ! htab->is_vxworks && s->size > 0)
9915 s->size += 4;
9916 }
9917 else if (! CONST_STRNEQ (name, ".init")
9918 && s != htab->sgot
9919 && s != htab->sgotplt
9920 && s != htab->sstubs
9921 && s != htab->sdynbss)
9922 {
9923 /* It's not one of our sections, so don't allocate space. */
9924 continue;
9925 }
9926
9927 if (s->size == 0)
9928 {
9929 s->flags |= SEC_EXCLUDE;
9930 continue;
9931 }
9932
9933 if ((s->flags & SEC_HAS_CONTENTS) == 0)
9934 continue;
9935
9936 /* Allocate memory for the section contents. */
9937 s->contents = bfd_zalloc (dynobj, s->size);
9938 if (s->contents == NULL)
9939 {
9940 bfd_set_error (bfd_error_no_memory);
9941 return FALSE;
9942 }
9943 }
9944
9945 if (elf_hash_table (info)->dynamic_sections_created)
9946 {
9947 /* Add some entries to the .dynamic section. We fill in the
9948 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9949 must add the entries now so that we get the correct size for
9950 the .dynamic section. */
9951
9952 /* SGI object has the equivalence of DT_DEBUG in the
9953 DT_MIPS_RLD_MAP entry. This must come first because glibc
9954 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9955 may only look at the first one they see. */
9956 if (!bfd_link_pic (info)
9957 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9958 return FALSE;
9959
9960 if (bfd_link_executable (info)
9961 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9962 return FALSE;
9963
9964 /* The DT_DEBUG entry may be filled in by the dynamic linker and
9965 used by the debugger. */
9966 if (bfd_link_executable (info)
9967 && !SGI_COMPAT (output_bfd)
9968 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9969 return FALSE;
9970
9971 if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9972 info->flags |= DF_TEXTREL;
9973
9974 if ((info->flags & DF_TEXTREL) != 0)
9975 {
9976 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9977 return FALSE;
9978
9979 /* Clear the DF_TEXTREL flag. It will be set again if we
9980 write out an actual text relocation; we may not, because
9981 at this point we do not know whether e.g. any .eh_frame
9982 absolute relocations have been converted to PC-relative. */
9983 info->flags &= ~DF_TEXTREL;
9984 }
9985
9986 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9987 return FALSE;
9988
9989 sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9990 if (htab->is_vxworks)
9991 {
9992 /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not
9993 use any of the DT_MIPS_* tags. */
9994 if (sreldyn && sreldyn->size > 0)
9995 {
9996 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9997 return FALSE;
9998
9999 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
10000 return FALSE;
10001
10002 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
10003 return FALSE;
10004 }
10005 }
10006 else
10007 {
10008 if (sreldyn && sreldyn->size > 0)
10009 {
10010 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
10011 return FALSE;
10012
10013 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
10014 return FALSE;
10015
10016 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
10017 return FALSE;
10018 }
10019
10020 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
10021 return FALSE;
10022
10023 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
10024 return FALSE;
10025
10026 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
10027 return FALSE;
10028
10029 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
10030 return FALSE;
10031
10032 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
10033 return FALSE;
10034
10035 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
10036 return FALSE;
10037
10038 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
10039 return FALSE;
10040
10041 if (IRIX_COMPAT (dynobj) == ict_irix5
10042 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
10043 return FALSE;
10044
10045 if (IRIX_COMPAT (dynobj) == ict_irix6
10046 && (bfd_get_section_by_name
10047 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
10048 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
10049 return FALSE;
10050 }
10051 if (htab->splt->size > 0)
10052 {
10053 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
10054 return FALSE;
10055
10056 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
10057 return FALSE;
10058
10059 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
10060 return FALSE;
10061
10062 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
10063 return FALSE;
10064 }
10065 if (htab->is_vxworks
10066 && !elf_vxworks_add_dynamic_entries (output_bfd, info))
10067 return FALSE;
10068 }
10069
10070 return TRUE;
10071 }
10072 \f
10073 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
10074 Adjust its R_ADDEND field so that it is correct for the output file.
10075 LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
10076 and sections respectively; both use symbol indexes. */
10077
10078 static void
10079 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
10080 bfd *input_bfd, Elf_Internal_Sym *local_syms,
10081 asection **local_sections, Elf_Internal_Rela *rel)
10082 {
10083 unsigned int r_type, r_symndx;
10084 Elf_Internal_Sym *sym;
10085 asection *sec;
10086
10087 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10088 {
10089 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10090 if (gprel16_reloc_p (r_type)
10091 || r_type == R_MIPS_GPREL32
10092 || literal_reloc_p (r_type))
10093 {
10094 rel->r_addend += _bfd_get_gp_value (input_bfd);
10095 rel->r_addend -= _bfd_get_gp_value (output_bfd);
10096 }
10097
10098 r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
10099 sym = local_syms + r_symndx;
10100
10101 /* Adjust REL's addend to account for section merging. */
10102 if (!bfd_link_relocatable (info))
10103 {
10104 sec = local_sections[r_symndx];
10105 _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
10106 }
10107
10108 /* This would normally be done by the rela_normal code in elflink.c. */
10109 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
10110 rel->r_addend += local_sections[r_symndx]->output_offset;
10111 }
10112 }
10113
10114 /* Handle relocations against symbols from removed linkonce sections,
10115 or sections discarded by a linker script. We use this wrapper around
10116 RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
10117 on 64-bit ELF targets. In this case for any relocation handled, which
10118 always be the first in a triplet, the remaining two have to be processed
10119 together with the first, even if they are R_MIPS_NONE. It is the symbol
10120 index referred by the first reloc that applies to all the three and the
10121 remaining two never refer to an object symbol. And it is the final
10122 relocation (the last non-null one) that determines the output field of
10123 the whole relocation so retrieve the corresponding howto structure for
10124 the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
10125
10126 Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
10127 and therefore requires to be pasted in a loop. It also defines a block
10128 and does not protect any of its arguments, hence the extra brackets. */
10129
10130 static void
10131 mips_reloc_against_discarded_section (bfd *output_bfd,
10132 struct bfd_link_info *info,
10133 bfd *input_bfd, asection *input_section,
10134 Elf_Internal_Rela **rel,
10135 const Elf_Internal_Rela **relend,
10136 bfd_boolean rel_reloc,
10137 reloc_howto_type *howto,
10138 bfd_byte *contents)
10139 {
10140 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10141 int count = bed->s->int_rels_per_ext_rel;
10142 unsigned int r_type;
10143 int i;
10144
10145 for (i = count - 1; i > 0; i--)
10146 {
10147 r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10148 if (r_type != R_MIPS_NONE)
10149 {
10150 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10151 break;
10152 }
10153 }
10154 do
10155 {
10156 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10157 (*rel), count, (*relend),
10158 howto, i, contents);
10159 }
10160 while (0);
10161 }
10162
10163 /* Relocate a MIPS ELF section. */
10164
10165 bfd_boolean
10166 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10167 bfd *input_bfd, asection *input_section,
10168 bfd_byte *contents, Elf_Internal_Rela *relocs,
10169 Elf_Internal_Sym *local_syms,
10170 asection **local_sections)
10171 {
10172 Elf_Internal_Rela *rel;
10173 const Elf_Internal_Rela *relend;
10174 bfd_vma addend = 0;
10175 bfd_boolean use_saved_addend_p = FALSE;
10176 const struct elf_backend_data *bed;
10177
10178 bed = get_elf_backend_data (output_bfd);
10179 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10180 for (rel = relocs; rel < relend; ++rel)
10181 {
10182 const char *name;
10183 bfd_vma value = 0;
10184 reloc_howto_type *howto;
10185 bfd_boolean cross_mode_jump_p = FALSE;
10186 /* TRUE if the relocation is a RELA relocation, rather than a
10187 REL relocation. */
10188 bfd_boolean rela_relocation_p = TRUE;
10189 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10190 const char *msg;
10191 unsigned long r_symndx;
10192 asection *sec;
10193 Elf_Internal_Shdr *symtab_hdr;
10194 struct elf_link_hash_entry *h;
10195 bfd_boolean rel_reloc;
10196
10197 rel_reloc = (NEWABI_P (input_bfd)
10198 && mips_elf_rel_relocation_p (input_bfd, input_section,
10199 relocs, rel));
10200 /* Find the relocation howto for this relocation. */
10201 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10202
10203 r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10204 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10205 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10206 {
10207 sec = local_sections[r_symndx];
10208 h = NULL;
10209 }
10210 else
10211 {
10212 unsigned long extsymoff;
10213
10214 extsymoff = 0;
10215 if (!elf_bad_symtab (input_bfd))
10216 extsymoff = symtab_hdr->sh_info;
10217 h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10218 while (h->root.type == bfd_link_hash_indirect
10219 || h->root.type == bfd_link_hash_warning)
10220 h = (struct elf_link_hash_entry *) h->root.u.i.link;
10221
10222 sec = NULL;
10223 if (h->root.type == bfd_link_hash_defined
10224 || h->root.type == bfd_link_hash_defweak)
10225 sec = h->root.u.def.section;
10226 }
10227
10228 if (sec != NULL && discarded_section (sec))
10229 {
10230 mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10231 input_section, &rel, &relend,
10232 rel_reloc, howto, contents);
10233 continue;
10234 }
10235
10236 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10237 {
10238 /* Some 32-bit code uses R_MIPS_64. In particular, people use
10239 64-bit code, but make sure all their addresses are in the
10240 lowermost or uppermost 32-bit section of the 64-bit address
10241 space. Thus, when they use an R_MIPS_64 they mean what is
10242 usually meant by R_MIPS_32, with the exception that the
10243 stored value is sign-extended to 64 bits. */
10244 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10245
10246 /* On big-endian systems, we need to lie about the position
10247 of the reloc. */
10248 if (bfd_big_endian (input_bfd))
10249 rel->r_offset += 4;
10250 }
10251
10252 if (!use_saved_addend_p)
10253 {
10254 /* If these relocations were originally of the REL variety,
10255 we must pull the addend out of the field that will be
10256 relocated. Otherwise, we simply use the contents of the
10257 RELA relocation. */
10258 if (mips_elf_rel_relocation_p (input_bfd, input_section,
10259 relocs, rel))
10260 {
10261 rela_relocation_p = FALSE;
10262 addend = mips_elf_read_rel_addend (input_bfd, rel,
10263 howto, contents);
10264 if (hi16_reloc_p (r_type)
10265 || (got16_reloc_p (r_type)
10266 && mips_elf_local_relocation_p (input_bfd, rel,
10267 local_sections)))
10268 {
10269 if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10270 contents, &addend))
10271 {
10272 if (h)
10273 name = h->root.root.string;
10274 else
10275 name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10276 local_syms + r_symndx,
10277 sec);
10278 (*_bfd_error_handler)
10279 (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10280 input_bfd, input_section, name, howto->name,
10281 rel->r_offset);
10282 }
10283 }
10284 else
10285 addend <<= howto->rightshift;
10286 }
10287 else
10288 addend = rel->r_addend;
10289 mips_elf_adjust_addend (output_bfd, info, input_bfd,
10290 local_syms, local_sections, rel);
10291 }
10292
10293 if (bfd_link_relocatable (info))
10294 {
10295 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10296 && bfd_big_endian (input_bfd))
10297 rel->r_offset -= 4;
10298
10299 if (!rela_relocation_p && rel->r_addend)
10300 {
10301 addend += rel->r_addend;
10302 if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10303 addend = mips_elf_high (addend);
10304 else if (r_type == R_MIPS_HIGHER)
10305 addend = mips_elf_higher (addend);
10306 else if (r_type == R_MIPS_HIGHEST)
10307 addend = mips_elf_highest (addend);
10308 else
10309 addend >>= howto->rightshift;
10310
10311 /* We use the source mask, rather than the destination
10312 mask because the place to which we are writing will be
10313 source of the addend in the final link. */
10314 addend &= howto->src_mask;
10315
10316 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10317 /* See the comment above about using R_MIPS_64 in the 32-bit
10318 ABI. Here, we need to update the addend. It would be
10319 possible to get away with just using the R_MIPS_32 reloc
10320 but for endianness. */
10321 {
10322 bfd_vma sign_bits;
10323 bfd_vma low_bits;
10324 bfd_vma high_bits;
10325
10326 if (addend & ((bfd_vma) 1 << 31))
10327 #ifdef BFD64
10328 sign_bits = ((bfd_vma) 1 << 32) - 1;
10329 #else
10330 sign_bits = -1;
10331 #endif
10332 else
10333 sign_bits = 0;
10334
10335 /* If we don't know that we have a 64-bit type,
10336 do two separate stores. */
10337 if (bfd_big_endian (input_bfd))
10338 {
10339 /* Store the sign-bits (which are most significant)
10340 first. */
10341 low_bits = sign_bits;
10342 high_bits = addend;
10343 }
10344 else
10345 {
10346 low_bits = addend;
10347 high_bits = sign_bits;
10348 }
10349 bfd_put_32 (input_bfd, low_bits,
10350 contents + rel->r_offset);
10351 bfd_put_32 (input_bfd, high_bits,
10352 contents + rel->r_offset + 4);
10353 continue;
10354 }
10355
10356 if (! mips_elf_perform_relocation (info, howto, rel, addend,
10357 input_bfd, input_section,
10358 contents, FALSE))
10359 return FALSE;
10360 }
10361
10362 /* Go on to the next relocation. */
10363 continue;
10364 }
10365
10366 /* In the N32 and 64-bit ABIs there may be multiple consecutive
10367 relocations for the same offset. In that case we are
10368 supposed to treat the output of each relocation as the addend
10369 for the next. */
10370 if (rel + 1 < relend
10371 && rel->r_offset == rel[1].r_offset
10372 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10373 use_saved_addend_p = TRUE;
10374 else
10375 use_saved_addend_p = FALSE;
10376
10377 /* Figure out what value we are supposed to relocate. */
10378 switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10379 input_section, info, rel,
10380 addend, howto, local_syms,
10381 local_sections, &value,
10382 &name, &cross_mode_jump_p,
10383 use_saved_addend_p))
10384 {
10385 case bfd_reloc_continue:
10386 /* There's nothing to do. */
10387 continue;
10388
10389 case bfd_reloc_undefined:
10390 /* mips_elf_calculate_relocation already called the
10391 undefined_symbol callback. There's no real point in
10392 trying to perform the relocation at this point, so we
10393 just skip ahead to the next relocation. */
10394 continue;
10395
10396 case bfd_reloc_notsupported:
10397 msg = _("internal error: unsupported relocation error");
10398 info->callbacks->warning
10399 (info, msg, name, input_bfd, input_section, rel->r_offset);
10400 return FALSE;
10401
10402 case bfd_reloc_overflow:
10403 if (use_saved_addend_p)
10404 /* Ignore overflow until we reach the last relocation for
10405 a given location. */
10406 ;
10407 else
10408 {
10409 struct mips_elf_link_hash_table *htab;
10410
10411 htab = mips_elf_hash_table (info);
10412 BFD_ASSERT (htab != NULL);
10413 BFD_ASSERT (name != NULL);
10414 if (!htab->small_data_overflow_reported
10415 && (gprel16_reloc_p (howto->type)
10416 || literal_reloc_p (howto->type)))
10417 {
10418 msg = _("small-data section exceeds 64KB;"
10419 " lower small-data size limit (see option -G)");
10420
10421 htab->small_data_overflow_reported = TRUE;
10422 (*info->callbacks->einfo) ("%P: %s\n", msg);
10423 }
10424 (*info->callbacks->reloc_overflow)
10425 (info, NULL, name, howto->name, (bfd_vma) 0,
10426 input_bfd, input_section, rel->r_offset);
10427 }
10428 break;
10429
10430 case bfd_reloc_ok:
10431 break;
10432
10433 case bfd_reloc_outofrange:
10434 msg = NULL;
10435 if (jal_reloc_p (howto->type))
10436 msg = (cross_mode_jump_p
10437 ? _("Cannot convert a jump to JALX "
10438 "for a non-word-aligned address")
10439 : (howto->type == R_MIPS16_26
10440 ? _("Jump to a non-word-aligned address")
10441 : _("Jump to a non-instruction-aligned address")));
10442 else if (b_reloc_p (howto->type))
10443 msg = (cross_mode_jump_p
10444 ? _("Cannot convert a branch to JALX "
10445 "for a non-word-aligned address")
10446 : _("Branch to a non-instruction-aligned address"));
10447 else if (aligned_pcrel_reloc_p (howto->type))
10448 msg = _("PC-relative load from unaligned address");
10449 if (msg)
10450 {
10451 info->callbacks->einfo
10452 ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10453 break;
10454 }
10455 /* Fall through. */
10456
10457 default:
10458 abort ();
10459 break;
10460 }
10461
10462 /* If we've got another relocation for the address, keep going
10463 until we reach the last one. */
10464 if (use_saved_addend_p)
10465 {
10466 addend = value;
10467 continue;
10468 }
10469
10470 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10471 /* See the comment above about using R_MIPS_64 in the 32-bit
10472 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
10473 that calculated the right value. Now, however, we
10474 sign-extend the 32-bit result to 64-bits, and store it as a
10475 64-bit value. We are especially generous here in that we
10476 go to extreme lengths to support this usage on systems with
10477 only a 32-bit VMA. */
10478 {
10479 bfd_vma sign_bits;
10480 bfd_vma low_bits;
10481 bfd_vma high_bits;
10482
10483 if (value & ((bfd_vma) 1 << 31))
10484 #ifdef BFD64
10485 sign_bits = ((bfd_vma) 1 << 32) - 1;
10486 #else
10487 sign_bits = -1;
10488 #endif
10489 else
10490 sign_bits = 0;
10491
10492 /* If we don't know that we have a 64-bit type,
10493 do two separate stores. */
10494 if (bfd_big_endian (input_bfd))
10495 {
10496 /* Undo what we did above. */
10497 rel->r_offset -= 4;
10498 /* Store the sign-bits (which are most significant)
10499 first. */
10500 low_bits = sign_bits;
10501 high_bits = value;
10502 }
10503 else
10504 {
10505 low_bits = value;
10506 high_bits = sign_bits;
10507 }
10508 bfd_put_32 (input_bfd, low_bits,
10509 contents + rel->r_offset);
10510 bfd_put_32 (input_bfd, high_bits,
10511 contents + rel->r_offset + 4);
10512 continue;
10513 }
10514
10515 /* Actually perform the relocation. */
10516 if (! mips_elf_perform_relocation (info, howto, rel, value,
10517 input_bfd, input_section,
10518 contents, cross_mode_jump_p))
10519 return FALSE;
10520 }
10521
10522 return TRUE;
10523 }
10524 \f
10525 /* A function that iterates over each entry in la25_stubs and fills
10526 in the code for each one. DATA points to a mips_htab_traverse_info. */
10527
10528 static int
10529 mips_elf_create_la25_stub (void **slot, void *data)
10530 {
10531 struct mips_htab_traverse_info *hti;
10532 struct mips_elf_link_hash_table *htab;
10533 struct mips_elf_la25_stub *stub;
10534 asection *s;
10535 bfd_byte *loc;
10536 bfd_vma offset, target, target_high, target_low;
10537
10538 stub = (struct mips_elf_la25_stub *) *slot;
10539 hti = (struct mips_htab_traverse_info *) data;
10540 htab = mips_elf_hash_table (hti->info);
10541 BFD_ASSERT (htab != NULL);
10542
10543 /* Create the section contents, if we haven't already. */
10544 s = stub->stub_section;
10545 loc = s->contents;
10546 if (loc == NULL)
10547 {
10548 loc = bfd_malloc (s->size);
10549 if (loc == NULL)
10550 {
10551 hti->error = TRUE;
10552 return FALSE;
10553 }
10554 s->contents = loc;
10555 }
10556
10557 /* Work out where in the section this stub should go. */
10558 offset = stub->offset;
10559
10560 /* Work out the target address. */
10561 target = mips_elf_get_la25_target (stub, &s);
10562 target += s->output_section->vma + s->output_offset;
10563
10564 target_high = ((target + 0x8000) >> 16) & 0xffff;
10565 target_low = (target & 0xffff);
10566
10567 if (stub->stub_section != htab->strampoline)
10568 {
10569 /* This is a simple LUI/ADDIU stub. Zero out the beginning
10570 of the section and write the two instructions at the end. */
10571 memset (loc, 0, offset);
10572 loc += offset;
10573 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10574 {
10575 bfd_put_micromips_32 (hti->output_bfd,
10576 LA25_LUI_MICROMIPS (target_high),
10577 loc);
10578 bfd_put_micromips_32 (hti->output_bfd,
10579 LA25_ADDIU_MICROMIPS (target_low),
10580 loc + 4);
10581 }
10582 else
10583 {
10584 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10585 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10586 }
10587 }
10588 else
10589 {
10590 /* This is trampoline. */
10591 loc += offset;
10592 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10593 {
10594 bfd_put_micromips_32 (hti->output_bfd,
10595 LA25_LUI_MICROMIPS (target_high), loc);
10596 bfd_put_micromips_32 (hti->output_bfd,
10597 LA25_J_MICROMIPS (target), loc + 4);
10598 bfd_put_micromips_32 (hti->output_bfd,
10599 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10600 bfd_put_32 (hti->output_bfd, 0, loc + 12);
10601 }
10602 else
10603 {
10604 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10605 bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10606 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10607 bfd_put_32 (hti->output_bfd, 0, loc + 12);
10608 }
10609 }
10610 return TRUE;
10611 }
10612
10613 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10614 adjust it appropriately now. */
10615
10616 static void
10617 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10618 const char *name, Elf_Internal_Sym *sym)
10619 {
10620 /* The linker script takes care of providing names and values for
10621 these, but we must place them into the right sections. */
10622 static const char* const text_section_symbols[] = {
10623 "_ftext",
10624 "_etext",
10625 "__dso_displacement",
10626 "__elf_header",
10627 "__program_header_table",
10628 NULL
10629 };
10630
10631 static const char* const data_section_symbols[] = {
10632 "_fdata",
10633 "_edata",
10634 "_end",
10635 "_fbss",
10636 NULL
10637 };
10638
10639 const char* const *p;
10640 int i;
10641
10642 for (i = 0; i < 2; ++i)
10643 for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10644 *p;
10645 ++p)
10646 if (strcmp (*p, name) == 0)
10647 {
10648 /* All of these symbols are given type STT_SECTION by the
10649 IRIX6 linker. */
10650 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10651 sym->st_other = STO_PROTECTED;
10652
10653 /* The IRIX linker puts these symbols in special sections. */
10654 if (i == 0)
10655 sym->st_shndx = SHN_MIPS_TEXT;
10656 else
10657 sym->st_shndx = SHN_MIPS_DATA;
10658
10659 break;
10660 }
10661 }
10662
10663 /* Finish up dynamic symbol handling. We set the contents of various
10664 dynamic sections here. */
10665
10666 bfd_boolean
10667 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10668 struct bfd_link_info *info,
10669 struct elf_link_hash_entry *h,
10670 Elf_Internal_Sym *sym)
10671 {
10672 bfd *dynobj;
10673 asection *sgot;
10674 struct mips_got_info *g, *gg;
10675 const char *name;
10676 int idx;
10677 struct mips_elf_link_hash_table *htab;
10678 struct mips_elf_link_hash_entry *hmips;
10679
10680 htab = mips_elf_hash_table (info);
10681 BFD_ASSERT (htab != NULL);
10682 dynobj = elf_hash_table (info)->dynobj;
10683 hmips = (struct mips_elf_link_hash_entry *) h;
10684
10685 BFD_ASSERT (!htab->is_vxworks);
10686
10687 if (h->plt.plist != NULL
10688 && (h->plt.plist->mips_offset != MINUS_ONE
10689 || h->plt.plist->comp_offset != MINUS_ONE))
10690 {
10691 /* We've decided to create a PLT entry for this symbol. */
10692 bfd_byte *loc;
10693 bfd_vma header_address, got_address;
10694 bfd_vma got_address_high, got_address_low, load;
10695 bfd_vma got_index;
10696 bfd_vma isa_bit;
10697
10698 got_index = h->plt.plist->gotplt_index;
10699
10700 BFD_ASSERT (htab->use_plts_and_copy_relocs);
10701 BFD_ASSERT (h->dynindx != -1);
10702 BFD_ASSERT (htab->splt != NULL);
10703 BFD_ASSERT (got_index != MINUS_ONE);
10704 BFD_ASSERT (!h->def_regular);
10705
10706 /* Calculate the address of the PLT header. */
10707 isa_bit = htab->plt_header_is_comp;
10708 header_address = (htab->splt->output_section->vma
10709 + htab->splt->output_offset + isa_bit);
10710
10711 /* Calculate the address of the .got.plt entry. */
10712 got_address = (htab->sgotplt->output_section->vma
10713 + htab->sgotplt->output_offset
10714 + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10715
10716 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10717 got_address_low = got_address & 0xffff;
10718
10719 /* Initially point the .got.plt entry at the PLT header. */
10720 loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10721 if (ABI_64_P (output_bfd))
10722 bfd_put_64 (output_bfd, header_address, loc);
10723 else
10724 bfd_put_32 (output_bfd, header_address, loc);
10725
10726 /* Now handle the PLT itself. First the standard entry (the order
10727 does not matter, we just have to pick one). */
10728 if (h->plt.plist->mips_offset != MINUS_ONE)
10729 {
10730 const bfd_vma *plt_entry;
10731 bfd_vma plt_offset;
10732
10733 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10734
10735 BFD_ASSERT (plt_offset <= htab->splt->size);
10736
10737 /* Find out where the .plt entry should go. */
10738 loc = htab->splt->contents + plt_offset;
10739
10740 /* Pick the load opcode. */
10741 load = MIPS_ELF_LOAD_WORD (output_bfd);
10742
10743 /* Fill in the PLT entry itself. */
10744
10745 if (MIPSR6_P (output_bfd))
10746 plt_entry = mipsr6_exec_plt_entry;
10747 else
10748 plt_entry = mips_exec_plt_entry;
10749 bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10750 bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10751 loc + 4);
10752
10753 if (! LOAD_INTERLOCKS_P (output_bfd))
10754 {
10755 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10756 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10757 }
10758 else
10759 {
10760 bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10761 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10762 loc + 12);
10763 }
10764 }
10765
10766 /* Now the compressed entry. They come after any standard ones. */
10767 if (h->plt.plist->comp_offset != MINUS_ONE)
10768 {
10769 bfd_vma plt_offset;
10770
10771 plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10772 + h->plt.plist->comp_offset);
10773
10774 BFD_ASSERT (plt_offset <= htab->splt->size);
10775
10776 /* Find out where the .plt entry should go. */
10777 loc = htab->splt->contents + plt_offset;
10778
10779 /* Fill in the PLT entry itself. */
10780 if (!MICROMIPS_P (output_bfd))
10781 {
10782 const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10783
10784 bfd_put_16 (output_bfd, plt_entry[0], loc);
10785 bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10786 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10787 bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10788 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10789 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10790 bfd_put_32 (output_bfd, got_address, loc + 12);
10791 }
10792 else if (htab->insn32)
10793 {
10794 const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10795
10796 bfd_put_16 (output_bfd, plt_entry[0], loc);
10797 bfd_put_16 (output_bfd, got_address_high, loc + 2);
10798 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10799 bfd_put_16 (output_bfd, got_address_low, loc + 6);
10800 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10801 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10802 bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10803 bfd_put_16 (output_bfd, got_address_low, loc + 14);
10804 }
10805 else
10806 {
10807 const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10808 bfd_signed_vma gotpc_offset;
10809 bfd_vma loc_address;
10810
10811 BFD_ASSERT (got_address % 4 == 0);
10812
10813 loc_address = (htab->splt->output_section->vma
10814 + htab->splt->output_offset + plt_offset);
10815 gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10816
10817 /* ADDIUPC has a span of +/-16MB, check we're in range. */
10818 if (gotpc_offset + 0x1000000 >= 0x2000000)
10819 {
10820 (*_bfd_error_handler)
10821 (_("%B: `%A' offset of %ld from `%A' "
10822 "beyond the range of ADDIUPC"),
10823 output_bfd,
10824 htab->sgotplt->output_section,
10825 htab->splt->output_section,
10826 (long) gotpc_offset);
10827 bfd_set_error (bfd_error_no_error);
10828 return FALSE;
10829 }
10830 bfd_put_16 (output_bfd,
10831 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10832 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10833 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10834 bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10835 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10836 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10837 }
10838 }
10839
10840 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
10841 mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10842 got_index - 2, h->dynindx,
10843 R_MIPS_JUMP_SLOT, got_address);
10844
10845 /* We distinguish between PLT entries and lazy-binding stubs by
10846 giving the former an st_other value of STO_MIPS_PLT. Set the
10847 flag and leave the value if there are any relocations in the
10848 binary where pointer equality matters. */
10849 sym->st_shndx = SHN_UNDEF;
10850 if (h->pointer_equality_needed)
10851 sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10852 else
10853 {
10854 sym->st_value = 0;
10855 sym->st_other = 0;
10856 }
10857 }
10858
10859 if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10860 {
10861 /* We've decided to create a lazy-binding stub. */
10862 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10863 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10864 bfd_vma stub_size = htab->function_stub_size;
10865 bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10866 bfd_vma isa_bit = micromips_p;
10867 bfd_vma stub_big_size;
10868
10869 if (!micromips_p)
10870 stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10871 else if (htab->insn32)
10872 stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10873 else
10874 stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10875
10876 /* This symbol has a stub. Set it up. */
10877
10878 BFD_ASSERT (h->dynindx != -1);
10879
10880 BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10881
10882 /* Values up to 2^31 - 1 are allowed. Larger values would cause
10883 sign extension at runtime in the stub, resulting in a negative
10884 index value. */
10885 if (h->dynindx & ~0x7fffffff)
10886 return FALSE;
10887
10888 /* Fill the stub. */
10889 if (micromips_p)
10890 {
10891 idx = 0;
10892 bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10893 stub + idx);
10894 idx += 4;
10895 if (htab->insn32)
10896 {
10897 bfd_put_micromips_32 (output_bfd,
10898 STUB_MOVE32_MICROMIPS, stub + idx);
10899 idx += 4;
10900 }
10901 else
10902 {
10903 bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10904 idx += 2;
10905 }
10906 if (stub_size == stub_big_size)
10907 {
10908 long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10909
10910 bfd_put_micromips_32 (output_bfd,
10911 STUB_LUI_MICROMIPS (dynindx_hi),
10912 stub + idx);
10913 idx += 4;
10914 }
10915 if (htab->insn32)
10916 {
10917 bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10918 stub + idx);
10919 idx += 4;
10920 }
10921 else
10922 {
10923 bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10924 idx += 2;
10925 }
10926
10927 /* If a large stub is not required and sign extension is not a
10928 problem, then use legacy code in the stub. */
10929 if (stub_size == stub_big_size)
10930 bfd_put_micromips_32 (output_bfd,
10931 STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10932 stub + idx);
10933 else if (h->dynindx & ~0x7fff)
10934 bfd_put_micromips_32 (output_bfd,
10935 STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10936 stub + idx);
10937 else
10938 bfd_put_micromips_32 (output_bfd,
10939 STUB_LI16S_MICROMIPS (output_bfd,
10940 h->dynindx),
10941 stub + idx);
10942 }
10943 else
10944 {
10945 idx = 0;
10946 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10947 idx += 4;
10948 bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
10949 idx += 4;
10950 if (stub_size == stub_big_size)
10951 {
10952 bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10953 stub + idx);
10954 idx += 4;
10955 }
10956 bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10957 idx += 4;
10958
10959 /* If a large stub is not required and sign extension is not a
10960 problem, then use legacy code in the stub. */
10961 if (stub_size == stub_big_size)
10962 bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10963 stub + idx);
10964 else if (h->dynindx & ~0x7fff)
10965 bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10966 stub + idx);
10967 else
10968 bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10969 stub + idx);
10970 }
10971
10972 BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10973 memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10974 stub, stub_size);
10975
10976 /* Mark the symbol as undefined. stub_offset != -1 occurs
10977 only for the referenced symbol. */
10978 sym->st_shndx = SHN_UNDEF;
10979
10980 /* The run-time linker uses the st_value field of the symbol
10981 to reset the global offset table entry for this external
10982 to its stub address when unlinking a shared object. */
10983 sym->st_value = (htab->sstubs->output_section->vma
10984 + htab->sstubs->output_offset
10985 + h->plt.plist->stub_offset
10986 + isa_bit);
10987 sym->st_other = other;
10988 }
10989
10990 /* If we have a MIPS16 function with a stub, the dynamic symbol must
10991 refer to the stub, since only the stub uses the standard calling
10992 conventions. */
10993 if (h->dynindx != -1 && hmips->fn_stub != NULL)
10994 {
10995 BFD_ASSERT (hmips->need_fn_stub);
10996 sym->st_value = (hmips->fn_stub->output_section->vma
10997 + hmips->fn_stub->output_offset);
10998 sym->st_size = hmips->fn_stub->size;
10999 sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
11000 }
11001
11002 BFD_ASSERT (h->dynindx != -1
11003 || h->forced_local);
11004
11005 sgot = htab->sgot;
11006 g = htab->got_info;
11007 BFD_ASSERT (g != NULL);
11008
11009 /* Run through the global symbol table, creating GOT entries for all
11010 the symbols that need them. */
11011 if (hmips->global_got_area != GGA_NONE)
11012 {
11013 bfd_vma offset;
11014 bfd_vma value;
11015
11016 value = sym->st_value;
11017 offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11018 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
11019 }
11020
11021 if (hmips->global_got_area != GGA_NONE && g->next)
11022 {
11023 struct mips_got_entry e, *p;
11024 bfd_vma entry;
11025 bfd_vma offset;
11026
11027 gg = g;
11028
11029 e.abfd = output_bfd;
11030 e.symndx = -1;
11031 e.d.h = hmips;
11032 e.tls_type = GOT_TLS_NONE;
11033
11034 for (g = g->next; g->next != gg; g = g->next)
11035 {
11036 if (g->got_entries
11037 && (p = (struct mips_got_entry *) htab_find (g->got_entries,
11038 &e)))
11039 {
11040 offset = p->gotidx;
11041 BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
11042 if (bfd_link_pic (info)
11043 || (elf_hash_table (info)->dynamic_sections_created
11044 && p->d.h != NULL
11045 && p->d.h->root.def_dynamic
11046 && !p->d.h->root.def_regular))
11047 {
11048 /* Create an R_MIPS_REL32 relocation for this entry. Due to
11049 the various compatibility problems, it's easier to mock
11050 up an R_MIPS_32 or R_MIPS_64 relocation and leave
11051 mips_elf_create_dynamic_relocation to calculate the
11052 appropriate addend. */
11053 Elf_Internal_Rela rel[3];
11054
11055 memset (rel, 0, sizeof (rel));
11056 if (ABI_64_P (output_bfd))
11057 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
11058 else
11059 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
11060 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
11061
11062 entry = 0;
11063 if (! (mips_elf_create_dynamic_relocation
11064 (output_bfd, info, rel,
11065 e.d.h, NULL, sym->st_value, &entry, sgot)))
11066 return FALSE;
11067 }
11068 else
11069 entry = sym->st_value;
11070 MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
11071 }
11072 }
11073 }
11074
11075 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
11076 name = h->root.root.string;
11077 if (h == elf_hash_table (info)->hdynamic
11078 || h == elf_hash_table (info)->hgot)
11079 sym->st_shndx = SHN_ABS;
11080 else if (strcmp (name, "_DYNAMIC_LINK") == 0
11081 || strcmp (name, "_DYNAMIC_LINKING") == 0)
11082 {
11083 sym->st_shndx = SHN_ABS;
11084 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11085 sym->st_value = 1;
11086 }
11087 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
11088 {
11089 sym->st_shndx = SHN_ABS;
11090 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11091 sym->st_value = elf_gp (output_bfd);
11092 }
11093 else if (SGI_COMPAT (output_bfd))
11094 {
11095 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
11096 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
11097 {
11098 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11099 sym->st_other = STO_PROTECTED;
11100 sym->st_value = 0;
11101 sym->st_shndx = SHN_MIPS_DATA;
11102 }
11103 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
11104 {
11105 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11106 sym->st_other = STO_PROTECTED;
11107 sym->st_value = mips_elf_hash_table (info)->procedure_count;
11108 sym->st_shndx = SHN_ABS;
11109 }
11110 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
11111 {
11112 if (h->type == STT_FUNC)
11113 sym->st_shndx = SHN_MIPS_TEXT;
11114 else if (h->type == STT_OBJECT)
11115 sym->st_shndx = SHN_MIPS_DATA;
11116 }
11117 }
11118
11119 /* Emit a copy reloc, if needed. */
11120 if (h->needs_copy)
11121 {
11122 asection *s;
11123 bfd_vma symval;
11124
11125 BFD_ASSERT (h->dynindx != -1);
11126 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11127
11128 s = mips_elf_rel_dyn_section (info, FALSE);
11129 symval = (h->root.u.def.section->output_section->vma
11130 + h->root.u.def.section->output_offset
11131 + h->root.u.def.value);
11132 mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
11133 h->dynindx, R_MIPS_COPY, symval);
11134 }
11135
11136 /* Handle the IRIX6-specific symbols. */
11137 if (IRIX_COMPAT (output_bfd) == ict_irix6)
11138 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
11139
11140 /* Keep dynamic compressed symbols odd. This allows the dynamic linker
11141 to treat compressed symbols like any other. */
11142 if (ELF_ST_IS_MIPS16 (sym->st_other))
11143 {
11144 BFD_ASSERT (sym->st_value & 1);
11145 sym->st_other -= STO_MIPS16;
11146 }
11147 else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11148 {
11149 BFD_ASSERT (sym->st_value & 1);
11150 sym->st_other -= STO_MICROMIPS;
11151 }
11152
11153 return TRUE;
11154 }
11155
11156 /* Likewise, for VxWorks. */
11157
11158 bfd_boolean
11159 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11160 struct bfd_link_info *info,
11161 struct elf_link_hash_entry *h,
11162 Elf_Internal_Sym *sym)
11163 {
11164 bfd *dynobj;
11165 asection *sgot;
11166 struct mips_got_info *g;
11167 struct mips_elf_link_hash_table *htab;
11168 struct mips_elf_link_hash_entry *hmips;
11169
11170 htab = mips_elf_hash_table (info);
11171 BFD_ASSERT (htab != NULL);
11172 dynobj = elf_hash_table (info)->dynobj;
11173 hmips = (struct mips_elf_link_hash_entry *) h;
11174
11175 if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11176 {
11177 bfd_byte *loc;
11178 bfd_vma plt_address, got_address, got_offset, branch_offset;
11179 Elf_Internal_Rela rel;
11180 static const bfd_vma *plt_entry;
11181 bfd_vma gotplt_index;
11182 bfd_vma plt_offset;
11183
11184 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11185 gotplt_index = h->plt.plist->gotplt_index;
11186
11187 BFD_ASSERT (h->dynindx != -1);
11188 BFD_ASSERT (htab->splt != NULL);
11189 BFD_ASSERT (gotplt_index != MINUS_ONE);
11190 BFD_ASSERT (plt_offset <= htab->splt->size);
11191
11192 /* Calculate the address of the .plt entry. */
11193 plt_address = (htab->splt->output_section->vma
11194 + htab->splt->output_offset
11195 + plt_offset);
11196
11197 /* Calculate the address of the .got.plt entry. */
11198 got_address = (htab->sgotplt->output_section->vma
11199 + htab->sgotplt->output_offset
11200 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11201
11202 /* Calculate the offset of the .got.plt entry from
11203 _GLOBAL_OFFSET_TABLE_. */
11204 got_offset = mips_elf_gotplt_index (info, h);
11205
11206 /* Calculate the offset for the branch at the start of the PLT
11207 entry. The branch jumps to the beginning of .plt. */
11208 branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11209
11210 /* Fill in the initial value of the .got.plt entry. */
11211 bfd_put_32 (output_bfd, plt_address,
11212 (htab->sgotplt->contents
11213 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11214
11215 /* Find out where the .plt entry should go. */
11216 loc = htab->splt->contents + plt_offset;
11217
11218 if (bfd_link_pic (info))
11219 {
11220 plt_entry = mips_vxworks_shared_plt_entry;
11221 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11222 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11223 }
11224 else
11225 {
11226 bfd_vma got_address_high, got_address_low;
11227
11228 plt_entry = mips_vxworks_exec_plt_entry;
11229 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11230 got_address_low = got_address & 0xffff;
11231
11232 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11233 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11234 bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11235 bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11236 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11237 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11238 bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11239 bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11240
11241 loc = (htab->srelplt2->contents
11242 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11243
11244 /* Emit a relocation for the .got.plt entry. */
11245 rel.r_offset = got_address;
11246 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11247 rel.r_addend = plt_offset;
11248 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11249
11250 /* Emit a relocation for the lui of %hi(<.got.plt slot>). */
11251 loc += sizeof (Elf32_External_Rela);
11252 rel.r_offset = plt_address + 8;
11253 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11254 rel.r_addend = got_offset;
11255 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11256
11257 /* Emit a relocation for the addiu of %lo(<.got.plt slot>). */
11258 loc += sizeof (Elf32_External_Rela);
11259 rel.r_offset += 4;
11260 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11261 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11262 }
11263
11264 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
11265 loc = (htab->srelplt->contents
11266 + gotplt_index * sizeof (Elf32_External_Rela));
11267 rel.r_offset = got_address;
11268 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11269 rel.r_addend = 0;
11270 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11271
11272 if (!h->def_regular)
11273 sym->st_shndx = SHN_UNDEF;
11274 }
11275
11276 BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11277
11278 sgot = htab->sgot;
11279 g = htab->got_info;
11280 BFD_ASSERT (g != NULL);
11281
11282 /* See if this symbol has an entry in the GOT. */
11283 if (hmips->global_got_area != GGA_NONE)
11284 {
11285 bfd_vma offset;
11286 Elf_Internal_Rela outrel;
11287 bfd_byte *loc;
11288 asection *s;
11289
11290 /* Install the symbol value in the GOT. */
11291 offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11292 MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11293
11294 /* Add a dynamic relocation for it. */
11295 s = mips_elf_rel_dyn_section (info, FALSE);
11296 loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11297 outrel.r_offset = (sgot->output_section->vma
11298 + sgot->output_offset
11299 + offset);
11300 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11301 outrel.r_addend = 0;
11302 bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11303 }
11304
11305 /* Emit a copy reloc, if needed. */
11306 if (h->needs_copy)
11307 {
11308 Elf_Internal_Rela rel;
11309
11310 BFD_ASSERT (h->dynindx != -1);
11311
11312 rel.r_offset = (h->root.u.def.section->output_section->vma
11313 + h->root.u.def.section->output_offset
11314 + h->root.u.def.value);
11315 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11316 rel.r_addend = 0;
11317 bfd_elf32_swap_reloca_out (output_bfd, &rel,
11318 htab->srelbss->contents
11319 + (htab->srelbss->reloc_count
11320 * sizeof (Elf32_External_Rela)));
11321 ++htab->srelbss->reloc_count;
11322 }
11323
11324 /* If this is a mips16/microMIPS symbol, force the value to be even. */
11325 if (ELF_ST_IS_COMPRESSED (sym->st_other))
11326 sym->st_value &= ~1;
11327
11328 return TRUE;
11329 }
11330
11331 /* Write out a plt0 entry to the beginning of .plt. */
11332
11333 static bfd_boolean
11334 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11335 {
11336 bfd_byte *loc;
11337 bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11338 static const bfd_vma *plt_entry;
11339 struct mips_elf_link_hash_table *htab;
11340
11341 htab = mips_elf_hash_table (info);
11342 BFD_ASSERT (htab != NULL);
11343
11344 if (ABI_64_P (output_bfd))
11345 plt_entry = mips_n64_exec_plt0_entry;
11346 else if (ABI_N32_P (output_bfd))
11347 plt_entry = mips_n32_exec_plt0_entry;
11348 else if (!htab->plt_header_is_comp)
11349 plt_entry = mips_o32_exec_plt0_entry;
11350 else if (htab->insn32)
11351 plt_entry = micromips_insn32_o32_exec_plt0_entry;
11352 else
11353 plt_entry = micromips_o32_exec_plt0_entry;
11354
11355 /* Calculate the value of .got.plt. */
11356 gotplt_value = (htab->sgotplt->output_section->vma
11357 + htab->sgotplt->output_offset);
11358 gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11359 gotplt_value_low = gotplt_value & 0xffff;
11360
11361 /* The PLT sequence is not safe for N64 if .got.plt's address can
11362 not be loaded in two instructions. */
11363 BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11364 || ~(gotplt_value | 0x7fffffff) == 0);
11365
11366 /* Install the PLT header. */
11367 loc = htab->splt->contents;
11368 if (plt_entry == micromips_o32_exec_plt0_entry)
11369 {
11370 bfd_vma gotpc_offset;
11371 bfd_vma loc_address;
11372 size_t i;
11373
11374 BFD_ASSERT (gotplt_value % 4 == 0);
11375
11376 loc_address = (htab->splt->output_section->vma
11377 + htab->splt->output_offset);
11378 gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11379
11380 /* ADDIUPC has a span of +/-16MB, check we're in range. */
11381 if (gotpc_offset + 0x1000000 >= 0x2000000)
11382 {
11383 (*_bfd_error_handler)
11384 (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11385 output_bfd,
11386 htab->sgotplt->output_section,
11387 htab->splt->output_section,
11388 (long) gotpc_offset);
11389 bfd_set_error (bfd_error_no_error);
11390 return FALSE;
11391 }
11392 bfd_put_16 (output_bfd,
11393 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11394 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11395 for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11396 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11397 }
11398 else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11399 {
11400 size_t i;
11401
11402 bfd_put_16 (output_bfd, plt_entry[0], loc);
11403 bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11404 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11405 bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11406 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11407 bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11408 for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11409 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11410 }
11411 else
11412 {
11413 bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11414 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11415 bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11416 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11417 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11418 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11419 bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11420 bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11421 }
11422
11423 return TRUE;
11424 }
11425
11426 /* Install the PLT header for a VxWorks executable and finalize the
11427 contents of .rela.plt.unloaded. */
11428
11429 static void
11430 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11431 {
11432 Elf_Internal_Rela rela;
11433 bfd_byte *loc;
11434 bfd_vma got_value, got_value_high, got_value_low, plt_address;
11435 static const bfd_vma *plt_entry;
11436 struct mips_elf_link_hash_table *htab;
11437
11438 htab = mips_elf_hash_table (info);
11439 BFD_ASSERT (htab != NULL);
11440
11441 plt_entry = mips_vxworks_exec_plt0_entry;
11442
11443 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
11444 got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11445 + htab->root.hgot->root.u.def.section->output_offset
11446 + htab->root.hgot->root.u.def.value);
11447
11448 got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11449 got_value_low = got_value & 0xffff;
11450
11451 /* Calculate the address of the PLT header. */
11452 plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11453
11454 /* Install the PLT header. */
11455 loc = htab->splt->contents;
11456 bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11457 bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11458 bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11459 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11460 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11461 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11462
11463 /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_). */
11464 loc = htab->srelplt2->contents;
11465 rela.r_offset = plt_address;
11466 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11467 rela.r_addend = 0;
11468 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11469 loc += sizeof (Elf32_External_Rela);
11470
11471 /* Output the relocation for the following addiu of
11472 %lo(_GLOBAL_OFFSET_TABLE_). */
11473 rela.r_offset += 4;
11474 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11475 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11476 loc += sizeof (Elf32_External_Rela);
11477
11478 /* Fix up the remaining relocations. They may have the wrong
11479 symbol index for _G_O_T_ or _P_L_T_ depending on the order
11480 in which symbols were output. */
11481 while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11482 {
11483 Elf_Internal_Rela rel;
11484
11485 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11486 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11487 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11488 loc += sizeof (Elf32_External_Rela);
11489
11490 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11491 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11492 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11493 loc += sizeof (Elf32_External_Rela);
11494
11495 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11496 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11497 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11498 loc += sizeof (Elf32_External_Rela);
11499 }
11500 }
11501
11502 /* Install the PLT header for a VxWorks shared library. */
11503
11504 static void
11505 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11506 {
11507 unsigned int i;
11508 struct mips_elf_link_hash_table *htab;
11509
11510 htab = mips_elf_hash_table (info);
11511 BFD_ASSERT (htab != NULL);
11512
11513 /* We just need to copy the entry byte-by-byte. */
11514 for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11515 bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11516 htab->splt->contents + i * 4);
11517 }
11518
11519 /* Finish up the dynamic sections. */
11520
11521 bfd_boolean
11522 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11523 struct bfd_link_info *info)
11524 {
11525 bfd *dynobj;
11526 asection *sdyn;
11527 asection *sgot;
11528 struct mips_got_info *gg, *g;
11529 struct mips_elf_link_hash_table *htab;
11530
11531 htab = mips_elf_hash_table (info);
11532 BFD_ASSERT (htab != NULL);
11533
11534 dynobj = elf_hash_table (info)->dynobj;
11535
11536 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11537
11538 sgot = htab->sgot;
11539 gg = htab->got_info;
11540
11541 if (elf_hash_table (info)->dynamic_sections_created)
11542 {
11543 bfd_byte *b;
11544 int dyn_to_skip = 0, dyn_skipped = 0;
11545
11546 BFD_ASSERT (sdyn != NULL);
11547 BFD_ASSERT (gg != NULL);
11548
11549 g = mips_elf_bfd_got (output_bfd, FALSE);
11550 BFD_ASSERT (g != NULL);
11551
11552 for (b = sdyn->contents;
11553 b < sdyn->contents + sdyn->size;
11554 b += MIPS_ELF_DYN_SIZE (dynobj))
11555 {
11556 Elf_Internal_Dyn dyn;
11557 const char *name;
11558 size_t elemsize;
11559 asection *s;
11560 bfd_boolean swap_out_p;
11561
11562 /* Read in the current dynamic entry. */
11563 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11564
11565 /* Assume that we're going to modify it and write it out. */
11566 swap_out_p = TRUE;
11567
11568 switch (dyn.d_tag)
11569 {
11570 case DT_RELENT:
11571 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11572 break;
11573
11574 case DT_RELAENT:
11575 BFD_ASSERT (htab->is_vxworks);
11576 dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11577 break;
11578
11579 case DT_STRSZ:
11580 /* Rewrite DT_STRSZ. */
11581 dyn.d_un.d_val =
11582 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11583 break;
11584
11585 case DT_PLTGOT:
11586 s = htab->sgot;
11587 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11588 break;
11589
11590 case DT_MIPS_PLTGOT:
11591 s = htab->sgotplt;
11592 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11593 break;
11594
11595 case DT_MIPS_RLD_VERSION:
11596 dyn.d_un.d_val = 1; /* XXX */
11597 break;
11598
11599 case DT_MIPS_FLAGS:
11600 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11601 break;
11602
11603 case DT_MIPS_TIME_STAMP:
11604 {
11605 time_t t;
11606 time (&t);
11607 dyn.d_un.d_val = t;
11608 }
11609 break;
11610
11611 case DT_MIPS_ICHECKSUM:
11612 /* XXX FIXME: */
11613 swap_out_p = FALSE;
11614 break;
11615
11616 case DT_MIPS_IVERSION:
11617 /* XXX FIXME: */
11618 swap_out_p = FALSE;
11619 break;
11620
11621 case DT_MIPS_BASE_ADDRESS:
11622 s = output_bfd->sections;
11623 BFD_ASSERT (s != NULL);
11624 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11625 break;
11626
11627 case DT_MIPS_LOCAL_GOTNO:
11628 dyn.d_un.d_val = g->local_gotno;
11629 break;
11630
11631 case DT_MIPS_UNREFEXTNO:
11632 /* The index into the dynamic symbol table which is the
11633 entry of the first external symbol that is not
11634 referenced within the same object. */
11635 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11636 break;
11637
11638 case DT_MIPS_GOTSYM:
11639 if (htab->global_gotsym)
11640 {
11641 dyn.d_un.d_val = htab->global_gotsym->dynindx;
11642 break;
11643 }
11644 /* In case if we don't have global got symbols we default
11645 to setting DT_MIPS_GOTSYM to the same value as
11646 DT_MIPS_SYMTABNO, so we just fall through. */
11647
11648 case DT_MIPS_SYMTABNO:
11649 name = ".dynsym";
11650 elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11651 s = bfd_get_linker_section (dynobj, name);
11652
11653 if (s != NULL)
11654 dyn.d_un.d_val = s->size / elemsize;
11655 else
11656 dyn.d_un.d_val = 0;
11657 break;
11658
11659 case DT_MIPS_HIPAGENO:
11660 dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11661 break;
11662
11663 case DT_MIPS_RLD_MAP:
11664 {
11665 struct elf_link_hash_entry *h;
11666 h = mips_elf_hash_table (info)->rld_symbol;
11667 if (!h)
11668 {
11669 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11670 swap_out_p = FALSE;
11671 break;
11672 }
11673 s = h->root.u.def.section;
11674
11675 /* The MIPS_RLD_MAP tag stores the absolute address of the
11676 debug pointer. */
11677 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11678 + h->root.u.def.value);
11679 }
11680 break;
11681
11682 case DT_MIPS_RLD_MAP_REL:
11683 {
11684 struct elf_link_hash_entry *h;
11685 bfd_vma dt_addr, rld_addr;
11686 h = mips_elf_hash_table (info)->rld_symbol;
11687 if (!h)
11688 {
11689 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11690 swap_out_p = FALSE;
11691 break;
11692 }
11693 s = h->root.u.def.section;
11694
11695 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11696 pointer, relative to the address of the tag. */
11697 dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11698 + (b - sdyn->contents));
11699 rld_addr = (s->output_section->vma + s->output_offset
11700 + h->root.u.def.value);
11701 dyn.d_un.d_ptr = rld_addr - dt_addr;
11702 }
11703 break;
11704
11705 case DT_MIPS_OPTIONS:
11706 s = (bfd_get_section_by_name
11707 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11708 dyn.d_un.d_ptr = s->vma;
11709 break;
11710
11711 case DT_RELASZ:
11712 BFD_ASSERT (htab->is_vxworks);
11713 /* The count does not include the JUMP_SLOT relocations. */
11714 if (htab->srelplt)
11715 dyn.d_un.d_val -= htab->srelplt->size;
11716 break;
11717
11718 case DT_PLTREL:
11719 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11720 if (htab->is_vxworks)
11721 dyn.d_un.d_val = DT_RELA;
11722 else
11723 dyn.d_un.d_val = DT_REL;
11724 break;
11725
11726 case DT_PLTRELSZ:
11727 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11728 dyn.d_un.d_val = htab->srelplt->size;
11729 break;
11730
11731 case DT_JMPREL:
11732 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11733 dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
11734 + htab->srelplt->output_offset);
11735 break;
11736
11737 case DT_TEXTREL:
11738 /* If we didn't need any text relocations after all, delete
11739 the dynamic tag. */
11740 if (!(info->flags & DF_TEXTREL))
11741 {
11742 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11743 swap_out_p = FALSE;
11744 }
11745 break;
11746
11747 case DT_FLAGS:
11748 /* If we didn't need any text relocations after all, clear
11749 DF_TEXTREL from DT_FLAGS. */
11750 if (!(info->flags & DF_TEXTREL))
11751 dyn.d_un.d_val &= ~DF_TEXTREL;
11752 else
11753 swap_out_p = FALSE;
11754 break;
11755
11756 default:
11757 swap_out_p = FALSE;
11758 if (htab->is_vxworks
11759 && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11760 swap_out_p = TRUE;
11761 break;
11762 }
11763
11764 if (swap_out_p || dyn_skipped)
11765 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11766 (dynobj, &dyn, b - dyn_skipped);
11767
11768 if (dyn_to_skip)
11769 {
11770 dyn_skipped += dyn_to_skip;
11771 dyn_to_skip = 0;
11772 }
11773 }
11774
11775 /* Wipe out any trailing entries if we shifted down a dynamic tag. */
11776 if (dyn_skipped > 0)
11777 memset (b - dyn_skipped, 0, dyn_skipped);
11778 }
11779
11780 if (sgot != NULL && sgot->size > 0
11781 && !bfd_is_abs_section (sgot->output_section))
11782 {
11783 if (htab->is_vxworks)
11784 {
11785 /* The first entry of the global offset table points to the
11786 ".dynamic" section. The second is initialized by the
11787 loader and contains the shared library identifier.
11788 The third is also initialized by the loader and points
11789 to the lazy resolution stub. */
11790 MIPS_ELF_PUT_WORD (output_bfd,
11791 sdyn->output_offset + sdyn->output_section->vma,
11792 sgot->contents);
11793 MIPS_ELF_PUT_WORD (output_bfd, 0,
11794 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11795 MIPS_ELF_PUT_WORD (output_bfd, 0,
11796 sgot->contents
11797 + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11798 }
11799 else
11800 {
11801 /* The first entry of the global offset table will be filled at
11802 runtime. The second entry will be used by some runtime loaders.
11803 This isn't the case of IRIX rld. */
11804 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11805 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11806 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11807 }
11808
11809 elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11810 = MIPS_ELF_GOT_SIZE (output_bfd);
11811 }
11812
11813 /* Generate dynamic relocations for the non-primary gots. */
11814 if (gg != NULL && gg->next)
11815 {
11816 Elf_Internal_Rela rel[3];
11817 bfd_vma addend = 0;
11818
11819 memset (rel, 0, sizeof (rel));
11820 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11821
11822 for (g = gg->next; g->next != gg; g = g->next)
11823 {
11824 bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11825 + g->next->tls_gotno;
11826
11827 MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11828 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11829 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11830 sgot->contents
11831 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11832
11833 if (! bfd_link_pic (info))
11834 continue;
11835
11836 for (; got_index < g->local_gotno; got_index++)
11837 {
11838 if (got_index >= g->assigned_low_gotno
11839 && got_index <= g->assigned_high_gotno)
11840 continue;
11841
11842 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11843 = got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11844 if (!(mips_elf_create_dynamic_relocation
11845 (output_bfd, info, rel, NULL,
11846 bfd_abs_section_ptr,
11847 0, &addend, sgot)))
11848 return FALSE;
11849 BFD_ASSERT (addend == 0);
11850 }
11851 }
11852 }
11853
11854 /* The generation of dynamic relocations for the non-primary gots
11855 adds more dynamic relocations. We cannot count them until
11856 here. */
11857
11858 if (elf_hash_table (info)->dynamic_sections_created)
11859 {
11860 bfd_byte *b;
11861 bfd_boolean swap_out_p;
11862
11863 BFD_ASSERT (sdyn != NULL);
11864
11865 for (b = sdyn->contents;
11866 b < sdyn->contents + sdyn->size;
11867 b += MIPS_ELF_DYN_SIZE (dynobj))
11868 {
11869 Elf_Internal_Dyn dyn;
11870 asection *s;
11871
11872 /* Read in the current dynamic entry. */
11873 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11874
11875 /* Assume that we're going to modify it and write it out. */
11876 swap_out_p = TRUE;
11877
11878 switch (dyn.d_tag)
11879 {
11880 case DT_RELSZ:
11881 /* Reduce DT_RELSZ to account for any relocations we
11882 decided not to make. This is for the n64 irix rld,
11883 which doesn't seem to apply any relocations if there
11884 are trailing null entries. */
11885 s = mips_elf_rel_dyn_section (info, FALSE);
11886 dyn.d_un.d_val = (s->reloc_count
11887 * (ABI_64_P (output_bfd)
11888 ? sizeof (Elf64_Mips_External_Rel)
11889 : sizeof (Elf32_External_Rel)));
11890 /* Adjust the section size too. Tools like the prelinker
11891 can reasonably expect the values to the same. */
11892 elf_section_data (s->output_section)->this_hdr.sh_size
11893 = dyn.d_un.d_val;
11894 break;
11895
11896 default:
11897 swap_out_p = FALSE;
11898 break;
11899 }
11900
11901 if (swap_out_p)
11902 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11903 (dynobj, &dyn, b);
11904 }
11905 }
11906
11907 {
11908 asection *s;
11909 Elf32_compact_rel cpt;
11910
11911 if (SGI_COMPAT (output_bfd))
11912 {
11913 /* Write .compact_rel section out. */
11914 s = bfd_get_linker_section (dynobj, ".compact_rel");
11915 if (s != NULL)
11916 {
11917 cpt.id1 = 1;
11918 cpt.num = s->reloc_count;
11919 cpt.id2 = 2;
11920 cpt.offset = (s->output_section->filepos
11921 + sizeof (Elf32_External_compact_rel));
11922 cpt.reserved0 = 0;
11923 cpt.reserved1 = 0;
11924 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11925 ((Elf32_External_compact_rel *)
11926 s->contents));
11927
11928 /* Clean up a dummy stub function entry in .text. */
11929 if (htab->sstubs != NULL)
11930 {
11931 file_ptr dummy_offset;
11932
11933 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11934 dummy_offset = htab->sstubs->size - htab->function_stub_size;
11935 memset (htab->sstubs->contents + dummy_offset, 0,
11936 htab->function_stub_size);
11937 }
11938 }
11939 }
11940
11941 /* The psABI says that the dynamic relocations must be sorted in
11942 increasing order of r_symndx. The VxWorks EABI doesn't require
11943 this, and because the code below handles REL rather than RELA
11944 relocations, using it for VxWorks would be outright harmful. */
11945 if (!htab->is_vxworks)
11946 {
11947 s = mips_elf_rel_dyn_section (info, FALSE);
11948 if (s != NULL
11949 && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11950 {
11951 reldyn_sorting_bfd = output_bfd;
11952
11953 if (ABI_64_P (output_bfd))
11954 qsort ((Elf64_External_Rel *) s->contents + 1,
11955 s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11956 sort_dynamic_relocs_64);
11957 else
11958 qsort ((Elf32_External_Rel *) s->contents + 1,
11959 s->reloc_count - 1, sizeof (Elf32_External_Rel),
11960 sort_dynamic_relocs);
11961 }
11962 }
11963 }
11964
11965 if (htab->splt && htab->splt->size > 0)
11966 {
11967 if (htab->is_vxworks)
11968 {
11969 if (bfd_link_pic (info))
11970 mips_vxworks_finish_shared_plt (output_bfd, info);
11971 else
11972 mips_vxworks_finish_exec_plt (output_bfd, info);
11973 }
11974 else
11975 {
11976 BFD_ASSERT (!bfd_link_pic (info));
11977 if (!mips_finish_exec_plt (output_bfd, info))
11978 return FALSE;
11979 }
11980 }
11981 return TRUE;
11982 }
11983
11984
11985 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */
11986
11987 static void
11988 mips_set_isa_flags (bfd *abfd)
11989 {
11990 flagword val;
11991
11992 switch (bfd_get_mach (abfd))
11993 {
11994 default:
11995 case bfd_mach_mips3000:
11996 val = E_MIPS_ARCH_1;
11997 break;
11998
11999 case bfd_mach_mips3900:
12000 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
12001 break;
12002
12003 case bfd_mach_mips6000:
12004 val = E_MIPS_ARCH_2;
12005 break;
12006
12007 case bfd_mach_mips4000:
12008 case bfd_mach_mips4300:
12009 case bfd_mach_mips4400:
12010 case bfd_mach_mips4600:
12011 val = E_MIPS_ARCH_3;
12012 break;
12013
12014 case bfd_mach_mips4010:
12015 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
12016 break;
12017
12018 case bfd_mach_mips4100:
12019 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
12020 break;
12021
12022 case bfd_mach_mips4111:
12023 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
12024 break;
12025
12026 case bfd_mach_mips4120:
12027 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
12028 break;
12029
12030 case bfd_mach_mips4650:
12031 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
12032 break;
12033
12034 case bfd_mach_mips5400:
12035 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
12036 break;
12037
12038 case bfd_mach_mips5500:
12039 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
12040 break;
12041
12042 case bfd_mach_mips5900:
12043 val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
12044 break;
12045
12046 case bfd_mach_mips9000:
12047 val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
12048 break;
12049
12050 case bfd_mach_mips5000:
12051 case bfd_mach_mips7000:
12052 case bfd_mach_mips8000:
12053 case bfd_mach_mips10000:
12054 case bfd_mach_mips12000:
12055 case bfd_mach_mips14000:
12056 case bfd_mach_mips16000:
12057 val = E_MIPS_ARCH_4;
12058 break;
12059
12060 case bfd_mach_mips5:
12061 val = E_MIPS_ARCH_5;
12062 break;
12063
12064 case bfd_mach_mips_loongson_2e:
12065 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
12066 break;
12067
12068 case bfd_mach_mips_loongson_2f:
12069 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
12070 break;
12071
12072 case bfd_mach_mips_sb1:
12073 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
12074 break;
12075
12076 case bfd_mach_mips_loongson_3a:
12077 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
12078 break;
12079
12080 case bfd_mach_mips_octeon:
12081 case bfd_mach_mips_octeonp:
12082 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
12083 break;
12084
12085 case bfd_mach_mips_octeon3:
12086 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
12087 break;
12088
12089 case bfd_mach_mips_xlr:
12090 val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
12091 break;
12092
12093 case bfd_mach_mips_octeon2:
12094 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
12095 break;
12096
12097 case bfd_mach_mipsisa32:
12098 val = E_MIPS_ARCH_32;
12099 break;
12100
12101 case bfd_mach_mipsisa64:
12102 val = E_MIPS_ARCH_64;
12103 break;
12104
12105 case bfd_mach_mipsisa32r2:
12106 case bfd_mach_mipsisa32r3:
12107 case bfd_mach_mipsisa32r5:
12108 val = E_MIPS_ARCH_32R2;
12109 break;
12110
12111 case bfd_mach_mipsisa64r2:
12112 case bfd_mach_mipsisa64r3:
12113 case bfd_mach_mipsisa64r5:
12114 val = E_MIPS_ARCH_64R2;
12115 break;
12116
12117 case bfd_mach_mipsisa32r6:
12118 val = E_MIPS_ARCH_32R6;
12119 break;
12120
12121 case bfd_mach_mipsisa64r6:
12122 val = E_MIPS_ARCH_64R6;
12123 break;
12124 }
12125 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
12126 elf_elfheader (abfd)->e_flags |= val;
12127
12128 }
12129
12130
12131 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
12132 Don't do so for code sections. We want to keep ordering of HI16/LO16
12133 as is. On the other hand, elf-eh-frame.c processing requires .eh_frame
12134 relocs to be sorted. */
12135
12136 bfd_boolean
12137 _bfd_mips_elf_sort_relocs_p (asection *sec)
12138 {
12139 return (sec->flags & SEC_CODE) == 0;
12140 }
12141
12142
12143 /* The final processing done just before writing out a MIPS ELF object
12144 file. This gets the MIPS architecture right based on the machine
12145 number. This is used by both the 32-bit and the 64-bit ABI. */
12146
12147 void
12148 _bfd_mips_elf_final_write_processing (bfd *abfd,
12149 bfd_boolean linker ATTRIBUTE_UNUSED)
12150 {
12151 unsigned int i;
12152 Elf_Internal_Shdr **hdrpp;
12153 const char *name;
12154 asection *sec;
12155
12156 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12157 is nonzero. This is for compatibility with old objects, which used
12158 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */
12159 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12160 mips_set_isa_flags (abfd);
12161
12162 /* Set the sh_info field for .gptab sections and other appropriate
12163 info for each special section. */
12164 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12165 i < elf_numsections (abfd);
12166 i++, hdrpp++)
12167 {
12168 switch ((*hdrpp)->sh_type)
12169 {
12170 case SHT_MIPS_MSYM:
12171 case SHT_MIPS_LIBLIST:
12172 sec = bfd_get_section_by_name (abfd, ".dynstr");
12173 if (sec != NULL)
12174 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12175 break;
12176
12177 case SHT_MIPS_GPTAB:
12178 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12179 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12180 BFD_ASSERT (name != NULL
12181 && CONST_STRNEQ (name, ".gptab."));
12182 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12183 BFD_ASSERT (sec != NULL);
12184 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12185 break;
12186
12187 case SHT_MIPS_CONTENT:
12188 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12189 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12190 BFD_ASSERT (name != NULL
12191 && CONST_STRNEQ (name, ".MIPS.content"));
12192 sec = bfd_get_section_by_name (abfd,
12193 name + sizeof ".MIPS.content" - 1);
12194 BFD_ASSERT (sec != NULL);
12195 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12196 break;
12197
12198 case SHT_MIPS_SYMBOL_LIB:
12199 sec = bfd_get_section_by_name (abfd, ".dynsym");
12200 if (sec != NULL)
12201 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12202 sec = bfd_get_section_by_name (abfd, ".liblist");
12203 if (sec != NULL)
12204 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12205 break;
12206
12207 case SHT_MIPS_EVENTS:
12208 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12209 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12210 BFD_ASSERT (name != NULL);
12211 if (CONST_STRNEQ (name, ".MIPS.events"))
12212 sec = bfd_get_section_by_name (abfd,
12213 name + sizeof ".MIPS.events" - 1);
12214 else
12215 {
12216 BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12217 sec = bfd_get_section_by_name (abfd,
12218 (name
12219 + sizeof ".MIPS.post_rel" - 1));
12220 }
12221 BFD_ASSERT (sec != NULL);
12222 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12223 break;
12224
12225 }
12226 }
12227 }
12228 \f
12229 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12230 segments. */
12231
12232 int
12233 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12234 struct bfd_link_info *info ATTRIBUTE_UNUSED)
12235 {
12236 asection *s;
12237 int ret = 0;
12238
12239 /* See if we need a PT_MIPS_REGINFO segment. */
12240 s = bfd_get_section_by_name (abfd, ".reginfo");
12241 if (s && (s->flags & SEC_LOAD))
12242 ++ret;
12243
12244 /* See if we need a PT_MIPS_ABIFLAGS segment. */
12245 if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12246 ++ret;
12247
12248 /* See if we need a PT_MIPS_OPTIONS segment. */
12249 if (IRIX_COMPAT (abfd) == ict_irix6
12250 && bfd_get_section_by_name (abfd,
12251 MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12252 ++ret;
12253
12254 /* See if we need a PT_MIPS_RTPROC segment. */
12255 if (IRIX_COMPAT (abfd) == ict_irix5
12256 && bfd_get_section_by_name (abfd, ".dynamic")
12257 && bfd_get_section_by_name (abfd, ".mdebug"))
12258 ++ret;
12259
12260 /* Allocate a PT_NULL header in dynamic objects. See
12261 _bfd_mips_elf_modify_segment_map for details. */
12262 if (!SGI_COMPAT (abfd)
12263 && bfd_get_section_by_name (abfd, ".dynamic"))
12264 ++ret;
12265
12266 return ret;
12267 }
12268
12269 /* Modify the segment map for an IRIX5 executable. */
12270
12271 bfd_boolean
12272 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12273 struct bfd_link_info *info)
12274 {
12275 asection *s;
12276 struct elf_segment_map *m, **pm;
12277 bfd_size_type amt;
12278
12279 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12280 segment. */
12281 s = bfd_get_section_by_name (abfd, ".reginfo");
12282 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12283 {
12284 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12285 if (m->p_type == PT_MIPS_REGINFO)
12286 break;
12287 if (m == NULL)
12288 {
12289 amt = sizeof *m;
12290 m = bfd_zalloc (abfd, amt);
12291 if (m == NULL)
12292 return FALSE;
12293
12294 m->p_type = PT_MIPS_REGINFO;
12295 m->count = 1;
12296 m->sections[0] = s;
12297
12298 /* We want to put it after the PHDR and INTERP segments. */
12299 pm = &elf_seg_map (abfd);
12300 while (*pm != NULL
12301 && ((*pm)->p_type == PT_PHDR
12302 || (*pm)->p_type == PT_INTERP))
12303 pm = &(*pm)->next;
12304
12305 m->next = *pm;
12306 *pm = m;
12307 }
12308 }
12309
12310 /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12311 segment. */
12312 s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12313 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12314 {
12315 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12316 if (m->p_type == PT_MIPS_ABIFLAGS)
12317 break;
12318 if (m == NULL)
12319 {
12320 amt = sizeof *m;
12321 m = bfd_zalloc (abfd, amt);
12322 if (m == NULL)
12323 return FALSE;
12324
12325 m->p_type = PT_MIPS_ABIFLAGS;
12326 m->count = 1;
12327 m->sections[0] = s;
12328
12329 /* We want to put it after the PHDR and INTERP segments. */
12330 pm = &elf_seg_map (abfd);
12331 while (*pm != NULL
12332 && ((*pm)->p_type == PT_PHDR
12333 || (*pm)->p_type == PT_INTERP))
12334 pm = &(*pm)->next;
12335
12336 m->next = *pm;
12337 *pm = m;
12338 }
12339 }
12340
12341 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12342 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
12343 PT_MIPS_OPTIONS segment immediately following the program header
12344 table. */
12345 if (NEWABI_P (abfd)
12346 /* On non-IRIX6 new abi, we'll have already created a segment
12347 for this section, so don't create another. I'm not sure this
12348 is not also the case for IRIX 6, but I can't test it right
12349 now. */
12350 && IRIX_COMPAT (abfd) == ict_irix6)
12351 {
12352 for (s = abfd->sections; s; s = s->next)
12353 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12354 break;
12355
12356 if (s)
12357 {
12358 struct elf_segment_map *options_segment;
12359
12360 pm = &elf_seg_map (abfd);
12361 while (*pm != NULL
12362 && ((*pm)->p_type == PT_PHDR
12363 || (*pm)->p_type == PT_INTERP))
12364 pm = &(*pm)->next;
12365
12366 if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12367 {
12368 amt = sizeof (struct elf_segment_map);
12369 options_segment = bfd_zalloc (abfd, amt);
12370 options_segment->next = *pm;
12371 options_segment->p_type = PT_MIPS_OPTIONS;
12372 options_segment->p_flags = PF_R;
12373 options_segment->p_flags_valid = TRUE;
12374 options_segment->count = 1;
12375 options_segment->sections[0] = s;
12376 *pm = options_segment;
12377 }
12378 }
12379 }
12380 else
12381 {
12382 if (IRIX_COMPAT (abfd) == ict_irix5)
12383 {
12384 /* If there are .dynamic and .mdebug sections, we make a room
12385 for the RTPROC header. FIXME: Rewrite without section names. */
12386 if (bfd_get_section_by_name (abfd, ".interp") == NULL
12387 && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12388 && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12389 {
12390 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12391 if (m->p_type == PT_MIPS_RTPROC)
12392 break;
12393 if (m == NULL)
12394 {
12395 amt = sizeof *m;
12396 m = bfd_zalloc (abfd, amt);
12397 if (m == NULL)
12398 return FALSE;
12399
12400 m->p_type = PT_MIPS_RTPROC;
12401
12402 s = bfd_get_section_by_name (abfd, ".rtproc");
12403 if (s == NULL)
12404 {
12405 m->count = 0;
12406 m->p_flags = 0;
12407 m->p_flags_valid = 1;
12408 }
12409 else
12410 {
12411 m->count = 1;
12412 m->sections[0] = s;
12413 }
12414
12415 /* We want to put it after the DYNAMIC segment. */
12416 pm = &elf_seg_map (abfd);
12417 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12418 pm = &(*pm)->next;
12419 if (*pm != NULL)
12420 pm = &(*pm)->next;
12421
12422 m->next = *pm;
12423 *pm = m;
12424 }
12425 }
12426 }
12427 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12428 .dynstr, .dynsym, and .hash sections, and everything in
12429 between. */
12430 for (pm = &elf_seg_map (abfd); *pm != NULL;
12431 pm = &(*pm)->next)
12432 if ((*pm)->p_type == PT_DYNAMIC)
12433 break;
12434 m = *pm;
12435 /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12436 glibc's dynamic linker has traditionally derived the number of
12437 tags from the p_filesz field, and sometimes allocates stack
12438 arrays of that size. An overly-big PT_DYNAMIC segment can
12439 be actively harmful in such cases. Making PT_DYNAMIC contain
12440 other sections can also make life hard for the prelinker,
12441 which might move one of the other sections to a different
12442 PT_LOAD segment. */
12443 if (SGI_COMPAT (abfd)
12444 && m != NULL
12445 && m->count == 1
12446 && strcmp (m->sections[0]->name, ".dynamic") == 0)
12447 {
12448 static const char *sec_names[] =
12449 {
12450 ".dynamic", ".dynstr", ".dynsym", ".hash"
12451 };
12452 bfd_vma low, high;
12453 unsigned int i, c;
12454 struct elf_segment_map *n;
12455
12456 low = ~(bfd_vma) 0;
12457 high = 0;
12458 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12459 {
12460 s = bfd_get_section_by_name (abfd, sec_names[i]);
12461 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12462 {
12463 bfd_size_type sz;
12464
12465 if (low > s->vma)
12466 low = s->vma;
12467 sz = s->size;
12468 if (high < s->vma + sz)
12469 high = s->vma + sz;
12470 }
12471 }
12472
12473 c = 0;
12474 for (s = abfd->sections; s != NULL; s = s->next)
12475 if ((s->flags & SEC_LOAD) != 0
12476 && s->vma >= low
12477 && s->vma + s->size <= high)
12478 ++c;
12479
12480 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12481 n = bfd_zalloc (abfd, amt);
12482 if (n == NULL)
12483 return FALSE;
12484 *n = *m;
12485 n->count = c;
12486
12487 i = 0;
12488 for (s = abfd->sections; s != NULL; s = s->next)
12489 {
12490 if ((s->flags & SEC_LOAD) != 0
12491 && s->vma >= low
12492 && s->vma + s->size <= high)
12493 {
12494 n->sections[i] = s;
12495 ++i;
12496 }
12497 }
12498
12499 *pm = n;
12500 }
12501 }
12502
12503 /* Allocate a spare program header in dynamic objects so that tools
12504 like the prelinker can add an extra PT_LOAD entry.
12505
12506 If the prelinker needs to make room for a new PT_LOAD entry, its
12507 standard procedure is to move the first (read-only) sections into
12508 the new (writable) segment. However, the MIPS ABI requires
12509 .dynamic to be in a read-only segment, and the section will often
12510 start within sizeof (ElfNN_Phdr) bytes of the last program header.
12511
12512 Although the prelinker could in principle move .dynamic to a
12513 writable segment, it seems better to allocate a spare program
12514 header instead, and avoid the need to move any sections.
12515 There is a long tradition of allocating spare dynamic tags,
12516 so allocating a spare program header seems like a natural
12517 extension.
12518
12519 If INFO is NULL, we may be copying an already prelinked binary
12520 with objcopy or strip, so do not add this header. */
12521 if (info != NULL
12522 && !SGI_COMPAT (abfd)
12523 && bfd_get_section_by_name (abfd, ".dynamic"))
12524 {
12525 for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12526 if ((*pm)->p_type == PT_NULL)
12527 break;
12528 if (*pm == NULL)
12529 {
12530 m = bfd_zalloc (abfd, sizeof (*m));
12531 if (m == NULL)
12532 return FALSE;
12533
12534 m->p_type = PT_NULL;
12535 *pm = m;
12536 }
12537 }
12538
12539 return TRUE;
12540 }
12541 \f
12542 /* Return the section that should be marked against GC for a given
12543 relocation. */
12544
12545 asection *
12546 _bfd_mips_elf_gc_mark_hook (asection *sec,
12547 struct bfd_link_info *info,
12548 Elf_Internal_Rela *rel,
12549 struct elf_link_hash_entry *h,
12550 Elf_Internal_Sym *sym)
12551 {
12552 /* ??? Do mips16 stub sections need to be handled special? */
12553
12554 if (h != NULL)
12555 switch (ELF_R_TYPE (sec->owner, rel->r_info))
12556 {
12557 case R_MIPS_GNU_VTINHERIT:
12558 case R_MIPS_GNU_VTENTRY:
12559 return NULL;
12560 }
12561
12562 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12563 }
12564
12565 /* Update the got entry reference counts for the section being removed. */
12566
12567 bfd_boolean
12568 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12569 struct bfd_link_info *info ATTRIBUTE_UNUSED,
12570 asection *sec ATTRIBUTE_UNUSED,
12571 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12572 {
12573 #if 0
12574 Elf_Internal_Shdr *symtab_hdr;
12575 struct elf_link_hash_entry **sym_hashes;
12576 bfd_signed_vma *local_got_refcounts;
12577 const Elf_Internal_Rela *rel, *relend;
12578 unsigned long r_symndx;
12579 struct elf_link_hash_entry *h;
12580
12581 if (bfd_link_relocatable (info))
12582 return TRUE;
12583
12584 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12585 sym_hashes = elf_sym_hashes (abfd);
12586 local_got_refcounts = elf_local_got_refcounts (abfd);
12587
12588 relend = relocs + sec->reloc_count;
12589 for (rel = relocs; rel < relend; rel++)
12590 switch (ELF_R_TYPE (abfd, rel->r_info))
12591 {
12592 case R_MIPS16_GOT16:
12593 case R_MIPS16_CALL16:
12594 case R_MIPS_GOT16:
12595 case R_MIPS_CALL16:
12596 case R_MIPS_CALL_HI16:
12597 case R_MIPS_CALL_LO16:
12598 case R_MIPS_GOT_HI16:
12599 case R_MIPS_GOT_LO16:
12600 case R_MIPS_GOT_DISP:
12601 case R_MIPS_GOT_PAGE:
12602 case R_MIPS_GOT_OFST:
12603 case R_MICROMIPS_GOT16:
12604 case R_MICROMIPS_CALL16:
12605 case R_MICROMIPS_CALL_HI16:
12606 case R_MICROMIPS_CALL_LO16:
12607 case R_MICROMIPS_GOT_HI16:
12608 case R_MICROMIPS_GOT_LO16:
12609 case R_MICROMIPS_GOT_DISP:
12610 case R_MICROMIPS_GOT_PAGE:
12611 case R_MICROMIPS_GOT_OFST:
12612 /* ??? It would seem that the existing MIPS code does no sort
12613 of reference counting or whatnot on its GOT and PLT entries,
12614 so it is not possible to garbage collect them at this time. */
12615 break;
12616
12617 default:
12618 break;
12619 }
12620 #endif
12621
12622 return TRUE;
12623 }
12624
12625 /* Prevent .MIPS.abiflags from being discarded with --gc-sections. */
12626
12627 bfd_boolean
12628 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12629 elf_gc_mark_hook_fn gc_mark_hook)
12630 {
12631 bfd *sub;
12632
12633 _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12634
12635 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12636 {
12637 asection *o;
12638
12639 if (! is_mips_elf (sub))
12640 continue;
12641
12642 for (o = sub->sections; o != NULL; o = o->next)
12643 if (!o->gc_mark
12644 && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12645 (bfd_get_section_name (sub, o)))
12646 {
12647 if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12648 return FALSE;
12649 }
12650 }
12651
12652 return TRUE;
12653 }
12654 \f
12655 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12656 hiding the old indirect symbol. Process additional relocation
12657 information. Also called for weakdefs, in which case we just let
12658 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
12659
12660 void
12661 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12662 struct elf_link_hash_entry *dir,
12663 struct elf_link_hash_entry *ind)
12664 {
12665 struct mips_elf_link_hash_entry *dirmips, *indmips;
12666
12667 _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12668
12669 dirmips = (struct mips_elf_link_hash_entry *) dir;
12670 indmips = (struct mips_elf_link_hash_entry *) ind;
12671 /* Any absolute non-dynamic relocations against an indirect or weak
12672 definition will be against the target symbol. */
12673 if (indmips->has_static_relocs)
12674 dirmips->has_static_relocs = TRUE;
12675
12676 if (ind->root.type != bfd_link_hash_indirect)
12677 return;
12678
12679 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12680 if (indmips->readonly_reloc)
12681 dirmips->readonly_reloc = TRUE;
12682 if (indmips->no_fn_stub)
12683 dirmips->no_fn_stub = TRUE;
12684 if (indmips->fn_stub)
12685 {
12686 dirmips->fn_stub = indmips->fn_stub;
12687 indmips->fn_stub = NULL;
12688 }
12689 if (indmips->need_fn_stub)
12690 {
12691 dirmips->need_fn_stub = TRUE;
12692 indmips->need_fn_stub = FALSE;
12693 }
12694 if (indmips->call_stub)
12695 {
12696 dirmips->call_stub = indmips->call_stub;
12697 indmips->call_stub = NULL;
12698 }
12699 if (indmips->call_fp_stub)
12700 {
12701 dirmips->call_fp_stub = indmips->call_fp_stub;
12702 indmips->call_fp_stub = NULL;
12703 }
12704 if (indmips->global_got_area < dirmips->global_got_area)
12705 dirmips->global_got_area = indmips->global_got_area;
12706 if (indmips->global_got_area < GGA_NONE)
12707 indmips->global_got_area = GGA_NONE;
12708 if (indmips->has_nonpic_branches)
12709 dirmips->has_nonpic_branches = TRUE;
12710 }
12711 \f
12712 #define PDR_SIZE 32
12713
12714 bfd_boolean
12715 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12716 struct bfd_link_info *info)
12717 {
12718 asection *o;
12719 bfd_boolean ret = FALSE;
12720 unsigned char *tdata;
12721 size_t i, skip;
12722
12723 o = bfd_get_section_by_name (abfd, ".pdr");
12724 if (! o)
12725 return FALSE;
12726 if (o->size == 0)
12727 return FALSE;
12728 if (o->size % PDR_SIZE != 0)
12729 return FALSE;
12730 if (o->output_section != NULL
12731 && bfd_is_abs_section (o->output_section))
12732 return FALSE;
12733
12734 tdata = bfd_zmalloc (o->size / PDR_SIZE);
12735 if (! tdata)
12736 return FALSE;
12737
12738 cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12739 info->keep_memory);
12740 if (!cookie->rels)
12741 {
12742 free (tdata);
12743 return FALSE;
12744 }
12745
12746 cookie->rel = cookie->rels;
12747 cookie->relend = cookie->rels + o->reloc_count;
12748
12749 for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12750 {
12751 if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12752 {
12753 tdata[i] = 1;
12754 skip ++;
12755 }
12756 }
12757
12758 if (skip != 0)
12759 {
12760 mips_elf_section_data (o)->u.tdata = tdata;
12761 if (o->rawsize == 0)
12762 o->rawsize = o->size;
12763 o->size -= skip * PDR_SIZE;
12764 ret = TRUE;
12765 }
12766 else
12767 free (tdata);
12768
12769 if (! info->keep_memory)
12770 free (cookie->rels);
12771
12772 return ret;
12773 }
12774
12775 bfd_boolean
12776 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12777 {
12778 if (strcmp (sec->name, ".pdr") == 0)
12779 return TRUE;
12780 return FALSE;
12781 }
12782
12783 bfd_boolean
12784 _bfd_mips_elf_write_section (bfd *output_bfd,
12785 struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12786 asection *sec, bfd_byte *contents)
12787 {
12788 bfd_byte *to, *from, *end;
12789 int i;
12790
12791 if (strcmp (sec->name, ".pdr") != 0)
12792 return FALSE;
12793
12794 if (mips_elf_section_data (sec)->u.tdata == NULL)
12795 return FALSE;
12796
12797 to = contents;
12798 end = contents + sec->size;
12799 for (from = contents, i = 0;
12800 from < end;
12801 from += PDR_SIZE, i++)
12802 {
12803 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12804 continue;
12805 if (to != from)
12806 memcpy (to, from, PDR_SIZE);
12807 to += PDR_SIZE;
12808 }
12809 bfd_set_section_contents (output_bfd, sec->output_section, contents,
12810 sec->output_offset, sec->size);
12811 return TRUE;
12812 }
12813 \f
12814 /* microMIPS code retains local labels for linker relaxation. Omit them
12815 from output by default for clarity. */
12816
12817 bfd_boolean
12818 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12819 {
12820 return _bfd_elf_is_local_label_name (abfd, sym->name);
12821 }
12822
12823 /* MIPS ELF uses a special find_nearest_line routine in order the
12824 handle the ECOFF debugging information. */
12825
12826 struct mips_elf_find_line
12827 {
12828 struct ecoff_debug_info d;
12829 struct ecoff_find_line i;
12830 };
12831
12832 bfd_boolean
12833 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12834 asection *section, bfd_vma offset,
12835 const char **filename_ptr,
12836 const char **functionname_ptr,
12837 unsigned int *line_ptr,
12838 unsigned int *discriminator_ptr)
12839 {
12840 asection *msec;
12841
12842 if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12843 filename_ptr, functionname_ptr,
12844 line_ptr, discriminator_ptr,
12845 dwarf_debug_sections,
12846 ABI_64_P (abfd) ? 8 : 0,
12847 &elf_tdata (abfd)->dwarf2_find_line_info))
12848 return TRUE;
12849
12850 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12851 filename_ptr, functionname_ptr,
12852 line_ptr))
12853 return TRUE;
12854
12855 msec = bfd_get_section_by_name (abfd, ".mdebug");
12856 if (msec != NULL)
12857 {
12858 flagword origflags;
12859 struct mips_elf_find_line *fi;
12860 const struct ecoff_debug_swap * const swap =
12861 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12862
12863 /* If we are called during a link, mips_elf_final_link may have
12864 cleared the SEC_HAS_CONTENTS field. We force it back on here
12865 if appropriate (which it normally will be). */
12866 origflags = msec->flags;
12867 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12868 msec->flags |= SEC_HAS_CONTENTS;
12869
12870 fi = mips_elf_tdata (abfd)->find_line_info;
12871 if (fi == NULL)
12872 {
12873 bfd_size_type external_fdr_size;
12874 char *fraw_src;
12875 char *fraw_end;
12876 struct fdr *fdr_ptr;
12877 bfd_size_type amt = sizeof (struct mips_elf_find_line);
12878
12879 fi = bfd_zalloc (abfd, amt);
12880 if (fi == NULL)
12881 {
12882 msec->flags = origflags;
12883 return FALSE;
12884 }
12885
12886 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12887 {
12888 msec->flags = origflags;
12889 return FALSE;
12890 }
12891
12892 /* Swap in the FDR information. */
12893 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12894 fi->d.fdr = bfd_alloc (abfd, amt);
12895 if (fi->d.fdr == NULL)
12896 {
12897 msec->flags = origflags;
12898 return FALSE;
12899 }
12900 external_fdr_size = swap->external_fdr_size;
12901 fdr_ptr = fi->d.fdr;
12902 fraw_src = (char *) fi->d.external_fdr;
12903 fraw_end = (fraw_src
12904 + fi->d.symbolic_header.ifdMax * external_fdr_size);
12905 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12906 (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12907
12908 mips_elf_tdata (abfd)->find_line_info = fi;
12909
12910 /* Note that we don't bother to ever free this information.
12911 find_nearest_line is either called all the time, as in
12912 objdump -l, so the information should be saved, or it is
12913 rarely called, as in ld error messages, so the memory
12914 wasted is unimportant. Still, it would probably be a
12915 good idea for free_cached_info to throw it away. */
12916 }
12917
12918 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12919 &fi->i, filename_ptr, functionname_ptr,
12920 line_ptr))
12921 {
12922 msec->flags = origflags;
12923 return TRUE;
12924 }
12925
12926 msec->flags = origflags;
12927 }
12928
12929 /* Fall back on the generic ELF find_nearest_line routine. */
12930
12931 return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12932 filename_ptr, functionname_ptr,
12933 line_ptr, discriminator_ptr);
12934 }
12935
12936 bfd_boolean
12937 _bfd_mips_elf_find_inliner_info (bfd *abfd,
12938 const char **filename_ptr,
12939 const char **functionname_ptr,
12940 unsigned int *line_ptr)
12941 {
12942 bfd_boolean found;
12943 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12944 functionname_ptr, line_ptr,
12945 & elf_tdata (abfd)->dwarf2_find_line_info);
12946 return found;
12947 }
12948
12949 \f
12950 /* When are writing out the .options or .MIPS.options section,
12951 remember the bytes we are writing out, so that we can install the
12952 GP value in the section_processing routine. */
12953
12954 bfd_boolean
12955 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12956 const void *location,
12957 file_ptr offset, bfd_size_type count)
12958 {
12959 if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12960 {
12961 bfd_byte *c;
12962
12963 if (elf_section_data (section) == NULL)
12964 {
12965 bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12966 section->used_by_bfd = bfd_zalloc (abfd, amt);
12967 if (elf_section_data (section) == NULL)
12968 return FALSE;
12969 }
12970 c = mips_elf_section_data (section)->u.tdata;
12971 if (c == NULL)
12972 {
12973 c = bfd_zalloc (abfd, section->size);
12974 if (c == NULL)
12975 return FALSE;
12976 mips_elf_section_data (section)->u.tdata = c;
12977 }
12978
12979 memcpy (c + offset, location, count);
12980 }
12981
12982 return _bfd_elf_set_section_contents (abfd, section, location, offset,
12983 count);
12984 }
12985
12986 /* This is almost identical to bfd_generic_get_... except that some
12987 MIPS relocations need to be handled specially. Sigh. */
12988
12989 bfd_byte *
12990 _bfd_elf_mips_get_relocated_section_contents
12991 (bfd *abfd,
12992 struct bfd_link_info *link_info,
12993 struct bfd_link_order *link_order,
12994 bfd_byte *data,
12995 bfd_boolean relocatable,
12996 asymbol **symbols)
12997 {
12998 /* Get enough memory to hold the stuff */
12999 bfd *input_bfd = link_order->u.indirect.section->owner;
13000 asection *input_section = link_order->u.indirect.section;
13001 bfd_size_type sz;
13002
13003 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
13004 arelent **reloc_vector = NULL;
13005 long reloc_count;
13006
13007 if (reloc_size < 0)
13008 goto error_return;
13009
13010 reloc_vector = bfd_malloc (reloc_size);
13011 if (reloc_vector == NULL && reloc_size != 0)
13012 goto error_return;
13013
13014 /* read in the section */
13015 sz = input_section->rawsize ? input_section->rawsize : input_section->size;
13016 if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
13017 goto error_return;
13018
13019 reloc_count = bfd_canonicalize_reloc (input_bfd,
13020 input_section,
13021 reloc_vector,
13022 symbols);
13023 if (reloc_count < 0)
13024 goto error_return;
13025
13026 if (reloc_count > 0)
13027 {
13028 arelent **parent;
13029 /* for mips */
13030 int gp_found;
13031 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */
13032
13033 {
13034 struct bfd_hash_entry *h;
13035 struct bfd_link_hash_entry *lh;
13036 /* Skip all this stuff if we aren't mixing formats. */
13037 if (abfd && input_bfd
13038 && abfd->xvec == input_bfd->xvec)
13039 lh = 0;
13040 else
13041 {
13042 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
13043 lh = (struct bfd_link_hash_entry *) h;
13044 }
13045 lookup:
13046 if (lh)
13047 {
13048 switch (lh->type)
13049 {
13050 case bfd_link_hash_undefined:
13051 case bfd_link_hash_undefweak:
13052 case bfd_link_hash_common:
13053 gp_found = 0;
13054 break;
13055 case bfd_link_hash_defined:
13056 case bfd_link_hash_defweak:
13057 gp_found = 1;
13058 gp = lh->u.def.value;
13059 break;
13060 case bfd_link_hash_indirect:
13061 case bfd_link_hash_warning:
13062 lh = lh->u.i.link;
13063 /* @@FIXME ignoring warning for now */
13064 goto lookup;
13065 case bfd_link_hash_new:
13066 default:
13067 abort ();
13068 }
13069 }
13070 else
13071 gp_found = 0;
13072 }
13073 /* end mips */
13074 for (parent = reloc_vector; *parent != NULL; parent++)
13075 {
13076 char *error_message = NULL;
13077 bfd_reloc_status_type r;
13078
13079 /* Specific to MIPS: Deal with relocation types that require
13080 knowing the gp of the output bfd. */
13081 asymbol *sym = *(*parent)->sym_ptr_ptr;
13082
13083 /* If we've managed to find the gp and have a special
13084 function for the relocation then go ahead, else default
13085 to the generic handling. */
13086 if (gp_found
13087 && (*parent)->howto->special_function
13088 == _bfd_mips_elf32_gprel16_reloc)
13089 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
13090 input_section, relocatable,
13091 data, gp);
13092 else
13093 r = bfd_perform_relocation (input_bfd, *parent, data,
13094 input_section,
13095 relocatable ? abfd : NULL,
13096 &error_message);
13097
13098 if (relocatable)
13099 {
13100 asection *os = input_section->output_section;
13101
13102 /* A partial link, so keep the relocs */
13103 os->orelocation[os->reloc_count] = *parent;
13104 os->reloc_count++;
13105 }
13106
13107 if (r != bfd_reloc_ok)
13108 {
13109 switch (r)
13110 {
13111 case bfd_reloc_undefined:
13112 (*link_info->callbacks->undefined_symbol)
13113 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13114 input_bfd, input_section, (*parent)->address, TRUE);
13115 break;
13116 case bfd_reloc_dangerous:
13117 BFD_ASSERT (error_message != NULL);
13118 (*link_info->callbacks->reloc_dangerous)
13119 (link_info, error_message,
13120 input_bfd, input_section, (*parent)->address);
13121 break;
13122 case bfd_reloc_overflow:
13123 (*link_info->callbacks->reloc_overflow)
13124 (link_info, NULL,
13125 bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13126 (*parent)->howto->name, (*parent)->addend,
13127 input_bfd, input_section, (*parent)->address);
13128 break;
13129 case bfd_reloc_outofrange:
13130 default:
13131 abort ();
13132 break;
13133 }
13134
13135 }
13136 }
13137 }
13138 if (reloc_vector != NULL)
13139 free (reloc_vector);
13140 return data;
13141
13142 error_return:
13143 if (reloc_vector != NULL)
13144 free (reloc_vector);
13145 return NULL;
13146 }
13147 \f
13148 static bfd_boolean
13149 mips_elf_relax_delete_bytes (bfd *abfd,
13150 asection *sec, bfd_vma addr, int count)
13151 {
13152 Elf_Internal_Shdr *symtab_hdr;
13153 unsigned int sec_shndx;
13154 bfd_byte *contents;
13155 Elf_Internal_Rela *irel, *irelend;
13156 Elf_Internal_Sym *isym;
13157 Elf_Internal_Sym *isymend;
13158 struct elf_link_hash_entry **sym_hashes;
13159 struct elf_link_hash_entry **end_hashes;
13160 struct elf_link_hash_entry **start_hashes;
13161 unsigned int symcount;
13162
13163 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13164 contents = elf_section_data (sec)->this_hdr.contents;
13165
13166 irel = elf_section_data (sec)->relocs;
13167 irelend = irel + sec->reloc_count;
13168
13169 /* Actually delete the bytes. */
13170 memmove (contents + addr, contents + addr + count,
13171 (size_t) (sec->size - addr - count));
13172 sec->size -= count;
13173
13174 /* Adjust all the relocs. */
13175 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13176 {
13177 /* Get the new reloc address. */
13178 if (irel->r_offset > addr)
13179 irel->r_offset -= count;
13180 }
13181
13182 BFD_ASSERT (addr % 2 == 0);
13183 BFD_ASSERT (count % 2 == 0);
13184
13185 /* Adjust the local symbols defined in this section. */
13186 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13187 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13188 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13189 if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13190 isym->st_value -= count;
13191
13192 /* Now adjust the global symbols defined in this section. */
13193 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13194 - symtab_hdr->sh_info);
13195 sym_hashes = start_hashes = elf_sym_hashes (abfd);
13196 end_hashes = sym_hashes + symcount;
13197
13198 for (; sym_hashes < end_hashes; sym_hashes++)
13199 {
13200 struct elf_link_hash_entry *sym_hash = *sym_hashes;
13201
13202 if ((sym_hash->root.type == bfd_link_hash_defined
13203 || sym_hash->root.type == bfd_link_hash_defweak)
13204 && sym_hash->root.u.def.section == sec)
13205 {
13206 bfd_vma value = sym_hash->root.u.def.value;
13207
13208 if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13209 value &= MINUS_TWO;
13210 if (value > addr)
13211 sym_hash->root.u.def.value -= count;
13212 }
13213 }
13214
13215 return TRUE;
13216 }
13217
13218
13219 /* Opcodes needed for microMIPS relaxation as found in
13220 opcodes/micromips-opc.c. */
13221
13222 struct opcode_descriptor {
13223 unsigned long match;
13224 unsigned long mask;
13225 };
13226
13227 /* The $ra register aka $31. */
13228
13229 #define RA 31
13230
13231 /* 32-bit instruction format register fields. */
13232
13233 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13234 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13235
13236 /* Check if a 5-bit register index can be abbreviated to 3 bits. */
13237
13238 #define OP16_VALID_REG(r) \
13239 ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13240
13241
13242 /* 32-bit and 16-bit branches. */
13243
13244 static const struct opcode_descriptor b_insns_32[] = {
13245 { /* "b", "p", */ 0x40400000, 0xffff0000 }, /* bgez 0 */
13246 { /* "b", "p", */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13247 { 0, 0 } /* End marker for find_match(). */
13248 };
13249
13250 static const struct opcode_descriptor bc_insn_32 =
13251 { /* "bc(1|2)(ft)", "N,p", */ 0x42800000, 0xfec30000 };
13252
13253 static const struct opcode_descriptor bz_insn_32 =
13254 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 };
13255
13256 static const struct opcode_descriptor bzal_insn_32 =
13257 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 };
13258
13259 static const struct opcode_descriptor beq_insn_32 =
13260 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 };
13261
13262 static const struct opcode_descriptor b_insn_16 =
13263 { /* "b", "mD", */ 0xcc00, 0xfc00 };
13264
13265 static const struct opcode_descriptor bz_insn_16 =
13266 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 };
13267
13268
13269 /* 32-bit and 16-bit branch EQ and NE zero. */
13270
13271 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13272 eq and second the ne. This convention is used when replacing a
13273 32-bit BEQ/BNE with the 16-bit version. */
13274
13275 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13276
13277 static const struct opcode_descriptor bz_rs_insns_32[] = {
13278 { /* "beqz", "s,p", */ 0x94000000, 0xffe00000 },
13279 { /* "bnez", "s,p", */ 0xb4000000, 0xffe00000 },
13280 { 0, 0 } /* End marker for find_match(). */
13281 };
13282
13283 static const struct opcode_descriptor bz_rt_insns_32[] = {
13284 { /* "beqz", "t,p", */ 0x94000000, 0xfc01f000 },
13285 { /* "bnez", "t,p", */ 0xb4000000, 0xfc01f000 },
13286 { 0, 0 } /* End marker for find_match(). */
13287 };
13288
13289 static const struct opcode_descriptor bzc_insns_32[] = {
13290 { /* "beqzc", "s,p", */ 0x40e00000, 0xffe00000 },
13291 { /* "bnezc", "s,p", */ 0x40a00000, 0xffe00000 },
13292 { 0, 0 } /* End marker for find_match(). */
13293 };
13294
13295 static const struct opcode_descriptor bz_insns_16[] = {
13296 { /* "beqz", "md,mE", */ 0x8c00, 0xfc00 },
13297 { /* "bnez", "md,mE", */ 0xac00, 0xfc00 },
13298 { 0, 0 } /* End marker for find_match(). */
13299 };
13300
13301 /* Switch between a 5-bit register index and its 3-bit shorthand. */
13302
13303 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13304 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13305
13306
13307 /* 32-bit instructions with a delay slot. */
13308
13309 static const struct opcode_descriptor jal_insn_32_bd16 =
13310 { /* "jals", "a", */ 0x74000000, 0xfc000000 };
13311
13312 static const struct opcode_descriptor jal_insn_32_bd32 =
13313 { /* "jal", "a", */ 0xf4000000, 0xfc000000 };
13314
13315 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13316 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 };
13317
13318 static const struct opcode_descriptor j_insn_32 =
13319 { /* "j", "a", */ 0xd4000000, 0xfc000000 };
13320
13321 static const struct opcode_descriptor jalr_insn_32 =
13322 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff };
13323
13324 /* This table can be compacted, because no opcode replacement is made. */
13325
13326 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13327 { /* "jals", "a", */ 0x74000000, 0xfc000000 },
13328
13329 { /* "jalrs[.hb]", "t,s", */ 0x00004f3c, 0xfc00efff },
13330 { /* "b(ge|lt)zals", "s,p", */ 0x42200000, 0xffa00000 },
13331
13332 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 },
13333 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 },
13334 { /* "j", "a", */ 0xd4000000, 0xfc000000 },
13335 { 0, 0 } /* End marker for find_match(). */
13336 };
13337
13338 /* This table can be compacted, because no opcode replacement is made. */
13339
13340 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13341 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 },
13342
13343 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff },
13344 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 },
13345 { 0, 0 } /* End marker for find_match(). */
13346 };
13347
13348
13349 /* 16-bit instructions with a delay slot. */
13350
13351 static const struct opcode_descriptor jalr_insn_16_bd16 =
13352 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 };
13353
13354 static const struct opcode_descriptor jalr_insn_16_bd32 =
13355 { /* "jalr", "my,mj", */ 0x45c0, 0xffe0 };
13356
13357 static const struct opcode_descriptor jr_insn_16 =
13358 { /* "jr", "mj", */ 0x4580, 0xffe0 };
13359
13360 #define JR16_REG(opcode) ((opcode) & 0x1f)
13361
13362 /* This table can be compacted, because no opcode replacement is made. */
13363
13364 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13365 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 },
13366
13367 { /* "b", "mD", */ 0xcc00, 0xfc00 },
13368 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 },
13369 { /* "jr", "mj", */ 0x4580, 0xffe0 },
13370 { 0, 0 } /* End marker for find_match(). */
13371 };
13372
13373
13374 /* LUI instruction. */
13375
13376 static const struct opcode_descriptor lui_insn =
13377 { /* "lui", "s,u", */ 0x41a00000, 0xffe00000 };
13378
13379
13380 /* ADDIU instruction. */
13381
13382 static const struct opcode_descriptor addiu_insn =
13383 { /* "addiu", "t,r,j", */ 0x30000000, 0xfc000000 };
13384
13385 static const struct opcode_descriptor addiupc_insn =
13386 { /* "addiu", "mb,$pc,mQ", */ 0x78000000, 0xfc000000 };
13387
13388 #define ADDIUPC_REG_FIELD(r) \
13389 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13390
13391
13392 /* Relaxable instructions in a JAL delay slot: MOVE. */
13393
13394 /* The 16-bit move has rd in 9:5 and rs in 4:0. The 32-bit moves
13395 (ADDU, OR) have rd in 15:11 and rs in 10:16. */
13396 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13397 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13398
13399 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13400 #define MOVE16_RS_FIELD(r) (((r) & 0x1f) )
13401
13402 static const struct opcode_descriptor move_insns_32[] = {
13403 { /* "move", "d,s", */ 0x00000290, 0xffe007ff }, /* or d,s,$0 */
13404 { /* "move", "d,s", */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13405 { 0, 0 } /* End marker for find_match(). */
13406 };
13407
13408 static const struct opcode_descriptor move_insn_16 =
13409 { /* "move", "mp,mj", */ 0x0c00, 0xfc00 };
13410
13411
13412 /* NOP instructions. */
13413
13414 static const struct opcode_descriptor nop_insn_32 =
13415 { /* "nop", "", */ 0x00000000, 0xffffffff };
13416
13417 static const struct opcode_descriptor nop_insn_16 =
13418 { /* "nop", "", */ 0x0c00, 0xffff };
13419
13420
13421 /* Instruction match support. */
13422
13423 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13424
13425 static int
13426 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13427 {
13428 unsigned long indx;
13429
13430 for (indx = 0; insn[indx].mask != 0; indx++)
13431 if (MATCH (opcode, insn[indx]))
13432 return indx;
13433
13434 return -1;
13435 }
13436
13437
13438 /* Branch and delay slot decoding support. */
13439
13440 /* If PTR points to what *might* be a 16-bit branch or jump, then
13441 return the minimum length of its delay slot, otherwise return 0.
13442 Non-zero results are not definitive as we might be checking against
13443 the second half of another instruction. */
13444
13445 static int
13446 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13447 {
13448 unsigned long opcode;
13449 int bdsize;
13450
13451 opcode = bfd_get_16 (abfd, ptr);
13452 if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13453 /* 16-bit branch/jump with a 32-bit delay slot. */
13454 bdsize = 4;
13455 else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13456 || find_match (opcode, ds_insns_16_bd16) >= 0)
13457 /* 16-bit branch/jump with a 16-bit delay slot. */
13458 bdsize = 2;
13459 else
13460 /* No delay slot. */
13461 bdsize = 0;
13462
13463 return bdsize;
13464 }
13465
13466 /* If PTR points to what *might* be a 32-bit branch or jump, then
13467 return the minimum length of its delay slot, otherwise return 0.
13468 Non-zero results are not definitive as we might be checking against
13469 the second half of another instruction. */
13470
13471 static int
13472 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13473 {
13474 unsigned long opcode;
13475 int bdsize;
13476
13477 opcode = bfd_get_micromips_32 (abfd, ptr);
13478 if (find_match (opcode, ds_insns_32_bd32) >= 0)
13479 /* 32-bit branch/jump with a 32-bit delay slot. */
13480 bdsize = 4;
13481 else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13482 /* 32-bit branch/jump with a 16-bit delay slot. */
13483 bdsize = 2;
13484 else
13485 /* No delay slot. */
13486 bdsize = 0;
13487
13488 return bdsize;
13489 }
13490
13491 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13492 that doesn't fiddle with REG, then return TRUE, otherwise FALSE. */
13493
13494 static bfd_boolean
13495 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13496 {
13497 unsigned long opcode;
13498
13499 opcode = bfd_get_16 (abfd, ptr);
13500 if (MATCH (opcode, b_insn_16)
13501 /* B16 */
13502 || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13503 /* JR16 */
13504 || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13505 /* BEQZ16, BNEZ16 */
13506 || (MATCH (opcode, jalr_insn_16_bd32)
13507 /* JALR16 */
13508 && reg != JR16_REG (opcode) && reg != RA))
13509 return TRUE;
13510
13511 return FALSE;
13512 }
13513
13514 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13515 then return TRUE, otherwise FALSE. */
13516
13517 static bfd_boolean
13518 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13519 {
13520 unsigned long opcode;
13521
13522 opcode = bfd_get_micromips_32 (abfd, ptr);
13523 if (MATCH (opcode, j_insn_32)
13524 /* J */
13525 || MATCH (opcode, bc_insn_32)
13526 /* BC1F, BC1T, BC2F, BC2T */
13527 || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13528 /* JAL, JALX */
13529 || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13530 /* BGEZ, BGTZ, BLEZ, BLTZ */
13531 || (MATCH (opcode, bzal_insn_32)
13532 /* BGEZAL, BLTZAL */
13533 && reg != OP32_SREG (opcode) && reg != RA)
13534 || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13535 /* JALR, JALR.HB, BEQ, BNE */
13536 && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13537 return TRUE;
13538
13539 return FALSE;
13540 }
13541
13542 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13543 IRELEND) at OFFSET indicate that there must be a compact branch there,
13544 then return TRUE, otherwise FALSE. */
13545
13546 static bfd_boolean
13547 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13548 const Elf_Internal_Rela *internal_relocs,
13549 const Elf_Internal_Rela *irelend)
13550 {
13551 const Elf_Internal_Rela *irel;
13552 unsigned long opcode;
13553
13554 opcode = bfd_get_micromips_32 (abfd, ptr);
13555 if (find_match (opcode, bzc_insns_32) < 0)
13556 return FALSE;
13557
13558 for (irel = internal_relocs; irel < irelend; irel++)
13559 if (irel->r_offset == offset
13560 && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13561 return TRUE;
13562
13563 return FALSE;
13564 }
13565
13566 /* Bitsize checking. */
13567 #define IS_BITSIZE(val, N) \
13568 (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1))) \
13569 - (1ULL << ((N) - 1))) == (val))
13570
13571 \f
13572 bfd_boolean
13573 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13574 struct bfd_link_info *link_info,
13575 bfd_boolean *again)
13576 {
13577 bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13578 Elf_Internal_Shdr *symtab_hdr;
13579 Elf_Internal_Rela *internal_relocs;
13580 Elf_Internal_Rela *irel, *irelend;
13581 bfd_byte *contents = NULL;
13582 Elf_Internal_Sym *isymbuf = NULL;
13583
13584 /* Assume nothing changes. */
13585 *again = FALSE;
13586
13587 /* We don't have to do anything for a relocatable link, if
13588 this section does not have relocs, or if this is not a
13589 code section. */
13590
13591 if (bfd_link_relocatable (link_info)
13592 || (sec->flags & SEC_RELOC) == 0
13593 || sec->reloc_count == 0
13594 || (sec->flags & SEC_CODE) == 0)
13595 return TRUE;
13596
13597 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13598
13599 /* Get a copy of the native relocations. */
13600 internal_relocs = (_bfd_elf_link_read_relocs
13601 (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13602 link_info->keep_memory));
13603 if (internal_relocs == NULL)
13604 goto error_return;
13605
13606 /* Walk through them looking for relaxing opportunities. */
13607 irelend = internal_relocs + sec->reloc_count;
13608 for (irel = internal_relocs; irel < irelend; irel++)
13609 {
13610 unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13611 unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13612 bfd_boolean target_is_micromips_code_p;
13613 unsigned long opcode;
13614 bfd_vma symval;
13615 bfd_vma pcrval;
13616 bfd_byte *ptr;
13617 int fndopc;
13618
13619 /* The number of bytes to delete for relaxation and from where
13620 to delete these bytes starting at irel->r_offset. */
13621 int delcnt = 0;
13622 int deloff = 0;
13623
13624 /* If this isn't something that can be relaxed, then ignore
13625 this reloc. */
13626 if (r_type != R_MICROMIPS_HI16
13627 && r_type != R_MICROMIPS_PC16_S1
13628 && r_type != R_MICROMIPS_26_S1)
13629 continue;
13630
13631 /* Get the section contents if we haven't done so already. */
13632 if (contents == NULL)
13633 {
13634 /* Get cached copy if it exists. */
13635 if (elf_section_data (sec)->this_hdr.contents != NULL)
13636 contents = elf_section_data (sec)->this_hdr.contents;
13637 /* Go get them off disk. */
13638 else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13639 goto error_return;
13640 }
13641 ptr = contents + irel->r_offset;
13642
13643 /* Read this BFD's local symbols if we haven't done so already. */
13644 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13645 {
13646 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13647 if (isymbuf == NULL)
13648 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13649 symtab_hdr->sh_info, 0,
13650 NULL, NULL, NULL);
13651 if (isymbuf == NULL)
13652 goto error_return;
13653 }
13654
13655 /* Get the value of the symbol referred to by the reloc. */
13656 if (r_symndx < symtab_hdr->sh_info)
13657 {
13658 /* A local symbol. */
13659 Elf_Internal_Sym *isym;
13660 asection *sym_sec;
13661
13662 isym = isymbuf + r_symndx;
13663 if (isym->st_shndx == SHN_UNDEF)
13664 sym_sec = bfd_und_section_ptr;
13665 else if (isym->st_shndx == SHN_ABS)
13666 sym_sec = bfd_abs_section_ptr;
13667 else if (isym->st_shndx == SHN_COMMON)
13668 sym_sec = bfd_com_section_ptr;
13669 else
13670 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13671 symval = (isym->st_value
13672 + sym_sec->output_section->vma
13673 + sym_sec->output_offset);
13674 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13675 }
13676 else
13677 {
13678 unsigned long indx;
13679 struct elf_link_hash_entry *h;
13680
13681 /* An external symbol. */
13682 indx = r_symndx - symtab_hdr->sh_info;
13683 h = elf_sym_hashes (abfd)[indx];
13684 BFD_ASSERT (h != NULL);
13685
13686 if (h->root.type != bfd_link_hash_defined
13687 && h->root.type != bfd_link_hash_defweak)
13688 /* This appears to be a reference to an undefined
13689 symbol. Just ignore it -- it will be caught by the
13690 regular reloc processing. */
13691 continue;
13692
13693 symval = (h->root.u.def.value
13694 + h->root.u.def.section->output_section->vma
13695 + h->root.u.def.section->output_offset);
13696 target_is_micromips_code_p = (!h->needs_plt
13697 && ELF_ST_IS_MICROMIPS (h->other));
13698 }
13699
13700
13701 /* For simplicity of coding, we are going to modify the
13702 section contents, the section relocs, and the BFD symbol
13703 table. We must tell the rest of the code not to free up this
13704 information. It would be possible to instead create a table
13705 of changes which have to be made, as is done in coff-mips.c;
13706 that would be more work, but would require less memory when
13707 the linker is run. */
13708
13709 /* Only 32-bit instructions relaxed. */
13710 if (irel->r_offset + 4 > sec->size)
13711 continue;
13712
13713 opcode = bfd_get_micromips_32 (abfd, ptr);
13714
13715 /* This is the pc-relative distance from the instruction the
13716 relocation is applied to, to the symbol referred. */
13717 pcrval = (symval
13718 - (sec->output_section->vma + sec->output_offset)
13719 - irel->r_offset);
13720
13721 /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13722 of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13723 R_MICROMIPS_PC23_S2. The R_MICROMIPS_PC23_S2 condition is
13724
13725 (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13726
13727 where pcrval has first to be adjusted to apply against the LO16
13728 location (we make the adjustment later on, when we have figured
13729 out the offset). */
13730 if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13731 {
13732 bfd_boolean bzc = FALSE;
13733 unsigned long nextopc;
13734 unsigned long reg;
13735 bfd_vma offset;
13736
13737 /* Give up if the previous reloc was a HI16 against this symbol
13738 too. */
13739 if (irel > internal_relocs
13740 && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13741 && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13742 continue;
13743
13744 /* Or if the next reloc is not a LO16 against this symbol. */
13745 if (irel + 1 >= irelend
13746 || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13747 || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13748 continue;
13749
13750 /* Or if the second next reloc is a LO16 against this symbol too. */
13751 if (irel + 2 >= irelend
13752 && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13753 && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13754 continue;
13755
13756 /* See if the LUI instruction *might* be in a branch delay slot.
13757 We check whether what looks like a 16-bit branch or jump is
13758 actually an immediate argument to a compact branch, and let
13759 it through if so. */
13760 if (irel->r_offset >= 2
13761 && check_br16_dslot (abfd, ptr - 2)
13762 && !(irel->r_offset >= 4
13763 && (bzc = check_relocated_bzc (abfd,
13764 ptr - 4, irel->r_offset - 4,
13765 internal_relocs, irelend))))
13766 continue;
13767 if (irel->r_offset >= 4
13768 && !bzc
13769 && check_br32_dslot (abfd, ptr - 4))
13770 continue;
13771
13772 reg = OP32_SREG (opcode);
13773
13774 /* We only relax adjacent instructions or ones separated with
13775 a branch or jump that has a delay slot. The branch or jump
13776 must not fiddle with the register used to hold the address.
13777 Subtract 4 for the LUI itself. */
13778 offset = irel[1].r_offset - irel[0].r_offset;
13779 switch (offset - 4)
13780 {
13781 case 0:
13782 break;
13783 case 2:
13784 if (check_br16 (abfd, ptr + 4, reg))
13785 break;
13786 continue;
13787 case 4:
13788 if (check_br32 (abfd, ptr + 4, reg))
13789 break;
13790 continue;
13791 default:
13792 continue;
13793 }
13794
13795 nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13796
13797 /* Give up unless the same register is used with both
13798 relocations. */
13799 if (OP32_SREG (nextopc) != reg)
13800 continue;
13801
13802 /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13803 and rounding up to take masking of the two LSBs into account. */
13804 pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13805
13806 /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16. */
13807 if (IS_BITSIZE (symval, 16))
13808 {
13809 /* Fix the relocation's type. */
13810 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13811
13812 /* Instructions using R_MICROMIPS_LO16 have the base or
13813 source register in bits 20:16. This register becomes $0
13814 (zero) as the result of the R_MICROMIPS_HI16 being 0. */
13815 nextopc &= ~0x001f0000;
13816 bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13817 contents + irel[1].r_offset);
13818 }
13819
13820 /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13821 We add 4 to take LUI deletion into account while checking
13822 the PC-relative distance. */
13823 else if (symval % 4 == 0
13824 && IS_BITSIZE (pcrval + 4, 25)
13825 && MATCH (nextopc, addiu_insn)
13826 && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13827 && OP16_VALID_REG (OP32_TREG (nextopc)))
13828 {
13829 /* Fix the relocation's type. */
13830 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13831
13832 /* Replace ADDIU with the ADDIUPC version. */
13833 nextopc = (addiupc_insn.match
13834 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13835
13836 bfd_put_micromips_32 (abfd, nextopc,
13837 contents + irel[1].r_offset);
13838 }
13839
13840 /* Can't do anything, give up, sigh... */
13841 else
13842 continue;
13843
13844 /* Fix the relocation's type. */
13845 irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13846
13847 /* Delete the LUI instruction: 4 bytes at irel->r_offset. */
13848 delcnt = 4;
13849 deloff = 0;
13850 }
13851
13852 /* Compact branch relaxation -- due to the multitude of macros
13853 employed by the compiler/assembler, compact branches are not
13854 always generated. Obviously, this can/will be fixed elsewhere,
13855 but there is no drawback in double checking it here. */
13856 else if (r_type == R_MICROMIPS_PC16_S1
13857 && irel->r_offset + 5 < sec->size
13858 && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13859 || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13860 && ((!insn32
13861 && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13862 nop_insn_16) ? 2 : 0))
13863 || (irel->r_offset + 7 < sec->size
13864 && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13865 ptr + 4),
13866 nop_insn_32) ? 4 : 0))))
13867 {
13868 unsigned long reg;
13869
13870 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13871
13872 /* Replace BEQZ/BNEZ with the compact version. */
13873 opcode = (bzc_insns_32[fndopc].match
13874 | BZC32_REG_FIELD (reg)
13875 | (opcode & 0xffff)); /* Addend value. */
13876
13877 bfd_put_micromips_32 (abfd, opcode, ptr);
13878
13879 /* Delete the delay slot NOP: two or four bytes from
13880 irel->offset + 4; delcnt has already been set above. */
13881 deloff = 4;
13882 }
13883
13884 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1. We need
13885 to check the distance from the next instruction, so subtract 2. */
13886 else if (!insn32
13887 && r_type == R_MICROMIPS_PC16_S1
13888 && IS_BITSIZE (pcrval - 2, 11)
13889 && find_match (opcode, b_insns_32) >= 0)
13890 {
13891 /* Fix the relocation's type. */
13892 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13893
13894 /* Replace the 32-bit opcode with a 16-bit opcode. */
13895 bfd_put_16 (abfd,
13896 (b_insn_16.match
13897 | (opcode & 0x3ff)), /* Addend value. */
13898 ptr);
13899
13900 /* Delete 2 bytes from irel->r_offset + 2. */
13901 delcnt = 2;
13902 deloff = 2;
13903 }
13904
13905 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1. We need
13906 to check the distance from the next instruction, so subtract 2. */
13907 else if (!insn32
13908 && r_type == R_MICROMIPS_PC16_S1
13909 && IS_BITSIZE (pcrval - 2, 8)
13910 && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13911 && OP16_VALID_REG (OP32_SREG (opcode)))
13912 || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13913 && OP16_VALID_REG (OP32_TREG (opcode)))))
13914 {
13915 unsigned long reg;
13916
13917 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13918
13919 /* Fix the relocation's type. */
13920 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13921
13922 /* Replace the 32-bit opcode with a 16-bit opcode. */
13923 bfd_put_16 (abfd,
13924 (bz_insns_16[fndopc].match
13925 | BZ16_REG_FIELD (reg)
13926 | (opcode & 0x7f)), /* Addend value. */
13927 ptr);
13928
13929 /* Delete 2 bytes from irel->r_offset + 2. */
13930 delcnt = 2;
13931 deloff = 2;
13932 }
13933
13934 /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets. */
13935 else if (!insn32
13936 && r_type == R_MICROMIPS_26_S1
13937 && target_is_micromips_code_p
13938 && irel->r_offset + 7 < sec->size
13939 && MATCH (opcode, jal_insn_32_bd32))
13940 {
13941 unsigned long n32opc;
13942 bfd_boolean relaxed = FALSE;
13943
13944 n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13945
13946 if (MATCH (n32opc, nop_insn_32))
13947 {
13948 /* Replace delay slot 32-bit NOP with a 16-bit NOP. */
13949 bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13950
13951 relaxed = TRUE;
13952 }
13953 else if (find_match (n32opc, move_insns_32) >= 0)
13954 {
13955 /* Replace delay slot 32-bit MOVE with 16-bit MOVE. */
13956 bfd_put_16 (abfd,
13957 (move_insn_16.match
13958 | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13959 | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13960 ptr + 4);
13961
13962 relaxed = TRUE;
13963 }
13964 /* Other 32-bit instructions relaxable to 16-bit
13965 instructions will be handled here later. */
13966
13967 if (relaxed)
13968 {
13969 /* JAL with 32-bit delay slot that is changed to a JALS
13970 with 16-bit delay slot. */
13971 bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13972
13973 /* Delete 2 bytes from irel->r_offset + 6. */
13974 delcnt = 2;
13975 deloff = 6;
13976 }
13977 }
13978
13979 if (delcnt != 0)
13980 {
13981 /* Note that we've changed the relocs, section contents, etc. */
13982 elf_section_data (sec)->relocs = internal_relocs;
13983 elf_section_data (sec)->this_hdr.contents = contents;
13984 symtab_hdr->contents = (unsigned char *) isymbuf;
13985
13986 /* Delete bytes depending on the delcnt and deloff. */
13987 if (!mips_elf_relax_delete_bytes (abfd, sec,
13988 irel->r_offset + deloff, delcnt))
13989 goto error_return;
13990
13991 /* That will change things, so we should relax again.
13992 Note that this is not required, and it may be slow. */
13993 *again = TRUE;
13994 }
13995 }
13996
13997 if (isymbuf != NULL
13998 && symtab_hdr->contents != (unsigned char *) isymbuf)
13999 {
14000 if (! link_info->keep_memory)
14001 free (isymbuf);
14002 else
14003 {
14004 /* Cache the symbols for elf_link_input_bfd. */
14005 symtab_hdr->contents = (unsigned char *) isymbuf;
14006 }
14007 }
14008
14009 if (contents != NULL
14010 && elf_section_data (sec)->this_hdr.contents != contents)
14011 {
14012 if (! link_info->keep_memory)
14013 free (contents);
14014 else
14015 {
14016 /* Cache the section contents for elf_link_input_bfd. */
14017 elf_section_data (sec)->this_hdr.contents = contents;
14018 }
14019 }
14020
14021 if (internal_relocs != NULL
14022 && elf_section_data (sec)->relocs != internal_relocs)
14023 free (internal_relocs);
14024
14025 return TRUE;
14026
14027 error_return:
14028 if (isymbuf != NULL
14029 && symtab_hdr->contents != (unsigned char *) isymbuf)
14030 free (isymbuf);
14031 if (contents != NULL
14032 && elf_section_data (sec)->this_hdr.contents != contents)
14033 free (contents);
14034 if (internal_relocs != NULL
14035 && elf_section_data (sec)->relocs != internal_relocs)
14036 free (internal_relocs);
14037
14038 return FALSE;
14039 }
14040 \f
14041 /* Create a MIPS ELF linker hash table. */
14042
14043 struct bfd_link_hash_table *
14044 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
14045 {
14046 struct mips_elf_link_hash_table *ret;
14047 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
14048
14049 ret = bfd_zmalloc (amt);
14050 if (ret == NULL)
14051 return NULL;
14052
14053 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
14054 mips_elf_link_hash_newfunc,
14055 sizeof (struct mips_elf_link_hash_entry),
14056 MIPS_ELF_DATA))
14057 {
14058 free (ret);
14059 return NULL;
14060 }
14061 ret->root.init_plt_refcount.plist = NULL;
14062 ret->root.init_plt_offset.plist = NULL;
14063
14064 return &ret->root.root;
14065 }
14066
14067 /* Likewise, but indicate that the target is VxWorks. */
14068
14069 struct bfd_link_hash_table *
14070 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
14071 {
14072 struct bfd_link_hash_table *ret;
14073
14074 ret = _bfd_mips_elf_link_hash_table_create (abfd);
14075 if (ret)
14076 {
14077 struct mips_elf_link_hash_table *htab;
14078
14079 htab = (struct mips_elf_link_hash_table *) ret;
14080 htab->use_plts_and_copy_relocs = TRUE;
14081 htab->is_vxworks = TRUE;
14082 }
14083 return ret;
14084 }
14085
14086 /* A function that the linker calls if we are allowed to use PLTs
14087 and copy relocs. */
14088
14089 void
14090 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
14091 {
14092 mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
14093 }
14094
14095 /* A function that the linker calls to select between all or only
14096 32-bit microMIPS instructions. */
14097
14098 void
14099 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
14100 {
14101 mips_elf_hash_table (info)->insn32 = on;
14102 }
14103 \f
14104 /* Structure for saying that BFD machine EXTENSION extends BASE. */
14105
14106 struct mips_mach_extension
14107 {
14108 unsigned long extension, base;
14109 };
14110
14111
14112 /* An array describing how BFD machines relate to one another. The entries
14113 are ordered topologically with MIPS I extensions listed last. */
14114
14115 static const struct mips_mach_extension mips_mach_extensions[] =
14116 {
14117 /* MIPS64r2 extensions. */
14118 { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
14119 { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
14120 { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
14121 { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
14122 { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
14123
14124 /* MIPS64 extensions. */
14125 { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
14126 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
14127 { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
14128
14129 /* MIPS V extensions. */
14130 { bfd_mach_mipsisa64, bfd_mach_mips5 },
14131
14132 /* R10000 extensions. */
14133 { bfd_mach_mips12000, bfd_mach_mips10000 },
14134 { bfd_mach_mips14000, bfd_mach_mips10000 },
14135 { bfd_mach_mips16000, bfd_mach_mips10000 },
14136
14137 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core
14138 vr5400 ISA, but doesn't include the multimedia stuff. It seems
14139 better to allow vr5400 and vr5500 code to be merged anyway, since
14140 many libraries will just use the core ISA. Perhaps we could add
14141 some sort of ASE flag if this ever proves a problem. */
14142 { bfd_mach_mips5500, bfd_mach_mips5400 },
14143 { bfd_mach_mips5400, bfd_mach_mips5000 },
14144
14145 /* MIPS IV extensions. */
14146 { bfd_mach_mips5, bfd_mach_mips8000 },
14147 { bfd_mach_mips10000, bfd_mach_mips8000 },
14148 { bfd_mach_mips5000, bfd_mach_mips8000 },
14149 { bfd_mach_mips7000, bfd_mach_mips8000 },
14150 { bfd_mach_mips9000, bfd_mach_mips8000 },
14151
14152 /* VR4100 extensions. */
14153 { bfd_mach_mips4120, bfd_mach_mips4100 },
14154 { bfd_mach_mips4111, bfd_mach_mips4100 },
14155
14156 /* MIPS III extensions. */
14157 { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14158 { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14159 { bfd_mach_mips8000, bfd_mach_mips4000 },
14160 { bfd_mach_mips4650, bfd_mach_mips4000 },
14161 { bfd_mach_mips4600, bfd_mach_mips4000 },
14162 { bfd_mach_mips4400, bfd_mach_mips4000 },
14163 { bfd_mach_mips4300, bfd_mach_mips4000 },
14164 { bfd_mach_mips4100, bfd_mach_mips4000 },
14165 { bfd_mach_mips4010, bfd_mach_mips4000 },
14166 { bfd_mach_mips5900, bfd_mach_mips4000 },
14167
14168 /* MIPS32 extensions. */
14169 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14170
14171 /* MIPS II extensions. */
14172 { bfd_mach_mips4000, bfd_mach_mips6000 },
14173 { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14174
14175 /* MIPS I extensions. */
14176 { bfd_mach_mips6000, bfd_mach_mips3000 },
14177 { bfd_mach_mips3900, bfd_mach_mips3000 }
14178 };
14179
14180 /* Return true if bfd machine EXTENSION is an extension of machine BASE. */
14181
14182 static bfd_boolean
14183 mips_mach_extends_p (unsigned long base, unsigned long extension)
14184 {
14185 size_t i;
14186
14187 if (extension == base)
14188 return TRUE;
14189
14190 if (base == bfd_mach_mipsisa32
14191 && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14192 return TRUE;
14193
14194 if (base == bfd_mach_mipsisa32r2
14195 && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14196 return TRUE;
14197
14198 for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14199 if (extension == mips_mach_extensions[i].extension)
14200 {
14201 extension = mips_mach_extensions[i].base;
14202 if (extension == base)
14203 return TRUE;
14204 }
14205
14206 return FALSE;
14207 }
14208
14209 /* Return the BFD mach for each .MIPS.abiflags ISA Extension. */
14210
14211 static unsigned long
14212 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14213 {
14214 switch (isa_ext)
14215 {
14216 case AFL_EXT_3900: return bfd_mach_mips3900;
14217 case AFL_EXT_4010: return bfd_mach_mips4010;
14218 case AFL_EXT_4100: return bfd_mach_mips4100;
14219 case AFL_EXT_4111: return bfd_mach_mips4111;
14220 case AFL_EXT_4120: return bfd_mach_mips4120;
14221 case AFL_EXT_4650: return bfd_mach_mips4650;
14222 case AFL_EXT_5400: return bfd_mach_mips5400;
14223 case AFL_EXT_5500: return bfd_mach_mips5500;
14224 case AFL_EXT_5900: return bfd_mach_mips5900;
14225 case AFL_EXT_10000: return bfd_mach_mips10000;
14226 case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14227 case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14228 case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
14229 case AFL_EXT_SB1: return bfd_mach_mips_sb1;
14230 case AFL_EXT_OCTEON: return bfd_mach_mips_octeon;
14231 case AFL_EXT_OCTEONP: return bfd_mach_mips_octeonp;
14232 case AFL_EXT_OCTEON2: return bfd_mach_mips_octeon2;
14233 case AFL_EXT_XLR: return bfd_mach_mips_xlr;
14234 default: return bfd_mach_mips3000;
14235 }
14236 }
14237
14238 /* Return the .MIPS.abiflags value representing each ISA Extension. */
14239
14240 unsigned int
14241 bfd_mips_isa_ext (bfd *abfd)
14242 {
14243 switch (bfd_get_mach (abfd))
14244 {
14245 case bfd_mach_mips3900: return AFL_EXT_3900;
14246 case bfd_mach_mips4010: return AFL_EXT_4010;
14247 case bfd_mach_mips4100: return AFL_EXT_4100;
14248 case bfd_mach_mips4111: return AFL_EXT_4111;
14249 case bfd_mach_mips4120: return AFL_EXT_4120;
14250 case bfd_mach_mips4650: return AFL_EXT_4650;
14251 case bfd_mach_mips5400: return AFL_EXT_5400;
14252 case bfd_mach_mips5500: return AFL_EXT_5500;
14253 case bfd_mach_mips5900: return AFL_EXT_5900;
14254 case bfd_mach_mips10000: return AFL_EXT_10000;
14255 case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14256 case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14257 case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
14258 case bfd_mach_mips_sb1: return AFL_EXT_SB1;
14259 case bfd_mach_mips_octeon: return AFL_EXT_OCTEON;
14260 case bfd_mach_mips_octeonp: return AFL_EXT_OCTEONP;
14261 case bfd_mach_mips_octeon3: return AFL_EXT_OCTEON3;
14262 case bfd_mach_mips_octeon2: return AFL_EXT_OCTEON2;
14263 case bfd_mach_mips_xlr: return AFL_EXT_XLR;
14264 default: return 0;
14265 }
14266 }
14267
14268 /* Encode ISA level and revision as a single value. */
14269 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14270
14271 /* Decode a single value into level and revision. */
14272 #define ISA_LEVEL(LEVREV) ((LEVREV) >> 3)
14273 #define ISA_REV(LEVREV) ((LEVREV) & 0x7)
14274
14275 /* Update the isa_level, isa_rev, isa_ext fields of abiflags. */
14276
14277 static void
14278 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14279 {
14280 int new_isa = 0;
14281 switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14282 {
14283 case E_MIPS_ARCH_1: new_isa = LEVEL_REV (1, 0); break;
14284 case E_MIPS_ARCH_2: new_isa = LEVEL_REV (2, 0); break;
14285 case E_MIPS_ARCH_3: new_isa = LEVEL_REV (3, 0); break;
14286 case E_MIPS_ARCH_4: new_isa = LEVEL_REV (4, 0); break;
14287 case E_MIPS_ARCH_5: new_isa = LEVEL_REV (5, 0); break;
14288 case E_MIPS_ARCH_32: new_isa = LEVEL_REV (32, 1); break;
14289 case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14290 case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14291 case E_MIPS_ARCH_64: new_isa = LEVEL_REV (64, 1); break;
14292 case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14293 case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14294 default:
14295 (*_bfd_error_handler)
14296 (_("%B: Unknown architecture %s"),
14297 abfd, bfd_printable_name (abfd));
14298 }
14299
14300 if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14301 {
14302 abiflags->isa_level = ISA_LEVEL (new_isa);
14303 abiflags->isa_rev = ISA_REV (new_isa);
14304 }
14305
14306 /* Update the isa_ext if ABFD describes a further extension. */
14307 if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14308 bfd_get_mach (abfd)))
14309 abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14310 }
14311
14312 /* Return true if the given ELF header flags describe a 32-bit binary. */
14313
14314 static bfd_boolean
14315 mips_32bit_flags_p (flagword flags)
14316 {
14317 return ((flags & EF_MIPS_32BITMODE) != 0
14318 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14319 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14320 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14321 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14322 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14323 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14324 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14325 }
14326
14327 /* Infer the content of the ABI flags based on the elf header. */
14328
14329 static void
14330 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14331 {
14332 obj_attribute *in_attr;
14333
14334 memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14335 update_mips_abiflags_isa (abfd, abiflags);
14336
14337 if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14338 abiflags->gpr_size = AFL_REG_32;
14339 else
14340 abiflags->gpr_size = AFL_REG_64;
14341
14342 abiflags->cpr1_size = AFL_REG_NONE;
14343
14344 in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14345 abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14346
14347 if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14348 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14349 || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14350 && abiflags->gpr_size == AFL_REG_32))
14351 abiflags->cpr1_size = AFL_REG_32;
14352 else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14353 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14354 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14355 abiflags->cpr1_size = AFL_REG_64;
14356
14357 abiflags->cpr2_size = AFL_REG_NONE;
14358
14359 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14360 abiflags->ases |= AFL_ASE_MDMX;
14361 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14362 abiflags->ases |= AFL_ASE_MIPS16;
14363 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14364 abiflags->ases |= AFL_ASE_MICROMIPS;
14365
14366 if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14367 && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14368 && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14369 && abiflags->isa_level >= 32
14370 && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14371 abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14372 }
14373
14374 /* We need to use a special link routine to handle the .reginfo and
14375 the .mdebug sections. We need to merge all instances of these
14376 sections together, not write them all out sequentially. */
14377
14378 bfd_boolean
14379 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14380 {
14381 asection *o;
14382 struct bfd_link_order *p;
14383 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14384 asection *rtproc_sec, *abiflags_sec;
14385 Elf32_RegInfo reginfo;
14386 struct ecoff_debug_info debug;
14387 struct mips_htab_traverse_info hti;
14388 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14389 const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14390 HDRR *symhdr = &debug.symbolic_header;
14391 void *mdebug_handle = NULL;
14392 asection *s;
14393 EXTR esym;
14394 unsigned int i;
14395 bfd_size_type amt;
14396 struct mips_elf_link_hash_table *htab;
14397
14398 static const char * const secname[] =
14399 {
14400 ".text", ".init", ".fini", ".data",
14401 ".rodata", ".sdata", ".sbss", ".bss"
14402 };
14403 static const int sc[] =
14404 {
14405 scText, scInit, scFini, scData,
14406 scRData, scSData, scSBss, scBss
14407 };
14408
14409 /* Sort the dynamic symbols so that those with GOT entries come after
14410 those without. */
14411 htab = mips_elf_hash_table (info);
14412 BFD_ASSERT (htab != NULL);
14413
14414 if (!mips_elf_sort_hash_table (abfd, info))
14415 return FALSE;
14416
14417 /* Create any scheduled LA25 stubs. */
14418 hti.info = info;
14419 hti.output_bfd = abfd;
14420 hti.error = FALSE;
14421 htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14422 if (hti.error)
14423 return FALSE;
14424
14425 /* Get a value for the GP register. */
14426 if (elf_gp (abfd) == 0)
14427 {
14428 struct bfd_link_hash_entry *h;
14429
14430 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14431 if (h != NULL && h->type == bfd_link_hash_defined)
14432 elf_gp (abfd) = (h->u.def.value
14433 + h->u.def.section->output_section->vma
14434 + h->u.def.section->output_offset);
14435 else if (htab->is_vxworks
14436 && (h = bfd_link_hash_lookup (info->hash,
14437 "_GLOBAL_OFFSET_TABLE_",
14438 FALSE, FALSE, TRUE))
14439 && h->type == bfd_link_hash_defined)
14440 elf_gp (abfd) = (h->u.def.section->output_section->vma
14441 + h->u.def.section->output_offset
14442 + h->u.def.value);
14443 else if (bfd_link_relocatable (info))
14444 {
14445 bfd_vma lo = MINUS_ONE;
14446
14447 /* Find the GP-relative section with the lowest offset. */
14448 for (o = abfd->sections; o != NULL; o = o->next)
14449 if (o->vma < lo
14450 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14451 lo = o->vma;
14452
14453 /* And calculate GP relative to that. */
14454 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14455 }
14456 else
14457 {
14458 /* If the relocate_section function needs to do a reloc
14459 involving the GP value, it should make a reloc_dangerous
14460 callback to warn that GP is not defined. */
14461 }
14462 }
14463
14464 /* Go through the sections and collect the .reginfo and .mdebug
14465 information. */
14466 abiflags_sec = NULL;
14467 reginfo_sec = NULL;
14468 mdebug_sec = NULL;
14469 gptab_data_sec = NULL;
14470 gptab_bss_sec = NULL;
14471 for (o = abfd->sections; o != NULL; o = o->next)
14472 {
14473 if (strcmp (o->name, ".MIPS.abiflags") == 0)
14474 {
14475 /* We have found the .MIPS.abiflags section in the output file.
14476 Look through all the link_orders comprising it and remove them.
14477 The data is merged in _bfd_mips_elf_merge_private_bfd_data. */
14478 for (p = o->map_head.link_order; p != NULL; p = p->next)
14479 {
14480 asection *input_section;
14481
14482 if (p->type != bfd_indirect_link_order)
14483 {
14484 if (p->type == bfd_data_link_order)
14485 continue;
14486 abort ();
14487 }
14488
14489 input_section = p->u.indirect.section;
14490
14491 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14492 elf_link_input_bfd ignores this section. */
14493 input_section->flags &= ~SEC_HAS_CONTENTS;
14494 }
14495
14496 /* Size has been set in _bfd_mips_elf_always_size_sections. */
14497 BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14498
14499 /* Skip this section later on (I don't think this currently
14500 matters, but someday it might). */
14501 o->map_head.link_order = NULL;
14502
14503 abiflags_sec = o;
14504 }
14505
14506 if (strcmp (o->name, ".reginfo") == 0)
14507 {
14508 memset (&reginfo, 0, sizeof reginfo);
14509
14510 /* We have found the .reginfo section in the output file.
14511 Look through all the link_orders comprising it and merge
14512 the information together. */
14513 for (p = o->map_head.link_order; p != NULL; p = p->next)
14514 {
14515 asection *input_section;
14516 bfd *input_bfd;
14517 Elf32_External_RegInfo ext;
14518 Elf32_RegInfo sub;
14519
14520 if (p->type != bfd_indirect_link_order)
14521 {
14522 if (p->type == bfd_data_link_order)
14523 continue;
14524 abort ();
14525 }
14526
14527 input_section = p->u.indirect.section;
14528 input_bfd = input_section->owner;
14529
14530 if (! bfd_get_section_contents (input_bfd, input_section,
14531 &ext, 0, sizeof ext))
14532 return FALSE;
14533
14534 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14535
14536 reginfo.ri_gprmask |= sub.ri_gprmask;
14537 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14538 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14539 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14540 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14541
14542 /* ri_gp_value is set by the function
14543 mips_elf32_section_processing when the section is
14544 finally written out. */
14545
14546 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14547 elf_link_input_bfd ignores this section. */
14548 input_section->flags &= ~SEC_HAS_CONTENTS;
14549 }
14550
14551 /* Size has been set in _bfd_mips_elf_always_size_sections. */
14552 BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14553
14554 /* Skip this section later on (I don't think this currently
14555 matters, but someday it might). */
14556 o->map_head.link_order = NULL;
14557
14558 reginfo_sec = o;
14559 }
14560
14561 if (strcmp (o->name, ".mdebug") == 0)
14562 {
14563 struct extsym_info einfo;
14564 bfd_vma last;
14565
14566 /* We have found the .mdebug section in the output file.
14567 Look through all the link_orders comprising it and merge
14568 the information together. */
14569 symhdr->magic = swap->sym_magic;
14570 /* FIXME: What should the version stamp be? */
14571 symhdr->vstamp = 0;
14572 symhdr->ilineMax = 0;
14573 symhdr->cbLine = 0;
14574 symhdr->idnMax = 0;
14575 symhdr->ipdMax = 0;
14576 symhdr->isymMax = 0;
14577 symhdr->ioptMax = 0;
14578 symhdr->iauxMax = 0;
14579 symhdr->issMax = 0;
14580 symhdr->issExtMax = 0;
14581 symhdr->ifdMax = 0;
14582 symhdr->crfd = 0;
14583 symhdr->iextMax = 0;
14584
14585 /* We accumulate the debugging information itself in the
14586 debug_info structure. */
14587 debug.line = NULL;
14588 debug.external_dnr = NULL;
14589 debug.external_pdr = NULL;
14590 debug.external_sym = NULL;
14591 debug.external_opt = NULL;
14592 debug.external_aux = NULL;
14593 debug.ss = NULL;
14594 debug.ssext = debug.ssext_end = NULL;
14595 debug.external_fdr = NULL;
14596 debug.external_rfd = NULL;
14597 debug.external_ext = debug.external_ext_end = NULL;
14598
14599 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14600 if (mdebug_handle == NULL)
14601 return FALSE;
14602
14603 esym.jmptbl = 0;
14604 esym.cobol_main = 0;
14605 esym.weakext = 0;
14606 esym.reserved = 0;
14607 esym.ifd = ifdNil;
14608 esym.asym.iss = issNil;
14609 esym.asym.st = stLocal;
14610 esym.asym.reserved = 0;
14611 esym.asym.index = indexNil;
14612 last = 0;
14613 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14614 {
14615 esym.asym.sc = sc[i];
14616 s = bfd_get_section_by_name (abfd, secname[i]);
14617 if (s != NULL)
14618 {
14619 esym.asym.value = s->vma;
14620 last = s->vma + s->size;
14621 }
14622 else
14623 esym.asym.value = last;
14624 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14625 secname[i], &esym))
14626 return FALSE;
14627 }
14628
14629 for (p = o->map_head.link_order; p != NULL; p = p->next)
14630 {
14631 asection *input_section;
14632 bfd *input_bfd;
14633 const struct ecoff_debug_swap *input_swap;
14634 struct ecoff_debug_info input_debug;
14635 char *eraw_src;
14636 char *eraw_end;
14637
14638 if (p->type != bfd_indirect_link_order)
14639 {
14640 if (p->type == bfd_data_link_order)
14641 continue;
14642 abort ();
14643 }
14644
14645 input_section = p->u.indirect.section;
14646 input_bfd = input_section->owner;
14647
14648 if (!is_mips_elf (input_bfd))
14649 {
14650 /* I don't know what a non MIPS ELF bfd would be
14651 doing with a .mdebug section, but I don't really
14652 want to deal with it. */
14653 continue;
14654 }
14655
14656 input_swap = (get_elf_backend_data (input_bfd)
14657 ->elf_backend_ecoff_debug_swap);
14658
14659 BFD_ASSERT (p->size == input_section->size);
14660
14661 /* The ECOFF linking code expects that we have already
14662 read in the debugging information and set up an
14663 ecoff_debug_info structure, so we do that now. */
14664 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14665 &input_debug))
14666 return FALSE;
14667
14668 if (! (bfd_ecoff_debug_accumulate
14669 (mdebug_handle, abfd, &debug, swap, input_bfd,
14670 &input_debug, input_swap, info)))
14671 return FALSE;
14672
14673 /* Loop through the external symbols. For each one with
14674 interesting information, try to find the symbol in
14675 the linker global hash table and save the information
14676 for the output external symbols. */
14677 eraw_src = input_debug.external_ext;
14678 eraw_end = (eraw_src
14679 + (input_debug.symbolic_header.iextMax
14680 * input_swap->external_ext_size));
14681 for (;
14682 eraw_src < eraw_end;
14683 eraw_src += input_swap->external_ext_size)
14684 {
14685 EXTR ext;
14686 const char *name;
14687 struct mips_elf_link_hash_entry *h;
14688
14689 (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14690 if (ext.asym.sc == scNil
14691 || ext.asym.sc == scUndefined
14692 || ext.asym.sc == scSUndefined)
14693 continue;
14694
14695 name = input_debug.ssext + ext.asym.iss;
14696 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14697 name, FALSE, FALSE, TRUE);
14698 if (h == NULL || h->esym.ifd != -2)
14699 continue;
14700
14701 if (ext.ifd != -1)
14702 {
14703 BFD_ASSERT (ext.ifd
14704 < input_debug.symbolic_header.ifdMax);
14705 ext.ifd = input_debug.ifdmap[ext.ifd];
14706 }
14707
14708 h->esym = ext;
14709 }
14710
14711 /* Free up the information we just read. */
14712 free (input_debug.line);
14713 free (input_debug.external_dnr);
14714 free (input_debug.external_pdr);
14715 free (input_debug.external_sym);
14716 free (input_debug.external_opt);
14717 free (input_debug.external_aux);
14718 free (input_debug.ss);
14719 free (input_debug.ssext);
14720 free (input_debug.external_fdr);
14721 free (input_debug.external_rfd);
14722 free (input_debug.external_ext);
14723
14724 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14725 elf_link_input_bfd ignores this section. */
14726 input_section->flags &= ~SEC_HAS_CONTENTS;
14727 }
14728
14729 if (SGI_COMPAT (abfd) && bfd_link_pic (info))
14730 {
14731 /* Create .rtproc section. */
14732 rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14733 if (rtproc_sec == NULL)
14734 {
14735 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14736 | SEC_LINKER_CREATED | SEC_READONLY);
14737
14738 rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14739 ".rtproc",
14740 flags);
14741 if (rtproc_sec == NULL
14742 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14743 return FALSE;
14744 }
14745
14746 if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14747 info, rtproc_sec,
14748 &debug))
14749 return FALSE;
14750 }
14751
14752 /* Build the external symbol information. */
14753 einfo.abfd = abfd;
14754 einfo.info = info;
14755 einfo.debug = &debug;
14756 einfo.swap = swap;
14757 einfo.failed = FALSE;
14758 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14759 mips_elf_output_extsym, &einfo);
14760 if (einfo.failed)
14761 return FALSE;
14762
14763 /* Set the size of the .mdebug section. */
14764 o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14765
14766 /* Skip this section later on (I don't think this currently
14767 matters, but someday it might). */
14768 o->map_head.link_order = NULL;
14769
14770 mdebug_sec = o;
14771 }
14772
14773 if (CONST_STRNEQ (o->name, ".gptab."))
14774 {
14775 const char *subname;
14776 unsigned int c;
14777 Elf32_gptab *tab;
14778 Elf32_External_gptab *ext_tab;
14779 unsigned int j;
14780
14781 /* The .gptab.sdata and .gptab.sbss sections hold
14782 information describing how the small data area would
14783 change depending upon the -G switch. These sections
14784 not used in executables files. */
14785 if (! bfd_link_relocatable (info))
14786 {
14787 for (p = o->map_head.link_order; p != NULL; p = p->next)
14788 {
14789 asection *input_section;
14790
14791 if (p->type != bfd_indirect_link_order)
14792 {
14793 if (p->type == bfd_data_link_order)
14794 continue;
14795 abort ();
14796 }
14797
14798 input_section = p->u.indirect.section;
14799
14800 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14801 elf_link_input_bfd ignores this section. */
14802 input_section->flags &= ~SEC_HAS_CONTENTS;
14803 }
14804
14805 /* Skip this section later on (I don't think this
14806 currently matters, but someday it might). */
14807 o->map_head.link_order = NULL;
14808
14809 /* Really remove the section. */
14810 bfd_section_list_remove (abfd, o);
14811 --abfd->section_count;
14812
14813 continue;
14814 }
14815
14816 /* There is one gptab for initialized data, and one for
14817 uninitialized data. */
14818 if (strcmp (o->name, ".gptab.sdata") == 0)
14819 gptab_data_sec = o;
14820 else if (strcmp (o->name, ".gptab.sbss") == 0)
14821 gptab_bss_sec = o;
14822 else
14823 {
14824 (*_bfd_error_handler)
14825 (_("%s: illegal section name `%s'"),
14826 bfd_get_filename (abfd), o->name);
14827 bfd_set_error (bfd_error_nonrepresentable_section);
14828 return FALSE;
14829 }
14830
14831 /* The linker script always combines .gptab.data and
14832 .gptab.sdata into .gptab.sdata, and likewise for
14833 .gptab.bss and .gptab.sbss. It is possible that there is
14834 no .sdata or .sbss section in the output file, in which
14835 case we must change the name of the output section. */
14836 subname = o->name + sizeof ".gptab" - 1;
14837 if (bfd_get_section_by_name (abfd, subname) == NULL)
14838 {
14839 if (o == gptab_data_sec)
14840 o->name = ".gptab.data";
14841 else
14842 o->name = ".gptab.bss";
14843 subname = o->name + sizeof ".gptab" - 1;
14844 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14845 }
14846
14847 /* Set up the first entry. */
14848 c = 1;
14849 amt = c * sizeof (Elf32_gptab);
14850 tab = bfd_malloc (amt);
14851 if (tab == NULL)
14852 return FALSE;
14853 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14854 tab[0].gt_header.gt_unused = 0;
14855
14856 /* Combine the input sections. */
14857 for (p = o->map_head.link_order; p != NULL; p = p->next)
14858 {
14859 asection *input_section;
14860 bfd *input_bfd;
14861 bfd_size_type size;
14862 unsigned long last;
14863 bfd_size_type gpentry;
14864
14865 if (p->type != bfd_indirect_link_order)
14866 {
14867 if (p->type == bfd_data_link_order)
14868 continue;
14869 abort ();
14870 }
14871
14872 input_section = p->u.indirect.section;
14873 input_bfd = input_section->owner;
14874
14875 /* Combine the gptab entries for this input section one
14876 by one. We know that the input gptab entries are
14877 sorted by ascending -G value. */
14878 size = input_section->size;
14879 last = 0;
14880 for (gpentry = sizeof (Elf32_External_gptab);
14881 gpentry < size;
14882 gpentry += sizeof (Elf32_External_gptab))
14883 {
14884 Elf32_External_gptab ext_gptab;
14885 Elf32_gptab int_gptab;
14886 unsigned long val;
14887 unsigned long add;
14888 bfd_boolean exact;
14889 unsigned int look;
14890
14891 if (! (bfd_get_section_contents
14892 (input_bfd, input_section, &ext_gptab, gpentry,
14893 sizeof (Elf32_External_gptab))))
14894 {
14895 free (tab);
14896 return FALSE;
14897 }
14898
14899 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14900 &int_gptab);
14901 val = int_gptab.gt_entry.gt_g_value;
14902 add = int_gptab.gt_entry.gt_bytes - last;
14903
14904 exact = FALSE;
14905 for (look = 1; look < c; look++)
14906 {
14907 if (tab[look].gt_entry.gt_g_value >= val)
14908 tab[look].gt_entry.gt_bytes += add;
14909
14910 if (tab[look].gt_entry.gt_g_value == val)
14911 exact = TRUE;
14912 }
14913
14914 if (! exact)
14915 {
14916 Elf32_gptab *new_tab;
14917 unsigned int max;
14918
14919 /* We need a new table entry. */
14920 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14921 new_tab = bfd_realloc (tab, amt);
14922 if (new_tab == NULL)
14923 {
14924 free (tab);
14925 return FALSE;
14926 }
14927 tab = new_tab;
14928 tab[c].gt_entry.gt_g_value = val;
14929 tab[c].gt_entry.gt_bytes = add;
14930
14931 /* Merge in the size for the next smallest -G
14932 value, since that will be implied by this new
14933 value. */
14934 max = 0;
14935 for (look = 1; look < c; look++)
14936 {
14937 if (tab[look].gt_entry.gt_g_value < val
14938 && (max == 0
14939 || (tab[look].gt_entry.gt_g_value
14940 > tab[max].gt_entry.gt_g_value)))
14941 max = look;
14942 }
14943 if (max != 0)
14944 tab[c].gt_entry.gt_bytes +=
14945 tab[max].gt_entry.gt_bytes;
14946
14947 ++c;
14948 }
14949
14950 last = int_gptab.gt_entry.gt_bytes;
14951 }
14952
14953 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14954 elf_link_input_bfd ignores this section. */
14955 input_section->flags &= ~SEC_HAS_CONTENTS;
14956 }
14957
14958 /* The table must be sorted by -G value. */
14959 if (c > 2)
14960 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14961
14962 /* Swap out the table. */
14963 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14964 ext_tab = bfd_alloc (abfd, amt);
14965 if (ext_tab == NULL)
14966 {
14967 free (tab);
14968 return FALSE;
14969 }
14970
14971 for (j = 0; j < c; j++)
14972 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14973 free (tab);
14974
14975 o->size = c * sizeof (Elf32_External_gptab);
14976 o->contents = (bfd_byte *) ext_tab;
14977
14978 /* Skip this section later on (I don't think this currently
14979 matters, but someday it might). */
14980 o->map_head.link_order = NULL;
14981 }
14982 }
14983
14984 /* Invoke the regular ELF backend linker to do all the work. */
14985 if (!bfd_elf_final_link (abfd, info))
14986 return FALSE;
14987
14988 /* Now write out the computed sections. */
14989
14990 if (abiflags_sec != NULL)
14991 {
14992 Elf_External_ABIFlags_v0 ext;
14993 Elf_Internal_ABIFlags_v0 *abiflags;
14994
14995 abiflags = &mips_elf_tdata (abfd)->abiflags;
14996
14997 /* Set up the abiflags if no valid input sections were found. */
14998 if (!mips_elf_tdata (abfd)->abiflags_valid)
14999 {
15000 infer_mips_abiflags (abfd, abiflags);
15001 mips_elf_tdata (abfd)->abiflags_valid = TRUE;
15002 }
15003 bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
15004 if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
15005 return FALSE;
15006 }
15007
15008 if (reginfo_sec != NULL)
15009 {
15010 Elf32_External_RegInfo ext;
15011
15012 bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
15013 if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
15014 return FALSE;
15015 }
15016
15017 if (mdebug_sec != NULL)
15018 {
15019 BFD_ASSERT (abfd->output_has_begun);
15020 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
15021 swap, info,
15022 mdebug_sec->filepos))
15023 return FALSE;
15024
15025 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
15026 }
15027
15028 if (gptab_data_sec != NULL)
15029 {
15030 if (! bfd_set_section_contents (abfd, gptab_data_sec,
15031 gptab_data_sec->contents,
15032 0, gptab_data_sec->size))
15033 return FALSE;
15034 }
15035
15036 if (gptab_bss_sec != NULL)
15037 {
15038 if (! bfd_set_section_contents (abfd, gptab_bss_sec,
15039 gptab_bss_sec->contents,
15040 0, gptab_bss_sec->size))
15041 return FALSE;
15042 }
15043
15044 if (SGI_COMPAT (abfd))
15045 {
15046 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
15047 if (rtproc_sec != NULL)
15048 {
15049 if (! bfd_set_section_contents (abfd, rtproc_sec,
15050 rtproc_sec->contents,
15051 0, rtproc_sec->size))
15052 return FALSE;
15053 }
15054 }
15055
15056 return TRUE;
15057 }
15058 \f
15059 /* Merge object file header flags from IBFD into OBFD. Raise an error
15060 if there are conflicting settings. */
15061
15062 static bfd_boolean
15063 mips_elf_merge_obj_e_flags (bfd *ibfd, bfd *obfd)
15064 {
15065 struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15066 flagword old_flags;
15067 flagword new_flags;
15068 bfd_boolean ok;
15069
15070 new_flags = elf_elfheader (ibfd)->e_flags;
15071 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
15072 old_flags = elf_elfheader (obfd)->e_flags;
15073
15074 /* Check flag compatibility. */
15075
15076 new_flags &= ~EF_MIPS_NOREORDER;
15077 old_flags &= ~EF_MIPS_NOREORDER;
15078
15079 /* Some IRIX 6 BSD-compatibility objects have this bit set. It
15080 doesn't seem to matter. */
15081 new_flags &= ~EF_MIPS_XGOT;
15082 old_flags &= ~EF_MIPS_XGOT;
15083
15084 /* MIPSpro generates ucode info in n64 objects. Again, we should
15085 just be able to ignore this. */
15086 new_flags &= ~EF_MIPS_UCODE;
15087 old_flags &= ~EF_MIPS_UCODE;
15088
15089 /* DSOs should only be linked with CPIC code. */
15090 if ((ibfd->flags & DYNAMIC) != 0)
15091 new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
15092
15093 if (new_flags == old_flags)
15094 return TRUE;
15095
15096 ok = TRUE;
15097
15098 if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
15099 != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
15100 {
15101 (*_bfd_error_handler)
15102 (_("%B: warning: linking abicalls files with non-abicalls files"),
15103 ibfd);
15104 ok = TRUE;
15105 }
15106
15107 if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
15108 elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
15109 if (! (new_flags & EF_MIPS_PIC))
15110 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
15111
15112 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15113 old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15114
15115 /* Compare the ISAs. */
15116 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
15117 {
15118 (*_bfd_error_handler)
15119 (_("%B: linking 32-bit code with 64-bit code"),
15120 ibfd);
15121 ok = FALSE;
15122 }
15123 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15124 {
15125 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */
15126 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
15127 {
15128 /* Copy the architecture info from IBFD to OBFD. Also copy
15129 the 32-bit flag (if set) so that we continue to recognise
15130 OBFD as a 32-bit binary. */
15131 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15132 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15133 elf_elfheader (obfd)->e_flags
15134 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15135
15136 /* Update the ABI flags isa_level, isa_rev, isa_ext fields. */
15137 update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15138
15139 /* Copy across the ABI flags if OBFD doesn't use them
15140 and if that was what caused us to treat IBFD as 32-bit. */
15141 if ((old_flags & EF_MIPS_ABI) == 0
15142 && mips_32bit_flags_p (new_flags)
15143 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15144 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15145 }
15146 else
15147 {
15148 /* The ISAs aren't compatible. */
15149 (*_bfd_error_handler)
15150 (_("%B: linking %s module with previous %s modules"),
15151 ibfd,
15152 bfd_printable_name (ibfd),
15153 bfd_printable_name (obfd));
15154 ok = FALSE;
15155 }
15156 }
15157
15158 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15159 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15160
15161 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it
15162 does set EI_CLASS differently from any 32-bit ABI. */
15163 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15164 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15165 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15166 {
15167 /* Only error if both are set (to different values). */
15168 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15169 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15170 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15171 {
15172 (*_bfd_error_handler)
15173 (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15174 ibfd,
15175 elf_mips_abi_name (ibfd),
15176 elf_mips_abi_name (obfd));
15177 ok = FALSE;
15178 }
15179 new_flags &= ~EF_MIPS_ABI;
15180 old_flags &= ~EF_MIPS_ABI;
15181 }
15182
15183 /* Compare ASEs. Forbid linking MIPS16 and microMIPS ASE modules together
15184 and allow arbitrary mixing of the remaining ASEs (retain the union). */
15185 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15186 {
15187 int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15188 int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15189 int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15190 int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15191 int micro_mis = old_m16 && new_micro;
15192 int m16_mis = old_micro && new_m16;
15193
15194 if (m16_mis || micro_mis)
15195 {
15196 (*_bfd_error_handler)
15197 (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15198 ibfd,
15199 m16_mis ? "MIPS16" : "microMIPS",
15200 m16_mis ? "microMIPS" : "MIPS16");
15201 ok = FALSE;
15202 }
15203
15204 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15205
15206 new_flags &= ~ EF_MIPS_ARCH_ASE;
15207 old_flags &= ~ EF_MIPS_ARCH_ASE;
15208 }
15209
15210 /* Compare NaN encodings. */
15211 if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15212 {
15213 _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15214 ibfd,
15215 (new_flags & EF_MIPS_NAN2008
15216 ? "-mnan=2008" : "-mnan=legacy"),
15217 (old_flags & EF_MIPS_NAN2008
15218 ? "-mnan=2008" : "-mnan=legacy"));
15219 ok = FALSE;
15220 new_flags &= ~EF_MIPS_NAN2008;
15221 old_flags &= ~EF_MIPS_NAN2008;
15222 }
15223
15224 /* Compare FP64 state. */
15225 if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15226 {
15227 _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15228 ibfd,
15229 (new_flags & EF_MIPS_FP64
15230 ? "-mfp64" : "-mfp32"),
15231 (old_flags & EF_MIPS_FP64
15232 ? "-mfp64" : "-mfp32"));
15233 ok = FALSE;
15234 new_flags &= ~EF_MIPS_FP64;
15235 old_flags &= ~EF_MIPS_FP64;
15236 }
15237
15238 /* Warn about any other mismatches */
15239 if (new_flags != old_flags)
15240 {
15241 (*_bfd_error_handler)
15242 (_("%B: uses different e_flags (0x%lx) fields than previous modules "
15243 "(0x%lx)"),
15244 ibfd, (unsigned long) new_flags,
15245 (unsigned long) old_flags);
15246 ok = FALSE;
15247 }
15248
15249 return ok;
15250 }
15251
15252 /* Merge object attributes from IBFD into OBFD. Raise an error if
15253 there are conflicting attributes. */
15254 static bfd_boolean
15255 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
15256 {
15257 obj_attribute *in_attr;
15258 obj_attribute *out_attr;
15259 bfd *abi_fp_bfd;
15260 bfd *abi_msa_bfd;
15261
15262 abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15263 in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15264 if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15265 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15266
15267 abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15268 if (!abi_msa_bfd
15269 && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15270 mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15271
15272 if (!elf_known_obj_attributes_proc (obfd)[0].i)
15273 {
15274 /* This is the first object. Copy the attributes. */
15275 _bfd_elf_copy_obj_attributes (ibfd, obfd);
15276
15277 /* Use the Tag_null value to indicate the attributes have been
15278 initialized. */
15279 elf_known_obj_attributes_proc (obfd)[0].i = 1;
15280
15281 return TRUE;
15282 }
15283
15284 /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15285 non-conflicting ones. */
15286 out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15287 if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15288 {
15289 int out_fp, in_fp;
15290
15291 out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15292 in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15293 out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15294 if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15295 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15296 else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15297 && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15298 || in_fp == Val_GNU_MIPS_ABI_FP_64
15299 || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15300 {
15301 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15302 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15303 }
15304 else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15305 && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15306 || out_fp == Val_GNU_MIPS_ABI_FP_64
15307 || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15308 /* Keep the current setting. */;
15309 else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15310 && in_fp == Val_GNU_MIPS_ABI_FP_64)
15311 {
15312 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15313 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15314 }
15315 else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15316 && out_fp == Val_GNU_MIPS_ABI_FP_64)
15317 /* Keep the current setting. */;
15318 else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15319 {
15320 const char *out_string, *in_string;
15321
15322 out_string = _bfd_mips_fp_abi_string (out_fp);
15323 in_string = _bfd_mips_fp_abi_string (in_fp);
15324 /* First warn about cases involving unrecognised ABIs. */
15325 if (!out_string && !in_string)
15326 _bfd_error_handler
15327 (_("Warning: %B uses unknown floating point ABI %d "
15328 "(set by %B), %B uses unknown floating point ABI %d"),
15329 obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
15330 else if (!out_string)
15331 _bfd_error_handler
15332 (_("Warning: %B uses unknown floating point ABI %d "
15333 "(set by %B), %B uses %s"),
15334 obfd, abi_fp_bfd, ibfd, out_fp, in_string);
15335 else if (!in_string)
15336 _bfd_error_handler
15337 (_("Warning: %B uses %s (set by %B), "
15338 "%B uses unknown floating point ABI %d"),
15339 obfd, abi_fp_bfd, ibfd, out_string, in_fp);
15340 else
15341 {
15342 /* If one of the bfds is soft-float, the other must be
15343 hard-float. The exact choice of hard-float ABI isn't
15344 really relevant to the error message. */
15345 if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15346 out_string = "-mhard-float";
15347 else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15348 in_string = "-mhard-float";
15349 _bfd_error_handler
15350 (_("Warning: %B uses %s (set by %B), %B uses %s"),
15351 obfd, abi_fp_bfd, ibfd, out_string, in_string);
15352 }
15353 }
15354 }
15355
15356 /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15357 non-conflicting ones. */
15358 if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15359 {
15360 out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15361 if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15362 out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15363 else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15364 switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15365 {
15366 case Val_GNU_MIPS_ABI_MSA_128:
15367 _bfd_error_handler
15368 (_("Warning: %B uses %s (set by %B), "
15369 "%B uses unknown MSA ABI %d"),
15370 obfd, abi_msa_bfd, ibfd,
15371 "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15372 break;
15373
15374 default:
15375 switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15376 {
15377 case Val_GNU_MIPS_ABI_MSA_128:
15378 _bfd_error_handler
15379 (_("Warning: %B uses unknown MSA ABI %d "
15380 "(set by %B), %B uses %s"),
15381 obfd, abi_msa_bfd, ibfd,
15382 out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15383 break;
15384
15385 default:
15386 _bfd_error_handler
15387 (_("Warning: %B uses unknown MSA ABI %d "
15388 "(set by %B), %B uses unknown MSA ABI %d"),
15389 obfd, abi_msa_bfd, ibfd,
15390 out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15391 in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15392 break;
15393 }
15394 }
15395 }
15396
15397 /* Merge Tag_compatibility attributes and any common GNU ones. */
15398 return _bfd_elf_merge_object_attributes (ibfd, obfd);
15399 }
15400
15401 /* Merge object ABI flags from IBFD into OBFD. Raise an error if
15402 there are conflicting settings. */
15403
15404 static bfd_boolean
15405 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15406 {
15407 obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15408 struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15409 struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15410
15411 /* Update the output abiflags fp_abi using the computed fp_abi. */
15412 out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15413
15414 #define max(a, b) ((a) > (b) ? (a) : (b))
15415 /* Merge abiflags. */
15416 out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15417 in_tdata->abiflags.isa_level);
15418 out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15419 in_tdata->abiflags.isa_rev);
15420 out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15421 in_tdata->abiflags.gpr_size);
15422 out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15423 in_tdata->abiflags.cpr1_size);
15424 out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15425 in_tdata->abiflags.cpr2_size);
15426 #undef max
15427 out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15428 out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15429
15430 return TRUE;
15431 }
15432
15433 /* Merge backend specific data from an object file to the output
15434 object file when linking. */
15435
15436 bfd_boolean
15437 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
15438 {
15439 struct mips_elf_obj_tdata *out_tdata;
15440 struct mips_elf_obj_tdata *in_tdata;
15441 bfd_boolean null_input_bfd = TRUE;
15442 asection *sec;
15443 bfd_boolean ok;
15444
15445 /* Check if we have the same endianness. */
15446 if (! _bfd_generic_verify_endian_match (ibfd, obfd))
15447 {
15448 (*_bfd_error_handler)
15449 (_("%B: endianness incompatible with that of the selected emulation"),
15450 ibfd);
15451 return FALSE;
15452 }
15453
15454 if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15455 return TRUE;
15456
15457 in_tdata = mips_elf_tdata (ibfd);
15458 out_tdata = mips_elf_tdata (obfd);
15459
15460 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15461 {
15462 (*_bfd_error_handler)
15463 (_("%B: ABI is incompatible with that of the selected emulation"),
15464 ibfd);
15465 return FALSE;
15466 }
15467
15468 /* Check to see if the input BFD actually contains any sections. If not,
15469 then it has no attributes, and its flags may not have been initialized
15470 either, but it cannot actually cause any incompatibility. */
15471 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15472 {
15473 /* Ignore synthetic sections and empty .text, .data and .bss sections
15474 which are automatically generated by gas. Also ignore fake
15475 (s)common sections, since merely defining a common symbol does
15476 not affect compatibility. */
15477 if ((sec->flags & SEC_IS_COMMON) == 0
15478 && strcmp (sec->name, ".reginfo")
15479 && strcmp (sec->name, ".mdebug")
15480 && (sec->size != 0
15481 || (strcmp (sec->name, ".text")
15482 && strcmp (sec->name, ".data")
15483 && strcmp (sec->name, ".bss"))))
15484 {
15485 null_input_bfd = FALSE;
15486 break;
15487 }
15488 }
15489 if (null_input_bfd)
15490 return TRUE;
15491
15492 /* Populate abiflags using existing information. */
15493 if (in_tdata->abiflags_valid)
15494 {
15495 obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15496 Elf_Internal_ABIFlags_v0 in_abiflags;
15497 Elf_Internal_ABIFlags_v0 abiflags;
15498
15499 /* Set up the FP ABI attribute from the abiflags if it is not already
15500 set. */
15501 if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15502 in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15503
15504 infer_mips_abiflags (ibfd, &abiflags);
15505 in_abiflags = in_tdata->abiflags;
15506
15507 /* It is not possible to infer the correct ISA revision
15508 for R3 or R5 so drop down to R2 for the checks. */
15509 if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15510 in_abiflags.isa_rev = 2;
15511
15512 if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15513 < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15514 (*_bfd_error_handler)
15515 (_("%B: warning: Inconsistent ISA between e_flags and "
15516 ".MIPS.abiflags"), ibfd);
15517 if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15518 && in_abiflags.fp_abi != abiflags.fp_abi)
15519 (*_bfd_error_handler)
15520 (_("%B: warning: Inconsistent FP ABI between .gnu.attributes and "
15521 ".MIPS.abiflags"), ibfd);
15522 if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15523 (*_bfd_error_handler)
15524 (_("%B: warning: Inconsistent ASEs between e_flags and "
15525 ".MIPS.abiflags"), ibfd);
15526 /* The isa_ext is allowed to be an extension of what can be inferred
15527 from e_flags. */
15528 if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15529 bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15530 (*_bfd_error_handler)
15531 (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15532 ".MIPS.abiflags"), ibfd);
15533 if (in_abiflags.flags2 != 0)
15534 (*_bfd_error_handler)
15535 (_("%B: warning: Unexpected flag in the flags2 field of "
15536 ".MIPS.abiflags (0x%lx)"), ibfd,
15537 (unsigned long) in_abiflags.flags2);
15538 }
15539 else
15540 {
15541 infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15542 in_tdata->abiflags_valid = TRUE;
15543 }
15544
15545 if (!out_tdata->abiflags_valid)
15546 {
15547 /* Copy input abiflags if output abiflags are not already valid. */
15548 out_tdata->abiflags = in_tdata->abiflags;
15549 out_tdata->abiflags_valid = TRUE;
15550 }
15551
15552 if (! elf_flags_init (obfd))
15553 {
15554 elf_flags_init (obfd) = TRUE;
15555 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15556 elf_elfheader (obfd)->e_ident[EI_CLASS]
15557 = elf_elfheader (ibfd)->e_ident[EI_CLASS];
15558
15559 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15560 && (bfd_get_arch_info (obfd)->the_default
15561 || mips_mach_extends_p (bfd_get_mach (obfd),
15562 bfd_get_mach (ibfd))))
15563 {
15564 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15565 bfd_get_mach (ibfd)))
15566 return FALSE;
15567
15568 /* Update the ABI flags isa_level, isa_rev and isa_ext fields. */
15569 update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15570 }
15571
15572 ok = TRUE;
15573 }
15574 else
15575 ok = mips_elf_merge_obj_e_flags (ibfd, obfd);
15576
15577 ok = mips_elf_merge_obj_attributes (ibfd, obfd) && ok;
15578
15579 ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15580
15581 if (!ok)
15582 {
15583 bfd_set_error (bfd_error_bad_value);
15584 return FALSE;
15585 }
15586
15587 return TRUE;
15588 }
15589
15590 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
15591
15592 bfd_boolean
15593 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15594 {
15595 BFD_ASSERT (!elf_flags_init (abfd)
15596 || elf_elfheader (abfd)->e_flags == flags);
15597
15598 elf_elfheader (abfd)->e_flags = flags;
15599 elf_flags_init (abfd) = TRUE;
15600 return TRUE;
15601 }
15602
15603 char *
15604 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15605 {
15606 switch (dtag)
15607 {
15608 default: return "";
15609 case DT_MIPS_RLD_VERSION:
15610 return "MIPS_RLD_VERSION";
15611 case DT_MIPS_TIME_STAMP:
15612 return "MIPS_TIME_STAMP";
15613 case DT_MIPS_ICHECKSUM:
15614 return "MIPS_ICHECKSUM";
15615 case DT_MIPS_IVERSION:
15616 return "MIPS_IVERSION";
15617 case DT_MIPS_FLAGS:
15618 return "MIPS_FLAGS";
15619 case DT_MIPS_BASE_ADDRESS:
15620 return "MIPS_BASE_ADDRESS";
15621 case DT_MIPS_MSYM:
15622 return "MIPS_MSYM";
15623 case DT_MIPS_CONFLICT:
15624 return "MIPS_CONFLICT";
15625 case DT_MIPS_LIBLIST:
15626 return "MIPS_LIBLIST";
15627 case DT_MIPS_LOCAL_GOTNO:
15628 return "MIPS_LOCAL_GOTNO";
15629 case DT_MIPS_CONFLICTNO:
15630 return "MIPS_CONFLICTNO";
15631 case DT_MIPS_LIBLISTNO:
15632 return "MIPS_LIBLISTNO";
15633 case DT_MIPS_SYMTABNO:
15634 return "MIPS_SYMTABNO";
15635 case DT_MIPS_UNREFEXTNO:
15636 return "MIPS_UNREFEXTNO";
15637 case DT_MIPS_GOTSYM:
15638 return "MIPS_GOTSYM";
15639 case DT_MIPS_HIPAGENO:
15640 return "MIPS_HIPAGENO";
15641 case DT_MIPS_RLD_MAP:
15642 return "MIPS_RLD_MAP";
15643 case DT_MIPS_RLD_MAP_REL:
15644 return "MIPS_RLD_MAP_REL";
15645 case DT_MIPS_DELTA_CLASS:
15646 return "MIPS_DELTA_CLASS";
15647 case DT_MIPS_DELTA_CLASS_NO:
15648 return "MIPS_DELTA_CLASS_NO";
15649 case DT_MIPS_DELTA_INSTANCE:
15650 return "MIPS_DELTA_INSTANCE";
15651 case DT_MIPS_DELTA_INSTANCE_NO:
15652 return "MIPS_DELTA_INSTANCE_NO";
15653 case DT_MIPS_DELTA_RELOC:
15654 return "MIPS_DELTA_RELOC";
15655 case DT_MIPS_DELTA_RELOC_NO:
15656 return "MIPS_DELTA_RELOC_NO";
15657 case DT_MIPS_DELTA_SYM:
15658 return "MIPS_DELTA_SYM";
15659 case DT_MIPS_DELTA_SYM_NO:
15660 return "MIPS_DELTA_SYM_NO";
15661 case DT_MIPS_DELTA_CLASSSYM:
15662 return "MIPS_DELTA_CLASSSYM";
15663 case DT_MIPS_DELTA_CLASSSYM_NO:
15664 return "MIPS_DELTA_CLASSSYM_NO";
15665 case DT_MIPS_CXX_FLAGS:
15666 return "MIPS_CXX_FLAGS";
15667 case DT_MIPS_PIXIE_INIT:
15668 return "MIPS_PIXIE_INIT";
15669 case DT_MIPS_SYMBOL_LIB:
15670 return "MIPS_SYMBOL_LIB";
15671 case DT_MIPS_LOCALPAGE_GOTIDX:
15672 return "MIPS_LOCALPAGE_GOTIDX";
15673 case DT_MIPS_LOCAL_GOTIDX:
15674 return "MIPS_LOCAL_GOTIDX";
15675 case DT_MIPS_HIDDEN_GOTIDX:
15676 return "MIPS_HIDDEN_GOTIDX";
15677 case DT_MIPS_PROTECTED_GOTIDX:
15678 return "MIPS_PROTECTED_GOT_IDX";
15679 case DT_MIPS_OPTIONS:
15680 return "MIPS_OPTIONS";
15681 case DT_MIPS_INTERFACE:
15682 return "MIPS_INTERFACE";
15683 case DT_MIPS_DYNSTR_ALIGN:
15684 return "DT_MIPS_DYNSTR_ALIGN";
15685 case DT_MIPS_INTERFACE_SIZE:
15686 return "DT_MIPS_INTERFACE_SIZE";
15687 case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15688 return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15689 case DT_MIPS_PERF_SUFFIX:
15690 return "DT_MIPS_PERF_SUFFIX";
15691 case DT_MIPS_COMPACT_SIZE:
15692 return "DT_MIPS_COMPACT_SIZE";
15693 case DT_MIPS_GP_VALUE:
15694 return "DT_MIPS_GP_VALUE";
15695 case DT_MIPS_AUX_DYNAMIC:
15696 return "DT_MIPS_AUX_DYNAMIC";
15697 case DT_MIPS_PLTGOT:
15698 return "DT_MIPS_PLTGOT";
15699 case DT_MIPS_RWPLT:
15700 return "DT_MIPS_RWPLT";
15701 }
15702 }
15703
15704 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15705 not known. */
15706
15707 const char *
15708 _bfd_mips_fp_abi_string (int fp)
15709 {
15710 switch (fp)
15711 {
15712 /* These strings aren't translated because they're simply
15713 option lists. */
15714 case Val_GNU_MIPS_ABI_FP_DOUBLE:
15715 return "-mdouble-float";
15716
15717 case Val_GNU_MIPS_ABI_FP_SINGLE:
15718 return "-msingle-float";
15719
15720 case Val_GNU_MIPS_ABI_FP_SOFT:
15721 return "-msoft-float";
15722
15723 case Val_GNU_MIPS_ABI_FP_OLD_64:
15724 return _("-mips32r2 -mfp64 (12 callee-saved)");
15725
15726 case Val_GNU_MIPS_ABI_FP_XX:
15727 return "-mfpxx";
15728
15729 case Val_GNU_MIPS_ABI_FP_64:
15730 return "-mgp32 -mfp64";
15731
15732 case Val_GNU_MIPS_ABI_FP_64A:
15733 return "-mgp32 -mfp64 -mno-odd-spreg";
15734
15735 default:
15736 return 0;
15737 }
15738 }
15739
15740 static void
15741 print_mips_ases (FILE *file, unsigned int mask)
15742 {
15743 if (mask & AFL_ASE_DSP)
15744 fputs ("\n\tDSP ASE", file);
15745 if (mask & AFL_ASE_DSPR2)
15746 fputs ("\n\tDSP R2 ASE", file);
15747 if (mask & AFL_ASE_DSPR3)
15748 fputs ("\n\tDSP R3 ASE", file);
15749 if (mask & AFL_ASE_EVA)
15750 fputs ("\n\tEnhanced VA Scheme", file);
15751 if (mask & AFL_ASE_MCU)
15752 fputs ("\n\tMCU (MicroController) ASE", file);
15753 if (mask & AFL_ASE_MDMX)
15754 fputs ("\n\tMDMX ASE", file);
15755 if (mask & AFL_ASE_MIPS3D)
15756 fputs ("\n\tMIPS-3D ASE", file);
15757 if (mask & AFL_ASE_MT)
15758 fputs ("\n\tMT ASE", file);
15759 if (mask & AFL_ASE_SMARTMIPS)
15760 fputs ("\n\tSmartMIPS ASE", file);
15761 if (mask & AFL_ASE_VIRT)
15762 fputs ("\n\tVZ ASE", file);
15763 if (mask & AFL_ASE_MSA)
15764 fputs ("\n\tMSA ASE", file);
15765 if (mask & AFL_ASE_MIPS16)
15766 fputs ("\n\tMIPS16 ASE", file);
15767 if (mask & AFL_ASE_MICROMIPS)
15768 fputs ("\n\tMICROMIPS ASE", file);
15769 if (mask & AFL_ASE_XPA)
15770 fputs ("\n\tXPA ASE", file);
15771 if (mask == 0)
15772 fprintf (file, "\n\t%s", _("None"));
15773 else if ((mask & ~AFL_ASE_MASK) != 0)
15774 fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15775 }
15776
15777 static void
15778 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15779 {
15780 switch (isa_ext)
15781 {
15782 case 0:
15783 fputs (_("None"), file);
15784 break;
15785 case AFL_EXT_XLR:
15786 fputs ("RMI XLR", file);
15787 break;
15788 case AFL_EXT_OCTEON3:
15789 fputs ("Cavium Networks Octeon3", file);
15790 break;
15791 case AFL_EXT_OCTEON2:
15792 fputs ("Cavium Networks Octeon2", file);
15793 break;
15794 case AFL_EXT_OCTEONP:
15795 fputs ("Cavium Networks OcteonP", file);
15796 break;
15797 case AFL_EXT_LOONGSON_3A:
15798 fputs ("Loongson 3A", file);
15799 break;
15800 case AFL_EXT_OCTEON:
15801 fputs ("Cavium Networks Octeon", file);
15802 break;
15803 case AFL_EXT_5900:
15804 fputs ("Toshiba R5900", file);
15805 break;
15806 case AFL_EXT_4650:
15807 fputs ("MIPS R4650", file);
15808 break;
15809 case AFL_EXT_4010:
15810 fputs ("LSI R4010", file);
15811 break;
15812 case AFL_EXT_4100:
15813 fputs ("NEC VR4100", file);
15814 break;
15815 case AFL_EXT_3900:
15816 fputs ("Toshiba R3900", file);
15817 break;
15818 case AFL_EXT_10000:
15819 fputs ("MIPS R10000", file);
15820 break;
15821 case AFL_EXT_SB1:
15822 fputs ("Broadcom SB-1", file);
15823 break;
15824 case AFL_EXT_4111:
15825 fputs ("NEC VR4111/VR4181", file);
15826 break;
15827 case AFL_EXT_4120:
15828 fputs ("NEC VR4120", file);
15829 break;
15830 case AFL_EXT_5400:
15831 fputs ("NEC VR5400", file);
15832 break;
15833 case AFL_EXT_5500:
15834 fputs ("NEC VR5500", file);
15835 break;
15836 case AFL_EXT_LOONGSON_2E:
15837 fputs ("ST Microelectronics Loongson 2E", file);
15838 break;
15839 case AFL_EXT_LOONGSON_2F:
15840 fputs ("ST Microelectronics Loongson 2F", file);
15841 break;
15842 default:
15843 fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15844 break;
15845 }
15846 }
15847
15848 static void
15849 print_mips_fp_abi_value (FILE *file, int val)
15850 {
15851 switch (val)
15852 {
15853 case Val_GNU_MIPS_ABI_FP_ANY:
15854 fprintf (file, _("Hard or soft float\n"));
15855 break;
15856 case Val_GNU_MIPS_ABI_FP_DOUBLE:
15857 fprintf (file, _("Hard float (double precision)\n"));
15858 break;
15859 case Val_GNU_MIPS_ABI_FP_SINGLE:
15860 fprintf (file, _("Hard float (single precision)\n"));
15861 break;
15862 case Val_GNU_MIPS_ABI_FP_SOFT:
15863 fprintf (file, _("Soft float\n"));
15864 break;
15865 case Val_GNU_MIPS_ABI_FP_OLD_64:
15866 fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15867 break;
15868 case Val_GNU_MIPS_ABI_FP_XX:
15869 fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15870 break;
15871 case Val_GNU_MIPS_ABI_FP_64:
15872 fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15873 break;
15874 case Val_GNU_MIPS_ABI_FP_64A:
15875 fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15876 break;
15877 default:
15878 fprintf (file, "??? (%d)\n", val);
15879 break;
15880 }
15881 }
15882
15883 static int
15884 get_mips_reg_size (int reg_size)
15885 {
15886 return (reg_size == AFL_REG_NONE) ? 0
15887 : (reg_size == AFL_REG_32) ? 32
15888 : (reg_size == AFL_REG_64) ? 64
15889 : (reg_size == AFL_REG_128) ? 128
15890 : -1;
15891 }
15892
15893 bfd_boolean
15894 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15895 {
15896 FILE *file = ptr;
15897
15898 BFD_ASSERT (abfd != NULL && ptr != NULL);
15899
15900 /* Print normal ELF private data. */
15901 _bfd_elf_print_private_bfd_data (abfd, ptr);
15902
15903 /* xgettext:c-format */
15904 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15905
15906 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15907 fprintf (file, _(" [abi=O32]"));
15908 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15909 fprintf (file, _(" [abi=O64]"));
15910 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15911 fprintf (file, _(" [abi=EABI32]"));
15912 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15913 fprintf (file, _(" [abi=EABI64]"));
15914 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15915 fprintf (file, _(" [abi unknown]"));
15916 else if (ABI_N32_P (abfd))
15917 fprintf (file, _(" [abi=N32]"));
15918 else if (ABI_64_P (abfd))
15919 fprintf (file, _(" [abi=64]"));
15920 else
15921 fprintf (file, _(" [no abi set]"));
15922
15923 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15924 fprintf (file, " [mips1]");
15925 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15926 fprintf (file, " [mips2]");
15927 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15928 fprintf (file, " [mips3]");
15929 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15930 fprintf (file, " [mips4]");
15931 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15932 fprintf (file, " [mips5]");
15933 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15934 fprintf (file, " [mips32]");
15935 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15936 fprintf (file, " [mips64]");
15937 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15938 fprintf (file, " [mips32r2]");
15939 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15940 fprintf (file, " [mips64r2]");
15941 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15942 fprintf (file, " [mips32r6]");
15943 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15944 fprintf (file, " [mips64r6]");
15945 else
15946 fprintf (file, _(" [unknown ISA]"));
15947
15948 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15949 fprintf (file, " [mdmx]");
15950
15951 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15952 fprintf (file, " [mips16]");
15953
15954 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15955 fprintf (file, " [micromips]");
15956
15957 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15958 fprintf (file, " [nan2008]");
15959
15960 if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15961 fprintf (file, " [old fp64]");
15962
15963 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15964 fprintf (file, " [32bitmode]");
15965 else
15966 fprintf (file, _(" [not 32bitmode]"));
15967
15968 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
15969 fprintf (file, " [noreorder]");
15970
15971 if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
15972 fprintf (file, " [PIC]");
15973
15974 if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
15975 fprintf (file, " [CPIC]");
15976
15977 if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
15978 fprintf (file, " [XGOT]");
15979
15980 if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
15981 fprintf (file, " [UCODE]");
15982
15983 fputc ('\n', file);
15984
15985 if (mips_elf_tdata (abfd)->abiflags_valid)
15986 {
15987 Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15988 fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15989 fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15990 if (abiflags->isa_rev > 1)
15991 fprintf (file, "r%d", abiflags->isa_rev);
15992 fprintf (file, "\nGPR size: %d",
15993 get_mips_reg_size (abiflags->gpr_size));
15994 fprintf (file, "\nCPR1 size: %d",
15995 get_mips_reg_size (abiflags->cpr1_size));
15996 fprintf (file, "\nCPR2 size: %d",
15997 get_mips_reg_size (abiflags->cpr2_size));
15998 fputs ("\nFP ABI: ", file);
15999 print_mips_fp_abi_value (file, abiflags->fp_abi);
16000 fputs ("ISA Extension: ", file);
16001 print_mips_isa_ext (file, abiflags->isa_ext);
16002 fputs ("\nASEs:", file);
16003 print_mips_ases (file, abiflags->ases);
16004 fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
16005 fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
16006 fputc ('\n', file);
16007 }
16008
16009 return TRUE;
16010 }
16011
16012 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
16013 {
16014 { STRING_COMMA_LEN (".lit4"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16015 { STRING_COMMA_LEN (".lit8"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16016 { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
16017 { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16018 { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16019 { STRING_COMMA_LEN (".ucode"), 0, SHT_MIPS_UCODE, 0 },
16020 { NULL, 0, 0, 0, 0 }
16021 };
16022
16023 /* Merge non visibility st_other attributes. Ensure that the
16024 STO_OPTIONAL flag is copied into h->other, even if this is not a
16025 definiton of the symbol. */
16026 void
16027 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
16028 const Elf_Internal_Sym *isym,
16029 bfd_boolean definition,
16030 bfd_boolean dynamic ATTRIBUTE_UNUSED)
16031 {
16032 if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
16033 {
16034 unsigned char other;
16035
16036 other = (definition ? isym->st_other : h->other);
16037 other &= ~ELF_ST_VISIBILITY (-1);
16038 h->other = other | ELF_ST_VISIBILITY (h->other);
16039 }
16040
16041 if (!definition
16042 && ELF_MIPS_IS_OPTIONAL (isym->st_other))
16043 h->other |= STO_OPTIONAL;
16044 }
16045
16046 /* Decide whether an undefined symbol is special and can be ignored.
16047 This is the case for OPTIONAL symbols on IRIX. */
16048 bfd_boolean
16049 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
16050 {
16051 return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
16052 }
16053
16054 bfd_boolean
16055 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
16056 {
16057 return (sym->st_shndx == SHN_COMMON
16058 || sym->st_shndx == SHN_MIPS_ACOMMON
16059 || sym->st_shndx == SHN_MIPS_SCOMMON);
16060 }
16061
16062 /* Return address for Ith PLT stub in section PLT, for relocation REL
16063 or (bfd_vma) -1 if it should not be included. */
16064
16065 bfd_vma
16066 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
16067 const arelent *rel ATTRIBUTE_UNUSED)
16068 {
16069 return (plt->vma
16070 + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
16071 + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
16072 }
16073
16074 /* Build a table of synthetic symbols to represent the PLT. As with MIPS16
16075 and microMIPS PLT slots we may have a many-to-one mapping between .plt
16076 and .got.plt and also the slots may be of a different size each we walk
16077 the PLT manually fetching instructions and matching them against known
16078 patterns. To make things easier standard MIPS slots, if any, always come
16079 first. As we don't create proper ELF symbols we use the UDATA.I member
16080 of ASYMBOL to carry ISA annotation. The encoding used is the same as
16081 with the ST_OTHER member of the ELF symbol. */
16082
16083 long
16084 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
16085 long symcount ATTRIBUTE_UNUSED,
16086 asymbol **syms ATTRIBUTE_UNUSED,
16087 long dynsymcount, asymbol **dynsyms,
16088 asymbol **ret)
16089 {
16090 static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
16091 static const char microsuffix[] = "@micromipsplt";
16092 static const char m16suffix[] = "@mips16plt";
16093 static const char mipssuffix[] = "@plt";
16094
16095 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
16096 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
16097 bfd_boolean micromips_p = MICROMIPS_P (abfd);
16098 Elf_Internal_Shdr *hdr;
16099 bfd_byte *plt_data;
16100 bfd_vma plt_offset;
16101 unsigned int other;
16102 bfd_vma entry_size;
16103 bfd_vma plt0_size;
16104 asection *relplt;
16105 bfd_vma opcode;
16106 asection *plt;
16107 asymbol *send;
16108 size_t size;
16109 char *names;
16110 long counti;
16111 arelent *p;
16112 asymbol *s;
16113 char *nend;
16114 long count;
16115 long pi;
16116 long i;
16117 long n;
16118
16119 *ret = NULL;
16120
16121 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
16122 return 0;
16123
16124 relplt = bfd_get_section_by_name (abfd, ".rel.plt");
16125 if (relplt == NULL)
16126 return 0;
16127
16128 hdr = &elf_section_data (relplt)->this_hdr;
16129 if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
16130 return 0;
16131
16132 plt = bfd_get_section_by_name (abfd, ".plt");
16133 if (plt == NULL)
16134 return 0;
16135
16136 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
16137 if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
16138 return -1;
16139 p = relplt->relocation;
16140
16141 /* Calculating the exact amount of space required for symbols would
16142 require two passes over the PLT, so just pessimise assuming two
16143 PLT slots per relocation. */
16144 count = relplt->size / hdr->sh_entsize;
16145 counti = count * bed->s->int_rels_per_ext_rel;
16146 size = 2 * count * sizeof (asymbol);
16147 size += count * (sizeof (mipssuffix) +
16148 (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16149 for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16150 size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16151
16152 /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too. */
16153 size += sizeof (asymbol) + sizeof (pltname);
16154
16155 if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16156 return -1;
16157
16158 if (plt->size < 16)
16159 return -1;
16160
16161 s = *ret = bfd_malloc (size);
16162 if (s == NULL)
16163 return -1;
16164 send = s + 2 * count + 1;
16165
16166 names = (char *) send;
16167 nend = (char *) s + size;
16168 n = 0;
16169
16170 opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16171 if (opcode == 0x3302fffe)
16172 {
16173 if (!micromips_p)
16174 return -1;
16175 plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16176 other = STO_MICROMIPS;
16177 }
16178 else if (opcode == 0x0398c1d0)
16179 {
16180 if (!micromips_p)
16181 return -1;
16182 plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16183 other = STO_MICROMIPS;
16184 }
16185 else
16186 {
16187 plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16188 other = 0;
16189 }
16190
16191 s->the_bfd = abfd;
16192 s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16193 s->section = plt;
16194 s->value = 0;
16195 s->name = names;
16196 s->udata.i = other;
16197 memcpy (names, pltname, sizeof (pltname));
16198 names += sizeof (pltname);
16199 ++s, ++n;
16200
16201 pi = 0;
16202 for (plt_offset = plt0_size;
16203 plt_offset + 8 <= plt->size && s < send;
16204 plt_offset += entry_size)
16205 {
16206 bfd_vma gotplt_addr;
16207 const char *suffix;
16208 bfd_vma gotplt_hi;
16209 bfd_vma gotplt_lo;
16210 size_t suffixlen;
16211
16212 opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16213
16214 /* Check if the second word matches the expected MIPS16 instruction. */
16215 if (opcode == 0x651aeb00)
16216 {
16217 if (micromips_p)
16218 return -1;
16219 /* Truncated table??? */
16220 if (plt_offset + 16 > plt->size)
16221 break;
16222 gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16223 entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16224 suffixlen = sizeof (m16suffix);
16225 suffix = m16suffix;
16226 other = STO_MIPS16;
16227 }
16228 /* Likewise the expected microMIPS instruction (no insn32 mode). */
16229 else if (opcode == 0xff220000)
16230 {
16231 if (!micromips_p)
16232 return -1;
16233 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16234 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16235 gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16236 gotplt_lo <<= 2;
16237 gotplt_addr = gotplt_hi + gotplt_lo;
16238 gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16239 entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16240 suffixlen = sizeof (microsuffix);
16241 suffix = microsuffix;
16242 other = STO_MICROMIPS;
16243 }
16244 /* Likewise the expected microMIPS instruction (insn32 mode). */
16245 else if ((opcode & 0xffff0000) == 0xff2f0000)
16246 {
16247 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16248 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16249 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16250 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16251 gotplt_addr = gotplt_hi + gotplt_lo;
16252 entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16253 suffixlen = sizeof (microsuffix);
16254 suffix = microsuffix;
16255 other = STO_MICROMIPS;
16256 }
16257 /* Otherwise assume standard MIPS code. */
16258 else
16259 {
16260 gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16261 gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16262 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16263 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16264 gotplt_addr = gotplt_hi + gotplt_lo;
16265 entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16266 suffixlen = sizeof (mipssuffix);
16267 suffix = mipssuffix;
16268 other = 0;
16269 }
16270 /* Truncated table??? */
16271 if (plt_offset + entry_size > plt->size)
16272 break;
16273
16274 for (i = 0;
16275 i < count && p[pi].address != gotplt_addr;
16276 i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16277
16278 if (i < count)
16279 {
16280 size_t namelen;
16281 size_t len;
16282
16283 *s = **p[pi].sym_ptr_ptr;
16284 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
16285 we are defining a symbol, ensure one of them is set. */
16286 if ((s->flags & BSF_LOCAL) == 0)
16287 s->flags |= BSF_GLOBAL;
16288 s->flags |= BSF_SYNTHETIC;
16289 s->section = plt;
16290 s->value = plt_offset;
16291 s->name = names;
16292 s->udata.i = other;
16293
16294 len = strlen ((*p[pi].sym_ptr_ptr)->name);
16295 namelen = len + suffixlen;
16296 if (names + namelen > nend)
16297 break;
16298
16299 memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16300 names += len;
16301 memcpy (names, suffix, suffixlen);
16302 names += suffixlen;
16303
16304 ++s, ++n;
16305 pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16306 }
16307 }
16308
16309 free (plt_data);
16310
16311 return n;
16312 }
16313
16314 void
16315 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16316 {
16317 struct mips_elf_link_hash_table *htab;
16318 Elf_Internal_Ehdr *i_ehdrp;
16319
16320 i_ehdrp = elf_elfheader (abfd);
16321 if (link_info)
16322 {
16323 htab = mips_elf_hash_table (link_info);
16324 BFD_ASSERT (htab != NULL);
16325
16326 if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16327 i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16328 }
16329
16330 _bfd_elf_post_process_headers (abfd, link_info);
16331
16332 if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16333 || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16334 i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16335
16336 if (elf_stack_flags (abfd) && !(elf_stack_flags (abfd) & PF_X))
16337 i_ehdrp->e_ident[EI_ABIVERSION] = 5;
16338 }
16339
16340 int
16341 _bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16342 {
16343 return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16344 }
16345
16346 /* Return the opcode for can't unwind. */
16347
16348 int
16349 _bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16350 {
16351 return COMPACT_EH_CANT_UNWIND_OPCODE;
16352 }
This page took 0.4649 seconds and 5 git commands to generate.