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 
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 
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 
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 
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 
1189 /* microMIPS 32-bit opcode helper installer.  */
1190 
1191 static void
bfd_put_micromips_32(const bfd * abfd,bfd_vma opcode,bfd_byte * ptr)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
bfd_get_micromips_32(const bfd * abfd,const bfd_byte * ptr)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 
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
dtprel_base(struct bfd_link_info * info)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
tprel_base(struct bfd_link_info * info)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 *
mips_elf_link_hash_newfunc(struct bfd_hash_entry * entry,struct bfd_hash_table * table,const char * string)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
_bfd_mips_elf_mkobject(bfd * abfd)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
_bfd_mips_elf_new_section_hook(bfd * abfd,asection * sec)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 
1317 /* Read ECOFF debugging information from a .mdebug section into a
1318    ecoff_debug_info structure.  */
1319 
1320 bfd_boolean
_bfd_mips_elf_read_ecoff_info(bfd * abfd,asection * section,struct ecoff_debug_info * debug)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 
1404 /* Swap RPDR (runtime procedure table entry) for output.  */
1405 
1406 static void
ecoff_swap_rpdr_out(bfd * abfd,const RPDR * in,struct rpdr_ext * ex)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
mips_elf_create_procedure_table(void * handle,bfd * abfd,struct bfd_link_info * info,asection * s,struct ecoff_debug_info * debug)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 
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
mips_elf_create_stub_symbol(struct bfd_link_info * info,struct mips_elf_link_hash_entry * h,const char * prefix,asection * s,bfd_vma value,bfd_vma size)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   struct bfd_link_hash_entry *bh;
1582   struct elf_link_hash_entry *elfh;
1583   char *name;
1584   bfd_boolean res;
1585 
1586   if (ELF_ST_IS_MICROMIPS (h->root.other))
1587     value |= 1;
1588 
1589   /* Create a new symbol.  */
1590   name = concat (prefix, h->root.root.root.string, NULL);
1591   bh = NULL;
1592   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1593 					  BSF_LOCAL, s, value, NULL,
1594 					  TRUE, FALSE, &bh);
1595   free (name);
1596   if (! res)
1597     return FALSE;
1598 
1599   /* Make it a local function.  */
1600   elfh = (struct elf_link_hash_entry *) bh;
1601   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1602   elfh->size = size;
1603   elfh->forced_local = 1;
1604   return TRUE;
1605 }
1606 
1607 /* We're about to redefine H.  Create a symbol to represent H's
1608    current value and size, to help make the disassembly easier
1609    to read.  */
1610 
1611 static bfd_boolean
mips_elf_create_shadow_symbol(struct bfd_link_info * info,struct mips_elf_link_hash_entry * h,const char * prefix)1612 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1613 			       struct mips_elf_link_hash_entry *h,
1614 			       const char *prefix)
1615 {
1616   struct bfd_link_hash_entry *bh;
1617   struct elf_link_hash_entry *elfh;
1618   char *name;
1619   asection *s;
1620   bfd_vma value;
1621   bfd_boolean res;
1622 
1623   /* Read the symbol's value.  */
1624   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1625 	      || h->root.root.type == bfd_link_hash_defweak);
1626   s = h->root.root.u.def.section;
1627   value = h->root.root.u.def.value;
1628 
1629   /* Create a new symbol.  */
1630   name = concat (prefix, h->root.root.root.string, NULL);
1631   bh = NULL;
1632   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1633 					  BSF_LOCAL, s, value, NULL,
1634 					  TRUE, FALSE, &bh);
1635   free (name);
1636   if (! res)
1637     return FALSE;
1638 
1639   /* Make it local and copy the other attributes from H.  */
1640   elfh = (struct elf_link_hash_entry *) bh;
1641   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1642   elfh->other = h->root.other;
1643   elfh->size = h->root.size;
1644   elfh->forced_local = 1;
1645   return TRUE;
1646 }
1647 
1648 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1649    function rather than to a hard-float stub.  */
1650 
1651 static bfd_boolean
section_allows_mips16_refs_p(asection * section)1652 section_allows_mips16_refs_p (asection *section)
1653 {
1654   const char *name;
1655 
1656   name = bfd_get_section_name (section->owner, section);
1657   return (FN_STUB_P (name)
1658 	  || CALL_STUB_P (name)
1659 	  || CALL_FP_STUB_P (name)
1660 	  || strcmp (name, ".pdr") == 0);
1661 }
1662 
1663 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1664    stub section of some kind.  Return the R_SYMNDX of the target
1665    function, or 0 if we can't decide which function that is.  */
1666 
1667 static unsigned long
mips16_stub_symndx(const struct elf_backend_data * bed,asection * sec ATTRIBUTE_UNUSED,const Elf_Internal_Rela * relocs,const Elf_Internal_Rela * relend)1668 mips16_stub_symndx (const struct elf_backend_data *bed,
1669 		    asection *sec ATTRIBUTE_UNUSED,
1670 		    const Elf_Internal_Rela *relocs,
1671 		    const Elf_Internal_Rela *relend)
1672 {
1673   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1674   const Elf_Internal_Rela *rel;
1675 
1676   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1677      one in a compound relocation.  */
1678   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1679     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1680       return ELF_R_SYM (sec->owner, rel->r_info);
1681 
1682   /* Otherwise trust the first relocation, whatever its kind.  This is
1683      the traditional behavior.  */
1684   if (relocs < relend)
1685     return ELF_R_SYM (sec->owner, relocs->r_info);
1686 
1687   return 0;
1688 }
1689 
1690 /* Check the mips16 stubs for a particular symbol, and see if we can
1691    discard them.  */
1692 
1693 static void
mips_elf_check_mips16_stubs(struct bfd_link_info * info,struct mips_elf_link_hash_entry * h)1694 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1695 			     struct mips_elf_link_hash_entry *h)
1696 {
1697   /* Dynamic symbols must use the standard call interface, in case other
1698      objects try to call them.  */
1699   if (h->fn_stub != NULL
1700       && h->root.dynindx != -1)
1701     {
1702       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1703       h->need_fn_stub = TRUE;
1704     }
1705 
1706   if (h->fn_stub != NULL
1707       && ! h->need_fn_stub)
1708     {
1709       /* We don't need the fn_stub; the only references to this symbol
1710          are 16 bit calls.  Clobber the size to 0 to prevent it from
1711          being included in the link.  */
1712       h->fn_stub->size = 0;
1713       h->fn_stub->flags &= ~SEC_RELOC;
1714       h->fn_stub->reloc_count = 0;
1715       h->fn_stub->flags |= SEC_EXCLUDE;
1716       h->fn_stub->output_section = bfd_abs_section_ptr;
1717     }
1718 
1719   if (h->call_stub != NULL
1720       && ELF_ST_IS_MIPS16 (h->root.other))
1721     {
1722       /* We don't need the call_stub; this is a 16 bit function, so
1723          calls from other 16 bit functions are OK.  Clobber the size
1724          to 0 to prevent it from being included in the link.  */
1725       h->call_stub->size = 0;
1726       h->call_stub->flags &= ~SEC_RELOC;
1727       h->call_stub->reloc_count = 0;
1728       h->call_stub->flags |= SEC_EXCLUDE;
1729       h->call_stub->output_section = bfd_abs_section_ptr;
1730     }
1731 
1732   if (h->call_fp_stub != NULL
1733       && ELF_ST_IS_MIPS16 (h->root.other))
1734     {
1735       /* We don't need the call_stub; this is a 16 bit function, so
1736          calls from other 16 bit functions are OK.  Clobber the size
1737          to 0 to prevent it from being included in the link.  */
1738       h->call_fp_stub->size = 0;
1739       h->call_fp_stub->flags &= ~SEC_RELOC;
1740       h->call_fp_stub->reloc_count = 0;
1741       h->call_fp_stub->flags |= SEC_EXCLUDE;
1742       h->call_fp_stub->output_section = bfd_abs_section_ptr;
1743     }
1744 }
1745 
1746 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1747 
1748 static hashval_t
mips_elf_la25_stub_hash(const void * entry_)1749 mips_elf_la25_stub_hash (const void *entry_)
1750 {
1751   const struct mips_elf_la25_stub *entry;
1752 
1753   entry = (struct mips_elf_la25_stub *) entry_;
1754   return entry->h->root.root.u.def.section->id
1755     + entry->h->root.root.u.def.value;
1756 }
1757 
1758 static int
mips_elf_la25_stub_eq(const void * entry1_,const void * entry2_)1759 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1760 {
1761   const struct mips_elf_la25_stub *entry1, *entry2;
1762 
1763   entry1 = (struct mips_elf_la25_stub *) entry1_;
1764   entry2 = (struct mips_elf_la25_stub *) entry2_;
1765   return ((entry1->h->root.root.u.def.section
1766 	   == entry2->h->root.root.u.def.section)
1767 	  && (entry1->h->root.root.u.def.value
1768 	      == entry2->h->root.root.u.def.value));
1769 }
1770 
1771 /* Called by the linker to set up the la25 stub-creation code.  FN is
1772    the linker's implementation of add_stub_function.  Return true on
1773    success.  */
1774 
1775 bfd_boolean
_bfd_mips_elf_init_stubs(struct bfd_link_info * info,asection * (* fn)(const char *,asection *,asection *))1776 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1777 			  asection *(*fn) (const char *, asection *,
1778 					   asection *))
1779 {
1780   struct mips_elf_link_hash_table *htab;
1781 
1782   htab = mips_elf_hash_table (info);
1783   if (htab == NULL)
1784     return FALSE;
1785 
1786   htab->add_stub_section = fn;
1787   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1788 				      mips_elf_la25_stub_eq, NULL);
1789   if (htab->la25_stubs == NULL)
1790     return FALSE;
1791 
1792   return TRUE;
1793 }
1794 
1795 /* Return true if H is a locally-defined PIC function, in the sense
1796    that it or its fn_stub might need $25 to be valid on entry.
1797    Note that MIPS16 functions set up $gp using PC-relative instructions,
1798    so they themselves never need $25 to be valid.  Only non-MIPS16
1799    entry points are of interest here.  */
1800 
1801 static bfd_boolean
mips_elf_local_pic_function_p(struct mips_elf_link_hash_entry * h)1802 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1803 {
1804   return ((h->root.root.type == bfd_link_hash_defined
1805 	   || h->root.root.type == bfd_link_hash_defweak)
1806 	  && h->root.def_regular
1807 	  && !bfd_is_abs_section (h->root.root.u.def.section)
1808 	  && (!ELF_ST_IS_MIPS16 (h->root.other)
1809 	      || (h->fn_stub && h->need_fn_stub))
1810 	  && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1811 	      || ELF_ST_IS_MIPS_PIC (h->root.other)));
1812 }
1813 
1814 /* Set *SEC to the input section that contains the target of STUB.
1815    Return the offset of the target from the start of that section.  */
1816 
1817 static bfd_vma
mips_elf_get_la25_target(struct mips_elf_la25_stub * stub,asection ** sec)1818 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1819 			  asection **sec)
1820 {
1821   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1822     {
1823       BFD_ASSERT (stub->h->need_fn_stub);
1824       *sec = stub->h->fn_stub;
1825       return 0;
1826     }
1827   else
1828     {
1829       *sec = stub->h->root.root.u.def.section;
1830       return stub->h->root.root.u.def.value;
1831     }
1832 }
1833 
1834 /* STUB describes an la25 stub that we have decided to implement
1835    by inserting an LUI/ADDIU pair before the target function.
1836    Create the section and redirect the function symbol to it.  */
1837 
1838 static bfd_boolean
mips_elf_add_la25_intro(struct mips_elf_la25_stub * stub,struct bfd_link_info * info)1839 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1840 			 struct bfd_link_info *info)
1841 {
1842   struct mips_elf_link_hash_table *htab;
1843   char *name;
1844   asection *s, *input_section;
1845   unsigned int align;
1846 
1847   htab = mips_elf_hash_table (info);
1848   if (htab == NULL)
1849     return FALSE;
1850 
1851   /* Create a unique name for the new section.  */
1852   name = bfd_malloc (11 + sizeof (".text.stub."));
1853   if (name == NULL)
1854     return FALSE;
1855   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1856 
1857   /* Create the section.  */
1858   mips_elf_get_la25_target (stub, &input_section);
1859   s = htab->add_stub_section (name, input_section,
1860 			      input_section->output_section);
1861   if (s == NULL)
1862     return FALSE;
1863 
1864   /* Make sure that any padding goes before the stub.  */
1865   align = input_section->alignment_power;
1866   if (!bfd_set_section_alignment (s->owner, s, align))
1867     return FALSE;
1868   if (align > 3)
1869     s->size = (1 << align) - 8;
1870 
1871   /* Create a symbol for the stub.  */
1872   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1873   stub->stub_section = s;
1874   stub->offset = s->size;
1875 
1876   /* Allocate room for it.  */
1877   s->size += 8;
1878   return TRUE;
1879 }
1880 
1881 /* STUB describes an la25 stub that we have decided to implement
1882    with a separate trampoline.  Allocate room for it and redirect
1883    the function symbol to it.  */
1884 
1885 static bfd_boolean
mips_elf_add_la25_trampoline(struct mips_elf_la25_stub * stub,struct bfd_link_info * info)1886 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1887 			      struct bfd_link_info *info)
1888 {
1889   struct mips_elf_link_hash_table *htab;
1890   asection *s;
1891 
1892   htab = mips_elf_hash_table (info);
1893   if (htab == NULL)
1894     return FALSE;
1895 
1896   /* Create a trampoline section, if we haven't already.  */
1897   s = htab->strampoline;
1898   if (s == NULL)
1899     {
1900       asection *input_section = stub->h->root.root.u.def.section;
1901       s = htab->add_stub_section (".text", NULL,
1902 				  input_section->output_section);
1903       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1904 	return FALSE;
1905       htab->strampoline = s;
1906     }
1907 
1908   /* Create a symbol for the stub.  */
1909   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1910   stub->stub_section = s;
1911   stub->offset = s->size;
1912 
1913   /* Allocate room for it.  */
1914   s->size += 16;
1915   return TRUE;
1916 }
1917 
1918 /* H describes a symbol that needs an la25 stub.  Make sure that an
1919    appropriate stub exists and point H at it.  */
1920 
1921 static bfd_boolean
mips_elf_add_la25_stub(struct bfd_link_info * info,struct mips_elf_link_hash_entry * h)1922 mips_elf_add_la25_stub (struct bfd_link_info *info,
1923 			struct mips_elf_link_hash_entry *h)
1924 {
1925   struct mips_elf_link_hash_table *htab;
1926   struct mips_elf_la25_stub search, *stub;
1927   bfd_boolean use_trampoline_p;
1928   asection *s;
1929   bfd_vma value;
1930   void **slot;
1931 
1932   /* Describe the stub we want.  */
1933   search.stub_section = NULL;
1934   search.offset = 0;
1935   search.h = h;
1936 
1937   /* See if we've already created an equivalent stub.  */
1938   htab = mips_elf_hash_table (info);
1939   if (htab == NULL)
1940     return FALSE;
1941 
1942   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1943   if (slot == NULL)
1944     return FALSE;
1945 
1946   stub = (struct mips_elf_la25_stub *) *slot;
1947   if (stub != NULL)
1948     {
1949       /* We can reuse the existing stub.  */
1950       h->la25_stub = stub;
1951       return TRUE;
1952     }
1953 
1954   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1955   stub = bfd_malloc (sizeof (search));
1956   if (stub == NULL)
1957     return FALSE;
1958   *stub = search;
1959   *slot = stub;
1960 
1961   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1962      of the section and if we would need no more than 2 nops.  */
1963   value = mips_elf_get_la25_target (stub, &s);
1964   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1965 
1966   h->la25_stub = stub;
1967   return (use_trampoline_p
1968 	  ? mips_elf_add_la25_trampoline (stub, info)
1969 	  : mips_elf_add_la25_intro (stub, info));
1970 }
1971 
1972 /* A mips_elf_link_hash_traverse callback that is called before sizing
1973    sections.  DATA points to a mips_htab_traverse_info structure.  */
1974 
1975 static bfd_boolean
mips_elf_check_symbols(struct mips_elf_link_hash_entry * h,void * data)1976 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1977 {
1978   struct mips_htab_traverse_info *hti;
1979 
1980   hti = (struct mips_htab_traverse_info *) data;
1981   if (!bfd_link_relocatable (hti->info))
1982     mips_elf_check_mips16_stubs (hti->info, h);
1983 
1984   if (mips_elf_local_pic_function_p (h))
1985     {
1986       /* PR 12845: If H is in a section that has been garbage
1987 	 collected it will have its output section set to *ABS*.  */
1988       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1989 	return TRUE;
1990 
1991       /* H is a function that might need $25 to be valid on entry.
1992 	 If we're creating a non-PIC relocatable object, mark H as
1993 	 being PIC.  If we're creating a non-relocatable object with
1994 	 non-PIC branches and jumps to H, make sure that H has an la25
1995 	 stub.  */
1996       if (bfd_link_relocatable (hti->info))
1997 	{
1998 	  if (!PIC_OBJECT_P (hti->output_bfd))
1999 	    h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
2000 	}
2001       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
2002 	{
2003 	  hti->error = TRUE;
2004 	  return FALSE;
2005 	}
2006     }
2007   return TRUE;
2008 }
2009 
2010 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2011    Most mips16 instructions are 16 bits, but these instructions
2012    are 32 bits.
2013 
2014    The format of these instructions is:
2015 
2016    +--------------+--------------------------------+
2017    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
2018    +--------------+--------------------------------+
2019    |                Immediate  15:0                |
2020    +-----------------------------------------------+
2021 
2022    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
2023    Note that the immediate value in the first word is swapped.
2024 
2025    When producing a relocatable object file, R_MIPS16_26 is
2026    handled mostly like R_MIPS_26.  In particular, the addend is
2027    stored as a straight 26-bit value in a 32-bit instruction.
2028    (gas makes life simpler for itself by never adjusting a
2029    R_MIPS16_26 reloc to be against a section, so the addend is
2030    always zero).  However, the 32 bit instruction is stored as 2
2031    16-bit values, rather than a single 32-bit value.  In a
2032    big-endian file, the result is the same; in a little-endian
2033    file, the two 16-bit halves of the 32 bit value are swapped.
2034    This is so that a disassembler can recognize the jal
2035    instruction.
2036 
2037    When doing a final link, R_MIPS16_26 is treated as a 32 bit
2038    instruction stored as two 16-bit values.  The addend A is the
2039    contents of the targ26 field.  The calculation is the same as
2040    R_MIPS_26.  When storing the calculated value, reorder the
2041    immediate value as shown above, and don't forget to store the
2042    value as two 16-bit values.
2043 
2044    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2045    defined as
2046 
2047    big-endian:
2048    +--------+----------------------+
2049    |        |                      |
2050    |        |    targ26-16         |
2051    |31    26|25                   0|
2052    +--------+----------------------+
2053 
2054    little-endian:
2055    +----------+------+-------------+
2056    |          |      |             |
2057    |  sub1    |      |     sub2    |
2058    |0        9|10  15|16         31|
2059    +----------+--------------------+
2060    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2061    ((sub1 << 16) | sub2)).
2062 
2063    When producing a relocatable object file, the calculation is
2064    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2065    When producing a fully linked file, the calculation is
2066    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2067    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2068 
2069    The table below lists the other MIPS16 instruction relocations.
2070    Each one is calculated in the same way as the non-MIPS16 relocation
2071    given on the right, but using the extended MIPS16 layout of 16-bit
2072    immediate fields:
2073 
2074 	R_MIPS16_GPREL		R_MIPS_GPREL16
2075 	R_MIPS16_GOT16		R_MIPS_GOT16
2076 	R_MIPS16_CALL16		R_MIPS_CALL16
2077 	R_MIPS16_HI16		R_MIPS_HI16
2078 	R_MIPS16_LO16		R_MIPS_LO16
2079 
2080    A typical instruction will have a format like this:
2081 
2082    +--------------+--------------------------------+
2083    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
2084    +--------------+--------------------------------+
2085    |    Major     |   rx   |   ry   |   Imm  4:0   |
2086    +--------------+--------------------------------+
2087 
2088    EXTEND is the five bit value 11110.  Major is the instruction
2089    opcode.
2090 
2091    All we need to do here is shuffle the bits appropriately.
2092    As above, the two 16-bit halves must be swapped on a
2093    little-endian system.
2094 
2095    Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the
2096    relocatable field is shifted by 1 rather than 2 and the same bit
2097    shuffling is done as with the relocations above.  */
2098 
2099 static inline bfd_boolean
mips16_reloc_p(int r_type)2100 mips16_reloc_p (int r_type)
2101 {
2102   switch (r_type)
2103     {
2104     case R_MIPS16_26:
2105     case R_MIPS16_GPREL:
2106     case R_MIPS16_GOT16:
2107     case R_MIPS16_CALL16:
2108     case R_MIPS16_HI16:
2109     case R_MIPS16_LO16:
2110     case R_MIPS16_TLS_GD:
2111     case R_MIPS16_TLS_LDM:
2112     case R_MIPS16_TLS_DTPREL_HI16:
2113     case R_MIPS16_TLS_DTPREL_LO16:
2114     case R_MIPS16_TLS_GOTTPREL:
2115     case R_MIPS16_TLS_TPREL_HI16:
2116     case R_MIPS16_TLS_TPREL_LO16:
2117     case R_MIPS16_PC16_S1:
2118       return TRUE;
2119 
2120     default:
2121       return FALSE;
2122     }
2123 }
2124 
2125 /* Check if a microMIPS reloc.  */
2126 
2127 static inline bfd_boolean
micromips_reloc_p(unsigned int r_type)2128 micromips_reloc_p (unsigned int r_type)
2129 {
2130   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2131 }
2132 
2133 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2134    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
2135    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
2136 
2137 static inline bfd_boolean
micromips_reloc_shuffle_p(unsigned int r_type)2138 micromips_reloc_shuffle_p (unsigned int r_type)
2139 {
2140   return (micromips_reloc_p (r_type)
2141 	  && r_type != R_MICROMIPS_PC7_S1
2142 	  && r_type != R_MICROMIPS_PC10_S1);
2143 }
2144 
2145 static inline bfd_boolean
got16_reloc_p(int r_type)2146 got16_reloc_p (int r_type)
2147 {
2148   return (r_type == R_MIPS_GOT16
2149 	  || r_type == R_MIPS16_GOT16
2150 	  || r_type == R_MICROMIPS_GOT16);
2151 }
2152 
2153 static inline bfd_boolean
call16_reloc_p(int r_type)2154 call16_reloc_p (int r_type)
2155 {
2156   return (r_type == R_MIPS_CALL16
2157 	  || r_type == R_MIPS16_CALL16
2158 	  || r_type == R_MICROMIPS_CALL16);
2159 }
2160 
2161 static inline bfd_boolean
got_disp_reloc_p(unsigned int r_type)2162 got_disp_reloc_p (unsigned int r_type)
2163 {
2164   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2165 }
2166 
2167 static inline bfd_boolean
got_page_reloc_p(unsigned int r_type)2168 got_page_reloc_p (unsigned int r_type)
2169 {
2170   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2171 }
2172 
2173 static inline bfd_boolean
got_lo16_reloc_p(unsigned int r_type)2174 got_lo16_reloc_p (unsigned int r_type)
2175 {
2176   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2177 }
2178 
2179 static inline bfd_boolean
call_hi16_reloc_p(unsigned int r_type)2180 call_hi16_reloc_p (unsigned int r_type)
2181 {
2182   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2183 }
2184 
2185 static inline bfd_boolean
call_lo16_reloc_p(unsigned int r_type)2186 call_lo16_reloc_p (unsigned int r_type)
2187 {
2188   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2189 }
2190 
2191 static inline bfd_boolean
hi16_reloc_p(int r_type)2192 hi16_reloc_p (int r_type)
2193 {
2194   return (r_type == R_MIPS_HI16
2195 	  || r_type == R_MIPS16_HI16
2196 	  || r_type == R_MICROMIPS_HI16
2197 	  || r_type == R_MIPS_PCHI16);
2198 }
2199 
2200 static inline bfd_boolean
lo16_reloc_p(int r_type)2201 lo16_reloc_p (int r_type)
2202 {
2203   return (r_type == R_MIPS_LO16
2204 	  || r_type == R_MIPS16_LO16
2205 	  || r_type == R_MICROMIPS_LO16
2206 	  || r_type == R_MIPS_PCLO16);
2207 }
2208 
2209 static inline bfd_boolean
mips16_call_reloc_p(int r_type)2210 mips16_call_reloc_p (int r_type)
2211 {
2212   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2213 }
2214 
2215 static inline bfd_boolean
jal_reloc_p(int r_type)2216 jal_reloc_p (int r_type)
2217 {
2218   return (r_type == R_MIPS_26
2219 	  || r_type == R_MIPS16_26
2220 	  || r_type == R_MICROMIPS_26_S1);
2221 }
2222 
2223 static inline bfd_boolean
b_reloc_p(int r_type)2224 b_reloc_p (int r_type)
2225 {
2226   return (r_type == R_MIPS_PC26_S2
2227 	  || r_type == R_MIPS_PC21_S2
2228 	  || r_type == R_MIPS_PC16
2229 	  || r_type == R_MIPS_GNU_REL16_S2
2230 	  || r_type == R_MIPS16_PC16_S1);
2231 }
2232 
2233 static inline bfd_boolean
aligned_pcrel_reloc_p(int r_type)2234 aligned_pcrel_reloc_p (int r_type)
2235 {
2236   return (r_type == R_MIPS_PC18_S3
2237 	  || r_type == R_MIPS_PC19_S2);
2238 }
2239 
2240 static inline bfd_boolean
mips16_branch_reloc_p(int r_type)2241 mips16_branch_reloc_p (int r_type)
2242 {
2243   return (r_type == R_MIPS16_26
2244 	  || r_type == R_MIPS16_PC16_S1);
2245 }
2246 
2247 static inline bfd_boolean
micromips_branch_reloc_p(int r_type)2248 micromips_branch_reloc_p (int r_type)
2249 {
2250   return (r_type == R_MICROMIPS_26_S1
2251 	  || r_type == R_MICROMIPS_PC16_S1
2252 	  || r_type == R_MICROMIPS_PC10_S1
2253 	  || r_type == R_MICROMIPS_PC7_S1);
2254 }
2255 
2256 static inline bfd_boolean
tls_gd_reloc_p(unsigned int r_type)2257 tls_gd_reloc_p (unsigned int r_type)
2258 {
2259   return (r_type == R_MIPS_TLS_GD
2260 	  || r_type == R_MIPS16_TLS_GD
2261 	  || r_type == R_MICROMIPS_TLS_GD);
2262 }
2263 
2264 static inline bfd_boolean
tls_ldm_reloc_p(unsigned int r_type)2265 tls_ldm_reloc_p (unsigned int r_type)
2266 {
2267   return (r_type == R_MIPS_TLS_LDM
2268 	  || r_type == R_MIPS16_TLS_LDM
2269 	  || r_type == R_MICROMIPS_TLS_LDM);
2270 }
2271 
2272 static inline bfd_boolean
tls_gottprel_reloc_p(unsigned int r_type)2273 tls_gottprel_reloc_p (unsigned int r_type)
2274 {
2275   return (r_type == R_MIPS_TLS_GOTTPREL
2276 	  || r_type == R_MIPS16_TLS_GOTTPREL
2277 	  || r_type == R_MICROMIPS_TLS_GOTTPREL);
2278 }
2279 
2280 void
_bfd_mips_elf_reloc_unshuffle(bfd * abfd,int r_type,bfd_boolean jal_shuffle,bfd_byte * data)2281 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2282 			       bfd_boolean jal_shuffle, bfd_byte *data)
2283 {
2284   bfd_vma first, second, val;
2285 
2286   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2287     return;
2288 
2289   /* Pick up the first and second halfwords of the instruction.  */
2290   first = bfd_get_16 (abfd, data);
2291   second = bfd_get_16 (abfd, data + 2);
2292   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2293     val = first << 16 | second;
2294   else if (r_type != R_MIPS16_26)
2295     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2296 	   | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2297   else
2298     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2299 	   | ((first & 0x1f) << 21) | second);
2300   bfd_put_32 (abfd, val, data);
2301 }
2302 
2303 void
_bfd_mips_elf_reloc_shuffle(bfd * abfd,int r_type,bfd_boolean jal_shuffle,bfd_byte * data)2304 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2305 			     bfd_boolean jal_shuffle, bfd_byte *data)
2306 {
2307   bfd_vma first, second, val;
2308 
2309   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2310     return;
2311 
2312   val = bfd_get_32 (abfd, data);
2313   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2314     {
2315       second = val & 0xffff;
2316       first = val >> 16;
2317     }
2318   else if (r_type != R_MIPS16_26)
2319     {
2320       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2321       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2322     }
2323   else
2324     {
2325       second = val & 0xffff;
2326       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2327 	       | ((val >> 21) & 0x1f);
2328     }
2329   bfd_put_16 (abfd, second, data + 2);
2330   bfd_put_16 (abfd, first, data);
2331 }
2332 
2333 bfd_reloc_status_type
_bfd_mips_elf_gprel16_with_gp(bfd * abfd,asymbol * symbol,arelent * reloc_entry,asection * input_section,bfd_boolean relocatable,void * data,bfd_vma gp)2334 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2335 			       arelent *reloc_entry, asection *input_section,
2336 			       bfd_boolean relocatable, void *data, bfd_vma gp)
2337 {
2338   bfd_vma relocation;
2339   bfd_signed_vma val;
2340   bfd_reloc_status_type status;
2341 
2342   if (bfd_is_com_section (symbol->section))
2343     relocation = 0;
2344   else
2345     relocation = symbol->value;
2346 
2347   relocation += symbol->section->output_section->vma;
2348   relocation += symbol->section->output_offset;
2349 
2350   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2351     return bfd_reloc_outofrange;
2352 
2353   /* Set val to the offset into the section or symbol.  */
2354   val = reloc_entry->addend;
2355 
2356   _bfd_mips_elf_sign_extend (val, 16);
2357 
2358   /* Adjust val for the final section location and GP value.  If we
2359      are producing relocatable output, we don't want to do this for
2360      an external symbol.  */
2361   if (! relocatable
2362       || (symbol->flags & BSF_SECTION_SYM) != 0)
2363     val += relocation - gp;
2364 
2365   if (reloc_entry->howto->partial_inplace)
2366     {
2367       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2368 				       (bfd_byte *) data
2369 				       + reloc_entry->address);
2370       if (status != bfd_reloc_ok)
2371 	return status;
2372     }
2373   else
2374     reloc_entry->addend = val;
2375 
2376   if (relocatable)
2377     reloc_entry->address += input_section->output_offset;
2378 
2379   return bfd_reloc_ok;
2380 }
2381 
2382 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2383    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2384    that contains the relocation field and DATA points to the start of
2385    INPUT_SECTION.  */
2386 
2387 struct mips_hi16
2388 {
2389   struct mips_hi16 *next;
2390   bfd_byte *data;
2391   asection *input_section;
2392   arelent rel;
2393 };
2394 
2395 /* FIXME: This should not be a static variable.  */
2396 
2397 static struct mips_hi16 *mips_hi16_list;
2398 
2399 /* A howto special_function for REL *HI16 relocations.  We can only
2400    calculate the correct value once we've seen the partnering
2401    *LO16 relocation, so just save the information for later.
2402 
2403    The ABI requires that the *LO16 immediately follow the *HI16.
2404    However, as a GNU extension, we permit an arbitrary number of
2405    *HI16s to be associated with a single *LO16.  This significantly
2406    simplies the relocation handling in gcc.  */
2407 
2408 bfd_reloc_status_type
_bfd_mips_elf_hi16_reloc(bfd * abfd ATTRIBUTE_UNUSED,arelent * reloc_entry,asymbol * symbol ATTRIBUTE_UNUSED,void * data,asection * input_section,bfd * output_bfd,char ** error_message ATTRIBUTE_UNUSED)2409 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2410 			  asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2411 			  asection *input_section, bfd *output_bfd,
2412 			  char **error_message ATTRIBUTE_UNUSED)
2413 {
2414   struct mips_hi16 *n;
2415 
2416   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2417     return bfd_reloc_outofrange;
2418 
2419   n = bfd_malloc (sizeof *n);
2420   if (n == NULL)
2421     return bfd_reloc_outofrange;
2422 
2423   n->next = mips_hi16_list;
2424   n->data = data;
2425   n->input_section = input_section;
2426   n->rel = *reloc_entry;
2427   mips_hi16_list = n;
2428 
2429   if (output_bfd != NULL)
2430     reloc_entry->address += input_section->output_offset;
2431 
2432   return bfd_reloc_ok;
2433 }
2434 
2435 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2436    like any other 16-bit relocation when applied to global symbols, but is
2437    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2438 
2439 bfd_reloc_status_type
_bfd_mips_elf_got16_reloc(bfd * abfd,arelent * reloc_entry,asymbol * symbol,void * data,asection * input_section,bfd * output_bfd,char ** error_message)2440 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2441 			   void *data, asection *input_section,
2442 			   bfd *output_bfd, char **error_message)
2443 {
2444   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2445       || bfd_is_und_section (bfd_get_section (symbol))
2446       || bfd_is_com_section (bfd_get_section (symbol)))
2447     /* The relocation is against a global symbol.  */
2448     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2449 					input_section, output_bfd,
2450 					error_message);
2451 
2452   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2453 				   input_section, output_bfd, error_message);
2454 }
2455 
2456 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2457    is a straightforward 16 bit inplace relocation, but we must deal with
2458    any partnering high-part relocations as well.  */
2459 
2460 bfd_reloc_status_type
_bfd_mips_elf_lo16_reloc(bfd * abfd,arelent * reloc_entry,asymbol * symbol,void * data,asection * input_section,bfd * output_bfd,char ** error_message)2461 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2462 			  void *data, asection *input_section,
2463 			  bfd *output_bfd, char **error_message)
2464 {
2465   bfd_vma vallo;
2466   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2467 
2468   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2469     return bfd_reloc_outofrange;
2470 
2471   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2472 				 location);
2473   vallo = bfd_get_32 (abfd, location);
2474   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2475 			       location);
2476 
2477   while (mips_hi16_list != NULL)
2478     {
2479       bfd_reloc_status_type ret;
2480       struct mips_hi16 *hi;
2481 
2482       hi = mips_hi16_list;
2483 
2484       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2485 	 want to install the addend in the same way as for a R_MIPS*_HI16
2486 	 relocation (with a rightshift of 16).  However, since GOT16
2487 	 relocations can also be used with global symbols, their howto
2488 	 has a rightshift of 0.  */
2489       if (hi->rel.howto->type == R_MIPS_GOT16)
2490 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2491       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2492 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2493       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2494 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2495 
2496       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2497 	 carry or borrow will induce a change of +1 or -1 in the high part.  */
2498       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2499 
2500       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2501 					 hi->input_section, output_bfd,
2502 					 error_message);
2503       if (ret != bfd_reloc_ok)
2504 	return ret;
2505 
2506       mips_hi16_list = hi->next;
2507       free (hi);
2508     }
2509 
2510   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2511 				      input_section, output_bfd,
2512 				      error_message);
2513 }
2514 
2515 /* A generic howto special_function.  This calculates and installs the
2516    relocation itself, thus avoiding the oft-discussed problems in
2517    bfd_perform_relocation and bfd_install_relocation.  */
2518 
2519 bfd_reloc_status_type
_bfd_mips_elf_generic_reloc(bfd * abfd ATTRIBUTE_UNUSED,arelent * reloc_entry,asymbol * symbol,void * data ATTRIBUTE_UNUSED,asection * input_section,bfd * output_bfd,char ** error_message ATTRIBUTE_UNUSED)2520 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2521 			     asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2522 			     asection *input_section, bfd *output_bfd,
2523 			     char **error_message ATTRIBUTE_UNUSED)
2524 {
2525   bfd_signed_vma val;
2526   bfd_reloc_status_type status;
2527   bfd_boolean relocatable;
2528 
2529   relocatable = (output_bfd != NULL);
2530 
2531   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2532     return bfd_reloc_outofrange;
2533 
2534   /* Build up the field adjustment in VAL.  */
2535   val = 0;
2536   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2537     {
2538       /* Either we're calculating the final field value or we have a
2539 	 relocation against a section symbol.  Add in the section's
2540 	 offset or address.  */
2541       val += symbol->section->output_section->vma;
2542       val += symbol->section->output_offset;
2543     }
2544 
2545   if (!relocatable)
2546     {
2547       /* We're calculating the final field value.  Add in the symbol's value
2548 	 and, if pc-relative, subtract the address of the field itself.  */
2549       val += symbol->value;
2550       if (reloc_entry->howto->pc_relative)
2551 	{
2552 	  val -= input_section->output_section->vma;
2553 	  val -= input_section->output_offset;
2554 	  val -= reloc_entry->address;
2555 	}
2556     }
2557 
2558   /* VAL is now the final adjustment.  If we're keeping this relocation
2559      in the output file, and if the relocation uses a separate addend,
2560      we just need to add VAL to that addend.  Otherwise we need to add
2561      VAL to the relocation field itself.  */
2562   if (relocatable && !reloc_entry->howto->partial_inplace)
2563     reloc_entry->addend += val;
2564   else
2565     {
2566       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2567 
2568       /* Add in the separate addend, if any.  */
2569       val += reloc_entry->addend;
2570 
2571       /* Add VAL to the relocation field.  */
2572       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2573 				     location);
2574       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2575 				       location);
2576       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2577 				   location);
2578 
2579       if (status != bfd_reloc_ok)
2580 	return status;
2581     }
2582 
2583   if (relocatable)
2584     reloc_entry->address += input_section->output_offset;
2585 
2586   return bfd_reloc_ok;
2587 }
2588 
2589 /* Swap an entry in a .gptab section.  Note that these routines rely
2590    on the equivalence of the two elements of the union.  */
2591 
2592 static void
bfd_mips_elf32_swap_gptab_in(bfd * abfd,const Elf32_External_gptab * ex,Elf32_gptab * in)2593 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2594 			      Elf32_gptab *in)
2595 {
2596   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2597   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2598 }
2599 
2600 static void
bfd_mips_elf32_swap_gptab_out(bfd * abfd,const Elf32_gptab * in,Elf32_External_gptab * ex)2601 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2602 			       Elf32_External_gptab *ex)
2603 {
2604   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2605   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2606 }
2607 
2608 static void
bfd_elf32_swap_compact_rel_out(bfd * abfd,const Elf32_compact_rel * in,Elf32_External_compact_rel * ex)2609 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2610 				Elf32_External_compact_rel *ex)
2611 {
2612   H_PUT_32 (abfd, in->id1, ex->id1);
2613   H_PUT_32 (abfd, in->num, ex->num);
2614   H_PUT_32 (abfd, in->id2, ex->id2);
2615   H_PUT_32 (abfd, in->offset, ex->offset);
2616   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2617   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2618 }
2619 
2620 static void
bfd_elf32_swap_crinfo_out(bfd * abfd,const Elf32_crinfo * in,Elf32_External_crinfo * ex)2621 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2622 			   Elf32_External_crinfo *ex)
2623 {
2624   unsigned long l;
2625 
2626   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2627        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2628        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2629        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2630   H_PUT_32 (abfd, l, ex->info);
2631   H_PUT_32 (abfd, in->konst, ex->konst);
2632   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2633 }
2634 
2635 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2636    routines swap this structure in and out.  They are used outside of
2637    BFD, so they are globally visible.  */
2638 
2639 void
bfd_mips_elf32_swap_reginfo_in(bfd * abfd,const Elf32_External_RegInfo * ex,Elf32_RegInfo * in)2640 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2641 				Elf32_RegInfo *in)
2642 {
2643   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2644   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2645   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2646   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2647   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2648   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2649 }
2650 
2651 void
bfd_mips_elf32_swap_reginfo_out(bfd * abfd,const Elf32_RegInfo * in,Elf32_External_RegInfo * ex)2652 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2653 				 Elf32_External_RegInfo *ex)
2654 {
2655   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2656   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2657   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2658   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2659   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2660   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2661 }
2662 
2663 /* In the 64 bit ABI, the .MIPS.options section holds register
2664    information in an Elf64_Reginfo structure.  These routines swap
2665    them in and out.  They are globally visible because they are used
2666    outside of BFD.  These routines are here so that gas can call them
2667    without worrying about whether the 64 bit ABI has been included.  */
2668 
2669 void
bfd_mips_elf64_swap_reginfo_in(bfd * abfd,const Elf64_External_RegInfo * ex,Elf64_Internal_RegInfo * in)2670 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2671 				Elf64_Internal_RegInfo *in)
2672 {
2673   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2674   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2675   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2676   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2677   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2678   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2679   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2680 }
2681 
2682 void
bfd_mips_elf64_swap_reginfo_out(bfd * abfd,const Elf64_Internal_RegInfo * in,Elf64_External_RegInfo * ex)2683 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2684 				 Elf64_External_RegInfo *ex)
2685 {
2686   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2687   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2688   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2689   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2690   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2691   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2692   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2693 }
2694 
2695 /* Swap in an options header.  */
2696 
2697 void
bfd_mips_elf_swap_options_in(bfd * abfd,const Elf_External_Options * ex,Elf_Internal_Options * in)2698 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2699 			      Elf_Internal_Options *in)
2700 {
2701   in->kind = H_GET_8 (abfd, ex->kind);
2702   in->size = H_GET_8 (abfd, ex->size);
2703   in->section = H_GET_16 (abfd, ex->section);
2704   in->info = H_GET_32 (abfd, ex->info);
2705 }
2706 
2707 /* Swap out an options header.  */
2708 
2709 void
bfd_mips_elf_swap_options_out(bfd * abfd,const Elf_Internal_Options * in,Elf_External_Options * ex)2710 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2711 			       Elf_External_Options *ex)
2712 {
2713   H_PUT_8 (abfd, in->kind, ex->kind);
2714   H_PUT_8 (abfd, in->size, ex->size);
2715   H_PUT_16 (abfd, in->section, ex->section);
2716   H_PUT_32 (abfd, in->info, ex->info);
2717 }
2718 
2719 /* Swap in an abiflags structure.  */
2720 
2721 void
bfd_mips_elf_swap_abiflags_v0_in(bfd * abfd,const Elf_External_ABIFlags_v0 * ex,Elf_Internal_ABIFlags_v0 * in)2722 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2723 				  const Elf_External_ABIFlags_v0 *ex,
2724 				  Elf_Internal_ABIFlags_v0 *in)
2725 {
2726   in->version = H_GET_16 (abfd, ex->version);
2727   in->isa_level = H_GET_8 (abfd, ex->isa_level);
2728   in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2729   in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2730   in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2731   in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2732   in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2733   in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2734   in->ases = H_GET_32 (abfd, ex->ases);
2735   in->flags1 = H_GET_32 (abfd, ex->flags1);
2736   in->flags2 = H_GET_32 (abfd, ex->flags2);
2737 }
2738 
2739 /* Swap out an abiflags structure.  */
2740 
2741 void
bfd_mips_elf_swap_abiflags_v0_out(bfd * abfd,const Elf_Internal_ABIFlags_v0 * in,Elf_External_ABIFlags_v0 * ex)2742 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2743 				   const Elf_Internal_ABIFlags_v0 *in,
2744 				   Elf_External_ABIFlags_v0 *ex)
2745 {
2746   H_PUT_16 (abfd, in->version, ex->version);
2747   H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2748   H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2749   H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2750   H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2751   H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2752   H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2753   H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2754   H_PUT_32 (abfd, in->ases, ex->ases);
2755   H_PUT_32 (abfd, in->flags1, ex->flags1);
2756   H_PUT_32 (abfd, in->flags2, ex->flags2);
2757 }
2758 
2759 /* This function is called via qsort() to sort the dynamic relocation
2760    entries by increasing r_symndx value.  */
2761 
2762 static int
sort_dynamic_relocs(const void * arg1,const void * arg2)2763 sort_dynamic_relocs (const void *arg1, const void *arg2)
2764 {
2765   Elf_Internal_Rela int_reloc1;
2766   Elf_Internal_Rela int_reloc2;
2767   int diff;
2768 
2769   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2770   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2771 
2772   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2773   if (diff != 0)
2774     return diff;
2775 
2776   if (int_reloc1.r_offset < int_reloc2.r_offset)
2777     return -1;
2778   if (int_reloc1.r_offset > int_reloc2.r_offset)
2779     return 1;
2780   return 0;
2781 }
2782 
2783 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2784 
2785 static int
sort_dynamic_relocs_64(const void * arg1 ATTRIBUTE_UNUSED,const void * arg2 ATTRIBUTE_UNUSED)2786 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2787 			const void *arg2 ATTRIBUTE_UNUSED)
2788 {
2789 #ifdef BFD64
2790   Elf_Internal_Rela int_reloc1[3];
2791   Elf_Internal_Rela int_reloc2[3];
2792 
2793   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2794     (reldyn_sorting_bfd, arg1, int_reloc1);
2795   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2796     (reldyn_sorting_bfd, arg2, int_reloc2);
2797 
2798   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2799     return -1;
2800   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2801     return 1;
2802 
2803   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2804     return -1;
2805   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2806     return 1;
2807   return 0;
2808 #else
2809   abort ();
2810 #endif
2811 }
2812 
2813 
2814 /* This routine is used to write out ECOFF debugging external symbol
2815    information.  It is called via mips_elf_link_hash_traverse.  The
2816    ECOFF external symbol information must match the ELF external
2817    symbol information.  Unfortunately, at this point we don't know
2818    whether a symbol is required by reloc information, so the two
2819    tables may wind up being different.  We must sort out the external
2820    symbol information before we can set the final size of the .mdebug
2821    section, and we must set the size of the .mdebug section before we
2822    can relocate any sections, and we can't know which symbols are
2823    required by relocation until we relocate the sections.
2824    Fortunately, it is relatively unlikely that any symbol will be
2825    stripped but required by a reloc.  In particular, it can not happen
2826    when generating a final executable.  */
2827 
2828 static bfd_boolean
mips_elf_output_extsym(struct mips_elf_link_hash_entry * h,void * data)2829 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2830 {
2831   struct extsym_info *einfo = data;
2832   bfd_boolean strip;
2833   asection *sec, *output_section;
2834 
2835   if (h->root.indx == -2)
2836     strip = FALSE;
2837   else if ((h->root.def_dynamic
2838 	    || h->root.ref_dynamic
2839 	    || h->root.type == bfd_link_hash_new)
2840 	   && !h->root.def_regular
2841 	   && !h->root.ref_regular)
2842     strip = TRUE;
2843   else if (einfo->info->strip == strip_all
2844 	   || (einfo->info->strip == strip_some
2845 	       && bfd_hash_lookup (einfo->info->keep_hash,
2846 				   h->root.root.root.string,
2847 				   FALSE, FALSE) == NULL))
2848     strip = TRUE;
2849   else
2850     strip = FALSE;
2851 
2852   if (strip)
2853     return TRUE;
2854 
2855   if (h->esym.ifd == -2)
2856     {
2857       h->esym.jmptbl = 0;
2858       h->esym.cobol_main = 0;
2859       h->esym.weakext = 0;
2860       h->esym.reserved = 0;
2861       h->esym.ifd = ifdNil;
2862       h->esym.asym.value = 0;
2863       h->esym.asym.st = stGlobal;
2864 
2865       if (h->root.root.type == bfd_link_hash_undefined
2866 	  || h->root.root.type == bfd_link_hash_undefweak)
2867 	{
2868 	  const char *name;
2869 
2870 	  /* Use undefined class.  Also, set class and type for some
2871              special symbols.  */
2872 	  name = h->root.root.root.string;
2873 	  if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2874 	      || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2875 	    {
2876 	      h->esym.asym.sc = scData;
2877 	      h->esym.asym.st = stLabel;
2878 	      h->esym.asym.value = 0;
2879 	    }
2880 	  else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2881 	    {
2882 	      h->esym.asym.sc = scAbs;
2883 	      h->esym.asym.st = stLabel;
2884 	      h->esym.asym.value =
2885 		mips_elf_hash_table (einfo->info)->procedure_count;
2886 	    }
2887 	  else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2888 	    {
2889 	      h->esym.asym.sc = scAbs;
2890 	      h->esym.asym.st = stLabel;
2891 	      h->esym.asym.value = elf_gp (einfo->abfd);
2892 	    }
2893 	  else
2894 	    h->esym.asym.sc = scUndefined;
2895 	}
2896       else if (h->root.root.type != bfd_link_hash_defined
2897 	  && h->root.root.type != bfd_link_hash_defweak)
2898 	h->esym.asym.sc = scAbs;
2899       else
2900 	{
2901 	  const char *name;
2902 
2903 	  sec = h->root.root.u.def.section;
2904 	  output_section = sec->output_section;
2905 
2906 	  /* When making a shared library and symbol h is the one from
2907 	     the another shared library, OUTPUT_SECTION may be null.  */
2908 	  if (output_section == NULL)
2909 	    h->esym.asym.sc = scUndefined;
2910 	  else
2911 	    {
2912 	      name = bfd_section_name (output_section->owner, output_section);
2913 
2914 	      if (strcmp (name, ".text") == 0)
2915 		h->esym.asym.sc = scText;
2916 	      else if (strcmp (name, ".data") == 0)
2917 		h->esym.asym.sc = scData;
2918 	      else if (strcmp (name, ".sdata") == 0)
2919 		h->esym.asym.sc = scSData;
2920 	      else if (strcmp (name, ".rodata") == 0
2921 		       || strcmp (name, ".rdata") == 0)
2922 		h->esym.asym.sc = scRData;
2923 	      else if (strcmp (name, ".bss") == 0)
2924 		h->esym.asym.sc = scBss;
2925 	      else if (strcmp (name, ".sbss") == 0)
2926 		h->esym.asym.sc = scSBss;
2927 	      else if (strcmp (name, ".init") == 0)
2928 		h->esym.asym.sc = scInit;
2929 	      else if (strcmp (name, ".fini") == 0)
2930 		h->esym.asym.sc = scFini;
2931 	      else
2932 		h->esym.asym.sc = scAbs;
2933 	    }
2934 	}
2935 
2936       h->esym.asym.reserved = 0;
2937       h->esym.asym.index = indexNil;
2938     }
2939 
2940   if (h->root.root.type == bfd_link_hash_common)
2941     h->esym.asym.value = h->root.root.u.c.size;
2942   else if (h->root.root.type == bfd_link_hash_defined
2943 	   || h->root.root.type == bfd_link_hash_defweak)
2944     {
2945       if (h->esym.asym.sc == scCommon)
2946 	h->esym.asym.sc = scBss;
2947       else if (h->esym.asym.sc == scSCommon)
2948 	h->esym.asym.sc = scSBss;
2949 
2950       sec = h->root.root.u.def.section;
2951       output_section = sec->output_section;
2952       if (output_section != NULL)
2953 	h->esym.asym.value = (h->root.root.u.def.value
2954 			      + sec->output_offset
2955 			      + output_section->vma);
2956       else
2957 	h->esym.asym.value = 0;
2958     }
2959   else
2960     {
2961       struct mips_elf_link_hash_entry *hd = h;
2962 
2963       while (hd->root.root.type == bfd_link_hash_indirect)
2964 	hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2965 
2966       if (hd->needs_lazy_stub)
2967 	{
2968 	  BFD_ASSERT (hd->root.plt.plist != NULL);
2969 	  BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
2970 	  /* Set type and value for a symbol with a function stub.  */
2971 	  h->esym.asym.st = stProc;
2972 	  sec = hd->root.root.u.def.section;
2973 	  if (sec == NULL)
2974 	    h->esym.asym.value = 0;
2975 	  else
2976 	    {
2977 	      output_section = sec->output_section;
2978 	      if (output_section != NULL)
2979 		h->esym.asym.value = (hd->root.plt.plist->stub_offset
2980 				      + sec->output_offset
2981 				      + output_section->vma);
2982 	      else
2983 		h->esym.asym.value = 0;
2984 	    }
2985 	}
2986     }
2987 
2988   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2989 				      h->root.root.root.string,
2990 				      &h->esym))
2991     {
2992       einfo->failed = TRUE;
2993       return FALSE;
2994     }
2995 
2996   return TRUE;
2997 }
2998 
2999 /* A comparison routine used to sort .gptab entries.  */
3000 
3001 static int
gptab_compare(const void * p1,const void * p2)3002 gptab_compare (const void *p1, const void *p2)
3003 {
3004   const Elf32_gptab *a1 = p1;
3005   const Elf32_gptab *a2 = p2;
3006 
3007   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
3008 }
3009 
3010 /* Functions to manage the got entry hash table.  */
3011 
3012 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3013    hash number.  */
3014 
3015 static INLINE hashval_t
mips_elf_hash_bfd_vma(bfd_vma addr)3016 mips_elf_hash_bfd_vma (bfd_vma addr)
3017 {
3018 #ifdef BFD64
3019   return addr + (addr >> 32);
3020 #else
3021   return addr;
3022 #endif
3023 }
3024 
3025 static hashval_t
mips_elf_got_entry_hash(const void * entry_)3026 mips_elf_got_entry_hash (const void *entry_)
3027 {
3028   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3029 
3030   return (entry->symndx
3031 	  + ((entry->tls_type == GOT_TLS_LDM) << 18)
3032 	  + (entry->tls_type == GOT_TLS_LDM ? 0
3033 	     : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3034 	     : entry->symndx >= 0 ? (entry->abfd->id
3035 				     + mips_elf_hash_bfd_vma (entry->d.addend))
3036 	     : entry->d.h->root.root.root.hash));
3037 }
3038 
3039 static int
mips_elf_got_entry_eq(const void * entry1,const void * entry2)3040 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3041 {
3042   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3043   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3044 
3045   return (e1->symndx == e2->symndx
3046 	  && e1->tls_type == e2->tls_type
3047 	  && (e1->tls_type == GOT_TLS_LDM ? TRUE
3048 	      : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3049 	      : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3050 				   && e1->d.addend == e2->d.addend)
3051 	      : e2->abfd && e1->d.h == e2->d.h));
3052 }
3053 
3054 static hashval_t
mips_got_page_ref_hash(const void * ref_)3055 mips_got_page_ref_hash (const void *ref_)
3056 {
3057   const struct mips_got_page_ref *ref;
3058 
3059   ref = (const struct mips_got_page_ref *) ref_;
3060   return ((ref->symndx >= 0
3061 	   ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3062 	   : ref->u.h->root.root.root.hash)
3063 	  + mips_elf_hash_bfd_vma (ref->addend));
3064 }
3065 
3066 static int
mips_got_page_ref_eq(const void * ref1_,const void * ref2_)3067 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3068 {
3069   const struct mips_got_page_ref *ref1, *ref2;
3070 
3071   ref1 = (const struct mips_got_page_ref *) ref1_;
3072   ref2 = (const struct mips_got_page_ref *) ref2_;
3073   return (ref1->symndx == ref2->symndx
3074 	  && (ref1->symndx < 0
3075 	      ? ref1->u.h == ref2->u.h
3076 	      : ref1->u.abfd == ref2->u.abfd)
3077 	  && ref1->addend == ref2->addend);
3078 }
3079 
3080 static hashval_t
mips_got_page_entry_hash(const void * entry_)3081 mips_got_page_entry_hash (const void *entry_)
3082 {
3083   const struct mips_got_page_entry *entry;
3084 
3085   entry = (const struct mips_got_page_entry *) entry_;
3086   return entry->sec->id;
3087 }
3088 
3089 static int
mips_got_page_entry_eq(const void * entry1_,const void * entry2_)3090 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3091 {
3092   const struct mips_got_page_entry *entry1, *entry2;
3093 
3094   entry1 = (const struct mips_got_page_entry *) entry1_;
3095   entry2 = (const struct mips_got_page_entry *) entry2_;
3096   return entry1->sec == entry2->sec;
3097 }
3098 
3099 /* Create and return a new mips_got_info structure.  */
3100 
3101 static struct mips_got_info *
mips_elf_create_got_info(bfd * abfd)3102 mips_elf_create_got_info (bfd *abfd)
3103 {
3104   struct mips_got_info *g;
3105 
3106   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3107   if (g == NULL)
3108     return NULL;
3109 
3110   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3111 				    mips_elf_got_entry_eq, NULL);
3112   if (g->got_entries == NULL)
3113     return NULL;
3114 
3115   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3116 				      mips_got_page_ref_eq, NULL);
3117   if (g->got_page_refs == NULL)
3118     return NULL;
3119 
3120   return g;
3121 }
3122 
3123 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3124    CREATE_P and if ABFD doesn't already have a GOT.  */
3125 
3126 static struct mips_got_info *
mips_elf_bfd_got(bfd * abfd,bfd_boolean create_p)3127 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3128 {
3129   struct mips_elf_obj_tdata *tdata;
3130 
3131   if (!is_mips_elf (abfd))
3132     return NULL;
3133 
3134   tdata = mips_elf_tdata (abfd);
3135   if (!tdata->got && create_p)
3136     tdata->got = mips_elf_create_got_info (abfd);
3137   return tdata->got;
3138 }
3139 
3140 /* Record that ABFD should use output GOT G.  */
3141 
3142 static void
mips_elf_replace_bfd_got(bfd * abfd,struct mips_got_info * g)3143 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3144 {
3145   struct mips_elf_obj_tdata *tdata;
3146 
3147   BFD_ASSERT (is_mips_elf (abfd));
3148   tdata = mips_elf_tdata (abfd);
3149   if (tdata->got)
3150     {
3151       /* The GOT structure itself and the hash table entries are
3152 	 allocated to a bfd, but the hash tables aren't.  */
3153       htab_delete (tdata->got->got_entries);
3154       htab_delete (tdata->got->got_page_refs);
3155       if (tdata->got->got_page_entries)
3156 	htab_delete (tdata->got->got_page_entries);
3157     }
3158   tdata->got = g;
3159 }
3160 
3161 /* Return the dynamic relocation section.  If it doesn't exist, try to
3162    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3163    if creation fails.  */
3164 
3165 static asection *
mips_elf_rel_dyn_section(struct bfd_link_info * info,bfd_boolean create_p)3166 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3167 {
3168   const char *dname;
3169   asection *sreloc;
3170   bfd *dynobj;
3171 
3172   dname = MIPS_ELF_REL_DYN_NAME (info);
3173   dynobj = elf_hash_table (info)->dynobj;
3174   sreloc = bfd_get_linker_section (dynobj, dname);
3175   if (sreloc == NULL && create_p)
3176     {
3177       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3178 						   (SEC_ALLOC
3179 						    | SEC_LOAD
3180 						    | SEC_HAS_CONTENTS
3181 						    | SEC_IN_MEMORY
3182 						    | SEC_LINKER_CREATED
3183 						    | SEC_READONLY));
3184       if (sreloc == NULL
3185 	  || ! bfd_set_section_alignment (dynobj, sreloc,
3186 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3187 	return NULL;
3188     }
3189   return sreloc;
3190 }
3191 
3192 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3193 
3194 static int
mips_elf_reloc_tls_type(unsigned int r_type)3195 mips_elf_reloc_tls_type (unsigned int r_type)
3196 {
3197   if (tls_gd_reloc_p (r_type))
3198     return GOT_TLS_GD;
3199 
3200   if (tls_ldm_reloc_p (r_type))
3201     return GOT_TLS_LDM;
3202 
3203   if (tls_gottprel_reloc_p (r_type))
3204     return GOT_TLS_IE;
3205 
3206   return GOT_TLS_NONE;
3207 }
3208 
3209 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3210 
3211 static int
mips_tls_got_entries(unsigned int type)3212 mips_tls_got_entries (unsigned int type)
3213 {
3214   switch (type)
3215     {
3216     case GOT_TLS_GD:
3217     case GOT_TLS_LDM:
3218       return 2;
3219 
3220     case GOT_TLS_IE:
3221       return 1;
3222 
3223     case GOT_TLS_NONE:
3224       return 0;
3225     }
3226   abort ();
3227 }
3228 
3229 /* Count the number of relocations needed for a TLS GOT entry, with
3230    access types from TLS_TYPE, and symbol H (or a local symbol if H
3231    is NULL).  */
3232 
3233 static int
mips_tls_got_relocs(struct bfd_link_info * info,unsigned char tls_type,struct elf_link_hash_entry * h)3234 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3235 		     struct elf_link_hash_entry *h)
3236 {
3237   int indx = 0;
3238   bfd_boolean need_relocs = FALSE;
3239   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3240 
3241   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3242       && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3243     indx = h->dynindx;
3244 
3245   if ((bfd_link_pic (info) || indx != 0)
3246       && (h == NULL
3247 	  || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3248 	  || h->root.type != bfd_link_hash_undefweak))
3249     need_relocs = TRUE;
3250 
3251   if (!need_relocs)
3252     return 0;
3253 
3254   switch (tls_type)
3255     {
3256     case GOT_TLS_GD:
3257       return indx != 0 ? 2 : 1;
3258 
3259     case GOT_TLS_IE:
3260       return 1;
3261 
3262     case GOT_TLS_LDM:
3263       return bfd_link_pic (info) ? 1 : 0;
3264 
3265     default:
3266       return 0;
3267     }
3268 }
3269 
3270 /* Add the number of GOT entries and TLS relocations required by ENTRY
3271    to G.  */
3272 
3273 static void
mips_elf_count_got_entry(struct bfd_link_info * info,struct mips_got_info * g,struct mips_got_entry * entry)3274 mips_elf_count_got_entry (struct bfd_link_info *info,
3275 			  struct mips_got_info *g,
3276 			  struct mips_got_entry *entry)
3277 {
3278   if (entry->tls_type)
3279     {
3280       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3281       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3282 					entry->symndx < 0
3283 					? &entry->d.h->root : NULL);
3284     }
3285   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3286     g->local_gotno += 1;
3287   else
3288     g->global_gotno += 1;
3289 }
3290 
3291 /* Output a simple dynamic relocation into SRELOC.  */
3292 
3293 static void
mips_elf_output_dynamic_relocation(bfd * output_bfd,asection * sreloc,unsigned long reloc_index,unsigned long indx,int r_type,bfd_vma offset)3294 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3295 				    asection *sreloc,
3296 				    unsigned long reloc_index,
3297 				    unsigned long indx,
3298 				    int r_type,
3299 				    bfd_vma offset)
3300 {
3301   Elf_Internal_Rela rel[3];
3302 
3303   memset (rel, 0, sizeof (rel));
3304 
3305   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3306   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3307 
3308   if (ABI_64_P (output_bfd))
3309     {
3310       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3311 	(output_bfd, &rel[0],
3312 	 (sreloc->contents
3313 	  + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3314     }
3315   else
3316     bfd_elf32_swap_reloc_out
3317       (output_bfd, &rel[0],
3318        (sreloc->contents
3319 	+ reloc_index * sizeof (Elf32_External_Rel)));
3320 }
3321 
3322 /* Initialize a set of TLS GOT entries for one symbol.  */
3323 
3324 static void
mips_elf_initialize_tls_slots(bfd * abfd,struct bfd_link_info * info,struct mips_got_entry * entry,struct mips_elf_link_hash_entry * h,bfd_vma value)3325 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3326 			       struct mips_got_entry *entry,
3327 			       struct mips_elf_link_hash_entry *h,
3328 			       bfd_vma value)
3329 {
3330   struct mips_elf_link_hash_table *htab;
3331   int indx;
3332   asection *sreloc, *sgot;
3333   bfd_vma got_offset, got_offset2;
3334   bfd_boolean need_relocs = FALSE;
3335 
3336   htab = mips_elf_hash_table (info);
3337   if (htab == NULL)
3338     return;
3339 
3340   sgot = htab->sgot;
3341 
3342   indx = 0;
3343   if (h != NULL)
3344     {
3345       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3346 
3347       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
3348 					   &h->root)
3349 	  && (!bfd_link_pic (info)
3350 	      || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3351 	indx = h->root.dynindx;
3352     }
3353 
3354   if (entry->tls_initialized)
3355     return;
3356 
3357   if ((bfd_link_pic (info) || indx != 0)
3358       && (h == NULL
3359 	  || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3360 	  || h->root.type != bfd_link_hash_undefweak))
3361     need_relocs = TRUE;
3362 
3363   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3364      be defined at all; assume that the value doesn't matter in that
3365      case.  Otherwise complain if we would use the value.  */
3366   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3367 	      || h->root.root.type == bfd_link_hash_undefweak);
3368 
3369   /* Emit necessary relocations.  */
3370   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3371   got_offset = entry->gotidx;
3372 
3373   switch (entry->tls_type)
3374     {
3375     case GOT_TLS_GD:
3376       /* General Dynamic.  */
3377       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3378 
3379       if (need_relocs)
3380 	{
3381 	  mips_elf_output_dynamic_relocation
3382 	    (abfd, sreloc, sreloc->reloc_count++, indx,
3383 	     ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3384 	     sgot->output_offset + sgot->output_section->vma + got_offset);
3385 
3386 	  if (indx)
3387 	    mips_elf_output_dynamic_relocation
3388 	      (abfd, sreloc, sreloc->reloc_count++, indx,
3389 	       ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3390 	       sgot->output_offset + sgot->output_section->vma + got_offset2);
3391 	  else
3392 	    MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3393 			       sgot->contents + got_offset2);
3394 	}
3395       else
3396 	{
3397 	  MIPS_ELF_PUT_WORD (abfd, 1,
3398 			     sgot->contents + got_offset);
3399 	  MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3400 			     sgot->contents + got_offset2);
3401 	}
3402       break;
3403 
3404     case GOT_TLS_IE:
3405       /* Initial Exec model.  */
3406       if (need_relocs)
3407 	{
3408 	  if (indx == 0)
3409 	    MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3410 			       sgot->contents + got_offset);
3411 	  else
3412 	    MIPS_ELF_PUT_WORD (abfd, 0,
3413 			       sgot->contents + got_offset);
3414 
3415 	  mips_elf_output_dynamic_relocation
3416 	    (abfd, sreloc, sreloc->reloc_count++, indx,
3417 	     ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3418 	     sgot->output_offset + sgot->output_section->vma + got_offset);
3419 	}
3420       else
3421 	MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3422 			   sgot->contents + got_offset);
3423       break;
3424 
3425     case GOT_TLS_LDM:
3426       /* The initial offset is zero, and the LD offsets will include the
3427 	 bias by DTP_OFFSET.  */
3428       MIPS_ELF_PUT_WORD (abfd, 0,
3429 			 sgot->contents + got_offset
3430 			 + MIPS_ELF_GOT_SIZE (abfd));
3431 
3432       if (!bfd_link_pic (info))
3433 	MIPS_ELF_PUT_WORD (abfd, 1,
3434 			   sgot->contents + got_offset);
3435       else
3436 	mips_elf_output_dynamic_relocation
3437 	  (abfd, sreloc, sreloc->reloc_count++, indx,
3438 	   ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3439 	   sgot->output_offset + sgot->output_section->vma + got_offset);
3440       break;
3441 
3442     default:
3443       abort ();
3444     }
3445 
3446   entry->tls_initialized = TRUE;
3447 }
3448 
3449 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3450    for global symbol H.  .got.plt comes before the GOT, so the offset
3451    will be negative.  */
3452 
3453 static bfd_vma
mips_elf_gotplt_index(struct bfd_link_info * info,struct elf_link_hash_entry * h)3454 mips_elf_gotplt_index (struct bfd_link_info *info,
3455 		       struct elf_link_hash_entry *h)
3456 {
3457   bfd_vma got_address, got_value;
3458   struct mips_elf_link_hash_table *htab;
3459 
3460   htab = mips_elf_hash_table (info);
3461   BFD_ASSERT (htab != NULL);
3462 
3463   BFD_ASSERT (h->plt.plist != NULL);
3464   BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3465 
3466   /* Calculate the address of the associated .got.plt entry.  */
3467   got_address = (htab->sgotplt->output_section->vma
3468 		 + htab->sgotplt->output_offset
3469 		 + (h->plt.plist->gotplt_index
3470 		    * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3471 
3472   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3473   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3474 	       + htab->root.hgot->root.u.def.section->output_offset
3475 	       + htab->root.hgot->root.u.def.value);
3476 
3477   return got_address - got_value;
3478 }
3479 
3480 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3481    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3482    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3483    offset can be found.  */
3484 
3485 static bfd_vma
mips_elf_local_got_index(bfd * abfd,bfd * ibfd,struct bfd_link_info * info,bfd_vma value,unsigned long r_symndx,struct mips_elf_link_hash_entry * h,int r_type)3486 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3487 			  bfd_vma value, unsigned long r_symndx,
3488 			  struct mips_elf_link_hash_entry *h, int r_type)
3489 {
3490   struct mips_elf_link_hash_table *htab;
3491   struct mips_got_entry *entry;
3492 
3493   htab = mips_elf_hash_table (info);
3494   BFD_ASSERT (htab != NULL);
3495 
3496   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3497 					   r_symndx, h, r_type);
3498   if (!entry)
3499     return MINUS_ONE;
3500 
3501   if (entry->tls_type)
3502     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3503   return entry->gotidx;
3504 }
3505 
3506 /* Return the GOT index of global symbol H in the primary GOT.  */
3507 
3508 static bfd_vma
mips_elf_primary_global_got_index(bfd * obfd,struct bfd_link_info * info,struct elf_link_hash_entry * h)3509 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3510 				   struct elf_link_hash_entry *h)
3511 {
3512   struct mips_elf_link_hash_table *htab;
3513   long global_got_dynindx;
3514   struct mips_got_info *g;
3515   bfd_vma got_index;
3516 
3517   htab = mips_elf_hash_table (info);
3518   BFD_ASSERT (htab != NULL);
3519 
3520   global_got_dynindx = 0;
3521   if (htab->global_gotsym != NULL)
3522     global_got_dynindx = htab->global_gotsym->dynindx;
3523 
3524   /* Once we determine the global GOT entry with the lowest dynamic
3525      symbol table index, we must put all dynamic symbols with greater
3526      indices into the primary GOT.  That makes it easy to calculate the
3527      GOT offset.  */
3528   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3529   g = mips_elf_bfd_got (obfd, FALSE);
3530   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3531 	       * MIPS_ELF_GOT_SIZE (obfd));
3532   BFD_ASSERT (got_index < htab->sgot->size);
3533 
3534   return got_index;
3535 }
3536 
3537 /* Return the GOT index for the global symbol indicated by H, which is
3538    referenced by a relocation of type R_TYPE in IBFD.  */
3539 
3540 static bfd_vma
mips_elf_global_got_index(bfd * obfd,struct bfd_link_info * info,bfd * ibfd,struct elf_link_hash_entry * h,int r_type)3541 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3542 			   struct elf_link_hash_entry *h, int r_type)
3543 {
3544   struct mips_elf_link_hash_table *htab;
3545   struct mips_got_info *g;
3546   struct mips_got_entry lookup, *entry;
3547   bfd_vma gotidx;
3548 
3549   htab = mips_elf_hash_table (info);
3550   BFD_ASSERT (htab != NULL);
3551 
3552   g = mips_elf_bfd_got (ibfd, FALSE);
3553   BFD_ASSERT (g);
3554 
3555   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3556   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3557     return mips_elf_primary_global_got_index (obfd, info, h);
3558 
3559   lookup.abfd = ibfd;
3560   lookup.symndx = -1;
3561   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3562   entry = htab_find (g->got_entries, &lookup);
3563   BFD_ASSERT (entry);
3564 
3565   gotidx = entry->gotidx;
3566   BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3567 
3568   if (lookup.tls_type)
3569     {
3570       bfd_vma value = MINUS_ONE;
3571 
3572       if ((h->root.type == bfd_link_hash_defined
3573 	   || h->root.type == bfd_link_hash_defweak)
3574 	  && h->root.u.def.section->output_section)
3575 	value = (h->root.u.def.value
3576 		 + h->root.u.def.section->output_offset
3577 		 + h->root.u.def.section->output_section->vma);
3578 
3579       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3580     }
3581   return gotidx;
3582 }
3583 
3584 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3585    entries are supposed to be placed at small offsets in the GOT, i.e.,
3586    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3587    entry could be created.  If OFFSETP is nonnull, use it to return the
3588    offset of the GOT entry from VALUE.  */
3589 
3590 static bfd_vma
mips_elf_got_page(bfd * abfd,bfd * ibfd,struct bfd_link_info * info,bfd_vma value,bfd_vma * offsetp)3591 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3592 		   bfd_vma value, bfd_vma *offsetp)
3593 {
3594   bfd_vma page, got_index;
3595   struct mips_got_entry *entry;
3596 
3597   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3598   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3599 					   NULL, R_MIPS_GOT_PAGE);
3600 
3601   if (!entry)
3602     return MINUS_ONE;
3603 
3604   got_index = entry->gotidx;
3605 
3606   if (offsetp)
3607     *offsetp = value - entry->d.address;
3608 
3609   return got_index;
3610 }
3611 
3612 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3613    EXTERNAL is true if the relocation was originally against a global
3614    symbol that binds locally.  */
3615 
3616 static bfd_vma
mips_elf_got16_entry(bfd * abfd,bfd * ibfd,struct bfd_link_info * info,bfd_vma value,bfd_boolean external)3617 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3618 		      bfd_vma value, bfd_boolean external)
3619 {
3620   struct mips_got_entry *entry;
3621 
3622   /* GOT16 relocations against local symbols are followed by a LO16
3623      relocation; those against global symbols are not.  Thus if the
3624      symbol was originally local, the GOT16 relocation should load the
3625      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3626   if (! external)
3627     value = mips_elf_high (value) << 16;
3628 
3629   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3630      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3631      same in all cases.  */
3632   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3633 					   NULL, R_MIPS_GOT16);
3634   if (entry)
3635     return entry->gotidx;
3636   else
3637     return MINUS_ONE;
3638 }
3639 
3640 /* Returns the offset for the entry at the INDEXth position
3641    in the GOT.  */
3642 
3643 static bfd_vma
mips_elf_got_offset_from_index(struct bfd_link_info * info,bfd * output_bfd,bfd * input_bfd,bfd_vma got_index)3644 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3645 				bfd *input_bfd, bfd_vma got_index)
3646 {
3647   struct mips_elf_link_hash_table *htab;
3648   asection *sgot;
3649   bfd_vma gp;
3650 
3651   htab = mips_elf_hash_table (info);
3652   BFD_ASSERT (htab != NULL);
3653 
3654   sgot = htab->sgot;
3655   gp = _bfd_get_gp_value (output_bfd)
3656     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3657 
3658   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3659 }
3660 
3661 /* Create and return a local GOT entry for VALUE, which was calculated
3662    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3663    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3664    instead.  */
3665 
3666 static struct mips_got_entry *
mips_elf_create_local_got_entry(bfd * abfd,struct bfd_link_info * info,bfd * ibfd,bfd_vma value,unsigned long r_symndx,struct mips_elf_link_hash_entry * h,int r_type)3667 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3668 				 bfd *ibfd, bfd_vma value,
3669 				 unsigned long r_symndx,
3670 				 struct mips_elf_link_hash_entry *h,
3671 				 int r_type)
3672 {
3673   struct mips_got_entry lookup, *entry;
3674   void **loc;
3675   struct mips_got_info *g;
3676   struct mips_elf_link_hash_table *htab;
3677   bfd_vma gotidx;
3678 
3679   htab = mips_elf_hash_table (info);
3680   BFD_ASSERT (htab != NULL);
3681 
3682   g = mips_elf_bfd_got (ibfd, FALSE);
3683   if (g == NULL)
3684     {
3685       g = mips_elf_bfd_got (abfd, FALSE);
3686       BFD_ASSERT (g != NULL);
3687     }
3688 
3689   /* This function shouldn't be called for symbols that live in the global
3690      area of the GOT.  */
3691   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3692 
3693   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3694   if (lookup.tls_type)
3695     {
3696       lookup.abfd = ibfd;
3697       if (tls_ldm_reloc_p (r_type))
3698 	{
3699 	  lookup.symndx = 0;
3700 	  lookup.d.addend = 0;
3701 	}
3702       else if (h == NULL)
3703 	{
3704 	  lookup.symndx = r_symndx;
3705 	  lookup.d.addend = 0;
3706 	}
3707       else
3708 	{
3709 	  lookup.symndx = -1;
3710 	  lookup.d.h = h;
3711 	}
3712 
3713       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3714       BFD_ASSERT (entry);
3715 
3716       gotidx = entry->gotidx;
3717       BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3718 
3719       return entry;
3720     }
3721 
3722   lookup.abfd = NULL;
3723   lookup.symndx = -1;
3724   lookup.d.address = value;
3725   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3726   if (!loc)
3727     return NULL;
3728 
3729   entry = (struct mips_got_entry *) *loc;
3730   if (entry)
3731     return entry;
3732 
3733   if (g->assigned_low_gotno > g->assigned_high_gotno)
3734     {
3735       /* We didn't allocate enough space in the GOT.  */
3736       (*_bfd_error_handler)
3737 	(_("not enough GOT space for local GOT entries"));
3738       bfd_set_error (bfd_error_bad_value);
3739       return NULL;
3740     }
3741 
3742   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3743   if (!entry)
3744     return NULL;
3745 
3746   if (got16_reloc_p (r_type)
3747       || call16_reloc_p (r_type)
3748       || got_page_reloc_p (r_type)
3749       || got_disp_reloc_p (r_type))
3750     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3751   else
3752     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3753 
3754   *entry = lookup;
3755   *loc = entry;
3756 
3757   MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3758 
3759   /* These GOT entries need a dynamic relocation on VxWorks.  */
3760   if (htab->is_vxworks)
3761     {
3762       Elf_Internal_Rela outrel;
3763       asection *s;
3764       bfd_byte *rloc;
3765       bfd_vma got_address;
3766 
3767       s = mips_elf_rel_dyn_section (info, FALSE);
3768       got_address = (htab->sgot->output_section->vma
3769 		     + htab->sgot->output_offset
3770 		     + entry->gotidx);
3771 
3772       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3773       outrel.r_offset = got_address;
3774       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3775       outrel.r_addend = value;
3776       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3777     }
3778 
3779   return entry;
3780 }
3781 
3782 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3783    The number might be exact or a worst-case estimate, depending on how
3784    much information is available to elf_backend_omit_section_dynsym at
3785    the current linking stage.  */
3786 
3787 static bfd_size_type
count_section_dynsyms(bfd * output_bfd,struct bfd_link_info * info)3788 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3789 {
3790   bfd_size_type count;
3791 
3792   count = 0;
3793   if (bfd_link_pic (info)
3794       || elf_hash_table (info)->is_relocatable_executable)
3795     {
3796       asection *p;
3797       const struct elf_backend_data *bed;
3798 
3799       bed = get_elf_backend_data (output_bfd);
3800       for (p = output_bfd->sections; p ; p = p->next)
3801 	if ((p->flags & SEC_EXCLUDE) == 0
3802 	    && (p->flags & SEC_ALLOC) != 0
3803 	    && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3804 	  ++count;
3805     }
3806   return count;
3807 }
3808 
3809 /* Sort the dynamic symbol table so that symbols that need GOT entries
3810    appear towards the end.  */
3811 
3812 static bfd_boolean
mips_elf_sort_hash_table(bfd * abfd,struct bfd_link_info * info)3813 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3814 {
3815   struct mips_elf_link_hash_table *htab;
3816   struct mips_elf_hash_sort_data hsd;
3817   struct mips_got_info *g;
3818 
3819   if (elf_hash_table (info)->dynsymcount == 0)
3820     return TRUE;
3821 
3822   htab = mips_elf_hash_table (info);
3823   BFD_ASSERT (htab != NULL);
3824 
3825   g = htab->got_info;
3826   if (g == NULL)
3827     return TRUE;
3828 
3829   hsd.low = NULL;
3830   hsd.max_unref_got_dynindx
3831     = hsd.min_got_dynindx
3832     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3833   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3834   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3835 				elf_hash_table (info)),
3836 			       mips_elf_sort_hash_table_f,
3837 			       &hsd);
3838 
3839   /* There should have been enough room in the symbol table to
3840      accommodate both the GOT and non-GOT symbols.  */
3841   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3842   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3843 	      == elf_hash_table (info)->dynsymcount);
3844   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3845 	      == g->global_gotno);
3846 
3847   /* Now we know which dynamic symbol has the lowest dynamic symbol
3848      table index in the GOT.  */
3849   htab->global_gotsym = hsd.low;
3850 
3851   return TRUE;
3852 }
3853 
3854 /* If H needs a GOT entry, assign it the highest available dynamic
3855    index.  Otherwise, assign it the lowest available dynamic
3856    index.  */
3857 
3858 static bfd_boolean
mips_elf_sort_hash_table_f(struct mips_elf_link_hash_entry * h,void * data)3859 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3860 {
3861   struct mips_elf_hash_sort_data *hsd = data;
3862 
3863   /* Symbols without dynamic symbol table entries aren't interesting
3864      at all.  */
3865   if (h->root.dynindx == -1)
3866     return TRUE;
3867 
3868   switch (h->global_got_area)
3869     {
3870     case GGA_NONE:
3871       h->root.dynindx = hsd->max_non_got_dynindx++;
3872       break;
3873 
3874     case GGA_NORMAL:
3875       h->root.dynindx = --hsd->min_got_dynindx;
3876       hsd->low = (struct elf_link_hash_entry *) h;
3877       break;
3878 
3879     case GGA_RELOC_ONLY:
3880       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3881 	hsd->low = (struct elf_link_hash_entry *) h;
3882       h->root.dynindx = hsd->max_unref_got_dynindx++;
3883       break;
3884     }
3885 
3886   return TRUE;
3887 }
3888 
3889 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3890    (which is owned by the caller and shouldn't be added to the
3891    hash table directly).  */
3892 
3893 static bfd_boolean
mips_elf_record_got_entry(struct bfd_link_info * info,bfd * abfd,struct mips_got_entry * lookup)3894 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3895 			   struct mips_got_entry *lookup)
3896 {
3897   struct mips_elf_link_hash_table *htab;
3898   struct mips_got_entry *entry;
3899   struct mips_got_info *g;
3900   void **loc, **bfd_loc;
3901 
3902   /* Make sure there's a slot for this entry in the master GOT.  */
3903   htab = mips_elf_hash_table (info);
3904   g = htab->got_info;
3905   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3906   if (!loc)
3907     return FALSE;
3908 
3909   /* Populate the entry if it isn't already.  */
3910   entry = (struct mips_got_entry *) *loc;
3911   if (!entry)
3912     {
3913       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3914       if (!entry)
3915 	return FALSE;
3916 
3917       lookup->tls_initialized = FALSE;
3918       lookup->gotidx = -1;
3919       *entry = *lookup;
3920       *loc = entry;
3921     }
3922 
3923   /* Reuse the same GOT entry for the BFD's GOT.  */
3924   g = mips_elf_bfd_got (abfd, TRUE);
3925   if (!g)
3926     return FALSE;
3927 
3928   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3929   if (!bfd_loc)
3930     return FALSE;
3931 
3932   if (!*bfd_loc)
3933     *bfd_loc = entry;
3934   return TRUE;
3935 }
3936 
3937 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3938    entry for it.  FOR_CALL is true if the caller is only interested in
3939    using the GOT entry for calls.  */
3940 
3941 static bfd_boolean
mips_elf_record_global_got_symbol(struct elf_link_hash_entry * h,bfd * abfd,struct bfd_link_info * info,bfd_boolean for_call,int r_type)3942 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3943 				   bfd *abfd, struct bfd_link_info *info,
3944 				   bfd_boolean for_call, int r_type)
3945 {
3946   struct mips_elf_link_hash_table *htab;
3947   struct mips_elf_link_hash_entry *hmips;
3948   struct mips_got_entry entry;
3949   unsigned char tls_type;
3950 
3951   htab = mips_elf_hash_table (info);
3952   BFD_ASSERT (htab != NULL);
3953 
3954   hmips = (struct mips_elf_link_hash_entry *) h;
3955   if (!for_call)
3956     hmips->got_only_for_calls = FALSE;
3957 
3958   /* A global symbol in the GOT must also be in the dynamic symbol
3959      table.  */
3960   if (h->dynindx == -1)
3961     {
3962       switch (ELF_ST_VISIBILITY (h->other))
3963 	{
3964 	case STV_INTERNAL:
3965 	case STV_HIDDEN:
3966 	  _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3967 	  break;
3968 	}
3969       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3970 	return FALSE;
3971     }
3972 
3973   tls_type = mips_elf_reloc_tls_type (r_type);
3974   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3975     hmips->global_got_area = GGA_NORMAL;
3976 
3977   entry.abfd = abfd;
3978   entry.symndx = -1;
3979   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3980   entry.tls_type = tls_type;
3981   return mips_elf_record_got_entry (info, abfd, &entry);
3982 }
3983 
3984 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3985    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3986 
3987 static bfd_boolean
mips_elf_record_local_got_symbol(bfd * abfd,long symndx,bfd_vma addend,struct bfd_link_info * info,int r_type)3988 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3989 				  struct bfd_link_info *info, int r_type)
3990 {
3991   struct mips_elf_link_hash_table *htab;
3992   struct mips_got_info *g;
3993   struct mips_got_entry entry;
3994 
3995   htab = mips_elf_hash_table (info);
3996   BFD_ASSERT (htab != NULL);
3997 
3998   g = htab->got_info;
3999   BFD_ASSERT (g != NULL);
4000 
4001   entry.abfd = abfd;
4002   entry.symndx = symndx;
4003   entry.d.addend = addend;
4004   entry.tls_type = mips_elf_reloc_tls_type (r_type);
4005   return mips_elf_record_got_entry (info, abfd, &entry);
4006 }
4007 
4008 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
4009    H is the symbol's hash table entry, or null if SYMNDX is local
4010    to ABFD.  */
4011 
4012 static bfd_boolean
mips_elf_record_got_page_ref(struct bfd_link_info * info,bfd * abfd,long symndx,struct elf_link_hash_entry * h,bfd_signed_vma addend)4013 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4014 			      long symndx, struct elf_link_hash_entry *h,
4015 			      bfd_signed_vma addend)
4016 {
4017   struct mips_elf_link_hash_table *htab;
4018   struct mips_got_info *g1, *g2;
4019   struct mips_got_page_ref lookup, *entry;
4020   void **loc, **bfd_loc;
4021 
4022   htab = mips_elf_hash_table (info);
4023   BFD_ASSERT (htab != NULL);
4024 
4025   g1 = htab->got_info;
4026   BFD_ASSERT (g1 != NULL);
4027 
4028   if (h)
4029     {
4030       lookup.symndx = -1;
4031       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4032     }
4033   else
4034     {
4035       lookup.symndx = symndx;
4036       lookup.u.abfd = abfd;
4037     }
4038   lookup.addend = addend;
4039   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4040   if (loc == NULL)
4041     return FALSE;
4042 
4043   entry = (struct mips_got_page_ref *) *loc;
4044   if (!entry)
4045     {
4046       entry = bfd_alloc (abfd, sizeof (*entry));
4047       if (!entry)
4048 	return FALSE;
4049 
4050       *entry = lookup;
4051       *loc = entry;
4052     }
4053 
4054   /* Add the same entry to the BFD's GOT.  */
4055   g2 = mips_elf_bfd_got (abfd, TRUE);
4056   if (!g2)
4057     return FALSE;
4058 
4059   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4060   if (!bfd_loc)
4061     return FALSE;
4062 
4063   if (!*bfd_loc)
4064     *bfd_loc = entry;
4065 
4066   return TRUE;
4067 }
4068 
4069 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4070 
4071 static void
mips_elf_allocate_dynamic_relocations(bfd * abfd,struct bfd_link_info * info,unsigned int n)4072 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4073 				       unsigned int n)
4074 {
4075   asection *s;
4076   struct mips_elf_link_hash_table *htab;
4077 
4078   htab = mips_elf_hash_table (info);
4079   BFD_ASSERT (htab != NULL);
4080 
4081   s = mips_elf_rel_dyn_section (info, FALSE);
4082   BFD_ASSERT (s != NULL);
4083 
4084   if (htab->is_vxworks)
4085     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4086   else
4087     {
4088       if (s->size == 0)
4089 	{
4090 	  /* Make room for a null element.  */
4091 	  s->size += MIPS_ELF_REL_SIZE (abfd);
4092 	  ++s->reloc_count;
4093 	}
4094       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4095     }
4096 }
4097 
4098 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4099    mips_elf_traverse_got_arg structure.  Count the number of GOT
4100    entries and TLS relocs.  Set DATA->value to true if we need
4101    to resolve indirect or warning symbols and then recreate the GOT.  */
4102 
4103 static int
mips_elf_check_recreate_got(void ** entryp,void * data)4104 mips_elf_check_recreate_got (void **entryp, void *data)
4105 {
4106   struct mips_got_entry *entry;
4107   struct mips_elf_traverse_got_arg *arg;
4108 
4109   entry = (struct mips_got_entry *) *entryp;
4110   arg = (struct mips_elf_traverse_got_arg *) data;
4111   if (entry->abfd != NULL && entry->symndx == -1)
4112     {
4113       struct mips_elf_link_hash_entry *h;
4114 
4115       h = entry->d.h;
4116       if (h->root.root.type == bfd_link_hash_indirect
4117 	  || h->root.root.type == bfd_link_hash_warning)
4118 	{
4119 	  arg->value = TRUE;
4120 	  return 0;
4121 	}
4122     }
4123   mips_elf_count_got_entry (arg->info, arg->g, entry);
4124   return 1;
4125 }
4126 
4127 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4128    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4129    converting entries for indirect and warning symbols into entries
4130    for the target symbol.  Set DATA->g to null on error.  */
4131 
4132 static int
mips_elf_recreate_got(void ** entryp,void * data)4133 mips_elf_recreate_got (void **entryp, void *data)
4134 {
4135   struct mips_got_entry new_entry, *entry;
4136   struct mips_elf_traverse_got_arg *arg;
4137   void **slot;
4138 
4139   entry = (struct mips_got_entry *) *entryp;
4140   arg = (struct mips_elf_traverse_got_arg *) data;
4141   if (entry->abfd != NULL
4142       && entry->symndx == -1
4143       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4144 	  || entry->d.h->root.root.type == bfd_link_hash_warning))
4145     {
4146       struct mips_elf_link_hash_entry *h;
4147 
4148       new_entry = *entry;
4149       entry = &new_entry;
4150       h = entry->d.h;
4151       do
4152 	{
4153 	  BFD_ASSERT (h->global_got_area == GGA_NONE);
4154 	  h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4155 	}
4156       while (h->root.root.type == bfd_link_hash_indirect
4157 	     || h->root.root.type == bfd_link_hash_warning);
4158       entry->d.h = h;
4159     }
4160   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4161   if (slot == NULL)
4162     {
4163       arg->g = NULL;
4164       return 0;
4165     }
4166   if (*slot == NULL)
4167     {
4168       if (entry == &new_entry)
4169 	{
4170 	  entry = bfd_alloc (entry->abfd, sizeof (*entry));
4171 	  if (!entry)
4172 	    {
4173 	      arg->g = NULL;
4174 	      return 0;
4175 	    }
4176 	  *entry = new_entry;
4177 	}
4178       *slot = entry;
4179       mips_elf_count_got_entry (arg->info, arg->g, entry);
4180     }
4181   return 1;
4182 }
4183 
4184 /* Return the maximum number of GOT page entries required for RANGE.  */
4185 
4186 static bfd_vma
mips_elf_pages_for_range(const struct mips_got_page_range * range)4187 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4188 {
4189   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4190 }
4191 
4192 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
4193 
4194 static bfd_boolean
mips_elf_record_got_page_entry(struct mips_elf_traverse_got_arg * arg,asection * sec,bfd_signed_vma addend)4195 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4196 				asection *sec, bfd_signed_vma addend)
4197 {
4198   struct mips_got_info *g = arg->g;
4199   struct mips_got_page_entry lookup, *entry;
4200   struct mips_got_page_range **range_ptr, *range;
4201   bfd_vma old_pages, new_pages;
4202   void **loc;
4203 
4204   /* Find the mips_got_page_entry hash table entry for this section.  */
4205   lookup.sec = sec;
4206   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4207   if (loc == NULL)
4208     return FALSE;
4209 
4210   /* Create a mips_got_page_entry if this is the first time we've
4211      seen the section.  */
4212   entry = (struct mips_got_page_entry *) *loc;
4213   if (!entry)
4214     {
4215       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4216       if (!entry)
4217 	return FALSE;
4218 
4219       entry->sec = sec;
4220       *loc = entry;
4221     }
4222 
4223   /* Skip over ranges whose maximum extent cannot share a page entry
4224      with ADDEND.  */
4225   range_ptr = &entry->ranges;
4226   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4227     range_ptr = &(*range_ptr)->next;
4228 
4229   /* If we scanned to the end of the list, or found a range whose
4230      minimum extent cannot share a page entry with ADDEND, create
4231      a new singleton range.  */
4232   range = *range_ptr;
4233   if (!range || addend < range->min_addend - 0xffff)
4234     {
4235       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4236       if (!range)
4237 	return FALSE;
4238 
4239       range->next = *range_ptr;
4240       range->min_addend = addend;
4241       range->max_addend = addend;
4242 
4243       *range_ptr = range;
4244       entry->num_pages++;
4245       g->page_gotno++;
4246       return TRUE;
4247     }
4248 
4249   /* Remember how many pages the old range contributed.  */
4250   old_pages = mips_elf_pages_for_range (range);
4251 
4252   /* Update the ranges.  */
4253   if (addend < range->min_addend)
4254     range->min_addend = addend;
4255   else if (addend > range->max_addend)
4256     {
4257       if (range->next && addend >= range->next->min_addend - 0xffff)
4258 	{
4259 	  old_pages += mips_elf_pages_for_range (range->next);
4260 	  range->max_addend = range->next->max_addend;
4261 	  range->next = range->next->next;
4262 	}
4263       else
4264 	range->max_addend = addend;
4265     }
4266 
4267   /* Record any change in the total estimate.  */
4268   new_pages = mips_elf_pages_for_range (range);
4269   if (old_pages != new_pages)
4270     {
4271       entry->num_pages += new_pages - old_pages;
4272       g->page_gotno += new_pages - old_pages;
4273     }
4274 
4275   return TRUE;
4276 }
4277 
4278 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4279    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4280    whether the page reference described by *REFP needs a GOT page entry,
4281    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4282 
4283 static bfd_boolean
mips_elf_resolve_got_page_ref(void ** refp,void * data)4284 mips_elf_resolve_got_page_ref (void **refp, void *data)
4285 {
4286   struct mips_got_page_ref *ref;
4287   struct mips_elf_traverse_got_arg *arg;
4288   struct mips_elf_link_hash_table *htab;
4289   asection *sec;
4290   bfd_vma addend;
4291 
4292   ref = (struct mips_got_page_ref *) *refp;
4293   arg = (struct mips_elf_traverse_got_arg *) data;
4294   htab = mips_elf_hash_table (arg->info);
4295 
4296   if (ref->symndx < 0)
4297     {
4298       struct mips_elf_link_hash_entry *h;
4299 
4300       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4301       h = ref->u.h;
4302       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4303 	return 1;
4304 
4305       /* Ignore undefined symbols; we'll issue an error later if
4306 	 appropriate.  */
4307       if (!((h->root.root.type == bfd_link_hash_defined
4308 	     || h->root.root.type == bfd_link_hash_defweak)
4309 	    && h->root.root.u.def.section))
4310 	return 1;
4311 
4312       sec = h->root.root.u.def.section;
4313       addend = h->root.root.u.def.value + ref->addend;
4314     }
4315   else
4316     {
4317       Elf_Internal_Sym *isym;
4318 
4319       /* Read in the symbol.  */
4320       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4321 				    ref->symndx);
4322       if (isym == NULL)
4323 	{
4324 	  arg->g = NULL;
4325 	  return 0;
4326 	}
4327 
4328       /* Get the associated input section.  */
4329       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4330       if (sec == NULL)
4331 	{
4332 	  arg->g = NULL;
4333 	  return 0;
4334 	}
4335 
4336       /* If this is a mergable section, work out the section and offset
4337 	 of the merged data.  For section symbols, the addend specifies
4338 	 of the offset _of_ the first byte in the data, otherwise it
4339 	 specifies the offset _from_ the first byte.  */
4340       if (sec->flags & SEC_MERGE)
4341 	{
4342 	  void *secinfo;
4343 
4344 	  secinfo = elf_section_data (sec)->sec_info;
4345 	  if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4346 	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4347 						 isym->st_value + ref->addend);
4348 	  else
4349 	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4350 						 isym->st_value) + ref->addend;
4351 	}
4352       else
4353 	addend = isym->st_value + ref->addend;
4354     }
4355   if (!mips_elf_record_got_page_entry (arg, sec, addend))
4356     {
4357       arg->g = NULL;
4358       return 0;
4359     }
4360   return 1;
4361 }
4362 
4363 /* If any entries in G->got_entries are for indirect or warning symbols,
4364    replace them with entries for the target symbol.  Convert g->got_page_refs
4365    into got_page_entry structures and estimate the number of page entries
4366    that they require.  */
4367 
4368 static bfd_boolean
mips_elf_resolve_final_got_entries(struct bfd_link_info * info,struct mips_got_info * g)4369 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4370 				    struct mips_got_info *g)
4371 {
4372   struct mips_elf_traverse_got_arg tga;
4373   struct mips_got_info oldg;
4374 
4375   oldg = *g;
4376 
4377   tga.info = info;
4378   tga.g = g;
4379   tga.value = FALSE;
4380   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4381   if (tga.value)
4382     {
4383       *g = oldg;
4384       g->got_entries = htab_create (htab_size (oldg.got_entries),
4385 				    mips_elf_got_entry_hash,
4386 				    mips_elf_got_entry_eq, NULL);
4387       if (!g->got_entries)
4388 	return FALSE;
4389 
4390       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4391       if (!tga.g)
4392 	return FALSE;
4393 
4394       htab_delete (oldg.got_entries);
4395     }
4396 
4397   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4398 					 mips_got_page_entry_eq, NULL);
4399   if (g->got_page_entries == NULL)
4400     return FALSE;
4401 
4402   tga.info = info;
4403   tga.g = g;
4404   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4405 
4406   return TRUE;
4407 }
4408 
4409 /* Return true if a GOT entry for H should live in the local rather than
4410    global GOT area.  */
4411 
4412 static bfd_boolean
mips_use_local_got_p(struct bfd_link_info * info,struct mips_elf_link_hash_entry * h)4413 mips_use_local_got_p (struct bfd_link_info *info,
4414 		      struct mips_elf_link_hash_entry *h)
4415 {
4416   /* Symbols that aren't in the dynamic symbol table must live in the
4417      local GOT.  This includes symbols that are completely undefined
4418      and which therefore don't bind locally.  We'll report undefined
4419      symbols later if appropriate.  */
4420   if (h->root.dynindx == -1)
4421     return TRUE;
4422 
4423   /* Symbols that bind locally can (and in the case of forced-local
4424      symbols, must) live in the local GOT.  */
4425   if (h->got_only_for_calls
4426       ? SYMBOL_CALLS_LOCAL (info, &h->root)
4427       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4428     return TRUE;
4429 
4430   /* If this is an executable that must provide a definition of the symbol,
4431      either though PLTs or copy relocations, then that address should go in
4432      the local rather than global GOT.  */
4433   if (bfd_link_executable (info) && h->has_static_relocs)
4434     return TRUE;
4435 
4436   return FALSE;
4437 }
4438 
4439 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4440    link_info structure.  Decide whether the hash entry needs an entry in
4441    the global part of the primary GOT, setting global_got_area accordingly.
4442    Count the number of global symbols that are in the primary GOT only
4443    because they have relocations against them (reloc_only_gotno).  */
4444 
4445 static int
mips_elf_count_got_symbols(struct mips_elf_link_hash_entry * h,void * data)4446 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4447 {
4448   struct bfd_link_info *info;
4449   struct mips_elf_link_hash_table *htab;
4450   struct mips_got_info *g;
4451 
4452   info = (struct bfd_link_info *) data;
4453   htab = mips_elf_hash_table (info);
4454   g = htab->got_info;
4455   if (h->global_got_area != GGA_NONE)
4456     {
4457       /* Make a final decision about whether the symbol belongs in the
4458 	 local or global GOT.  */
4459       if (mips_use_local_got_p (info, h))
4460 	/* The symbol belongs in the local GOT.  We no longer need this
4461 	   entry if it was only used for relocations; those relocations
4462 	   will be against the null or section symbol instead of H.  */
4463 	h->global_got_area = GGA_NONE;
4464       else if (htab->is_vxworks
4465 	       && h->got_only_for_calls
4466 	       && h->root.plt.plist->mips_offset != MINUS_ONE)
4467 	/* On VxWorks, calls can refer directly to the .got.plt entry;
4468 	   they don't need entries in the regular GOT.  .got.plt entries
4469 	   will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4470 	h->global_got_area = GGA_NONE;
4471       else if (h->global_got_area == GGA_RELOC_ONLY)
4472 	{
4473 	  g->reloc_only_gotno++;
4474 	  g->global_gotno++;
4475 	}
4476     }
4477   return 1;
4478 }
4479 
4480 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4481    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4482 
4483 static int
mips_elf_add_got_entry(void ** entryp,void * data)4484 mips_elf_add_got_entry (void **entryp, void *data)
4485 {
4486   struct mips_got_entry *entry;
4487   struct mips_elf_traverse_got_arg *arg;
4488   void **slot;
4489 
4490   entry = (struct mips_got_entry *) *entryp;
4491   arg = (struct mips_elf_traverse_got_arg *) data;
4492   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4493   if (!slot)
4494     {
4495       arg->g = NULL;
4496       return 0;
4497     }
4498   if (!*slot)
4499     {
4500       *slot = entry;
4501       mips_elf_count_got_entry (arg->info, arg->g, entry);
4502     }
4503   return 1;
4504 }
4505 
4506 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4507    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4508 
4509 static int
mips_elf_add_got_page_entry(void ** entryp,void * data)4510 mips_elf_add_got_page_entry (void **entryp, void *data)
4511 {
4512   struct mips_got_page_entry *entry;
4513   struct mips_elf_traverse_got_arg *arg;
4514   void **slot;
4515 
4516   entry = (struct mips_got_page_entry *) *entryp;
4517   arg = (struct mips_elf_traverse_got_arg *) data;
4518   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4519   if (!slot)
4520     {
4521       arg->g = NULL;
4522       return 0;
4523     }
4524   if (!*slot)
4525     {
4526       *slot = entry;
4527       arg->g->page_gotno += entry->num_pages;
4528     }
4529   return 1;
4530 }
4531 
4532 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4533    this would lead to overflow, 1 if they were merged successfully,
4534    and 0 if a merge failed due to lack of memory.  (These values are chosen
4535    so that nonnegative return values can be returned by a htab_traverse
4536    callback.)  */
4537 
4538 static int
mips_elf_merge_got_with(bfd * abfd,struct mips_got_info * from,struct mips_got_info * to,struct mips_elf_got_per_bfd_arg * arg)4539 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4540 			 struct mips_got_info *to,
4541 			 struct mips_elf_got_per_bfd_arg *arg)
4542 {
4543   struct mips_elf_traverse_got_arg tga;
4544   unsigned int estimate;
4545 
4546   /* Work out how many page entries we would need for the combined GOT.  */
4547   estimate = arg->max_pages;
4548   if (estimate >= from->page_gotno + to->page_gotno)
4549     estimate = from->page_gotno + to->page_gotno;
4550 
4551   /* And conservatively estimate how many local and TLS entries
4552      would be needed.  */
4553   estimate += from->local_gotno + to->local_gotno;
4554   estimate += from->tls_gotno + to->tls_gotno;
4555 
4556   /* If we're merging with the primary got, any TLS relocations will
4557      come after the full set of global entries.  Otherwise estimate those
4558      conservatively as well.  */
4559   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4560     estimate += arg->global_count;
4561   else
4562     estimate += from->global_gotno + to->global_gotno;
4563 
4564   /* Bail out if the combined GOT might be too big.  */
4565   if (estimate > arg->max_count)
4566     return -1;
4567 
4568   /* Transfer the bfd's got information from FROM to TO.  */
4569   tga.info = arg->info;
4570   tga.g = to;
4571   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4572   if (!tga.g)
4573     return 0;
4574 
4575   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4576   if (!tga.g)
4577     return 0;
4578 
4579   mips_elf_replace_bfd_got (abfd, to);
4580   return 1;
4581 }
4582 
4583 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4584    as possible of the primary got, since it doesn't require explicit
4585    dynamic relocations, but don't use bfds that would reference global
4586    symbols out of the addressable range.  Failing the primary got,
4587    attempt to merge with the current got, or finish the current got
4588    and then make make the new got current.  */
4589 
4590 static bfd_boolean
mips_elf_merge_got(bfd * abfd,struct mips_got_info * g,struct mips_elf_got_per_bfd_arg * arg)4591 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4592 		    struct mips_elf_got_per_bfd_arg *arg)
4593 {
4594   unsigned int estimate;
4595   int result;
4596 
4597   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4598     return FALSE;
4599 
4600   /* Work out the number of page, local and TLS entries.  */
4601   estimate = arg->max_pages;
4602   if (estimate > g->page_gotno)
4603     estimate = g->page_gotno;
4604   estimate += g->local_gotno + g->tls_gotno;
4605 
4606   /* We place TLS GOT entries after both locals and globals.  The globals
4607      for the primary GOT may overflow the normal GOT size limit, so be
4608      sure not to merge a GOT which requires TLS with the primary GOT in that
4609      case.  This doesn't affect non-primary GOTs.  */
4610   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4611 
4612   if (estimate <= arg->max_count)
4613     {
4614       /* If we don't have a primary GOT, use it as
4615 	 a starting point for the primary GOT.  */
4616       if (!arg->primary)
4617 	{
4618 	  arg->primary = g;
4619 	  return TRUE;
4620 	}
4621 
4622       /* Try merging with the primary GOT.  */
4623       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4624       if (result >= 0)
4625 	return result;
4626     }
4627 
4628   /* If we can merge with the last-created got, do it.  */
4629   if (arg->current)
4630     {
4631       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4632       if (result >= 0)
4633 	return result;
4634     }
4635 
4636   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4637      fits; if it turns out that it doesn't, we'll get relocation
4638      overflows anyway.  */
4639   g->next = arg->current;
4640   arg->current = g;
4641 
4642   return TRUE;
4643 }
4644 
4645 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4646    to GOTIDX, duplicating the entry if it has already been assigned
4647    an index in a different GOT.  */
4648 
4649 static bfd_boolean
mips_elf_set_gotidx(void ** entryp,long gotidx)4650 mips_elf_set_gotidx (void **entryp, long gotidx)
4651 {
4652   struct mips_got_entry *entry;
4653 
4654   entry = (struct mips_got_entry *) *entryp;
4655   if (entry->gotidx > 0)
4656     {
4657       struct mips_got_entry *new_entry;
4658 
4659       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4660       if (!new_entry)
4661 	return FALSE;
4662 
4663       *new_entry = *entry;
4664       *entryp = new_entry;
4665       entry = new_entry;
4666     }
4667   entry->gotidx = gotidx;
4668   return TRUE;
4669 }
4670 
4671 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4672    mips_elf_traverse_got_arg in which DATA->value is the size of one
4673    GOT entry.  Set DATA->g to null on failure.  */
4674 
4675 static int
mips_elf_initialize_tls_index(void ** entryp,void * data)4676 mips_elf_initialize_tls_index (void **entryp, void *data)
4677 {
4678   struct mips_got_entry *entry;
4679   struct mips_elf_traverse_got_arg *arg;
4680 
4681   /* We're only interested in TLS symbols.  */
4682   entry = (struct mips_got_entry *) *entryp;
4683   if (entry->tls_type == GOT_TLS_NONE)
4684     return 1;
4685 
4686   arg = (struct mips_elf_traverse_got_arg *) data;
4687   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4688     {
4689       arg->g = NULL;
4690       return 0;
4691     }
4692 
4693   /* Account for the entries we've just allocated.  */
4694   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4695   return 1;
4696 }
4697 
4698 /* A htab_traverse callback for GOT entries, where DATA points to a
4699    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4700    symbol to DATA->value.  */
4701 
4702 static int
mips_elf_set_global_got_area(void ** entryp,void * data)4703 mips_elf_set_global_got_area (void **entryp, void *data)
4704 {
4705   struct mips_got_entry *entry;
4706   struct mips_elf_traverse_got_arg *arg;
4707 
4708   entry = (struct mips_got_entry *) *entryp;
4709   arg = (struct mips_elf_traverse_got_arg *) data;
4710   if (entry->abfd != NULL
4711       && entry->symndx == -1
4712       && entry->d.h->global_got_area != GGA_NONE)
4713     entry->d.h->global_got_area = arg->value;
4714   return 1;
4715 }
4716 
4717 /* A htab_traverse callback for secondary GOT entries, where DATA points
4718    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4719    and record the number of relocations they require.  DATA->value is
4720    the size of one GOT entry.  Set DATA->g to null on failure.  */
4721 
4722 static int
mips_elf_set_global_gotidx(void ** entryp,void * data)4723 mips_elf_set_global_gotidx (void **entryp, void *data)
4724 {
4725   struct mips_got_entry *entry;
4726   struct mips_elf_traverse_got_arg *arg;
4727 
4728   entry = (struct mips_got_entry *) *entryp;
4729   arg = (struct mips_elf_traverse_got_arg *) data;
4730   if (entry->abfd != NULL
4731       && entry->symndx == -1
4732       && entry->d.h->global_got_area != GGA_NONE)
4733     {
4734       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4735 	{
4736 	  arg->g = NULL;
4737 	  return 0;
4738 	}
4739       arg->g->assigned_low_gotno += 1;
4740 
4741       if (bfd_link_pic (arg->info)
4742 	  || (elf_hash_table (arg->info)->dynamic_sections_created
4743 	      && entry->d.h->root.def_dynamic
4744 	      && !entry->d.h->root.def_regular))
4745 	arg->g->relocs += 1;
4746     }
4747 
4748   return 1;
4749 }
4750 
4751 /* A htab_traverse callback for GOT entries for which DATA is the
4752    bfd_link_info.  Forbid any global symbols from having traditional
4753    lazy-binding stubs.  */
4754 
4755 static int
mips_elf_forbid_lazy_stubs(void ** entryp,void * data)4756 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4757 {
4758   struct bfd_link_info *info;
4759   struct mips_elf_link_hash_table *htab;
4760   struct mips_got_entry *entry;
4761 
4762   entry = (struct mips_got_entry *) *entryp;
4763   info = (struct bfd_link_info *) data;
4764   htab = mips_elf_hash_table (info);
4765   BFD_ASSERT (htab != NULL);
4766 
4767   if (entry->abfd != NULL
4768       && entry->symndx == -1
4769       && entry->d.h->needs_lazy_stub)
4770     {
4771       entry->d.h->needs_lazy_stub = FALSE;
4772       htab->lazy_stub_count--;
4773     }
4774 
4775   return 1;
4776 }
4777 
4778 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4779    the primary GOT.  */
4780 static bfd_vma
mips_elf_adjust_gp(bfd * abfd,struct mips_got_info * g,bfd * ibfd)4781 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4782 {
4783   if (!g->next)
4784     return 0;
4785 
4786   g = mips_elf_bfd_got (ibfd, FALSE);
4787   if (! g)
4788     return 0;
4789 
4790   BFD_ASSERT (g->next);
4791 
4792   g = g->next;
4793 
4794   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4795     * MIPS_ELF_GOT_SIZE (abfd);
4796 }
4797 
4798 /* Turn a single GOT that is too big for 16-bit addressing into
4799    a sequence of GOTs, each one 16-bit addressable.  */
4800 
4801 static bfd_boolean
mips_elf_multi_got(bfd * abfd,struct bfd_link_info * info,asection * got,bfd_size_type pages)4802 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4803 		    asection *got, bfd_size_type pages)
4804 {
4805   struct mips_elf_link_hash_table *htab;
4806   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4807   struct mips_elf_traverse_got_arg tga;
4808   struct mips_got_info *g, *gg;
4809   unsigned int assign, needed_relocs;
4810   bfd *dynobj, *ibfd;
4811 
4812   dynobj = elf_hash_table (info)->dynobj;
4813   htab = mips_elf_hash_table (info);
4814   BFD_ASSERT (htab != NULL);
4815 
4816   g = htab->got_info;
4817 
4818   got_per_bfd_arg.obfd = abfd;
4819   got_per_bfd_arg.info = info;
4820   got_per_bfd_arg.current = NULL;
4821   got_per_bfd_arg.primary = NULL;
4822   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4823 				/ MIPS_ELF_GOT_SIZE (abfd))
4824 			       - htab->reserved_gotno);
4825   got_per_bfd_arg.max_pages = pages;
4826   /* The number of globals that will be included in the primary GOT.
4827      See the calls to mips_elf_set_global_got_area below for more
4828      information.  */
4829   got_per_bfd_arg.global_count = g->global_gotno;
4830 
4831   /* Try to merge the GOTs of input bfds together, as long as they
4832      don't seem to exceed the maximum GOT size, choosing one of them
4833      to be the primary GOT.  */
4834   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4835     {
4836       gg = mips_elf_bfd_got (ibfd, FALSE);
4837       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4838 	return FALSE;
4839     }
4840 
4841   /* If we do not find any suitable primary GOT, create an empty one.  */
4842   if (got_per_bfd_arg.primary == NULL)
4843     g->next = mips_elf_create_got_info (abfd);
4844   else
4845     g->next = got_per_bfd_arg.primary;
4846   g->next->next = got_per_bfd_arg.current;
4847 
4848   /* GG is now the master GOT, and G is the primary GOT.  */
4849   gg = g;
4850   g = g->next;
4851 
4852   /* Map the output bfd to the primary got.  That's what we're going
4853      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4854      didn't mark in check_relocs, and we want a quick way to find it.
4855      We can't just use gg->next because we're going to reverse the
4856      list.  */
4857   mips_elf_replace_bfd_got (abfd, g);
4858 
4859   /* Every symbol that is referenced in a dynamic relocation must be
4860      present in the primary GOT, so arrange for them to appear after
4861      those that are actually referenced.  */
4862   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4863   g->global_gotno = gg->global_gotno;
4864 
4865   tga.info = info;
4866   tga.value = GGA_RELOC_ONLY;
4867   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4868   tga.value = GGA_NORMAL;
4869   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4870 
4871   /* Now go through the GOTs assigning them offset ranges.
4872      [assigned_low_gotno, local_gotno[ will be set to the range of local
4873      entries in each GOT.  We can then compute the end of a GOT by
4874      adding local_gotno to global_gotno.  We reverse the list and make
4875      it circular since then we'll be able to quickly compute the
4876      beginning of a GOT, by computing the end of its predecessor.  To
4877      avoid special cases for the primary GOT, while still preserving
4878      assertions that are valid for both single- and multi-got links,
4879      we arrange for the main got struct to have the right number of
4880      global entries, but set its local_gotno such that the initial
4881      offset of the primary GOT is zero.  Remember that the primary GOT
4882      will become the last item in the circular linked list, so it
4883      points back to the master GOT.  */
4884   gg->local_gotno = -g->global_gotno;
4885   gg->global_gotno = g->global_gotno;
4886   gg->tls_gotno = 0;
4887   assign = 0;
4888   gg->next = gg;
4889 
4890   do
4891     {
4892       struct mips_got_info *gn;
4893 
4894       assign += htab->reserved_gotno;
4895       g->assigned_low_gotno = assign;
4896       g->local_gotno += assign;
4897       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4898       g->assigned_high_gotno = g->local_gotno - 1;
4899       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4900 
4901       /* Take g out of the direct list, and push it onto the reversed
4902 	 list that gg points to.  g->next is guaranteed to be nonnull after
4903 	 this operation, as required by mips_elf_initialize_tls_index. */
4904       gn = g->next;
4905       g->next = gg->next;
4906       gg->next = g;
4907 
4908       /* Set up any TLS entries.  We always place the TLS entries after
4909 	 all non-TLS entries.  */
4910       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4911       tga.g = g;
4912       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4913       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4914       if (!tga.g)
4915 	return FALSE;
4916       BFD_ASSERT (g->tls_assigned_gotno == assign);
4917 
4918       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4919       g = gn;
4920 
4921       /* Forbid global symbols in every non-primary GOT from having
4922 	 lazy-binding stubs.  */
4923       if (g)
4924 	htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4925     }
4926   while (g);
4927 
4928   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4929 
4930   needed_relocs = 0;
4931   for (g = gg->next; g && g->next != gg; g = g->next)
4932     {
4933       unsigned int save_assign;
4934 
4935       /* Assign offsets to global GOT entries and count how many
4936 	 relocations they need.  */
4937       save_assign = g->assigned_low_gotno;
4938       g->assigned_low_gotno = g->local_gotno;
4939       tga.info = info;
4940       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4941       tga.g = g;
4942       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4943       if (!tga.g)
4944 	return FALSE;
4945       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4946       g->assigned_low_gotno = save_assign;
4947 
4948       if (bfd_link_pic (info))
4949 	{
4950 	  g->relocs += g->local_gotno - g->assigned_low_gotno;
4951 	  BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
4952 		      + g->next->global_gotno
4953 		      + g->next->tls_gotno
4954 		      + htab->reserved_gotno);
4955 	}
4956       needed_relocs += g->relocs;
4957     }
4958   needed_relocs += g->relocs;
4959 
4960   if (needed_relocs)
4961     mips_elf_allocate_dynamic_relocations (dynobj, info,
4962 					   needed_relocs);
4963 
4964   return TRUE;
4965 }
4966 
4967 
4968 /* Returns the first relocation of type r_type found, beginning with
4969    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4970 
4971 static const Elf_Internal_Rela *
mips_elf_next_relocation(bfd * abfd ATTRIBUTE_UNUSED,unsigned int r_type,const Elf_Internal_Rela * relocation,const Elf_Internal_Rela * relend)4972 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4973 			  const Elf_Internal_Rela *relocation,
4974 			  const Elf_Internal_Rela *relend)
4975 {
4976   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4977 
4978   while (relocation < relend)
4979     {
4980       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4981 	  && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4982 	return relocation;
4983 
4984       ++relocation;
4985     }
4986 
4987   /* We didn't find it.  */
4988   return NULL;
4989 }
4990 
4991 /* Return whether an input relocation is against a local symbol.  */
4992 
4993 static bfd_boolean
mips_elf_local_relocation_p(bfd * input_bfd,const Elf_Internal_Rela * relocation,asection ** local_sections)4994 mips_elf_local_relocation_p (bfd *input_bfd,
4995 			     const Elf_Internal_Rela *relocation,
4996 			     asection **local_sections)
4997 {
4998   unsigned long r_symndx;
4999   Elf_Internal_Shdr *symtab_hdr;
5000   size_t extsymoff;
5001 
5002   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5003   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5004   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
5005 
5006   if (r_symndx < extsymoff)
5007     return TRUE;
5008   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
5009     return TRUE;
5010 
5011   return FALSE;
5012 }
5013 
5014 /* Sign-extend VALUE, which has the indicated number of BITS.  */
5015 
5016 bfd_vma
_bfd_mips_elf_sign_extend(bfd_vma value,int bits)5017 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5018 {
5019   if (value & ((bfd_vma) 1 << (bits - 1)))
5020     /* VALUE is negative.  */
5021     value |= ((bfd_vma) - 1) << bits;
5022 
5023   return value;
5024 }
5025 
5026 /* Return non-zero if the indicated VALUE has overflowed the maximum
5027    range expressible by a signed number with the indicated number of
5028    BITS.  */
5029 
5030 static bfd_boolean
mips_elf_overflow_p(bfd_vma value,int bits)5031 mips_elf_overflow_p (bfd_vma value, int bits)
5032 {
5033   bfd_signed_vma svalue = (bfd_signed_vma) value;
5034 
5035   if (svalue > (1 << (bits - 1)) - 1)
5036     /* The value is too big.  */
5037     return TRUE;
5038   else if (svalue < -(1 << (bits - 1)))
5039     /* The value is too small.  */
5040     return TRUE;
5041 
5042   /* All is well.  */
5043   return FALSE;
5044 }
5045 
5046 /* Calculate the %high function.  */
5047 
5048 static bfd_vma
mips_elf_high(bfd_vma value)5049 mips_elf_high (bfd_vma value)
5050 {
5051   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5052 }
5053 
5054 /* Calculate the %higher function.  */
5055 
5056 static bfd_vma
mips_elf_higher(bfd_vma value ATTRIBUTE_UNUSED)5057 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5058 {
5059 #ifdef BFD64
5060   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5061 #else
5062   abort ();
5063   return MINUS_ONE;
5064 #endif
5065 }
5066 
5067 /* Calculate the %highest function.  */
5068 
5069 static bfd_vma
mips_elf_highest(bfd_vma value ATTRIBUTE_UNUSED)5070 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5071 {
5072 #ifdef BFD64
5073   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5074 #else
5075   abort ();
5076   return MINUS_ONE;
5077 #endif
5078 }
5079 
5080 /* Create the .compact_rel section.  */
5081 
5082 static bfd_boolean
mips_elf_create_compact_rel_section(bfd * abfd,struct bfd_link_info * info ATTRIBUTE_UNUSED)5083 mips_elf_create_compact_rel_section
5084   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5085 {
5086   flagword flags;
5087   register asection *s;
5088 
5089   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5090     {
5091       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5092 	       | SEC_READONLY);
5093 
5094       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5095       if (s == NULL
5096 	  || ! bfd_set_section_alignment (abfd, s,
5097 					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5098 	return FALSE;
5099 
5100       s->size = sizeof (Elf32_External_compact_rel);
5101     }
5102 
5103   return TRUE;
5104 }
5105 
5106 /* Create the .got section to hold the global offset table.  */
5107 
5108 static bfd_boolean
mips_elf_create_got_section(bfd * abfd,struct bfd_link_info * info)5109 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5110 {
5111   flagword flags;
5112   register asection *s;
5113   struct elf_link_hash_entry *h;
5114   struct bfd_link_hash_entry *bh;
5115   struct mips_elf_link_hash_table *htab;
5116 
5117   htab = mips_elf_hash_table (info);
5118   BFD_ASSERT (htab != NULL);
5119 
5120   /* This function may be called more than once.  */
5121   if (htab->sgot)
5122     return TRUE;
5123 
5124   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5125 	   | SEC_LINKER_CREATED);
5126 
5127   /* We have to use an alignment of 2**4 here because this is hardcoded
5128      in the function stub generation and in the linker script.  */
5129   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5130   if (s == NULL
5131       || ! bfd_set_section_alignment (abfd, s, 4))
5132     return FALSE;
5133   htab->sgot = s;
5134 
5135   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5136      linker script because we don't want to define the symbol if we
5137      are not creating a global offset table.  */
5138   bh = NULL;
5139   if (! (_bfd_generic_link_add_one_symbol
5140 	 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5141 	  0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5142     return FALSE;
5143 
5144   h = (struct elf_link_hash_entry *) bh;
5145   h->non_elf = 0;
5146   h->def_regular = 1;
5147   h->type = STT_OBJECT;
5148   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5149   elf_hash_table (info)->hgot = h;
5150 
5151   if (bfd_link_pic (info)
5152       && ! bfd_elf_link_record_dynamic_symbol (info, h))
5153     return FALSE;
5154 
5155   htab->got_info = mips_elf_create_got_info (abfd);
5156   mips_elf_section_data (s)->elf.this_hdr.sh_flags
5157     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5158 
5159   /* We also need a .got.plt section when generating PLTs.  */
5160   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5161 					  SEC_ALLOC | SEC_LOAD
5162 					  | SEC_HAS_CONTENTS
5163 					  | SEC_IN_MEMORY
5164 					  | SEC_LINKER_CREATED);
5165   if (s == NULL)
5166     return FALSE;
5167   htab->sgotplt = s;
5168 
5169   return TRUE;
5170 }
5171 
5172 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5173    __GOTT_INDEX__ symbols.  These symbols are only special for
5174    shared objects; they are not used in executables.  */
5175 
5176 static bfd_boolean
is_gott_symbol(struct bfd_link_info * info,struct elf_link_hash_entry * h)5177 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5178 {
5179   return (mips_elf_hash_table (info)->is_vxworks
5180 	  && bfd_link_pic (info)
5181 	  && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5182 	      || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5183 }
5184 
5185 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5186    require an la25 stub.  See also mips_elf_local_pic_function_p,
5187    which determines whether the destination function ever requires a
5188    stub.  */
5189 
5190 static bfd_boolean
mips_elf_relocation_needs_la25_stub(bfd * input_bfd,int r_type,bfd_boolean target_is_16_bit_code_p)5191 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5192 				     bfd_boolean target_is_16_bit_code_p)
5193 {
5194   /* We specifically ignore branches and jumps from EF_PIC objects,
5195      where the onus is on the compiler or programmer to perform any
5196      necessary initialization of $25.  Sometimes such initialization
5197      is unnecessary; for example, -mno-shared functions do not use
5198      the incoming value of $25, and may therefore be called directly.  */
5199   if (PIC_OBJECT_P (input_bfd))
5200     return FALSE;
5201 
5202   switch (r_type)
5203     {
5204     case R_MIPS_26:
5205     case R_MIPS_PC16:
5206     case R_MIPS_PC21_S2:
5207     case R_MIPS_PC26_S2:
5208     case R_MICROMIPS_26_S1:
5209     case R_MICROMIPS_PC7_S1:
5210     case R_MICROMIPS_PC10_S1:
5211     case R_MICROMIPS_PC16_S1:
5212     case R_MICROMIPS_PC23_S2:
5213       return TRUE;
5214 
5215     case R_MIPS16_26:
5216       return !target_is_16_bit_code_p;
5217 
5218     default:
5219       return FALSE;
5220     }
5221 }
5222 
5223 /* Calculate the value produced by the RELOCATION (which comes from
5224    the INPUT_BFD).  The ADDEND is the addend to use for this
5225    RELOCATION; RELOCATION->R_ADDEND is ignored.
5226 
5227    The result of the relocation calculation is stored in VALUEP.
5228    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5229    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5230 
5231    This function returns bfd_reloc_continue if the caller need take no
5232    further action regarding this relocation, bfd_reloc_notsupported if
5233    something goes dramatically wrong, bfd_reloc_overflow if an
5234    overflow occurs, and bfd_reloc_ok to indicate success.  */
5235 
5236 static bfd_reloc_status_type
mips_elf_calculate_relocation(bfd * abfd,bfd * input_bfd,asection * input_section,struct bfd_link_info * info,const Elf_Internal_Rela * relocation,bfd_vma addend,reloc_howto_type * howto,Elf_Internal_Sym * local_syms,asection ** local_sections,bfd_vma * valuep,const char ** namep,bfd_boolean * cross_mode_jump_p,bfd_boolean save_addend)5237 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5238 			       asection *input_section,
5239 			       struct bfd_link_info *info,
5240 			       const Elf_Internal_Rela *relocation,
5241 			       bfd_vma addend, reloc_howto_type *howto,
5242 			       Elf_Internal_Sym *local_syms,
5243 			       asection **local_sections, bfd_vma *valuep,
5244 			       const char **namep,
5245 			       bfd_boolean *cross_mode_jump_p,
5246 			       bfd_boolean save_addend)
5247 {
5248   /* The eventual value we will return.  */
5249   bfd_vma value;
5250   /* The address of the symbol against which the relocation is
5251      occurring.  */
5252   bfd_vma symbol = 0;
5253   /* The final GP value to be used for the relocatable, executable, or
5254      shared object file being produced.  */
5255   bfd_vma gp;
5256   /* The place (section offset or address) of the storage unit being
5257      relocated.  */
5258   bfd_vma p;
5259   /* The value of GP used to create the relocatable object.  */
5260   bfd_vma gp0;
5261   /* The offset into the global offset table at which the address of
5262      the relocation entry symbol, adjusted by the addend, resides
5263      during execution.  */
5264   bfd_vma g = MINUS_ONE;
5265   /* The section in which the symbol referenced by the relocation is
5266      located.  */
5267   asection *sec = NULL;
5268   struct mips_elf_link_hash_entry *h = NULL;
5269   /* TRUE if the symbol referred to by this relocation is a local
5270      symbol.  */
5271   bfd_boolean local_p, was_local_p;
5272   /* TRUE if the symbol referred to by this relocation is a section
5273      symbol.  */
5274   bfd_boolean section_p = FALSE;
5275   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5276   bfd_boolean gp_disp_p = FALSE;
5277   /* TRUE if the symbol referred to by this relocation is
5278      "__gnu_local_gp".  */
5279   bfd_boolean gnu_local_gp_p = FALSE;
5280   Elf_Internal_Shdr *symtab_hdr;
5281   size_t extsymoff;
5282   unsigned long r_symndx;
5283   int r_type;
5284   /* TRUE if overflow occurred during the calculation of the
5285      relocation value.  */
5286   bfd_boolean overflowed_p;
5287   /* TRUE if this relocation refers to a MIPS16 function.  */
5288   bfd_boolean target_is_16_bit_code_p = FALSE;
5289   bfd_boolean target_is_micromips_code_p = FALSE;
5290   struct mips_elf_link_hash_table *htab;
5291   bfd *dynobj;
5292 
5293   dynobj = elf_hash_table (info)->dynobj;
5294   htab = mips_elf_hash_table (info);
5295   BFD_ASSERT (htab != NULL);
5296 
5297   /* Parse the relocation.  */
5298   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5299   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5300   p = (input_section->output_section->vma
5301        + input_section->output_offset
5302        + relocation->r_offset);
5303 
5304   /* Assume that there will be no overflow.  */
5305   overflowed_p = FALSE;
5306 
5307   /* Figure out whether or not the symbol is local, and get the offset
5308      used in the array of hash table entries.  */
5309   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5310   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5311 					 local_sections);
5312   was_local_p = local_p;
5313   if (! elf_bad_symtab (input_bfd))
5314     extsymoff = symtab_hdr->sh_info;
5315   else
5316     {
5317       /* The symbol table does not follow the rule that local symbols
5318 	 must come before globals.  */
5319       extsymoff = 0;
5320     }
5321 
5322   /* Figure out the value of the symbol.  */
5323   if (local_p)
5324     {
5325       Elf_Internal_Sym *sym;
5326 
5327       sym = local_syms + r_symndx;
5328       sec = local_sections[r_symndx];
5329 
5330       section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION;
5331 
5332       symbol = sec->output_section->vma + sec->output_offset;
5333       if (!section_p || (sec->flags & SEC_MERGE))
5334 	symbol += sym->st_value;
5335       if ((sec->flags & SEC_MERGE) && section_p)
5336 	{
5337 	  addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5338 	  addend -= symbol;
5339 	  addend += sec->output_section->vma + sec->output_offset;
5340 	}
5341 
5342       /* MIPS16/microMIPS text labels should be treated as odd.  */
5343       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5344 	++symbol;
5345 
5346       /* Record the name of this symbol, for our caller.  */
5347       *namep = bfd_elf_string_from_elf_section (input_bfd,
5348 						symtab_hdr->sh_link,
5349 						sym->st_name);
5350       if (*namep == NULL || **namep == '\0')
5351 	*namep = bfd_section_name (input_bfd, sec);
5352 
5353       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5354       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5355     }
5356   else
5357     {
5358       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5359 
5360       /* For global symbols we look up the symbol in the hash-table.  */
5361       h = ((struct mips_elf_link_hash_entry *)
5362 	   elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5363       /* Find the real hash-table entry for this symbol.  */
5364       while (h->root.root.type == bfd_link_hash_indirect
5365 	     || h->root.root.type == bfd_link_hash_warning)
5366 	h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5367 
5368       /* Record the name of this symbol, for our caller.  */
5369       *namep = h->root.root.root.string;
5370 
5371       /* See if this is the special _gp_disp symbol.  Note that such a
5372 	 symbol must always be a global symbol.  */
5373       if (strcmp (*namep, "_gp_disp") == 0
5374 	  && ! NEWABI_P (input_bfd))
5375 	{
5376 	  /* Relocations against _gp_disp are permitted only with
5377 	     R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5378 	  if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5379 	    return bfd_reloc_notsupported;
5380 
5381 	  gp_disp_p = TRUE;
5382 	}
5383       /* See if this is the special _gp symbol.  Note that such a
5384 	 symbol must always be a global symbol.  */
5385       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5386 	gnu_local_gp_p = TRUE;
5387 
5388 
5389       /* If this symbol is defined, calculate its address.  Note that
5390 	 _gp_disp is a magic symbol, always implicitly defined by the
5391 	 linker, so it's inappropriate to check to see whether or not
5392 	 its defined.  */
5393       else if ((h->root.root.type == bfd_link_hash_defined
5394 		|| h->root.root.type == bfd_link_hash_defweak)
5395 	       && h->root.root.u.def.section)
5396 	{
5397 	  sec = h->root.root.u.def.section;
5398 	  if (sec->output_section)
5399 	    symbol = (h->root.root.u.def.value
5400 		      + sec->output_section->vma
5401 		      + sec->output_offset);
5402 	  else
5403 	    symbol = h->root.root.u.def.value;
5404 	}
5405       else if (h->root.root.type == bfd_link_hash_undefweak)
5406 	/* We allow relocations against undefined weak symbols, giving
5407 	   it the value zero, so that you can undefined weak functions
5408 	   and check to see if they exist by looking at their
5409 	   addresses.  */
5410 	symbol = 0;
5411       else if (info->unresolved_syms_in_objects == RM_IGNORE
5412 	       && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5413 	symbol = 0;
5414       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5415 		       ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5416 	{
5417 	  /* If this is a dynamic link, we should have created a
5418 	     _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5419 	     in in _bfd_mips_elf_create_dynamic_sections.
5420 	     Otherwise, we should define the symbol with a value of 0.
5421 	     FIXME: It should probably get into the symbol table
5422 	     somehow as well.  */
5423 	  BFD_ASSERT (! bfd_link_pic (info));
5424 	  BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5425 	  symbol = 0;
5426 	}
5427       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5428 	{
5429 	  /* This is an optional symbol - an Irix specific extension to the
5430 	     ELF spec.  Ignore it for now.
5431 	     XXX - FIXME - there is more to the spec for OPTIONAL symbols
5432 	     than simply ignoring them, but we do not handle this for now.
5433 	     For information see the "64-bit ELF Object File Specification"
5434 	     which is available from here:
5435 	     http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5436 	  symbol = 0;
5437 	}
5438       else
5439 	{
5440 	  (*info->callbacks->undefined_symbol)
5441 	    (info, h->root.root.root.string, input_bfd,
5442 	     input_section, relocation->r_offset,
5443 	     (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5444 	     || ELF_ST_VISIBILITY (h->root.other));
5445 	  return bfd_reloc_undefined;
5446 	}
5447 
5448       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5449       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5450     }
5451 
5452   /* If this is a reference to a 16-bit function with a stub, we need
5453      to redirect the relocation to the stub unless:
5454 
5455      (a) the relocation is for a MIPS16 JAL;
5456 
5457      (b) the relocation is for a MIPS16 PIC call, and there are no
5458 	 non-MIPS16 uses of the GOT slot; or
5459 
5460      (c) the section allows direct references to MIPS16 functions.  */
5461   if (r_type != R_MIPS16_26
5462       && !bfd_link_relocatable (info)
5463       && ((h != NULL
5464 	   && h->fn_stub != NULL
5465 	   && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5466 	  || (local_p
5467 	      && mips_elf_tdata (input_bfd)->local_stubs != NULL
5468 	      && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5469       && !section_allows_mips16_refs_p (input_section))
5470     {
5471       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5472 	 have already noticed that we were going to need the
5473 	 stub.  */
5474       if (local_p)
5475 	{
5476 	  sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5477 	  value = 0;
5478 	}
5479       else
5480 	{
5481 	  BFD_ASSERT (h->need_fn_stub);
5482 	  if (h->la25_stub)
5483 	    {
5484 	      /* If a LA25 header for the stub itself exists, point to the
5485 		 prepended LUI/ADDIU sequence.  */
5486 	      sec = h->la25_stub->stub_section;
5487 	      value = h->la25_stub->offset;
5488 	    }
5489 	  else
5490 	    {
5491 	      sec = h->fn_stub;
5492 	      value = 0;
5493 	    }
5494 	}
5495 
5496       symbol = sec->output_section->vma + sec->output_offset + value;
5497       /* The target is 16-bit, but the stub isn't.  */
5498       target_is_16_bit_code_p = FALSE;
5499     }
5500   /* If this is a MIPS16 call with a stub, that is made through the PLT or
5501      to a standard MIPS function, we need to redirect the call to the stub.
5502      Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5503      indirect calls should use an indirect stub instead.  */
5504   else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5505 	   && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5506 	       || (local_p
5507 		   && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5508 		   && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5509 	   && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5510     {
5511       if (local_p)
5512 	sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5513       else
5514 	{
5515 	  /* If both call_stub and call_fp_stub are defined, we can figure
5516 	     out which one to use by checking which one appears in the input
5517 	     file.  */
5518 	  if (h->call_stub != NULL && h->call_fp_stub != NULL)
5519 	    {
5520 	      asection *o;
5521 
5522 	      sec = NULL;
5523 	      for (o = input_bfd->sections; o != NULL; o = o->next)
5524 		{
5525 		  if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5526 		    {
5527 		      sec = h->call_fp_stub;
5528 		      break;
5529 		    }
5530 		}
5531 	      if (sec == NULL)
5532 		sec = h->call_stub;
5533 	    }
5534 	  else if (h->call_stub != NULL)
5535 	    sec = h->call_stub;
5536 	  else
5537 	    sec = h->call_fp_stub;
5538   	}
5539 
5540       BFD_ASSERT (sec->size > 0);
5541       symbol = sec->output_section->vma + sec->output_offset;
5542     }
5543   /* If this is a direct call to a PIC function, redirect to the
5544      non-PIC stub.  */
5545   else if (h != NULL && h->la25_stub
5546 	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5547 						   target_is_16_bit_code_p))
5548     symbol = (h->la25_stub->stub_section->output_section->vma
5549 	      + h->la25_stub->stub_section->output_offset
5550 	      + h->la25_stub->offset);
5551   /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5552      entry is used if a standard PLT entry has also been made.  In this
5553      case the symbol will have been set by mips_elf_set_plt_sym_value
5554      to point to the standard PLT entry, so redirect to the compressed
5555      one.  */
5556   else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1)
5557 	   && !bfd_link_relocatable (info)
5558 	   && h != NULL
5559 	   && h->use_plt_entry
5560 	   && h->root.plt.plist->comp_offset != MINUS_ONE
5561 	   && h->root.plt.plist->mips_offset != MINUS_ONE)
5562     {
5563       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5564 
5565       sec = htab->splt;
5566       symbol = (sec->output_section->vma
5567 		+ sec->output_offset
5568 		+ htab->plt_header_size
5569 		+ htab->plt_mips_offset
5570 		+ h->root.plt.plist->comp_offset
5571 		+ 1);
5572 
5573       target_is_16_bit_code_p = !micromips_p;
5574       target_is_micromips_code_p = micromips_p;
5575     }
5576 
5577   /* Make sure MIPS16 and microMIPS are not used together.  */
5578   if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p)
5579       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5580    {
5581       (*_bfd_error_handler)
5582 	(_("MIPS16 and microMIPS functions cannot call each other"));
5583       return bfd_reloc_notsupported;
5584    }
5585 
5586   /* Calls from 16-bit code to 32-bit code and vice versa require the
5587      mode change.  However, we can ignore calls to undefined weak symbols,
5588      which should never be executed at runtime.  This exception is important
5589      because the assembly writer may have "known" that any definition of the
5590      symbol would be 16-bit code, and that direct jumps were therefore
5591      acceptable.  */
5592   *cross_mode_jump_p = (!bfd_link_relocatable (info)
5593 			&& !(h && h->root.root.type == bfd_link_hash_undefweak)
5594 			&& ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5595 			    || (r_type == R_MICROMIPS_26_S1
5596 				&& !target_is_micromips_code_p)
5597 			    || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5598 				&& (target_is_16_bit_code_p
5599 				    || target_is_micromips_code_p))));
5600 
5601   local_p = (h == NULL || mips_use_local_got_p (info, h));
5602 
5603   gp0 = _bfd_get_gp_value (input_bfd);
5604   gp = _bfd_get_gp_value (abfd);
5605   if (htab->got_info)
5606     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5607 
5608   if (gnu_local_gp_p)
5609     symbol = gp;
5610 
5611   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5612      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5613      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5614   if (got_page_reloc_p (r_type) && !local_p)
5615     {
5616       r_type = (micromips_reloc_p (r_type)
5617 		? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5618       addend = 0;
5619     }
5620 
5621   /* If we haven't already determined the GOT offset, and we're going
5622      to need it, get it now.  */
5623   switch (r_type)
5624     {
5625     case R_MIPS16_CALL16:
5626     case R_MIPS16_GOT16:
5627     case R_MIPS_CALL16:
5628     case R_MIPS_GOT16:
5629     case R_MIPS_GOT_DISP:
5630     case R_MIPS_GOT_HI16:
5631     case R_MIPS_CALL_HI16:
5632     case R_MIPS_GOT_LO16:
5633     case R_MIPS_CALL_LO16:
5634     case R_MICROMIPS_CALL16:
5635     case R_MICROMIPS_GOT16:
5636     case R_MICROMIPS_GOT_DISP:
5637     case R_MICROMIPS_GOT_HI16:
5638     case R_MICROMIPS_CALL_HI16:
5639     case R_MICROMIPS_GOT_LO16:
5640     case R_MICROMIPS_CALL_LO16:
5641     case R_MIPS_TLS_GD:
5642     case R_MIPS_TLS_GOTTPREL:
5643     case R_MIPS_TLS_LDM:
5644     case R_MIPS16_TLS_GD:
5645     case R_MIPS16_TLS_GOTTPREL:
5646     case R_MIPS16_TLS_LDM:
5647     case R_MICROMIPS_TLS_GD:
5648     case R_MICROMIPS_TLS_GOTTPREL:
5649     case R_MICROMIPS_TLS_LDM:
5650       /* Find the index into the GOT where this value is located.  */
5651       if (tls_ldm_reloc_p (r_type))
5652 	{
5653 	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5654 					0, 0, NULL, r_type);
5655 	  if (g == MINUS_ONE)
5656 	    return bfd_reloc_outofrange;
5657 	}
5658       else if (!local_p)
5659 	{
5660 	  /* On VxWorks, CALL relocations should refer to the .got.plt
5661 	     entry, which is initialized to point at the PLT stub.  */
5662 	  if (htab->is_vxworks
5663 	      && (call_hi16_reloc_p (r_type)
5664 		  || call_lo16_reloc_p (r_type)
5665 		  || call16_reloc_p (r_type)))
5666 	    {
5667 	      BFD_ASSERT (addend == 0);
5668 	      BFD_ASSERT (h->root.needs_plt);
5669 	      g = mips_elf_gotplt_index (info, &h->root);
5670 	    }
5671 	  else
5672 	    {
5673 	      BFD_ASSERT (addend == 0);
5674 	      g = mips_elf_global_got_index (abfd, info, input_bfd,
5675 					     &h->root, r_type);
5676 	      if (!TLS_RELOC_P (r_type)
5677 		  && !elf_hash_table (info)->dynamic_sections_created)
5678 		/* This is a static link.  We must initialize the GOT entry.  */
5679 		MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5680 	    }
5681 	}
5682       else if (!htab->is_vxworks
5683 	       && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5684 	/* The calculation below does not involve "g".  */
5685 	break;
5686       else
5687 	{
5688 	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5689 					symbol + addend, r_symndx, h, r_type);
5690 	  if (g == MINUS_ONE)
5691 	    return bfd_reloc_outofrange;
5692 	}
5693 
5694       /* Convert GOT indices to actual offsets.  */
5695       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5696       break;
5697     }
5698 
5699   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5700      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5701   if (h != NULL && is_gott_symbol (info, &h->root))
5702     {
5703       Elf_Internal_Rela outrel;
5704       bfd_byte *loc;
5705       asection *s;
5706 
5707       s = mips_elf_rel_dyn_section (info, FALSE);
5708       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5709 
5710       outrel.r_offset = (input_section->output_section->vma
5711 			 + input_section->output_offset
5712 			 + relocation->r_offset);
5713       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5714       outrel.r_addend = addend;
5715       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5716 
5717       /* If we've written this relocation for a readonly section,
5718 	 we need to set DF_TEXTREL again, so that we do not delete the
5719 	 DT_TEXTREL tag.  */
5720       if (MIPS_ELF_READONLY_SECTION (input_section))
5721 	info->flags |= DF_TEXTREL;
5722 
5723       *valuep = 0;
5724       return bfd_reloc_ok;
5725     }
5726 
5727   /* Figure out what kind of relocation is being performed.  */
5728   switch (r_type)
5729     {
5730     case R_MIPS_NONE:
5731       return bfd_reloc_continue;
5732 
5733     case R_MIPS_16:
5734       if (howto->partial_inplace)
5735 	addend = _bfd_mips_elf_sign_extend (addend, 16);
5736       value = symbol + addend;
5737       overflowed_p = mips_elf_overflow_p (value, 16);
5738       break;
5739 
5740     case R_MIPS_32:
5741     case R_MIPS_REL32:
5742     case R_MIPS_64:
5743       if ((bfd_link_pic (info)
5744 	   || (htab->root.dynamic_sections_created
5745 	       && h != NULL
5746 	       && h->root.def_dynamic
5747 	       && !h->root.def_regular
5748 	       && !h->has_static_relocs))
5749 	  && r_symndx != STN_UNDEF
5750 	  && (h == NULL
5751 	      || h->root.root.type != bfd_link_hash_undefweak
5752 	      || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5753 	  && (input_section->flags & SEC_ALLOC) != 0)
5754 	{
5755 	  /* If we're creating a shared library, then we can't know
5756 	     where the symbol will end up.  So, we create a relocation
5757 	     record in the output, and leave the job up to the dynamic
5758 	     linker.  We must do the same for executable references to
5759 	     shared library symbols, unless we've decided to use copy
5760 	     relocs or PLTs instead.  */
5761 	  value = addend;
5762 	  if (!mips_elf_create_dynamic_relocation (abfd,
5763 						   info,
5764 						   relocation,
5765 						   h,
5766 						   sec,
5767 						   symbol,
5768 						   &value,
5769 						   input_section))
5770 	    return bfd_reloc_undefined;
5771 	}
5772       else
5773 	{
5774 	  if (r_type != R_MIPS_REL32)
5775 	    value = symbol + addend;
5776 	  else
5777 	    value = addend;
5778 	}
5779       value &= howto->dst_mask;
5780       break;
5781 
5782     case R_MIPS_PC32:
5783       value = symbol + addend - p;
5784       value &= howto->dst_mask;
5785       break;
5786 
5787     case R_MIPS16_26:
5788       /* The calculation for R_MIPS16_26 is just the same as for an
5789 	 R_MIPS_26.  It's only the storage of the relocated field into
5790 	 the output file that's different.  That's handled in
5791 	 mips_elf_perform_relocation.  So, we just fall through to the
5792 	 R_MIPS_26 case here.  */
5793     case R_MIPS_26:
5794     case R_MICROMIPS_26_S1:
5795       {
5796 	unsigned int shift;
5797 
5798 	/* Shift is 2, unusually, for microMIPS JALX.  */
5799 	shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5800 
5801 	if (howto->partial_inplace && !section_p)
5802 	  value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5803 	else
5804 	  value = addend;
5805 	value += symbol;
5806 
5807 	/* Make sure the target of JALX is word-aligned.  Bit 0 must be
5808 	   the correct ISA mode selector and bit 1 must be 0.  */
5809 	if (*cross_mode_jump_p && (value & 3) != (r_type == R_MIPS_26))
5810 	  return bfd_reloc_outofrange;
5811 
5812 	value >>= shift;
5813 	if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5814 	  overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5815 	value &= howto->dst_mask;
5816       }
5817       break;
5818 
5819     case R_MIPS_TLS_DTPREL_HI16:
5820     case R_MIPS16_TLS_DTPREL_HI16:
5821     case R_MICROMIPS_TLS_DTPREL_HI16:
5822       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5823 	       & howto->dst_mask);
5824       break;
5825 
5826     case R_MIPS_TLS_DTPREL_LO16:
5827     case R_MIPS_TLS_DTPREL32:
5828     case R_MIPS_TLS_DTPREL64:
5829     case R_MIPS16_TLS_DTPREL_LO16:
5830     case R_MICROMIPS_TLS_DTPREL_LO16:
5831       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5832       break;
5833 
5834     case R_MIPS_TLS_TPREL_HI16:
5835     case R_MIPS16_TLS_TPREL_HI16:
5836     case R_MICROMIPS_TLS_TPREL_HI16:
5837       value = (mips_elf_high (addend + symbol - tprel_base (info))
5838 	       & howto->dst_mask);
5839       break;
5840 
5841     case R_MIPS_TLS_TPREL_LO16:
5842     case R_MIPS_TLS_TPREL32:
5843     case R_MIPS_TLS_TPREL64:
5844     case R_MIPS16_TLS_TPREL_LO16:
5845     case R_MICROMIPS_TLS_TPREL_LO16:
5846       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5847       break;
5848 
5849     case R_MIPS_HI16:
5850     case R_MIPS16_HI16:
5851     case R_MICROMIPS_HI16:
5852       if (!gp_disp_p)
5853 	{
5854 	  value = mips_elf_high (addend + symbol);
5855 	  value &= howto->dst_mask;
5856 	}
5857       else
5858 	{
5859 	  /* For MIPS16 ABI code we generate this sequence
5860 	        0: li      $v0,%hi(_gp_disp)
5861 	        4: addiupc $v1,%lo(_gp_disp)
5862 	        8: sll     $v0,16
5863 	       12: addu    $v0,$v1
5864 	       14: move    $gp,$v0
5865 	     So the offsets of hi and lo relocs are the same, but the
5866 	     base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5867 	     ADDIUPC clears the low two bits of the instruction address,
5868 	     so the base is ($t9 + 4) & ~3.  */
5869 	  if (r_type == R_MIPS16_HI16)
5870 	    value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5871 	  /* The microMIPS .cpload sequence uses the same assembly
5872 	     instructions as the traditional psABI version, but the
5873 	     incoming $t9 has the low bit set.  */
5874 	  else if (r_type == R_MICROMIPS_HI16)
5875 	    value = mips_elf_high (addend + gp - p - 1);
5876 	  else
5877 	    value = mips_elf_high (addend + gp - p);
5878 	  overflowed_p = mips_elf_overflow_p (value, 16);
5879 	}
5880       break;
5881 
5882     case R_MIPS_LO16:
5883     case R_MIPS16_LO16:
5884     case R_MICROMIPS_LO16:
5885     case R_MICROMIPS_HI0_LO16:
5886       if (!gp_disp_p)
5887 	value = (symbol + addend) & howto->dst_mask;
5888       else
5889 	{
5890 	  /* See the comment for R_MIPS16_HI16 above for the reason
5891 	     for this conditional.  */
5892 	  if (r_type == R_MIPS16_LO16)
5893 	    value = addend + gp - (p & ~(bfd_vma) 0x3);
5894 	  else if (r_type == R_MICROMIPS_LO16
5895 		   || r_type == R_MICROMIPS_HI0_LO16)
5896 	    value = addend + gp - p + 3;
5897 	  else
5898 	    value = addend + gp - p + 4;
5899 	  /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5900 	     for overflow.  But, on, say, IRIX5, relocations against
5901 	     _gp_disp are normally generated from the .cpload
5902 	     pseudo-op.  It generates code that normally looks like
5903 	     this:
5904 
5905 	       lui    $gp,%hi(_gp_disp)
5906 	       addiu  $gp,$gp,%lo(_gp_disp)
5907 	       addu   $gp,$gp,$t9
5908 
5909 	     Here $t9 holds the address of the function being called,
5910 	     as required by the MIPS ELF ABI.  The R_MIPS_LO16
5911 	     relocation can easily overflow in this situation, but the
5912 	     R_MIPS_HI16 relocation will handle the overflow.
5913 	     Therefore, we consider this a bug in the MIPS ABI, and do
5914 	     not check for overflow here.  */
5915 	}
5916       break;
5917 
5918     case R_MIPS_LITERAL:
5919     case R_MICROMIPS_LITERAL:
5920       /* Because we don't merge literal sections, we can handle this
5921 	 just like R_MIPS_GPREL16.  In the long run, we should merge
5922 	 shared literals, and then we will need to additional work
5923 	 here.  */
5924 
5925       /* Fall through.  */
5926 
5927     case R_MIPS16_GPREL:
5928       /* The R_MIPS16_GPREL performs the same calculation as
5929 	 R_MIPS_GPREL16, but stores the relocated bits in a different
5930 	 order.  We don't need to do anything special here; the
5931 	 differences are handled in mips_elf_perform_relocation.  */
5932     case R_MIPS_GPREL16:
5933     case R_MICROMIPS_GPREL7_S2:
5934     case R_MICROMIPS_GPREL16:
5935       /* Only sign-extend the addend if it was extracted from the
5936 	 instruction.  If the addend was separate, leave it alone,
5937 	 otherwise we may lose significant bits.  */
5938       if (howto->partial_inplace)
5939 	addend = _bfd_mips_elf_sign_extend (addend, 16);
5940       value = symbol + addend - gp;
5941       /* If the symbol was local, any earlier relocatable links will
5942 	 have adjusted its addend with the gp offset, so compensate
5943 	 for that now.  Don't do it for symbols forced local in this
5944 	 link, though, since they won't have had the gp offset applied
5945 	 to them before.  */
5946       if (was_local_p)
5947 	value += gp0;
5948       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5949 	overflowed_p = mips_elf_overflow_p (value, 16);
5950       break;
5951 
5952     case R_MIPS16_GOT16:
5953     case R_MIPS16_CALL16:
5954     case R_MIPS_GOT16:
5955     case R_MIPS_CALL16:
5956     case R_MICROMIPS_GOT16:
5957     case R_MICROMIPS_CALL16:
5958       /* VxWorks does not have separate local and global semantics for
5959 	 R_MIPS*_GOT16; every relocation evaluates to "G".  */
5960       if (!htab->is_vxworks && local_p)
5961 	{
5962 	  value = mips_elf_got16_entry (abfd, input_bfd, info,
5963 					symbol + addend, !was_local_p);
5964 	  if (value == MINUS_ONE)
5965 	    return bfd_reloc_outofrange;
5966 	  value
5967 	    = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5968 	  overflowed_p = mips_elf_overflow_p (value, 16);
5969 	  break;
5970 	}
5971 
5972       /* Fall through.  */
5973 
5974     case R_MIPS_TLS_GD:
5975     case R_MIPS_TLS_GOTTPREL:
5976     case R_MIPS_TLS_LDM:
5977     case R_MIPS_GOT_DISP:
5978     case R_MIPS16_TLS_GD:
5979     case R_MIPS16_TLS_GOTTPREL:
5980     case R_MIPS16_TLS_LDM:
5981     case R_MICROMIPS_TLS_GD:
5982     case R_MICROMIPS_TLS_GOTTPREL:
5983     case R_MICROMIPS_TLS_LDM:
5984     case R_MICROMIPS_GOT_DISP:
5985       value = g;
5986       overflowed_p = mips_elf_overflow_p (value, 16);
5987       break;
5988 
5989     case R_MIPS_GPREL32:
5990       value = (addend + symbol + gp0 - gp);
5991       if (!save_addend)
5992 	value &= howto->dst_mask;
5993       break;
5994 
5995     case R_MIPS_PC16:
5996     case R_MIPS_GNU_REL16_S2:
5997       if (howto->partial_inplace)
5998 	addend = _bfd_mips_elf_sign_extend (addend, 18);
5999 
6000       if ((symbol + addend) & 3)
6001 	return bfd_reloc_outofrange;
6002 
6003       value = symbol + addend - p;
6004       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6005 	overflowed_p = mips_elf_overflow_p (value, 18);
6006       value >>= howto->rightshift;
6007       value &= howto->dst_mask;
6008       break;
6009 
6010     case R_MIPS16_PC16_S1:
6011       if (howto->partial_inplace)
6012 	addend = _bfd_mips_elf_sign_extend (addend, 17);
6013 
6014       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6015 	  && ((symbol + addend) & 1) == 0)
6016 	return bfd_reloc_outofrange;
6017 
6018       value = symbol + addend - p;
6019       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6020 	overflowed_p = mips_elf_overflow_p (value, 17);
6021       value >>= howto->rightshift;
6022       value &= howto->dst_mask;
6023       break;
6024 
6025     case R_MIPS_PC21_S2:
6026       if (howto->partial_inplace)
6027 	addend = _bfd_mips_elf_sign_extend (addend, 23);
6028 
6029       if ((symbol + addend) & 3)
6030 	return bfd_reloc_outofrange;
6031 
6032       value = symbol + addend - p;
6033       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6034 	overflowed_p = mips_elf_overflow_p (value, 23);
6035       value >>= howto->rightshift;
6036       value &= howto->dst_mask;
6037       break;
6038 
6039     case R_MIPS_PC26_S2:
6040       if (howto->partial_inplace)
6041 	addend = _bfd_mips_elf_sign_extend (addend, 28);
6042 
6043       if ((symbol + addend) & 3)
6044 	return bfd_reloc_outofrange;
6045 
6046       value = symbol + addend - p;
6047       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6048 	overflowed_p = mips_elf_overflow_p (value, 28);
6049       value >>= howto->rightshift;
6050       value &= howto->dst_mask;
6051       break;
6052 
6053     case R_MIPS_PC18_S3:
6054       if (howto->partial_inplace)
6055 	addend = _bfd_mips_elf_sign_extend (addend, 21);
6056 
6057       if ((symbol + addend) & 7)
6058 	return bfd_reloc_outofrange;
6059 
6060       value = symbol + addend - ((p | 7) ^ 7);
6061       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6062 	overflowed_p = mips_elf_overflow_p (value, 21);
6063       value >>= howto->rightshift;
6064       value &= howto->dst_mask;
6065       break;
6066 
6067     case R_MIPS_PC19_S2:
6068       if (howto->partial_inplace)
6069 	addend = _bfd_mips_elf_sign_extend (addend, 21);
6070 
6071       if ((symbol + addend) & 3)
6072 	return bfd_reloc_outofrange;
6073 
6074       value = symbol + addend - p;
6075       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6076 	overflowed_p = mips_elf_overflow_p (value, 21);
6077       value >>= howto->rightshift;
6078       value &= howto->dst_mask;
6079       break;
6080 
6081     case R_MIPS_PCHI16:
6082       value = mips_elf_high (symbol + addend - p);
6083       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6084 	overflowed_p = mips_elf_overflow_p (value, 16);
6085       value &= howto->dst_mask;
6086       break;
6087 
6088     case R_MIPS_PCLO16:
6089       if (howto->partial_inplace)
6090 	addend = _bfd_mips_elf_sign_extend (addend, 16);
6091       value = symbol + addend - p;
6092       value &= howto->dst_mask;
6093       break;
6094 
6095     case R_MICROMIPS_PC7_S1:
6096       if (howto->partial_inplace)
6097 	addend = _bfd_mips_elf_sign_extend (addend, 8);
6098       value = symbol + addend - p;
6099       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6100 	overflowed_p = mips_elf_overflow_p (value, 8);
6101       value >>= howto->rightshift;
6102       value &= howto->dst_mask;
6103       break;
6104 
6105     case R_MICROMIPS_PC10_S1:
6106       if (howto->partial_inplace)
6107 	addend = _bfd_mips_elf_sign_extend (addend, 11);
6108       value = symbol + addend - p;
6109       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6110 	overflowed_p = mips_elf_overflow_p (value, 11);
6111       value >>= howto->rightshift;
6112       value &= howto->dst_mask;
6113       break;
6114 
6115     case R_MICROMIPS_PC16_S1:
6116       if (howto->partial_inplace)
6117 	addend = _bfd_mips_elf_sign_extend (addend, 17);
6118       value = symbol + addend - p;
6119       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6120 	overflowed_p = mips_elf_overflow_p (value, 17);
6121       value >>= howto->rightshift;
6122       value &= howto->dst_mask;
6123       break;
6124 
6125     case R_MICROMIPS_PC23_S2:
6126       if (howto->partial_inplace)
6127 	addend = _bfd_mips_elf_sign_extend (addend, 25);
6128       value = symbol + addend - ((p | 3) ^ 3);
6129       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6130 	overflowed_p = mips_elf_overflow_p (value, 25);
6131       value >>= howto->rightshift;
6132       value &= howto->dst_mask;
6133       break;
6134 
6135     case R_MIPS_GOT_HI16:
6136     case R_MIPS_CALL_HI16:
6137     case R_MICROMIPS_GOT_HI16:
6138     case R_MICROMIPS_CALL_HI16:
6139       /* We're allowed to handle these two relocations identically.
6140 	 The dynamic linker is allowed to handle the CALL relocations
6141 	 differently by creating a lazy evaluation stub.  */
6142       value = g;
6143       value = mips_elf_high (value);
6144       value &= howto->dst_mask;
6145       break;
6146 
6147     case R_MIPS_GOT_LO16:
6148     case R_MIPS_CALL_LO16:
6149     case R_MICROMIPS_GOT_LO16:
6150     case R_MICROMIPS_CALL_LO16:
6151       value = g & howto->dst_mask;
6152       break;
6153 
6154     case R_MIPS_GOT_PAGE:
6155     case R_MICROMIPS_GOT_PAGE:
6156       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6157       if (value == MINUS_ONE)
6158 	return bfd_reloc_outofrange;
6159       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6160       overflowed_p = mips_elf_overflow_p (value, 16);
6161       break;
6162 
6163     case R_MIPS_GOT_OFST:
6164     case R_MICROMIPS_GOT_OFST:
6165       if (local_p)
6166 	mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6167       else
6168 	value = addend;
6169       overflowed_p = mips_elf_overflow_p (value, 16);
6170       break;
6171 
6172     case R_MIPS_SUB:
6173     case R_MICROMIPS_SUB:
6174       value = symbol - addend;
6175       value &= howto->dst_mask;
6176       break;
6177 
6178     case R_MIPS_HIGHER:
6179     case R_MICROMIPS_HIGHER:
6180       value = mips_elf_higher (addend + symbol);
6181       value &= howto->dst_mask;
6182       break;
6183 
6184     case R_MIPS_HIGHEST:
6185     case R_MICROMIPS_HIGHEST:
6186       value = mips_elf_highest (addend + symbol);
6187       value &= howto->dst_mask;
6188       break;
6189 
6190     case R_MIPS_SCN_DISP:
6191     case R_MICROMIPS_SCN_DISP:
6192       value = symbol + addend - sec->output_offset;
6193       value &= howto->dst_mask;
6194       break;
6195 
6196     case R_MIPS_JALR:
6197     case R_MICROMIPS_JALR:
6198       /* This relocation is only a hint.  In some cases, we optimize
6199 	 it into a bal instruction.  But we don't try to optimize
6200 	 when the symbol does not resolve locally.  */
6201       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6202 	return bfd_reloc_continue;
6203       value = symbol + addend;
6204       break;
6205 
6206     case R_MIPS_PJUMP:
6207     case R_MIPS_GNU_VTINHERIT:
6208     case R_MIPS_GNU_VTENTRY:
6209       /* We don't do anything with these at present.  */
6210       return bfd_reloc_continue;
6211 
6212     default:
6213       /* An unrecognized relocation type.  */
6214       return bfd_reloc_notsupported;
6215     }
6216 
6217   /* Store the VALUE for our caller.  */
6218   *valuep = value;
6219   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6220 }
6221 
6222 /* Obtain the field relocated by RELOCATION.  */
6223 
6224 static bfd_vma
mips_elf_obtain_contents(reloc_howto_type * howto,const Elf_Internal_Rela * relocation,bfd * input_bfd,bfd_byte * contents)6225 mips_elf_obtain_contents (reloc_howto_type *howto,
6226 			  const Elf_Internal_Rela *relocation,
6227 			  bfd *input_bfd, bfd_byte *contents)
6228 {
6229   bfd_vma x = 0;
6230   bfd_byte *location = contents + relocation->r_offset;
6231   unsigned int size = bfd_get_reloc_size (howto);
6232 
6233   /* Obtain the bytes.  */
6234   if (size != 0)
6235     x = bfd_get (8 * size, input_bfd, location);
6236 
6237   return x;
6238 }
6239 
6240 /* It has been determined that the result of the RELOCATION is the
6241    VALUE.  Use HOWTO to place VALUE into the output file at the
6242    appropriate position.  The SECTION is the section to which the
6243    relocation applies.
6244    CROSS_MODE_JUMP_P is true if the relocation field
6245    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6246 
6247    Returns FALSE if anything goes wrong.  */
6248 
6249 static bfd_boolean
mips_elf_perform_relocation(struct bfd_link_info * info,reloc_howto_type * howto,const Elf_Internal_Rela * relocation,bfd_vma value,bfd * input_bfd,asection * input_section,bfd_byte * contents,bfd_boolean cross_mode_jump_p)6250 mips_elf_perform_relocation (struct bfd_link_info *info,
6251 			     reloc_howto_type *howto,
6252 			     const Elf_Internal_Rela *relocation,
6253 			     bfd_vma value, bfd *input_bfd,
6254 			     asection *input_section, bfd_byte *contents,
6255 			     bfd_boolean cross_mode_jump_p)
6256 {
6257   bfd_vma x;
6258   bfd_byte *location;
6259   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6260   unsigned int size;
6261 
6262   /* Figure out where the relocation is occurring.  */
6263   location = contents + relocation->r_offset;
6264 
6265   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6266 
6267   /* Obtain the current value.  */
6268   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6269 
6270   /* Clear the field we are setting.  */
6271   x &= ~howto->dst_mask;
6272 
6273   /* Set the field.  */
6274   x |= (value & howto->dst_mask);
6275 
6276   /* If required, turn JAL into JALX.  */
6277   if (cross_mode_jump_p && jal_reloc_p (r_type))
6278     {
6279       bfd_boolean ok;
6280       bfd_vma opcode = x >> 26;
6281       bfd_vma jalx_opcode;
6282 
6283       /* Check to see if the opcode is already JAL or JALX.  */
6284       if (r_type == R_MIPS16_26)
6285 	{
6286 	  ok = ((opcode == 0x6) || (opcode == 0x7));
6287 	  jalx_opcode = 0x7;
6288 	}
6289       else if (r_type == R_MICROMIPS_26_S1)
6290 	{
6291 	  ok = ((opcode == 0x3d) || (opcode == 0x3c));
6292 	  jalx_opcode = 0x3c;
6293 	}
6294       else
6295 	{
6296 	  ok = ((opcode == 0x3) || (opcode == 0x1d));
6297 	  jalx_opcode = 0x1d;
6298 	}
6299 
6300       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6301          convert J or JALS to JALX.  */
6302       if (!ok)
6303 	{
6304 	  info->callbacks->einfo
6305 	    (_("%X%H: Unsupported jump between ISA modes; "
6306 	       "consider recompiling with interlinking enabled\n"),
6307 	     input_bfd, input_section, relocation->r_offset);
6308 	  return TRUE;
6309 	}
6310 
6311       /* Make this the JALX opcode.  */
6312       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6313     }
6314 
6315   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6316      range.  */
6317   if (!bfd_link_relocatable (info)
6318       && !cross_mode_jump_p
6319       && ((JAL_TO_BAL_P (input_bfd)
6320 	   && r_type == R_MIPS_26
6321 	   && (x >> 26) == 0x3)		/* jal addr */
6322 	  || (JALR_TO_BAL_P (input_bfd)
6323 	      && r_type == R_MIPS_JALR
6324 	      && x == 0x0320f809)	/* jalr t9 */
6325 	  || (JR_TO_B_P (input_bfd)
6326 	      && r_type == R_MIPS_JALR
6327 	      && x == 0x03200008)))	/* jr t9 */
6328     {
6329       bfd_vma addr;
6330       bfd_vma dest;
6331       bfd_signed_vma off;
6332 
6333       addr = (input_section->output_section->vma
6334 	      + input_section->output_offset
6335 	      + relocation->r_offset
6336 	      + 4);
6337       if (r_type == R_MIPS_26)
6338 	dest = (value << 2) | ((addr >> 28) << 28);
6339       else
6340 	dest = value;
6341       off = dest - addr;
6342       if (off <= 0x1ffff && off >= -0x20000)
6343 	{
6344 	  if (x == 0x03200008)	/* jr t9 */
6345 	    x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6346 	  else
6347 	    x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6348 	}
6349     }
6350 
6351   /* Put the value into the output.  */
6352   size = bfd_get_reloc_size (howto);
6353   if (size != 0)
6354     bfd_put (8 * size, input_bfd, x, location);
6355 
6356   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6357 			       location);
6358 
6359   return TRUE;
6360 }
6361 
6362 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6363    is the original relocation, which is now being transformed into a
6364    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6365    caller should store the result in place of the original addend.  */
6366 
6367 static bfd_boolean
mips_elf_create_dynamic_relocation(bfd * output_bfd,struct bfd_link_info * info,const Elf_Internal_Rela * rel,struct mips_elf_link_hash_entry * h,asection * sec,bfd_vma symbol,bfd_vma * addendp,asection * input_section)6368 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6369 				    struct bfd_link_info *info,
6370 				    const Elf_Internal_Rela *rel,
6371 				    struct mips_elf_link_hash_entry *h,
6372 				    asection *sec, bfd_vma symbol,
6373 				    bfd_vma *addendp, asection *input_section)
6374 {
6375   Elf_Internal_Rela outrel[3];
6376   asection *sreloc;
6377   bfd *dynobj;
6378   int r_type;
6379   long indx;
6380   bfd_boolean defined_p;
6381   struct mips_elf_link_hash_table *htab;
6382 
6383   htab = mips_elf_hash_table (info);
6384   BFD_ASSERT (htab != NULL);
6385 
6386   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6387   dynobj = elf_hash_table (info)->dynobj;
6388   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6389   BFD_ASSERT (sreloc != NULL);
6390   BFD_ASSERT (sreloc->contents != NULL);
6391   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6392 	      < sreloc->size);
6393 
6394   outrel[0].r_offset =
6395     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6396   if (ABI_64_P (output_bfd))
6397     {
6398       outrel[1].r_offset =
6399 	_bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6400       outrel[2].r_offset =
6401 	_bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6402     }
6403 
6404   if (outrel[0].r_offset == MINUS_ONE)
6405     /* The relocation field has been deleted.  */
6406     return TRUE;
6407 
6408   if (outrel[0].r_offset == MINUS_TWO)
6409     {
6410       /* The relocation field has been converted into a relative value of
6411 	 some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6412 	 the field to be fully relocated, so add in the symbol's value.  */
6413       *addendp += symbol;
6414       return TRUE;
6415     }
6416 
6417   /* We must now calculate the dynamic symbol table index to use
6418      in the relocation.  */
6419   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6420     {
6421       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6422       indx = h->root.dynindx;
6423       if (SGI_COMPAT (output_bfd))
6424 	defined_p = h->root.def_regular;
6425       else
6426 	/* ??? glibc's ld.so just adds the final GOT entry to the
6427 	   relocation field.  It therefore treats relocs against
6428 	   defined symbols in the same way as relocs against
6429 	   undefined symbols.  */
6430 	defined_p = FALSE;
6431     }
6432   else
6433     {
6434       if (sec != NULL && bfd_is_abs_section (sec))
6435 	indx = 0;
6436       else if (sec == NULL || sec->owner == NULL)
6437 	{
6438 	  bfd_set_error (bfd_error_bad_value);
6439 	  return FALSE;
6440 	}
6441       else
6442 	{
6443 	  indx = elf_section_data (sec->output_section)->dynindx;
6444 	  if (indx == 0)
6445 	    {
6446 	      asection *osec = htab->root.text_index_section;
6447 	      indx = elf_section_data (osec)->dynindx;
6448 	    }
6449 	  if (indx == 0)
6450 	    abort ();
6451 	}
6452 
6453       /* Instead of generating a relocation using the section
6454 	 symbol, we may as well make it a fully relative
6455 	 relocation.  We want to avoid generating relocations to
6456 	 local symbols because we used to generate them
6457 	 incorrectly, without adding the original symbol value,
6458 	 which is mandated by the ABI for section symbols.  In
6459 	 order to give dynamic loaders and applications time to
6460 	 phase out the incorrect use, we refrain from emitting
6461 	 section-relative relocations.  It's not like they're
6462 	 useful, after all.  This should be a bit more efficient
6463 	 as well.  */
6464       /* ??? Although this behavior is compatible with glibc's ld.so,
6465 	 the ABI says that relocations against STN_UNDEF should have
6466 	 a symbol value of 0.  Irix rld honors this, so relocations
6467 	 against STN_UNDEF have no effect.  */
6468       if (!SGI_COMPAT (output_bfd))
6469 	indx = 0;
6470       defined_p = TRUE;
6471     }
6472 
6473   /* If the relocation was previously an absolute relocation and
6474      this symbol will not be referred to by the relocation, we must
6475      adjust it by the value we give it in the dynamic symbol table.
6476      Otherwise leave the job up to the dynamic linker.  */
6477   if (defined_p && r_type != R_MIPS_REL32)
6478     *addendp += symbol;
6479 
6480   if (htab->is_vxworks)
6481     /* VxWorks uses non-relative relocations for this.  */
6482     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6483   else
6484     /* The relocation is always an REL32 relocation because we don't
6485        know where the shared library will wind up at load-time.  */
6486     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6487 				   R_MIPS_REL32);
6488 
6489   /* For strict adherence to the ABI specification, we should
6490      generate a R_MIPS_64 relocation record by itself before the
6491      _REL32/_64 record as well, such that the addend is read in as
6492      a 64-bit value (REL32 is a 32-bit relocation, after all).
6493      However, since none of the existing ELF64 MIPS dynamic
6494      loaders seems to care, we don't waste space with these
6495      artificial relocations.  If this turns out to not be true,
6496      mips_elf_allocate_dynamic_relocation() should be tweaked so
6497      as to make room for a pair of dynamic relocations per
6498      invocation if ABI_64_P, and here we should generate an
6499      additional relocation record with R_MIPS_64 by itself for a
6500      NULL symbol before this relocation record.  */
6501   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6502 				 ABI_64_P (output_bfd)
6503 				 ? R_MIPS_64
6504 				 : R_MIPS_NONE);
6505   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6506 
6507   /* Adjust the output offset of the relocation to reference the
6508      correct location in the output file.  */
6509   outrel[0].r_offset += (input_section->output_section->vma
6510 			 + input_section->output_offset);
6511   outrel[1].r_offset += (input_section->output_section->vma
6512 			 + input_section->output_offset);
6513   outrel[2].r_offset += (input_section->output_section->vma
6514 			 + input_section->output_offset);
6515 
6516   /* Put the relocation back out.  We have to use the special
6517      relocation outputter in the 64-bit case since the 64-bit
6518      relocation format is non-standard.  */
6519   if (ABI_64_P (output_bfd))
6520     {
6521       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6522 	(output_bfd, &outrel[0],
6523 	 (sreloc->contents
6524 	  + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6525     }
6526   else if (htab->is_vxworks)
6527     {
6528       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6529       outrel[0].r_addend = *addendp;
6530       bfd_elf32_swap_reloca_out
6531 	(output_bfd, &outrel[0],
6532 	 (sreloc->contents
6533 	  + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6534     }
6535   else
6536     bfd_elf32_swap_reloc_out
6537       (output_bfd, &outrel[0],
6538        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6539 
6540   /* We've now added another relocation.  */
6541   ++sreloc->reloc_count;
6542 
6543   /* Make sure the output section is writable.  The dynamic linker
6544      will be writing to it.  */
6545   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6546     |= SHF_WRITE;
6547 
6548   /* On IRIX5, make an entry of compact relocation info.  */
6549   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6550     {
6551       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6552       bfd_byte *cr;
6553 
6554       if (scpt)
6555 	{
6556 	  Elf32_crinfo cptrel;
6557 
6558 	  mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6559 	  cptrel.vaddr = (rel->r_offset
6560 			  + input_section->output_section->vma
6561 			  + input_section->output_offset);
6562 	  if (r_type == R_MIPS_REL32)
6563 	    mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6564 	  else
6565 	    mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6566 	  mips_elf_set_cr_dist2to (cptrel, 0);
6567 	  cptrel.konst = *addendp;
6568 
6569 	  cr = (scpt->contents
6570 		+ sizeof (Elf32_External_compact_rel));
6571 	  mips_elf_set_cr_relvaddr (cptrel, 0);
6572 	  bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6573 				     ((Elf32_External_crinfo *) cr
6574 				      + scpt->reloc_count));
6575 	  ++scpt->reloc_count;
6576 	}
6577     }
6578 
6579   /* If we've written this relocation for a readonly section,
6580      we need to set DF_TEXTREL again, so that we do not delete the
6581      DT_TEXTREL tag.  */
6582   if (MIPS_ELF_READONLY_SECTION (input_section))
6583     info->flags |= DF_TEXTREL;
6584 
6585   return TRUE;
6586 }
6587 
6588 /* Return the MACH for a MIPS e_flags value.  */
6589 
6590 unsigned long
_bfd_elf_mips_mach(flagword flags)6591 _bfd_elf_mips_mach (flagword flags)
6592 {
6593   switch (flags & EF_MIPS_MACH)
6594     {
6595     case E_MIPS_MACH_3900:
6596       return bfd_mach_mips3900;
6597 
6598     case E_MIPS_MACH_4010:
6599       return bfd_mach_mips4010;
6600 
6601     case E_MIPS_MACH_4100:
6602       return bfd_mach_mips4100;
6603 
6604     case E_MIPS_MACH_4111:
6605       return bfd_mach_mips4111;
6606 
6607     case E_MIPS_MACH_4120:
6608       return bfd_mach_mips4120;
6609 
6610     case E_MIPS_MACH_4650:
6611       return bfd_mach_mips4650;
6612 
6613     case E_MIPS_MACH_5400:
6614       return bfd_mach_mips5400;
6615 
6616     case E_MIPS_MACH_5500:
6617       return bfd_mach_mips5500;
6618 
6619     case E_MIPS_MACH_5900:
6620       return bfd_mach_mips5900;
6621 
6622     case E_MIPS_MACH_9000:
6623       return bfd_mach_mips9000;
6624 
6625     case E_MIPS_MACH_SB1:
6626       return bfd_mach_mips_sb1;
6627 
6628     case E_MIPS_MACH_LS2E:
6629       return bfd_mach_mips_loongson_2e;
6630 
6631     case E_MIPS_MACH_LS2F:
6632       return bfd_mach_mips_loongson_2f;
6633 
6634     case E_MIPS_MACH_LS3A:
6635       return bfd_mach_mips_loongson_3a;
6636 
6637     case E_MIPS_MACH_OCTEON3:
6638       return bfd_mach_mips_octeon3;
6639 
6640     case E_MIPS_MACH_OCTEON2:
6641       return bfd_mach_mips_octeon2;
6642 
6643     case E_MIPS_MACH_OCTEON:
6644       return bfd_mach_mips_octeon;
6645 
6646     case E_MIPS_MACH_XLR:
6647       return bfd_mach_mips_xlr;
6648 
6649     default:
6650       switch (flags & EF_MIPS_ARCH)
6651 	{
6652 	default:
6653 	case E_MIPS_ARCH_1:
6654 	  return bfd_mach_mips3000;
6655 
6656 	case E_MIPS_ARCH_2:
6657 	  return bfd_mach_mips6000;
6658 
6659 	case E_MIPS_ARCH_3:
6660 	  return bfd_mach_mips4000;
6661 
6662 	case E_MIPS_ARCH_4:
6663 	  return bfd_mach_mips8000;
6664 
6665 	case E_MIPS_ARCH_5:
6666 	  return bfd_mach_mips5;
6667 
6668 	case E_MIPS_ARCH_32:
6669 	  return bfd_mach_mipsisa32;
6670 
6671 	case E_MIPS_ARCH_64:
6672 	  return bfd_mach_mipsisa64;
6673 
6674 	case E_MIPS_ARCH_32R2:
6675 	  return bfd_mach_mipsisa32r2;
6676 
6677 	case E_MIPS_ARCH_64R2:
6678 	  return bfd_mach_mipsisa64r2;
6679 
6680 	case E_MIPS_ARCH_32R6:
6681 	  return bfd_mach_mipsisa32r6;
6682 
6683 	case E_MIPS_ARCH_64R6:
6684 	  return bfd_mach_mipsisa64r6;
6685 	}
6686     }
6687 
6688   return 0;
6689 }
6690 
6691 /* Return printable name for ABI.  */
6692 
6693 static INLINE char *
elf_mips_abi_name(bfd * abfd)6694 elf_mips_abi_name (bfd *abfd)
6695 {
6696   flagword flags;
6697 
6698   flags = elf_elfheader (abfd)->e_flags;
6699   switch (flags & EF_MIPS_ABI)
6700     {
6701     case 0:
6702       if (ABI_N32_P (abfd))
6703 	return "N32";
6704       else if (ABI_64_P (abfd))
6705 	return "64";
6706       else
6707 	return "none";
6708     case E_MIPS_ABI_O32:
6709       return "O32";
6710     case E_MIPS_ABI_O64:
6711       return "O64";
6712     case E_MIPS_ABI_EABI32:
6713       return "EABI32";
6714     case E_MIPS_ABI_EABI64:
6715       return "EABI64";
6716     default:
6717       return "unknown abi";
6718     }
6719 }
6720 
6721 /* MIPS ELF uses two common sections.  One is the usual one, and the
6722    other is for small objects.  All the small objects are kept
6723    together, and then referenced via the gp pointer, which yields
6724    faster assembler code.  This is what we use for the small common
6725    section.  This approach is copied from ecoff.c.  */
6726 static asection mips_elf_scom_section;
6727 static asymbol mips_elf_scom_symbol;
6728 static asymbol *mips_elf_scom_symbol_ptr;
6729 
6730 /* MIPS ELF also uses an acommon section, which represents an
6731    allocated common symbol which may be overridden by a
6732    definition in a shared library.  */
6733 static asection mips_elf_acom_section;
6734 static asymbol mips_elf_acom_symbol;
6735 static asymbol *mips_elf_acom_symbol_ptr;
6736 
6737 /* This is used for both the 32-bit and the 64-bit ABI.  */
6738 
6739 void
_bfd_mips_elf_symbol_processing(bfd * abfd,asymbol * asym)6740 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6741 {
6742   elf_symbol_type *elfsym;
6743 
6744   /* Handle the special MIPS section numbers that a symbol may use.  */
6745   elfsym = (elf_symbol_type *) asym;
6746   switch (elfsym->internal_elf_sym.st_shndx)
6747     {
6748     case SHN_MIPS_ACOMMON:
6749       /* This section is used in a dynamically linked executable file.
6750 	 It is an allocated common section.  The dynamic linker can
6751 	 either resolve these symbols to something in a shared
6752 	 library, or it can just leave them here.  For our purposes,
6753 	 we can consider these symbols to be in a new section.  */
6754       if (mips_elf_acom_section.name == NULL)
6755 	{
6756 	  /* Initialize the acommon section.  */
6757 	  mips_elf_acom_section.name = ".acommon";
6758 	  mips_elf_acom_section.flags = SEC_ALLOC;
6759 	  mips_elf_acom_section.output_section = &mips_elf_acom_section;
6760 	  mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6761 	  mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6762 	  mips_elf_acom_symbol.name = ".acommon";
6763 	  mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6764 	  mips_elf_acom_symbol.section = &mips_elf_acom_section;
6765 	  mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6766 	}
6767       asym->section = &mips_elf_acom_section;
6768       break;
6769 
6770     case SHN_COMMON:
6771       /* Common symbols less than the GP size are automatically
6772 	 treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6773       if (asym->value > elf_gp_size (abfd)
6774 	  || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6775 	  || IRIX_COMPAT (abfd) == ict_irix6)
6776 	break;
6777       /* Fall through.  */
6778     case SHN_MIPS_SCOMMON:
6779       if (mips_elf_scom_section.name == NULL)
6780 	{
6781 	  /* Initialize the small common section.  */
6782 	  mips_elf_scom_section.name = ".scommon";
6783 	  mips_elf_scom_section.flags = SEC_IS_COMMON;
6784 	  mips_elf_scom_section.output_section = &mips_elf_scom_section;
6785 	  mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6786 	  mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6787 	  mips_elf_scom_symbol.name = ".scommon";
6788 	  mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6789 	  mips_elf_scom_symbol.section = &mips_elf_scom_section;
6790 	  mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6791 	}
6792       asym->section = &mips_elf_scom_section;
6793       asym->value = elfsym->internal_elf_sym.st_size;
6794       break;
6795 
6796     case SHN_MIPS_SUNDEFINED:
6797       asym->section = bfd_und_section_ptr;
6798       break;
6799 
6800     case SHN_MIPS_TEXT:
6801       {
6802 	asection *section = bfd_get_section_by_name (abfd, ".text");
6803 
6804 	if (section != NULL)
6805 	  {
6806 	    asym->section = section;
6807 	    /* MIPS_TEXT is a bit special, the address is not an offset
6808 	       to the base of the .text section.  So substract the section
6809 	       base address to make it an offset.  */
6810 	    asym->value -= section->vma;
6811 	  }
6812       }
6813       break;
6814 
6815     case SHN_MIPS_DATA:
6816       {
6817 	asection *section = bfd_get_section_by_name (abfd, ".data");
6818 
6819 	if (section != NULL)
6820 	  {
6821 	    asym->section = section;
6822 	    /* MIPS_DATA is a bit special, the address is not an offset
6823 	       to the base of the .data section.  So substract the section
6824 	       base address to make it an offset.  */
6825 	    asym->value -= section->vma;
6826 	  }
6827       }
6828       break;
6829     }
6830 
6831   /* If this is an odd-valued function symbol, assume it's a MIPS16
6832      or microMIPS one.  */
6833   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6834       && (asym->value & 1) != 0)
6835     {
6836       asym->value--;
6837       if (MICROMIPS_P (abfd))
6838 	elfsym->internal_elf_sym.st_other
6839 	  = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6840       else
6841 	elfsym->internal_elf_sym.st_other
6842 	  = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6843     }
6844 }
6845 
6846 /* Implement elf_backend_eh_frame_address_size.  This differs from
6847    the default in the way it handles EABI64.
6848 
6849    EABI64 was originally specified as an LP64 ABI, and that is what
6850    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6851    historically accepted the combination of -mabi=eabi and -mlong32,
6852    and this ILP32 variation has become semi-official over time.
6853    Both forms use elf32 and have pointer-sized FDE addresses.
6854 
6855    If an EABI object was generated by GCC 4.0 or above, it will have
6856    an empty .gcc_compiled_longXX section, where XX is the size of longs
6857    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6858    have no special marking to distinguish them from LP64 objects.
6859 
6860    We don't want users of the official LP64 ABI to be punished for the
6861    existence of the ILP32 variant, but at the same time, we don't want
6862    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6863    We therefore take the following approach:
6864 
6865       - If ABFD contains a .gcc_compiled_longXX section, use it to
6866         determine the pointer size.
6867 
6868       - Otherwise check the type of the first relocation.  Assume that
6869         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6870 
6871       - Otherwise punt.
6872 
6873    The second check is enough to detect LP64 objects generated by pre-4.0
6874    compilers because, in the kind of output generated by those compilers,
6875    the first relocation will be associated with either a CIE personality
6876    routine or an FDE start address.  Furthermore, the compilers never
6877    used a special (non-pointer) encoding for this ABI.
6878 
6879    Checking the relocation type should also be safe because there is no
6880    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6881    did so.  */
6882 
6883 unsigned int
_bfd_mips_elf_eh_frame_address_size(bfd * abfd,asection * sec)6884 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6885 {
6886   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6887     return 8;
6888   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6889     {
6890       bfd_boolean long32_p, long64_p;
6891 
6892       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6893       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6894       if (long32_p && long64_p)
6895 	return 0;
6896       if (long32_p)
6897 	return 4;
6898       if (long64_p)
6899 	return 8;
6900 
6901       if (sec->reloc_count > 0
6902 	  && elf_section_data (sec)->relocs != NULL
6903 	  && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6904 	      == R_MIPS_64))
6905 	return 8;
6906 
6907       return 0;
6908     }
6909   return 4;
6910 }
6911 
6912 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6913    relocations against two unnamed section symbols to resolve to the
6914    same address.  For example, if we have code like:
6915 
6916 	lw	$4,%got_disp(.data)($gp)
6917 	lw	$25,%got_disp(.text)($gp)
6918 	jalr	$25
6919 
6920    then the linker will resolve both relocations to .data and the program
6921    will jump there rather than to .text.
6922 
6923    We can work around this problem by giving names to local section symbols.
6924    This is also what the MIPSpro tools do.  */
6925 
6926 bfd_boolean
_bfd_mips_elf_name_local_section_symbols(bfd * abfd)6927 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6928 {
6929   return SGI_COMPAT (abfd);
6930 }
6931 
6932 /* Work over a section just before writing it out.  This routine is
6933    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6934    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6935    a better way.  */
6936 
6937 bfd_boolean
_bfd_mips_elf_section_processing(bfd * abfd,Elf_Internal_Shdr * hdr)6938 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6939 {
6940   if (hdr->sh_type == SHT_MIPS_REGINFO
6941       && hdr->sh_size > 0)
6942     {
6943       bfd_byte buf[4];
6944 
6945       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6946       BFD_ASSERT (hdr->contents == NULL);
6947 
6948       if (bfd_seek (abfd,
6949 		    hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6950 		    SEEK_SET) != 0)
6951 	return FALSE;
6952       H_PUT_32 (abfd, elf_gp (abfd), buf);
6953       if (bfd_bwrite (buf, 4, abfd) != 4)
6954 	return FALSE;
6955     }
6956 
6957   if (hdr->sh_type == SHT_MIPS_OPTIONS
6958       && hdr->bfd_section != NULL
6959       && mips_elf_section_data (hdr->bfd_section) != NULL
6960       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6961     {
6962       bfd_byte *contents, *l, *lend;
6963 
6964       /* We stored the section contents in the tdata field in the
6965 	 set_section_contents routine.  We save the section contents
6966 	 so that we don't have to read them again.
6967 	 At this point we know that elf_gp is set, so we can look
6968 	 through the section contents to see if there is an
6969 	 ODK_REGINFO structure.  */
6970 
6971       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6972       l = contents;
6973       lend = contents + hdr->sh_size;
6974       while (l + sizeof (Elf_External_Options) <= lend)
6975 	{
6976 	  Elf_Internal_Options intopt;
6977 
6978 	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6979 					&intopt);
6980 	  if (intopt.size < sizeof (Elf_External_Options))
6981 	    {
6982 	      (*_bfd_error_handler)
6983 		(_("%B: Warning: bad `%s' option size %u smaller than its header"),
6984 		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6985 	      break;
6986 	    }
6987 	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6988 	    {
6989 	      bfd_byte buf[8];
6990 
6991 	      if (bfd_seek (abfd,
6992 			    (hdr->sh_offset
6993 			     + (l - contents)
6994 			     + sizeof (Elf_External_Options)
6995 			     + (sizeof (Elf64_External_RegInfo) - 8)),
6996 			     SEEK_SET) != 0)
6997 		return FALSE;
6998 	      H_PUT_64 (abfd, elf_gp (abfd), buf);
6999 	      if (bfd_bwrite (buf, 8, abfd) != 8)
7000 		return FALSE;
7001 	    }
7002 	  else if (intopt.kind == ODK_REGINFO)
7003 	    {
7004 	      bfd_byte buf[4];
7005 
7006 	      if (bfd_seek (abfd,
7007 			    (hdr->sh_offset
7008 			     + (l - contents)
7009 			     + sizeof (Elf_External_Options)
7010 			     + (sizeof (Elf32_External_RegInfo) - 4)),
7011 			    SEEK_SET) != 0)
7012 		return FALSE;
7013 	      H_PUT_32 (abfd, elf_gp (abfd), buf);
7014 	      if (bfd_bwrite (buf, 4, abfd) != 4)
7015 		return FALSE;
7016 	    }
7017 	  l += intopt.size;
7018 	}
7019     }
7020 
7021   if (hdr->bfd_section != NULL)
7022     {
7023       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
7024 
7025       /* .sbss is not handled specially here because the GNU/Linux
7026 	 prelinker can convert .sbss from NOBITS to PROGBITS and
7027 	 changing it back to NOBITS breaks the binary.  The entry in
7028 	 _bfd_mips_elf_special_sections will ensure the correct flags
7029 	 are set on .sbss if BFD creates it without reading it from an
7030 	 input file, and without special handling here the flags set
7031 	 on it in an input file will be followed.  */
7032       if (strcmp (name, ".sdata") == 0
7033 	  || strcmp (name, ".lit8") == 0
7034 	  || strcmp (name, ".lit4") == 0)
7035 	hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7036       else if (strcmp (name, ".srdata") == 0)
7037 	hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7038       else if (strcmp (name, ".compact_rel") == 0)
7039 	hdr->sh_flags = 0;
7040       else if (strcmp (name, ".rtproc") == 0)
7041 	{
7042 	  if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7043 	    {
7044 	      unsigned int adjust;
7045 
7046 	      adjust = hdr->sh_size % hdr->sh_addralign;
7047 	      if (adjust != 0)
7048 		hdr->sh_size += hdr->sh_addralign - adjust;
7049 	    }
7050 	}
7051     }
7052 
7053   return TRUE;
7054 }
7055 
7056 /* Handle a MIPS specific section when reading an object file.  This
7057    is called when elfcode.h finds a section with an unknown type.
7058    This routine supports both the 32-bit and 64-bit ELF ABI.
7059 
7060    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7061    how to.  */
7062 
7063 bfd_boolean
_bfd_mips_elf_section_from_shdr(bfd * abfd,Elf_Internal_Shdr * hdr,const char * name,int shindex)7064 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7065 				 Elf_Internal_Shdr *hdr,
7066 				 const char *name,
7067 				 int shindex)
7068 {
7069   flagword flags = 0;
7070 
7071   /* There ought to be a place to keep ELF backend specific flags, but
7072      at the moment there isn't one.  We just keep track of the
7073      sections by their name, instead.  Fortunately, the ABI gives
7074      suggested names for all the MIPS specific sections, so we will
7075      probably get away with this.  */
7076   switch (hdr->sh_type)
7077     {
7078     case SHT_MIPS_LIBLIST:
7079       if (strcmp (name, ".liblist") != 0)
7080 	return FALSE;
7081       break;
7082     case SHT_MIPS_MSYM:
7083       if (strcmp (name, ".msym") != 0)
7084 	return FALSE;
7085       break;
7086     case SHT_MIPS_CONFLICT:
7087       if (strcmp (name, ".conflict") != 0)
7088 	return FALSE;
7089       break;
7090     case SHT_MIPS_GPTAB:
7091       if (! CONST_STRNEQ (name, ".gptab."))
7092 	return FALSE;
7093       break;
7094     case SHT_MIPS_UCODE:
7095       if (strcmp (name, ".ucode") != 0)
7096 	return FALSE;
7097       break;
7098     case SHT_MIPS_DEBUG:
7099       if (strcmp (name, ".mdebug") != 0)
7100 	return FALSE;
7101       flags = SEC_DEBUGGING;
7102       break;
7103     case SHT_MIPS_REGINFO:
7104       if (strcmp (name, ".reginfo") != 0
7105 	  || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7106 	return FALSE;
7107       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7108       break;
7109     case SHT_MIPS_IFACE:
7110       if (strcmp (name, ".MIPS.interfaces") != 0)
7111 	return FALSE;
7112       break;
7113     case SHT_MIPS_CONTENT:
7114       if (! CONST_STRNEQ (name, ".MIPS.content"))
7115 	return FALSE;
7116       break;
7117     case SHT_MIPS_OPTIONS:
7118       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7119 	return FALSE;
7120       break;
7121     case SHT_MIPS_ABIFLAGS:
7122       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7123 	return FALSE;
7124       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7125       break;
7126     case SHT_MIPS_DWARF:
7127       if (! CONST_STRNEQ (name, ".debug_")
7128           && ! CONST_STRNEQ (name, ".zdebug_"))
7129 	return FALSE;
7130       break;
7131     case SHT_MIPS_SYMBOL_LIB:
7132       if (strcmp (name, ".MIPS.symlib") != 0)
7133 	return FALSE;
7134       break;
7135     case SHT_MIPS_EVENTS:
7136       if (! CONST_STRNEQ (name, ".MIPS.events")
7137 	  && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7138 	return FALSE;
7139       break;
7140     default:
7141       break;
7142     }
7143 
7144   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7145     return FALSE;
7146 
7147   if (flags)
7148     {
7149       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7150 				   (bfd_get_section_flags (abfd,
7151 							   hdr->bfd_section)
7152 				    | flags)))
7153 	return FALSE;
7154     }
7155 
7156   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7157     {
7158       Elf_External_ABIFlags_v0 ext;
7159 
7160       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7161 				      &ext, 0, sizeof ext))
7162 	return FALSE;
7163       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7164 					&mips_elf_tdata (abfd)->abiflags);
7165       if (mips_elf_tdata (abfd)->abiflags.version != 0)
7166 	return FALSE;
7167       mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7168     }
7169 
7170   /* FIXME: We should record sh_info for a .gptab section.  */
7171 
7172   /* For a .reginfo section, set the gp value in the tdata information
7173      from the contents of this section.  We need the gp value while
7174      processing relocs, so we just get it now.  The .reginfo section
7175      is not used in the 64-bit MIPS ELF ABI.  */
7176   if (hdr->sh_type == SHT_MIPS_REGINFO)
7177     {
7178       Elf32_External_RegInfo ext;
7179       Elf32_RegInfo s;
7180 
7181       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7182 				      &ext, 0, sizeof ext))
7183 	return FALSE;
7184       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7185       elf_gp (abfd) = s.ri_gp_value;
7186     }
7187 
7188   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7189      set the gp value based on what we find.  We may see both
7190      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7191      they should agree.  */
7192   if (hdr->sh_type == SHT_MIPS_OPTIONS)
7193     {
7194       bfd_byte *contents, *l, *lend;
7195 
7196       contents = bfd_malloc (hdr->sh_size);
7197       if (contents == NULL)
7198 	return FALSE;
7199       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7200 				      0, hdr->sh_size))
7201 	{
7202 	  free (contents);
7203 	  return FALSE;
7204 	}
7205       l = contents;
7206       lend = contents + hdr->sh_size;
7207       while (l + sizeof (Elf_External_Options) <= lend)
7208 	{
7209 	  Elf_Internal_Options intopt;
7210 
7211 	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7212 					&intopt);
7213 	  if (intopt.size < sizeof (Elf_External_Options))
7214 	    {
7215 	      (*_bfd_error_handler)
7216 		(_("%B: Warning: bad `%s' option size %u smaller than its header"),
7217 		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7218 	      break;
7219 	    }
7220 	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7221 	    {
7222 	      Elf64_Internal_RegInfo intreg;
7223 
7224 	      bfd_mips_elf64_swap_reginfo_in
7225 		(abfd,
7226 		 ((Elf64_External_RegInfo *)
7227 		  (l + sizeof (Elf_External_Options))),
7228 		 &intreg);
7229 	      elf_gp (abfd) = intreg.ri_gp_value;
7230 	    }
7231 	  else if (intopt.kind == ODK_REGINFO)
7232 	    {
7233 	      Elf32_RegInfo intreg;
7234 
7235 	      bfd_mips_elf32_swap_reginfo_in
7236 		(abfd,
7237 		 ((Elf32_External_RegInfo *)
7238 		  (l + sizeof (Elf_External_Options))),
7239 		 &intreg);
7240 	      elf_gp (abfd) = intreg.ri_gp_value;
7241 	    }
7242 	  l += intopt.size;
7243 	}
7244       free (contents);
7245     }
7246 
7247   return TRUE;
7248 }
7249 
7250 /* Set the correct type for a MIPS ELF section.  We do this by the
7251    section name, which is a hack, but ought to work.  This routine is
7252    used by both the 32-bit and the 64-bit ABI.  */
7253 
7254 bfd_boolean
_bfd_mips_elf_fake_sections(bfd * abfd,Elf_Internal_Shdr * hdr,asection * sec)7255 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7256 {
7257   const char *name = bfd_get_section_name (abfd, sec);
7258 
7259   if (strcmp (name, ".liblist") == 0)
7260     {
7261       hdr->sh_type = SHT_MIPS_LIBLIST;
7262       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7263       /* The sh_link field is set in final_write_processing.  */
7264     }
7265   else if (strcmp (name, ".conflict") == 0)
7266     hdr->sh_type = SHT_MIPS_CONFLICT;
7267   else if (CONST_STRNEQ (name, ".gptab."))
7268     {
7269       hdr->sh_type = SHT_MIPS_GPTAB;
7270       hdr->sh_entsize = sizeof (Elf32_External_gptab);
7271       /* The sh_info field is set in final_write_processing.  */
7272     }
7273   else if (strcmp (name, ".ucode") == 0)
7274     hdr->sh_type = SHT_MIPS_UCODE;
7275   else if (strcmp (name, ".mdebug") == 0)
7276     {
7277       hdr->sh_type = SHT_MIPS_DEBUG;
7278       /* In a shared object on IRIX 5.3, the .mdebug section has an
7279          entsize of 0.  FIXME: Does this matter?  */
7280       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7281 	hdr->sh_entsize = 0;
7282       else
7283 	hdr->sh_entsize = 1;
7284     }
7285   else if (strcmp (name, ".reginfo") == 0)
7286     {
7287       hdr->sh_type = SHT_MIPS_REGINFO;
7288       /* In a shared object on IRIX 5.3, the .reginfo section has an
7289          entsize of 0x18.  FIXME: Does this matter?  */
7290       if (SGI_COMPAT (abfd))
7291 	{
7292 	  if ((abfd->flags & DYNAMIC) != 0)
7293 	    hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7294 	  else
7295 	    hdr->sh_entsize = 1;
7296 	}
7297       else
7298 	hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7299     }
7300   else if (SGI_COMPAT (abfd)
7301 	   && (strcmp (name, ".hash") == 0
7302 	       || strcmp (name, ".dynamic") == 0
7303 	       || strcmp (name, ".dynstr") == 0))
7304     {
7305       if (SGI_COMPAT (abfd))
7306 	hdr->sh_entsize = 0;
7307 #if 0
7308       /* This isn't how the IRIX6 linker behaves.  */
7309       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7310 #endif
7311     }
7312   else if (strcmp (name, ".got") == 0
7313 	   || strcmp (name, ".srdata") == 0
7314 	   || strcmp (name, ".sdata") == 0
7315 	   || strcmp (name, ".sbss") == 0
7316 	   || strcmp (name, ".lit4") == 0
7317 	   || strcmp (name, ".lit8") == 0)
7318     hdr->sh_flags |= SHF_MIPS_GPREL;
7319   else if (strcmp (name, ".MIPS.interfaces") == 0)
7320     {
7321       hdr->sh_type = SHT_MIPS_IFACE;
7322       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7323     }
7324   else if (CONST_STRNEQ (name, ".MIPS.content"))
7325     {
7326       hdr->sh_type = SHT_MIPS_CONTENT;
7327       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7328       /* The sh_info field is set in final_write_processing.  */
7329     }
7330   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7331     {
7332       hdr->sh_type = SHT_MIPS_OPTIONS;
7333       hdr->sh_entsize = 1;
7334       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7335     }
7336   else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7337     {
7338       hdr->sh_type = SHT_MIPS_ABIFLAGS;
7339       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7340     }
7341   else if (CONST_STRNEQ (name, ".debug_")
7342            || CONST_STRNEQ (name, ".zdebug_"))
7343     {
7344       hdr->sh_type = SHT_MIPS_DWARF;
7345 
7346       /* Irix facilities such as libexc expect a single .debug_frame
7347 	 per executable, the system ones have NOSTRIP set and the linker
7348 	 doesn't merge sections with different flags so ...  */
7349       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7350 	hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7351     }
7352   else if (strcmp (name, ".MIPS.symlib") == 0)
7353     {
7354       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7355       /* The sh_link and sh_info fields are set in
7356          final_write_processing.  */
7357     }
7358   else if (CONST_STRNEQ (name, ".MIPS.events")
7359 	   || CONST_STRNEQ (name, ".MIPS.post_rel"))
7360     {
7361       hdr->sh_type = SHT_MIPS_EVENTS;
7362       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7363       /* The sh_link field is set in final_write_processing.  */
7364     }
7365   else if (strcmp (name, ".msym") == 0)
7366     {
7367       hdr->sh_type = SHT_MIPS_MSYM;
7368       hdr->sh_flags |= SHF_ALLOC;
7369       hdr->sh_entsize = 8;
7370     }
7371 
7372   /* The generic elf_fake_sections will set up REL_HDR using the default
7373    kind of relocations.  We used to set up a second header for the
7374    non-default kind of relocations here, but only NewABI would use
7375    these, and the IRIX ld doesn't like resulting empty RELA sections.
7376    Thus we create those header only on demand now.  */
7377 
7378   return TRUE;
7379 }
7380 
7381 /* Given a BFD section, try to locate the corresponding ELF section
7382    index.  This is used by both the 32-bit and the 64-bit ABI.
7383    Actually, it's not clear to me that the 64-bit ABI supports these,
7384    but for non-PIC objects we will certainly want support for at least
7385    the .scommon section.  */
7386 
7387 bfd_boolean
_bfd_mips_elf_section_from_bfd_section(bfd * abfd ATTRIBUTE_UNUSED,asection * sec,int * retval)7388 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7389 					asection *sec, int *retval)
7390 {
7391   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7392     {
7393       *retval = SHN_MIPS_SCOMMON;
7394       return TRUE;
7395     }
7396   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7397     {
7398       *retval = SHN_MIPS_ACOMMON;
7399       return TRUE;
7400     }
7401   return FALSE;
7402 }
7403 
7404 /* Hook called by the linker routine which adds symbols from an object
7405    file.  We must handle the special MIPS section numbers here.  */
7406 
7407 bfd_boolean
_bfd_mips_elf_add_symbol_hook(bfd * abfd,struct bfd_link_info * info,Elf_Internal_Sym * sym,const char ** namep,flagword * flagsp ATTRIBUTE_UNUSED,asection ** secp,bfd_vma * valp)7408 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7409 			       Elf_Internal_Sym *sym, const char **namep,
7410 			       flagword *flagsp ATTRIBUTE_UNUSED,
7411 			       asection **secp, bfd_vma *valp)
7412 {
7413   if (SGI_COMPAT (abfd)
7414       && (abfd->flags & DYNAMIC) != 0
7415       && strcmp (*namep, "_rld_new_interface") == 0)
7416     {
7417       /* Skip IRIX5 rld entry name.  */
7418       *namep = NULL;
7419       return TRUE;
7420     }
7421 
7422   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7423      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7424      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7425      a magic symbol resolved by the linker, we ignore this bogus definition
7426      of _gp_disp.  New ABI objects do not suffer from this problem so this
7427      is not done for them. */
7428   if (!NEWABI_P(abfd)
7429       && (sym->st_shndx == SHN_ABS)
7430       && (strcmp (*namep, "_gp_disp") == 0))
7431     {
7432       *namep = NULL;
7433       return TRUE;
7434     }
7435 
7436   switch (sym->st_shndx)
7437     {
7438     case SHN_COMMON:
7439       /* Common symbols less than the GP size are automatically
7440 	 treated as SHN_MIPS_SCOMMON symbols.  */
7441       if (sym->st_size > elf_gp_size (abfd)
7442 	  || ELF_ST_TYPE (sym->st_info) == STT_TLS
7443 	  || IRIX_COMPAT (abfd) == ict_irix6)
7444 	break;
7445       /* Fall through.  */
7446     case SHN_MIPS_SCOMMON:
7447       *secp = bfd_make_section_old_way (abfd, ".scommon");
7448       (*secp)->flags |= SEC_IS_COMMON;
7449       *valp = sym->st_size;
7450       break;
7451 
7452     case SHN_MIPS_TEXT:
7453       /* This section is used in a shared object.  */
7454       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7455 	{
7456 	  asymbol *elf_text_symbol;
7457 	  asection *elf_text_section;
7458 	  bfd_size_type amt = sizeof (asection);
7459 
7460 	  elf_text_section = bfd_zalloc (abfd, amt);
7461 	  if (elf_text_section == NULL)
7462 	    return FALSE;
7463 
7464 	  amt = sizeof (asymbol);
7465 	  elf_text_symbol = bfd_zalloc (abfd, amt);
7466 	  if (elf_text_symbol == NULL)
7467 	    return FALSE;
7468 
7469 	  /* Initialize the section.  */
7470 
7471 	  mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7472 	  mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7473 
7474 	  elf_text_section->symbol = elf_text_symbol;
7475 	  elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7476 
7477 	  elf_text_section->name = ".text";
7478 	  elf_text_section->flags = SEC_NO_FLAGS;
7479 	  elf_text_section->output_section = NULL;
7480 	  elf_text_section->owner = abfd;
7481 	  elf_text_symbol->name = ".text";
7482 	  elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7483 	  elf_text_symbol->section = elf_text_section;
7484 	}
7485       /* This code used to do *secp = bfd_und_section_ptr if
7486          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7487          so I took it out.  */
7488       *secp = mips_elf_tdata (abfd)->elf_text_section;
7489       break;
7490 
7491     case SHN_MIPS_ACOMMON:
7492       /* Fall through. XXX Can we treat this as allocated data?  */
7493     case SHN_MIPS_DATA:
7494       /* This section is used in a shared object.  */
7495       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7496 	{
7497 	  asymbol *elf_data_symbol;
7498 	  asection *elf_data_section;
7499 	  bfd_size_type amt = sizeof (asection);
7500 
7501 	  elf_data_section = bfd_zalloc (abfd, amt);
7502 	  if (elf_data_section == NULL)
7503 	    return FALSE;
7504 
7505 	  amt = sizeof (asymbol);
7506 	  elf_data_symbol = bfd_zalloc (abfd, amt);
7507 	  if (elf_data_symbol == NULL)
7508 	    return FALSE;
7509 
7510 	  /* Initialize the section.  */
7511 
7512 	  mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7513 	  mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7514 
7515 	  elf_data_section->symbol = elf_data_symbol;
7516 	  elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7517 
7518 	  elf_data_section->name = ".data";
7519 	  elf_data_section->flags = SEC_NO_FLAGS;
7520 	  elf_data_section->output_section = NULL;
7521 	  elf_data_section->owner = abfd;
7522 	  elf_data_symbol->name = ".data";
7523 	  elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7524 	  elf_data_symbol->section = elf_data_section;
7525 	}
7526       /* This code used to do *secp = bfd_und_section_ptr if
7527          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7528          so I took it out.  */
7529       *secp = mips_elf_tdata (abfd)->elf_data_section;
7530       break;
7531 
7532     case SHN_MIPS_SUNDEFINED:
7533       *secp = bfd_und_section_ptr;
7534       break;
7535     }
7536 
7537   if (SGI_COMPAT (abfd)
7538       && ! bfd_link_pic (info)
7539       && info->output_bfd->xvec == abfd->xvec
7540       && strcmp (*namep, "__rld_obj_head") == 0)
7541     {
7542       struct elf_link_hash_entry *h;
7543       struct bfd_link_hash_entry *bh;
7544 
7545       /* Mark __rld_obj_head as dynamic.  */
7546       bh = NULL;
7547       if (! (_bfd_generic_link_add_one_symbol
7548 	     (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7549 	      get_elf_backend_data (abfd)->collect, &bh)))
7550 	return FALSE;
7551 
7552       h = (struct elf_link_hash_entry *) bh;
7553       h->non_elf = 0;
7554       h->def_regular = 1;
7555       h->type = STT_OBJECT;
7556 
7557       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7558 	return FALSE;
7559 
7560       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7561       mips_elf_hash_table (info)->rld_symbol = h;
7562     }
7563 
7564   /* If this is a mips16 text symbol, add 1 to the value to make it
7565      odd.  This will cause something like .word SYM to come up with
7566      the right value when it is loaded into the PC.  */
7567   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7568     ++*valp;
7569 
7570   return TRUE;
7571 }
7572 
7573 /* This hook function is called before the linker writes out a global
7574    symbol.  We mark symbols as small common if appropriate.  This is
7575    also where we undo the increment of the value for a mips16 symbol.  */
7576 
7577 int
_bfd_mips_elf_link_output_symbol_hook(struct bfd_link_info * info ATTRIBUTE_UNUSED,const char * name ATTRIBUTE_UNUSED,Elf_Internal_Sym * sym,asection * input_sec,struct elf_link_hash_entry * h ATTRIBUTE_UNUSED)7578 _bfd_mips_elf_link_output_symbol_hook
7579   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7580    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7581    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7582 {
7583   /* If we see a common symbol, which implies a relocatable link, then
7584      if a symbol was small common in an input file, mark it as small
7585      common in the output file.  */
7586   if (sym->st_shndx == SHN_COMMON
7587       && strcmp (input_sec->name, ".scommon") == 0)
7588     sym->st_shndx = SHN_MIPS_SCOMMON;
7589 
7590   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7591     sym->st_value &= ~1;
7592 
7593   return 1;
7594 }
7595 
7596 /* Functions for the dynamic linker.  */
7597 
7598 /* Create dynamic sections when linking against a dynamic object.  */
7599 
7600 bfd_boolean
_bfd_mips_elf_create_dynamic_sections(bfd * abfd,struct bfd_link_info * info)7601 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7602 {
7603   struct elf_link_hash_entry *h;
7604   struct bfd_link_hash_entry *bh;
7605   flagword flags;
7606   register asection *s;
7607   const char * const *namep;
7608   struct mips_elf_link_hash_table *htab;
7609 
7610   htab = mips_elf_hash_table (info);
7611   BFD_ASSERT (htab != NULL);
7612 
7613   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7614 	   | SEC_LINKER_CREATED | SEC_READONLY);
7615 
7616   /* The psABI requires a read-only .dynamic section, but the VxWorks
7617      EABI doesn't.  */
7618   if (!htab->is_vxworks)
7619     {
7620       s = bfd_get_linker_section (abfd, ".dynamic");
7621       if (s != NULL)
7622 	{
7623 	  if (! bfd_set_section_flags (abfd, s, flags))
7624 	    return FALSE;
7625 	}
7626     }
7627 
7628   /* We need to create .got section.  */
7629   if (!mips_elf_create_got_section (abfd, info))
7630     return FALSE;
7631 
7632   if (! mips_elf_rel_dyn_section (info, TRUE))
7633     return FALSE;
7634 
7635   /* Create .stub section.  */
7636   s = bfd_make_section_anyway_with_flags (abfd,
7637 					  MIPS_ELF_STUB_SECTION_NAME (abfd),
7638 					  flags | SEC_CODE);
7639   if (s == NULL
7640       || ! bfd_set_section_alignment (abfd, s,
7641 				      MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7642     return FALSE;
7643   htab->sstubs = s;
7644 
7645   if (!mips_elf_hash_table (info)->use_rld_obj_head
7646       && bfd_link_executable (info)
7647       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7648     {
7649       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7650 					      flags &~ (flagword) SEC_READONLY);
7651       if (s == NULL
7652 	  || ! bfd_set_section_alignment (abfd, s,
7653 					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7654 	return FALSE;
7655     }
7656 
7657   /* On IRIX5, we adjust add some additional symbols and change the
7658      alignments of several sections.  There is no ABI documentation
7659      indicating that this is necessary on IRIX6, nor any evidence that
7660      the linker takes such action.  */
7661   if (IRIX_COMPAT (abfd) == ict_irix5)
7662     {
7663       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7664 	{
7665 	  bh = NULL;
7666 	  if (! (_bfd_generic_link_add_one_symbol
7667 		 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7668 		  NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7669 	    return FALSE;
7670 
7671 	  h = (struct elf_link_hash_entry *) bh;
7672 	  h->non_elf = 0;
7673 	  h->def_regular = 1;
7674 	  h->type = STT_SECTION;
7675 
7676 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
7677 	    return FALSE;
7678 	}
7679 
7680       /* We need to create a .compact_rel section.  */
7681       if (SGI_COMPAT (abfd))
7682 	{
7683 	  if (!mips_elf_create_compact_rel_section (abfd, info))
7684 	    return FALSE;
7685 	}
7686 
7687       /* Change alignments of some sections.  */
7688       s = bfd_get_linker_section (abfd, ".hash");
7689       if (s != NULL)
7690 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7691 
7692       s = bfd_get_linker_section (abfd, ".dynsym");
7693       if (s != NULL)
7694 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7695 
7696       s = bfd_get_linker_section (abfd, ".dynstr");
7697       if (s != NULL)
7698 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7699 
7700       /* ??? */
7701       s = bfd_get_section_by_name (abfd, ".reginfo");
7702       if (s != NULL)
7703 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7704 
7705       s = bfd_get_linker_section (abfd, ".dynamic");
7706       if (s != NULL)
7707 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7708     }
7709 
7710   if (bfd_link_executable (info))
7711     {
7712       const char *name;
7713 
7714       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7715       bh = NULL;
7716       if (!(_bfd_generic_link_add_one_symbol
7717 	    (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7718 	     NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7719 	return FALSE;
7720 
7721       h = (struct elf_link_hash_entry *) bh;
7722       h->non_elf = 0;
7723       h->def_regular = 1;
7724       h->type = STT_SECTION;
7725 
7726       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7727 	return FALSE;
7728 
7729       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7730 	{
7731 	  /* __rld_map is a four byte word located in the .data section
7732 	     and is filled in by the rtld to contain a pointer to
7733 	     the _r_debug structure. Its symbol value will be set in
7734 	     _bfd_mips_elf_finish_dynamic_symbol.  */
7735 	  s = bfd_get_linker_section (abfd, ".rld_map");
7736 	  BFD_ASSERT (s != NULL);
7737 
7738 	  name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7739 	  bh = NULL;
7740 	  if (!(_bfd_generic_link_add_one_symbol
7741 		(info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7742 		 get_elf_backend_data (abfd)->collect, &bh)))
7743 	    return FALSE;
7744 
7745 	  h = (struct elf_link_hash_entry *) bh;
7746 	  h->non_elf = 0;
7747 	  h->def_regular = 1;
7748 	  h->type = STT_OBJECT;
7749 
7750 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
7751 	    return FALSE;
7752 	  mips_elf_hash_table (info)->rld_symbol = h;
7753 	}
7754     }
7755 
7756   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7757      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
7758   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7759     return FALSE;
7760 
7761   /* Cache the sections created above.  */
7762   htab->splt = bfd_get_linker_section (abfd, ".plt");
7763   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7764   if (htab->is_vxworks)
7765     {
7766       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7767       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7768     }
7769   else
7770     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7771   if (!htab->sdynbss
7772       || (htab->is_vxworks && !htab->srelbss && !bfd_link_pic (info))
7773       || !htab->srelplt
7774       || !htab->splt)
7775     abort ();
7776 
7777   /* Do the usual VxWorks handling.  */
7778   if (htab->is_vxworks
7779       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7780     return FALSE;
7781 
7782   return TRUE;
7783 }
7784 
7785 /* Return true if relocation REL against section SEC is a REL rather than
7786    RELA relocation.  RELOCS is the first relocation in the section and
7787    ABFD is the bfd that contains SEC.  */
7788 
7789 static bfd_boolean
mips_elf_rel_relocation_p(bfd * abfd,asection * sec,const Elf_Internal_Rela * relocs,const Elf_Internal_Rela * rel)7790 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7791 			   const Elf_Internal_Rela *relocs,
7792 			   const Elf_Internal_Rela *rel)
7793 {
7794   Elf_Internal_Shdr *rel_hdr;
7795   const struct elf_backend_data *bed;
7796 
7797   /* To determine which flavor of relocation this is, we depend on the
7798      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7799   rel_hdr = elf_section_data (sec)->rel.hdr;
7800   if (rel_hdr == NULL)
7801     return FALSE;
7802   bed = get_elf_backend_data (abfd);
7803   return ((size_t) (rel - relocs)
7804 	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7805 }
7806 
7807 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7808    HOWTO is the relocation's howto and CONTENTS points to the contents
7809    of the section that REL is against.  */
7810 
7811 static bfd_vma
mips_elf_read_rel_addend(bfd * abfd,const Elf_Internal_Rela * rel,reloc_howto_type * howto,bfd_byte * contents)7812 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7813 			  reloc_howto_type *howto, bfd_byte *contents)
7814 {
7815   bfd_byte *location;
7816   unsigned int r_type;
7817   bfd_vma addend;
7818   bfd_vma bytes;
7819 
7820   r_type = ELF_R_TYPE (abfd, rel->r_info);
7821   location = contents + rel->r_offset;
7822 
7823   /* Get the addend, which is stored in the input file.  */
7824   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7825   bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
7826   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7827 
7828   addend = bytes & howto->src_mask;
7829 
7830   /* Shift is 2, unusually, for microMIPS JALX.  Adjust the addend
7831      accordingly.  */
7832   if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
7833     addend <<= 1;
7834 
7835   return addend;
7836 }
7837 
7838 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7839    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7840    and update *ADDEND with the final addend.  Return true on success
7841    or false if the LO16 could not be found.  RELEND is the exclusive
7842    upper bound on the relocations for REL's section.  */
7843 
7844 static bfd_boolean
mips_elf_add_lo16_rel_addend(bfd * abfd,const Elf_Internal_Rela * rel,const Elf_Internal_Rela * relend,bfd_byte * contents,bfd_vma * addend)7845 mips_elf_add_lo16_rel_addend (bfd *abfd,
7846 			      const Elf_Internal_Rela *rel,
7847 			      const Elf_Internal_Rela *relend,
7848 			      bfd_byte *contents, bfd_vma *addend)
7849 {
7850   unsigned int r_type, lo16_type;
7851   const Elf_Internal_Rela *lo16_relocation;
7852   reloc_howto_type *lo16_howto;
7853   bfd_vma l;
7854 
7855   r_type = ELF_R_TYPE (abfd, rel->r_info);
7856   if (mips16_reloc_p (r_type))
7857     lo16_type = R_MIPS16_LO16;
7858   else if (micromips_reloc_p (r_type))
7859     lo16_type = R_MICROMIPS_LO16;
7860   else if (r_type == R_MIPS_PCHI16)
7861     lo16_type = R_MIPS_PCLO16;
7862   else
7863     lo16_type = R_MIPS_LO16;
7864 
7865   /* The combined value is the sum of the HI16 addend, left-shifted by
7866      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7867      code does a `lui' of the HI16 value, and then an `addiu' of the
7868      LO16 value.)
7869 
7870      Scan ahead to find a matching LO16 relocation.
7871 
7872      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7873      be immediately following.  However, for the IRIX6 ABI, the next
7874      relocation may be a composed relocation consisting of several
7875      relocations for the same address.  In that case, the R_MIPS_LO16
7876      relocation may occur as one of these.  We permit a similar
7877      extension in general, as that is useful for GCC.
7878 
7879      In some cases GCC dead code elimination removes the LO16 but keeps
7880      the corresponding HI16.  This is strictly speaking a violation of
7881      the ABI but not immediately harmful.  */
7882   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7883   if (lo16_relocation == NULL)
7884     return FALSE;
7885 
7886   /* Obtain the addend kept there.  */
7887   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7888   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7889 
7890   l <<= lo16_howto->rightshift;
7891   l = _bfd_mips_elf_sign_extend (l, 16);
7892 
7893   *addend <<= 16;
7894   *addend += l;
7895   return TRUE;
7896 }
7897 
7898 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7899    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7900    already holds the contents if it is nonull on entry.  */
7901 
7902 static bfd_boolean
mips_elf_get_section_contents(bfd * abfd,asection * sec,bfd_byte ** contents)7903 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7904 {
7905   if (*contents)
7906     return TRUE;
7907 
7908   /* Get cached copy if it exists.  */
7909   if (elf_section_data (sec)->this_hdr.contents != NULL)
7910     {
7911       *contents = elf_section_data (sec)->this_hdr.contents;
7912       return TRUE;
7913     }
7914 
7915   return bfd_malloc_and_get_section (abfd, sec, contents);
7916 }
7917 
7918 /* Make a new PLT record to keep internal data.  */
7919 
7920 static struct plt_entry *
mips_elf_make_plt_record(bfd * abfd)7921 mips_elf_make_plt_record (bfd *abfd)
7922 {
7923   struct plt_entry *entry;
7924 
7925   entry = bfd_zalloc (abfd, sizeof (*entry));
7926   if (entry == NULL)
7927     return NULL;
7928 
7929   entry->stub_offset = MINUS_ONE;
7930   entry->mips_offset = MINUS_ONE;
7931   entry->comp_offset = MINUS_ONE;
7932   entry->gotplt_index = MINUS_ONE;
7933   return entry;
7934 }
7935 
7936 /* Look through the relocs for a section during the first phase, and
7937    allocate space in the global offset table and record the need for
7938    standard MIPS and compressed procedure linkage table entries.  */
7939 
7940 bfd_boolean
_bfd_mips_elf_check_relocs(bfd * abfd,struct bfd_link_info * info,asection * sec,const Elf_Internal_Rela * relocs)7941 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7942 			    asection *sec, const Elf_Internal_Rela *relocs)
7943 {
7944   const char *name;
7945   bfd *dynobj;
7946   Elf_Internal_Shdr *symtab_hdr;
7947   struct elf_link_hash_entry **sym_hashes;
7948   size_t extsymoff;
7949   const Elf_Internal_Rela *rel;
7950   const Elf_Internal_Rela *rel_end;
7951   asection *sreloc;
7952   const struct elf_backend_data *bed;
7953   struct mips_elf_link_hash_table *htab;
7954   bfd_byte *contents;
7955   bfd_vma addend;
7956   reloc_howto_type *howto;
7957 
7958   if (bfd_link_relocatable (info))
7959     return TRUE;
7960 
7961   htab = mips_elf_hash_table (info);
7962   BFD_ASSERT (htab != NULL);
7963 
7964   dynobj = elf_hash_table (info)->dynobj;
7965   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7966   sym_hashes = elf_sym_hashes (abfd);
7967   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7968 
7969   bed = get_elf_backend_data (abfd);
7970   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7971 
7972   /* Check for the mips16 stub sections.  */
7973 
7974   name = bfd_get_section_name (abfd, sec);
7975   if (FN_STUB_P (name))
7976     {
7977       unsigned long r_symndx;
7978 
7979       /* Look at the relocation information to figure out which symbol
7980          this is for.  */
7981 
7982       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7983       if (r_symndx == 0)
7984 	{
7985 	  (*_bfd_error_handler)
7986 	    (_("%B: Warning: cannot determine the target function for"
7987 	       " stub section `%s'"),
7988 	     abfd, name);
7989 	  bfd_set_error (bfd_error_bad_value);
7990 	  return FALSE;
7991 	}
7992 
7993       if (r_symndx < extsymoff
7994 	  || sym_hashes[r_symndx - extsymoff] == NULL)
7995 	{
7996 	  asection *o;
7997 
7998 	  /* This stub is for a local symbol.  This stub will only be
7999              needed if there is some relocation in this BFD, other
8000              than a 16 bit function call, which refers to this symbol.  */
8001 	  for (o = abfd->sections; o != NULL; o = o->next)
8002 	    {
8003 	      Elf_Internal_Rela *sec_relocs;
8004 	      const Elf_Internal_Rela *r, *rend;
8005 
8006 	      /* We can ignore stub sections when looking for relocs.  */
8007 	      if ((o->flags & SEC_RELOC) == 0
8008 		  || o->reloc_count == 0
8009 		  || section_allows_mips16_refs_p (o))
8010 		continue;
8011 
8012 	      sec_relocs
8013 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8014 					     info->keep_memory);
8015 	      if (sec_relocs == NULL)
8016 		return FALSE;
8017 
8018 	      rend = sec_relocs + o->reloc_count;
8019 	      for (r = sec_relocs; r < rend; r++)
8020 		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8021 		    && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
8022 		  break;
8023 
8024 	      if (elf_section_data (o)->relocs != sec_relocs)
8025 		free (sec_relocs);
8026 
8027 	      if (r < rend)
8028 		break;
8029 	    }
8030 
8031 	  if (o == NULL)
8032 	    {
8033 	      /* There is no non-call reloc for this stub, so we do
8034                  not need it.  Since this function is called before
8035                  the linker maps input sections to output sections, we
8036                  can easily discard it by setting the SEC_EXCLUDE
8037                  flag.  */
8038 	      sec->flags |= SEC_EXCLUDE;
8039 	      return TRUE;
8040 	    }
8041 
8042 	  /* Record this stub in an array of local symbol stubs for
8043              this BFD.  */
8044 	  if (mips_elf_tdata (abfd)->local_stubs == NULL)
8045 	    {
8046 	      unsigned long symcount;
8047 	      asection **n;
8048 	      bfd_size_type amt;
8049 
8050 	      if (elf_bad_symtab (abfd))
8051 		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8052 	      else
8053 		symcount = symtab_hdr->sh_info;
8054 	      amt = symcount * sizeof (asection *);
8055 	      n = bfd_zalloc (abfd, amt);
8056 	      if (n == NULL)
8057 		return FALSE;
8058 	      mips_elf_tdata (abfd)->local_stubs = n;
8059 	    }
8060 
8061 	  sec->flags |= SEC_KEEP;
8062 	  mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8063 
8064 	  /* We don't need to set mips16_stubs_seen in this case.
8065              That flag is used to see whether we need to look through
8066              the global symbol table for stubs.  We don't need to set
8067              it here, because we just have a local stub.  */
8068 	}
8069       else
8070 	{
8071 	  struct mips_elf_link_hash_entry *h;
8072 
8073 	  h = ((struct mips_elf_link_hash_entry *)
8074 	       sym_hashes[r_symndx - extsymoff]);
8075 
8076 	  while (h->root.root.type == bfd_link_hash_indirect
8077 		 || h->root.root.type == bfd_link_hash_warning)
8078 	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8079 
8080 	  /* H is the symbol this stub is for.  */
8081 
8082 	  /* If we already have an appropriate stub for this function, we
8083 	     don't need another one, so we can discard this one.  Since
8084 	     this function is called before the linker maps input sections
8085 	     to output sections, we can easily discard it by setting the
8086 	     SEC_EXCLUDE flag.  */
8087 	  if (h->fn_stub != NULL)
8088 	    {
8089 	      sec->flags |= SEC_EXCLUDE;
8090 	      return TRUE;
8091 	    }
8092 
8093 	  sec->flags |= SEC_KEEP;
8094 	  h->fn_stub = sec;
8095 	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8096 	}
8097     }
8098   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8099     {
8100       unsigned long r_symndx;
8101       struct mips_elf_link_hash_entry *h;
8102       asection **loc;
8103 
8104       /* Look at the relocation information to figure out which symbol
8105          this is for.  */
8106 
8107       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8108       if (r_symndx == 0)
8109 	{
8110 	  (*_bfd_error_handler)
8111 	    (_("%B: Warning: cannot determine the target function for"
8112 	       " stub section `%s'"),
8113 	     abfd, name);
8114 	  bfd_set_error (bfd_error_bad_value);
8115 	  return FALSE;
8116 	}
8117 
8118       if (r_symndx < extsymoff
8119 	  || sym_hashes[r_symndx - extsymoff] == NULL)
8120 	{
8121 	  asection *o;
8122 
8123 	  /* This stub is for a local symbol.  This stub will only be
8124              needed if there is some relocation (R_MIPS16_26) in this BFD
8125              that refers to this symbol.  */
8126 	  for (o = abfd->sections; o != NULL; o = o->next)
8127 	    {
8128 	      Elf_Internal_Rela *sec_relocs;
8129 	      const Elf_Internal_Rela *r, *rend;
8130 
8131 	      /* We can ignore stub sections when looking for relocs.  */
8132 	      if ((o->flags & SEC_RELOC) == 0
8133 		  || o->reloc_count == 0
8134 		  || section_allows_mips16_refs_p (o))
8135 		continue;
8136 
8137 	      sec_relocs
8138 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8139 					     info->keep_memory);
8140 	      if (sec_relocs == NULL)
8141 		return FALSE;
8142 
8143 	      rend = sec_relocs + o->reloc_count;
8144 	      for (r = sec_relocs; r < rend; r++)
8145 		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8146 		    && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8147 		    break;
8148 
8149 	      if (elf_section_data (o)->relocs != sec_relocs)
8150 		free (sec_relocs);
8151 
8152 	      if (r < rend)
8153 		break;
8154 	    }
8155 
8156 	  if (o == NULL)
8157 	    {
8158 	      /* There is no non-call reloc for this stub, so we do
8159                  not need it.  Since this function is called before
8160                  the linker maps input sections to output sections, we
8161                  can easily discard it by setting the SEC_EXCLUDE
8162                  flag.  */
8163 	      sec->flags |= SEC_EXCLUDE;
8164 	      return TRUE;
8165 	    }
8166 
8167 	  /* Record this stub in an array of local symbol call_stubs for
8168              this BFD.  */
8169 	  if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8170 	    {
8171 	      unsigned long symcount;
8172 	      asection **n;
8173 	      bfd_size_type amt;
8174 
8175 	      if (elf_bad_symtab (abfd))
8176 		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8177 	      else
8178 		symcount = symtab_hdr->sh_info;
8179 	      amt = symcount * sizeof (asection *);
8180 	      n = bfd_zalloc (abfd, amt);
8181 	      if (n == NULL)
8182 		return FALSE;
8183 	      mips_elf_tdata (abfd)->local_call_stubs = n;
8184 	    }
8185 
8186 	  sec->flags |= SEC_KEEP;
8187 	  mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8188 
8189 	  /* We don't need to set mips16_stubs_seen in this case.
8190              That flag is used to see whether we need to look through
8191              the global symbol table for stubs.  We don't need to set
8192              it here, because we just have a local stub.  */
8193 	}
8194       else
8195 	{
8196 	  h = ((struct mips_elf_link_hash_entry *)
8197 	       sym_hashes[r_symndx - extsymoff]);
8198 
8199 	  /* H is the symbol this stub is for.  */
8200 
8201 	  if (CALL_FP_STUB_P (name))
8202 	    loc = &h->call_fp_stub;
8203 	  else
8204 	    loc = &h->call_stub;
8205 
8206 	  /* If we already have an appropriate stub for this function, we
8207 	     don't need another one, so we can discard this one.  Since
8208 	     this function is called before the linker maps input sections
8209 	     to output sections, we can easily discard it by setting the
8210 	     SEC_EXCLUDE flag.  */
8211 	  if (*loc != NULL)
8212 	    {
8213 	      sec->flags |= SEC_EXCLUDE;
8214 	      return TRUE;
8215 	    }
8216 
8217 	  sec->flags |= SEC_KEEP;
8218 	  *loc = sec;
8219 	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8220 	}
8221     }
8222 
8223   sreloc = NULL;
8224   contents = NULL;
8225   for (rel = relocs; rel < rel_end; ++rel)
8226     {
8227       unsigned long r_symndx;
8228       unsigned int r_type;
8229       struct elf_link_hash_entry *h;
8230       bfd_boolean can_make_dynamic_p;
8231       bfd_boolean call_reloc_p;
8232       bfd_boolean constrain_symbol_p;
8233 
8234       r_symndx = ELF_R_SYM (abfd, rel->r_info);
8235       r_type = ELF_R_TYPE (abfd, rel->r_info);
8236 
8237       if (r_symndx < extsymoff)
8238 	h = NULL;
8239       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8240 	{
8241 	  (*_bfd_error_handler)
8242 	    (_("%B: Malformed reloc detected for section %s"),
8243 	     abfd, name);
8244 	  bfd_set_error (bfd_error_bad_value);
8245 	  return FALSE;
8246 	}
8247       else
8248 	{
8249 	  h = sym_hashes[r_symndx - extsymoff];
8250 	  if (h != NULL)
8251 	    {
8252 	      while (h->root.type == bfd_link_hash_indirect
8253 		     || h->root.type == bfd_link_hash_warning)
8254 		h = (struct elf_link_hash_entry *) h->root.u.i.link;
8255 
8256 	      /* PR15323, ref flags aren't set for references in the
8257 		 same object.  */
8258 	      h->root.non_ir_ref = 1;
8259 	    }
8260 	}
8261 
8262       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8263 	 relocation into a dynamic one.  */
8264       can_make_dynamic_p = FALSE;
8265 
8266       /* Set CALL_RELOC_P to true if the relocation is for a call,
8267 	 and if pointer equality therefore doesn't matter.  */
8268       call_reloc_p = FALSE;
8269 
8270       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8271 	 into account when deciding how to define the symbol.
8272 	 Relocations in nonallocatable sections such as .pdr and
8273 	 .debug* should have no effect.  */
8274       constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8275 
8276       switch (r_type)
8277 	{
8278 	case R_MIPS_CALL16:
8279 	case R_MIPS_CALL_HI16:
8280 	case R_MIPS_CALL_LO16:
8281 	case R_MIPS16_CALL16:
8282 	case R_MICROMIPS_CALL16:
8283 	case R_MICROMIPS_CALL_HI16:
8284 	case R_MICROMIPS_CALL_LO16:
8285 	  call_reloc_p = TRUE;
8286 	  /* Fall through.  */
8287 
8288 	case R_MIPS_GOT16:
8289 	case R_MIPS_GOT_HI16:
8290 	case R_MIPS_GOT_LO16:
8291 	case R_MIPS_GOT_PAGE:
8292 	case R_MIPS_GOT_OFST:
8293 	case R_MIPS_GOT_DISP:
8294 	case R_MIPS_TLS_GOTTPREL:
8295 	case R_MIPS_TLS_GD:
8296 	case R_MIPS_TLS_LDM:
8297 	case R_MIPS16_GOT16:
8298 	case R_MIPS16_TLS_GOTTPREL:
8299 	case R_MIPS16_TLS_GD:
8300 	case R_MIPS16_TLS_LDM:
8301 	case R_MICROMIPS_GOT16:
8302 	case R_MICROMIPS_GOT_HI16:
8303 	case R_MICROMIPS_GOT_LO16:
8304 	case R_MICROMIPS_GOT_PAGE:
8305 	case R_MICROMIPS_GOT_OFST:
8306 	case R_MICROMIPS_GOT_DISP:
8307 	case R_MICROMIPS_TLS_GOTTPREL:
8308 	case R_MICROMIPS_TLS_GD:
8309 	case R_MICROMIPS_TLS_LDM:
8310 	  if (dynobj == NULL)
8311 	    elf_hash_table (info)->dynobj = dynobj = abfd;
8312 	  if (!mips_elf_create_got_section (dynobj, info))
8313 	    return FALSE;
8314 	  if (htab->is_vxworks && !bfd_link_pic (info))
8315 	    {
8316 	      (*_bfd_error_handler)
8317 		(_("%B: GOT reloc at 0x%lx not expected in executables"),
8318 		 abfd, (unsigned long) rel->r_offset);
8319 	      bfd_set_error (bfd_error_bad_value);
8320 	      return FALSE;
8321 	    }
8322 	  can_make_dynamic_p = TRUE;
8323 	  break;
8324 
8325 	case R_MIPS_NONE:
8326 	case R_MIPS_JALR:
8327 	case R_MICROMIPS_JALR:
8328 	  /* These relocations have empty fields and are purely there to
8329 	     provide link information.  The symbol value doesn't matter.  */
8330 	  constrain_symbol_p = FALSE;
8331 	  break;
8332 
8333 	case R_MIPS_GPREL16:
8334 	case R_MIPS_GPREL32:
8335 	case R_MIPS16_GPREL:
8336 	case R_MICROMIPS_GPREL16:
8337 	  /* GP-relative relocations always resolve to a definition in a
8338 	     regular input file, ignoring the one-definition rule.  This is
8339 	     important for the GP setup sequence in NewABI code, which
8340 	     always resolves to a local function even if other relocations
8341 	     against the symbol wouldn't.  */
8342 	  constrain_symbol_p = FALSE;
8343 	  break;
8344 
8345 	case R_MIPS_32:
8346 	case R_MIPS_REL32:
8347 	case R_MIPS_64:
8348 	  /* In VxWorks executables, references to external symbols
8349 	     must be handled using copy relocs or PLT entries; it is not
8350 	     possible to convert this relocation into a dynamic one.
8351 
8352 	     For executables that use PLTs and copy-relocs, we have a
8353 	     choice between converting the relocation into a dynamic
8354 	     one or using copy relocations or PLT entries.  It is
8355 	     usually better to do the former, unless the relocation is
8356 	     against a read-only section.  */
8357 	  if ((bfd_link_pic (info)
8358 	       || (h != NULL
8359 		   && !htab->is_vxworks
8360 		   && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8361 		   && !(!info->nocopyreloc
8362 			&& !PIC_OBJECT_P (abfd)
8363 			&& MIPS_ELF_READONLY_SECTION (sec))))
8364 	      && (sec->flags & SEC_ALLOC) != 0)
8365 	    {
8366 	      can_make_dynamic_p = TRUE;
8367 	      if (dynobj == NULL)
8368 		elf_hash_table (info)->dynobj = dynobj = abfd;
8369 	    }
8370 	  break;
8371 
8372 	case R_MIPS_26:
8373 	case R_MIPS_PC16:
8374 	case R_MIPS_PC21_S2:
8375 	case R_MIPS_PC26_S2:
8376 	case R_MIPS16_26:
8377 	case R_MIPS16_PC16_S1:
8378 	case R_MICROMIPS_26_S1:
8379 	case R_MICROMIPS_PC7_S1:
8380 	case R_MICROMIPS_PC10_S1:
8381 	case R_MICROMIPS_PC16_S1:
8382 	case R_MICROMIPS_PC23_S2:
8383 	  call_reloc_p = TRUE;
8384 	  break;
8385 	}
8386 
8387       if (h)
8388 	{
8389 	  if (constrain_symbol_p)
8390 	    {
8391 	      if (!can_make_dynamic_p)
8392 		((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8393 
8394 	      if (!call_reloc_p)
8395 		h->pointer_equality_needed = 1;
8396 
8397 	      /* We must not create a stub for a symbol that has
8398 		 relocations related to taking the function's address.
8399 		 This doesn't apply to VxWorks, where CALL relocs refer
8400 		 to a .got.plt entry instead of a normal .got entry.  */
8401 	      if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8402 		((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8403 	    }
8404 
8405 	  /* Relocations against the special VxWorks __GOTT_BASE__ and
8406 	     __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8407 	     room for them in .rela.dyn.  */
8408 	  if (is_gott_symbol (info, h))
8409 	    {
8410 	      if (sreloc == NULL)
8411 		{
8412 		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
8413 		  if (sreloc == NULL)
8414 		    return FALSE;
8415 		}
8416 	      mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8417 	      if (MIPS_ELF_READONLY_SECTION (sec))
8418 		/* We tell the dynamic linker that there are
8419 		   relocations against the text segment.  */
8420 		info->flags |= DF_TEXTREL;
8421 	    }
8422 	}
8423       else if (call_lo16_reloc_p (r_type)
8424 	       || got_lo16_reloc_p (r_type)
8425 	       || got_disp_reloc_p (r_type)
8426 	       || (got16_reloc_p (r_type) && htab->is_vxworks))
8427 	{
8428 	  /* We may need a local GOT entry for this relocation.  We
8429 	     don't count R_MIPS_GOT_PAGE because we can estimate the
8430 	     maximum number of pages needed by looking at the size of
8431 	     the segment.  Similar comments apply to R_MIPS*_GOT16 and
8432 	     R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8433 	     always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8434 	     R_MIPS_CALL_HI16 because these are always followed by an
8435 	     R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8436 	  if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8437 						 rel->r_addend, info, r_type))
8438 	    return FALSE;
8439 	}
8440 
8441       if (h != NULL
8442 	  && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8443 						  ELF_ST_IS_MIPS16 (h->other)))
8444 	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8445 
8446       switch (r_type)
8447 	{
8448 	case R_MIPS_CALL16:
8449 	case R_MIPS16_CALL16:
8450 	case R_MICROMIPS_CALL16:
8451 	  if (h == NULL)
8452 	    {
8453 	      (*_bfd_error_handler)
8454 		(_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8455 		 abfd, (unsigned long) rel->r_offset);
8456 	      bfd_set_error (bfd_error_bad_value);
8457 	      return FALSE;
8458 	    }
8459 	  /* Fall through.  */
8460 
8461 	case R_MIPS_CALL_HI16:
8462 	case R_MIPS_CALL_LO16:
8463 	case R_MICROMIPS_CALL_HI16:
8464 	case R_MICROMIPS_CALL_LO16:
8465 	  if (h != NULL)
8466 	    {
8467 	      /* Make sure there is room in the regular GOT to hold the
8468 		 function's address.  We may eliminate it in favour of
8469 		 a .got.plt entry later; see mips_elf_count_got_symbols.  */
8470 	      if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8471 						      r_type))
8472 		return FALSE;
8473 
8474 	      /* We need a stub, not a plt entry for the undefined
8475 		 function.  But we record it as if it needs plt.  See
8476 		 _bfd_elf_adjust_dynamic_symbol.  */
8477 	      h->needs_plt = 1;
8478 	      h->type = STT_FUNC;
8479 	    }
8480 	  break;
8481 
8482 	case R_MIPS_GOT_PAGE:
8483 	case R_MICROMIPS_GOT_PAGE:
8484 	case R_MIPS16_GOT16:
8485 	case R_MIPS_GOT16:
8486 	case R_MIPS_GOT_HI16:
8487 	case R_MIPS_GOT_LO16:
8488 	case R_MICROMIPS_GOT16:
8489 	case R_MICROMIPS_GOT_HI16:
8490 	case R_MICROMIPS_GOT_LO16:
8491 	  if (!h || got_page_reloc_p (r_type))
8492 	    {
8493 	      /* This relocation needs (or may need, if h != NULL) a
8494 		 page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8495 		 know for sure until we know whether the symbol is
8496 		 preemptible.  */
8497 	      if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8498 		{
8499 		  if (!mips_elf_get_section_contents (abfd, sec, &contents))
8500 		    return FALSE;
8501 		  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8502 		  addend = mips_elf_read_rel_addend (abfd, rel,
8503 						     howto, contents);
8504 		  if (got16_reloc_p (r_type))
8505 		    mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8506 						  contents, &addend);
8507 		  else
8508 		    addend <<= howto->rightshift;
8509 		}
8510 	      else
8511 		addend = rel->r_addend;
8512 	      if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8513 						 h, addend))
8514 		return FALSE;
8515 
8516 	      if (h)
8517 		{
8518 		  struct mips_elf_link_hash_entry *hmips =
8519 		    (struct mips_elf_link_hash_entry *) h;
8520 
8521 		  /* This symbol is definitely not overridable.  */
8522 		  if (hmips->root.def_regular
8523 		      && ! (bfd_link_pic (info) && ! info->symbolic
8524 			    && ! hmips->root.forced_local))
8525 		    h = NULL;
8526 		}
8527 	    }
8528 	  /* If this is a global, overridable symbol, GOT_PAGE will
8529 	     decay to GOT_DISP, so we'll need a GOT entry for it.  */
8530 	  /* Fall through.  */
8531 
8532 	case R_MIPS_GOT_DISP:
8533 	case R_MICROMIPS_GOT_DISP:
8534 	  if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8535 						       FALSE, r_type))
8536 	    return FALSE;
8537 	  break;
8538 
8539 	case R_MIPS_TLS_GOTTPREL:
8540 	case R_MIPS16_TLS_GOTTPREL:
8541 	case R_MICROMIPS_TLS_GOTTPREL:
8542 	  if (bfd_link_pic (info))
8543 	    info->flags |= DF_STATIC_TLS;
8544 	  /* Fall through */
8545 
8546 	case R_MIPS_TLS_LDM:
8547 	case R_MIPS16_TLS_LDM:
8548 	case R_MICROMIPS_TLS_LDM:
8549 	  if (tls_ldm_reloc_p (r_type))
8550 	    {
8551 	      r_symndx = STN_UNDEF;
8552 	      h = NULL;
8553 	    }
8554 	  /* Fall through */
8555 
8556 	case R_MIPS_TLS_GD:
8557 	case R_MIPS16_TLS_GD:
8558 	case R_MICROMIPS_TLS_GD:
8559 	  /* This symbol requires a global offset table entry, or two
8560 	     for TLS GD relocations.  */
8561 	  if (h != NULL)
8562 	    {
8563 	      if (!mips_elf_record_global_got_symbol (h, abfd, info,
8564 						      FALSE, r_type))
8565 		return FALSE;
8566 	    }
8567 	  else
8568 	    {
8569 	      if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8570 						     rel->r_addend,
8571 						     info, r_type))
8572 		return FALSE;
8573 	    }
8574 	  break;
8575 
8576 	case R_MIPS_32:
8577 	case R_MIPS_REL32:
8578 	case R_MIPS_64:
8579 	  /* In VxWorks executables, references to external symbols
8580 	     are handled using copy relocs or PLT stubs, so there's
8581 	     no need to add a .rela.dyn entry for this relocation.  */
8582 	  if (can_make_dynamic_p)
8583 	    {
8584 	      if (sreloc == NULL)
8585 		{
8586 		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
8587 		  if (sreloc == NULL)
8588 		    return FALSE;
8589 		}
8590 	      if (bfd_link_pic (info) && h == NULL)
8591 		{
8592 		  /* When creating a shared object, we must copy these
8593 		     reloc types into the output file as R_MIPS_REL32
8594 		     relocs.  Make room for this reloc in .rel(a).dyn.  */
8595 		  mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8596 		  if (MIPS_ELF_READONLY_SECTION (sec))
8597 		    /* We tell the dynamic linker that there are
8598 		       relocations against the text segment.  */
8599 		    info->flags |= DF_TEXTREL;
8600 		}
8601 	      else
8602 		{
8603 		  struct mips_elf_link_hash_entry *hmips;
8604 
8605 		  /* For a shared object, we must copy this relocation
8606 		     unless the symbol turns out to be undefined and
8607 		     weak with non-default visibility, in which case
8608 		     it will be left as zero.
8609 
8610 		     We could elide R_MIPS_REL32 for locally binding symbols
8611 		     in shared libraries, but do not yet do so.
8612 
8613 		     For an executable, we only need to copy this
8614 		     reloc if the symbol is defined in a dynamic
8615 		     object.  */
8616 		  hmips = (struct mips_elf_link_hash_entry *) h;
8617 		  ++hmips->possibly_dynamic_relocs;
8618 		  if (MIPS_ELF_READONLY_SECTION (sec))
8619 		    /* We need it to tell the dynamic linker if there
8620 		       are relocations against the text segment.  */
8621 		    hmips->readonly_reloc = TRUE;
8622 		}
8623 	    }
8624 
8625 	  if (SGI_COMPAT (abfd))
8626 	    mips_elf_hash_table (info)->compact_rel_size +=
8627 	      sizeof (Elf32_External_crinfo);
8628 	  break;
8629 
8630 	case R_MIPS_26:
8631 	case R_MIPS_GPREL16:
8632 	case R_MIPS_LITERAL:
8633 	case R_MIPS_GPREL32:
8634 	case R_MICROMIPS_26_S1:
8635 	case R_MICROMIPS_GPREL16:
8636 	case R_MICROMIPS_LITERAL:
8637 	case R_MICROMIPS_GPREL7_S2:
8638 	  if (SGI_COMPAT (abfd))
8639 	    mips_elf_hash_table (info)->compact_rel_size +=
8640 	      sizeof (Elf32_External_crinfo);
8641 	  break;
8642 
8643 	  /* This relocation describes the C++ object vtable hierarchy.
8644 	     Reconstruct it for later use during GC.  */
8645 	case R_MIPS_GNU_VTINHERIT:
8646 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8647 	    return FALSE;
8648 	  break;
8649 
8650 	  /* This relocation describes which C++ vtable entries are actually
8651 	     used.  Record for later use during GC.  */
8652 	case R_MIPS_GNU_VTENTRY:
8653 	  BFD_ASSERT (h != NULL);
8654 	  if (h != NULL
8655 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8656 	    return FALSE;
8657 	  break;
8658 
8659 	default:
8660 	  break;
8661 	}
8662 
8663       /* Record the need for a PLT entry.  At this point we don't know
8664          yet if we are going to create a PLT in the first place, but
8665          we only record whether the relocation requires a standard MIPS
8666          or a compressed code entry anyway.  If we don't make a PLT after
8667          all, then we'll just ignore these arrangements.  Likewise if
8668          a PLT entry is not created because the symbol is satisfied
8669          locally.  */
8670       if (h != NULL
8671 	  && jal_reloc_p (r_type)
8672 	  && !SYMBOL_CALLS_LOCAL (info, h))
8673 	{
8674 	  if (h->plt.plist == NULL)
8675 	    h->plt.plist = mips_elf_make_plt_record (abfd);
8676 	  if (h->plt.plist == NULL)
8677 	    return FALSE;
8678 
8679 	  if (r_type == R_MIPS_26)
8680 	    h->plt.plist->need_mips = TRUE;
8681 	  else
8682 	    h->plt.plist->need_comp = TRUE;
8683 	}
8684 
8685       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8686 	 if there is one.  We only need to handle global symbols here;
8687 	 we decide whether to keep or delete stubs for local symbols
8688 	 when processing the stub's relocations.  */
8689       if (h != NULL
8690 	  && !mips16_call_reloc_p (r_type)
8691 	  && !section_allows_mips16_refs_p (sec))
8692 	{
8693 	  struct mips_elf_link_hash_entry *mh;
8694 
8695 	  mh = (struct mips_elf_link_hash_entry *) h;
8696 	  mh->need_fn_stub = TRUE;
8697 	}
8698 
8699       /* Refuse some position-dependent relocations when creating a
8700 	 shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8701 	 not PIC, but we can create dynamic relocations and the result
8702 	 will be fine.  Also do not refuse R_MIPS_LO16, which can be
8703 	 combined with R_MIPS_GOT16.  */
8704       if (bfd_link_pic (info))
8705 	{
8706 	  switch (r_type)
8707 	    {
8708 	    case R_MIPS16_HI16:
8709 	    case R_MIPS_HI16:
8710 	    case R_MIPS_HIGHER:
8711 	    case R_MIPS_HIGHEST:
8712 	    case R_MICROMIPS_HI16:
8713 	    case R_MICROMIPS_HIGHER:
8714 	    case R_MICROMIPS_HIGHEST:
8715 	      /* Don't refuse a high part relocation if it's against
8716 		 no symbol (e.g. part of a compound relocation).  */
8717 	      if (r_symndx == STN_UNDEF)
8718 		break;
8719 
8720 	      /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8721 		 and has a special meaning.  */
8722 	      if (!NEWABI_P (abfd) && h != NULL
8723 		  && strcmp (h->root.root.string, "_gp_disp") == 0)
8724 		break;
8725 
8726 	      /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8727 	      if (is_gott_symbol (info, h))
8728 		break;
8729 
8730 	      /* FALLTHROUGH */
8731 
8732 	    case R_MIPS16_26:
8733 	    case R_MIPS_26:
8734 	    case R_MICROMIPS_26_S1:
8735 	      howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8736 	      (*_bfd_error_handler)
8737 		(_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8738 		 abfd, howto->name,
8739 		 (h) ? h->root.root.string : "a local symbol");
8740 	      bfd_set_error (bfd_error_bad_value);
8741 	      return FALSE;
8742 	    default:
8743 	      break;
8744 	    }
8745 	}
8746     }
8747 
8748   return TRUE;
8749 }
8750 
8751 bfd_boolean
_bfd_mips_relax_section(bfd * abfd,asection * sec,struct bfd_link_info * link_info,bfd_boolean * again)8752 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8753 			 struct bfd_link_info *link_info,
8754 			 bfd_boolean *again)
8755 {
8756   Elf_Internal_Rela *internal_relocs;
8757   Elf_Internal_Rela *irel, *irelend;
8758   Elf_Internal_Shdr *symtab_hdr;
8759   bfd_byte *contents = NULL;
8760   size_t extsymoff;
8761   bfd_boolean changed_contents = FALSE;
8762   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8763   Elf_Internal_Sym *isymbuf = NULL;
8764 
8765   /* We are not currently changing any sizes, so only one pass.  */
8766   *again = FALSE;
8767 
8768   if (bfd_link_relocatable (link_info))
8769     return TRUE;
8770 
8771   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8772 					       link_info->keep_memory);
8773   if (internal_relocs == NULL)
8774     return TRUE;
8775 
8776   irelend = internal_relocs + sec->reloc_count
8777     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8778   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8779   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8780 
8781   for (irel = internal_relocs; irel < irelend; irel++)
8782     {
8783       bfd_vma symval;
8784       bfd_signed_vma sym_offset;
8785       unsigned int r_type;
8786       unsigned long r_symndx;
8787       asection *sym_sec;
8788       unsigned long instruction;
8789 
8790       /* Turn jalr into bgezal, and jr into beq, if they're marked
8791 	 with a JALR relocation, that indicate where they jump to.
8792 	 This saves some pipeline bubbles.  */
8793       r_type = ELF_R_TYPE (abfd, irel->r_info);
8794       if (r_type != R_MIPS_JALR)
8795 	continue;
8796 
8797       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8798       /* Compute the address of the jump target.  */
8799       if (r_symndx >= extsymoff)
8800 	{
8801 	  struct mips_elf_link_hash_entry *h
8802 	    = ((struct mips_elf_link_hash_entry *)
8803 	       elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8804 
8805 	  while (h->root.root.type == bfd_link_hash_indirect
8806 		 || h->root.root.type == bfd_link_hash_warning)
8807 	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8808 
8809 	  /* If a symbol is undefined, or if it may be overridden,
8810 	     skip it.  */
8811 	  if (! ((h->root.root.type == bfd_link_hash_defined
8812 		  || h->root.root.type == bfd_link_hash_defweak)
8813 		 && h->root.root.u.def.section)
8814 	      || (bfd_link_pic (link_info) && ! link_info->symbolic
8815 		  && !h->root.forced_local))
8816 	    continue;
8817 
8818 	  sym_sec = h->root.root.u.def.section;
8819 	  if (sym_sec->output_section)
8820 	    symval = (h->root.root.u.def.value
8821 		      + sym_sec->output_section->vma
8822 		      + sym_sec->output_offset);
8823 	  else
8824 	    symval = h->root.root.u.def.value;
8825 	}
8826       else
8827 	{
8828 	  Elf_Internal_Sym *isym;
8829 
8830 	  /* Read this BFD's symbols if we haven't done so already.  */
8831 	  if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8832 	    {
8833 	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8834 	      if (isymbuf == NULL)
8835 		isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8836 						symtab_hdr->sh_info, 0,
8837 						NULL, NULL, NULL);
8838 	      if (isymbuf == NULL)
8839 		goto relax_return;
8840 	    }
8841 
8842 	  isym = isymbuf + r_symndx;
8843 	  if (isym->st_shndx == SHN_UNDEF)
8844 	    continue;
8845 	  else if (isym->st_shndx == SHN_ABS)
8846 	    sym_sec = bfd_abs_section_ptr;
8847 	  else if (isym->st_shndx == SHN_COMMON)
8848 	    sym_sec = bfd_com_section_ptr;
8849 	  else
8850 	    sym_sec
8851 	      = bfd_section_from_elf_index (abfd, isym->st_shndx);
8852 	  symval = isym->st_value
8853 	    + sym_sec->output_section->vma
8854 	    + sym_sec->output_offset;
8855 	}
8856 
8857       /* Compute branch offset, from delay slot of the jump to the
8858 	 branch target.  */
8859       sym_offset = (symval + irel->r_addend)
8860 	- (sec_start + irel->r_offset + 4);
8861 
8862       /* Branch offset must be properly aligned.  */
8863       if ((sym_offset & 3) != 0)
8864 	continue;
8865 
8866       sym_offset >>= 2;
8867 
8868       /* Check that it's in range.  */
8869       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8870 	continue;
8871 
8872       /* Get the section contents if we haven't done so already.  */
8873       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8874 	goto relax_return;
8875 
8876       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8877 
8878       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8879       if ((instruction & 0xfc1fffff) == 0x0000f809)
8880 	instruction = 0x04110000;
8881       /* If it was jr <reg>, turn it into b <target>.  */
8882       else if ((instruction & 0xfc1fffff) == 0x00000008)
8883 	instruction = 0x10000000;
8884       else
8885 	continue;
8886 
8887       instruction |= (sym_offset & 0xffff);
8888       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8889       changed_contents = TRUE;
8890     }
8891 
8892   if (contents != NULL
8893       && elf_section_data (sec)->this_hdr.contents != contents)
8894     {
8895       if (!changed_contents && !link_info->keep_memory)
8896         free (contents);
8897       else
8898         {
8899           /* Cache the section contents for elf_link_input_bfd.  */
8900           elf_section_data (sec)->this_hdr.contents = contents;
8901         }
8902     }
8903   return TRUE;
8904 
8905  relax_return:
8906   if (contents != NULL
8907       && elf_section_data (sec)->this_hdr.contents != contents)
8908     free (contents);
8909   return FALSE;
8910 }
8911 
8912 /* Allocate space for global sym dynamic relocs.  */
8913 
8914 static bfd_boolean
allocate_dynrelocs(struct elf_link_hash_entry * h,void * inf)8915 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8916 {
8917   struct bfd_link_info *info = inf;
8918   bfd *dynobj;
8919   struct mips_elf_link_hash_entry *hmips;
8920   struct mips_elf_link_hash_table *htab;
8921 
8922   htab = mips_elf_hash_table (info);
8923   BFD_ASSERT (htab != NULL);
8924 
8925   dynobj = elf_hash_table (info)->dynobj;
8926   hmips = (struct mips_elf_link_hash_entry *) h;
8927 
8928   /* VxWorks executables are handled elsewhere; we only need to
8929      allocate relocations in shared objects.  */
8930   if (htab->is_vxworks && !bfd_link_pic (info))
8931     return TRUE;
8932 
8933   /* Ignore indirect symbols.  All relocations against such symbols
8934      will be redirected to the target symbol.  */
8935   if (h->root.type == bfd_link_hash_indirect)
8936     return TRUE;
8937 
8938   /* If this symbol is defined in a dynamic object, or we are creating
8939      a shared library, we will need to copy any R_MIPS_32 or
8940      R_MIPS_REL32 relocs against it into the output file.  */
8941   if (! bfd_link_relocatable (info)
8942       && hmips->possibly_dynamic_relocs != 0
8943       && (h->root.type == bfd_link_hash_defweak
8944 	  || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8945 	  || bfd_link_pic (info)))
8946     {
8947       bfd_boolean do_copy = TRUE;
8948 
8949       if (h->root.type == bfd_link_hash_undefweak)
8950 	{
8951 	  /* Do not copy relocations for undefined weak symbols with
8952 	     non-default visibility.  */
8953 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8954 	    do_copy = FALSE;
8955 
8956 	  /* Make sure undefined weak symbols are output as a dynamic
8957 	     symbol in PIEs.  */
8958 	  else if (h->dynindx == -1 && !h->forced_local)
8959 	    {
8960 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
8961 		return FALSE;
8962 	    }
8963 	}
8964 
8965       if (do_copy)
8966 	{
8967 	  /* Even though we don't directly need a GOT entry for this symbol,
8968 	     the SVR4 psABI requires it to have a dynamic symbol table
8969 	     index greater that DT_MIPS_GOTSYM if there are dynamic
8970 	     relocations against it.
8971 
8972 	     VxWorks does not enforce the same mapping between the GOT
8973 	     and the symbol table, so the same requirement does not
8974 	     apply there.  */
8975 	  if (!htab->is_vxworks)
8976 	    {
8977 	      if (hmips->global_got_area > GGA_RELOC_ONLY)
8978 		hmips->global_got_area = GGA_RELOC_ONLY;
8979 	      hmips->got_only_for_calls = FALSE;
8980 	    }
8981 
8982 	  mips_elf_allocate_dynamic_relocations
8983 	    (dynobj, info, hmips->possibly_dynamic_relocs);
8984 	  if (hmips->readonly_reloc)
8985 	    /* We tell the dynamic linker that there are relocations
8986 	       against the text segment.  */
8987 	    info->flags |= DF_TEXTREL;
8988 	}
8989     }
8990 
8991   return TRUE;
8992 }
8993 
8994 /* Adjust a symbol defined by a dynamic object and referenced by a
8995    regular object.  The current definition is in some section of the
8996    dynamic object, but we're not including those sections.  We have to
8997    change the definition to something the rest of the link can
8998    understand.  */
8999 
9000 bfd_boolean
_bfd_mips_elf_adjust_dynamic_symbol(struct bfd_link_info * info,struct elf_link_hash_entry * h)9001 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9002 				     struct elf_link_hash_entry *h)
9003 {
9004   bfd *dynobj;
9005   struct mips_elf_link_hash_entry *hmips;
9006   struct mips_elf_link_hash_table *htab;
9007 
9008   htab = mips_elf_hash_table (info);
9009   BFD_ASSERT (htab != NULL);
9010 
9011   dynobj = elf_hash_table (info)->dynobj;
9012   hmips = (struct mips_elf_link_hash_entry *) h;
9013 
9014   /* Make sure we know what is going on here.  */
9015   BFD_ASSERT (dynobj != NULL
9016 	      && (h->needs_plt
9017 		  || h->u.weakdef != NULL
9018 		  || (h->def_dynamic
9019 		      && h->ref_regular
9020 		      && !h->def_regular)));
9021 
9022   hmips = (struct mips_elf_link_hash_entry *) h;
9023 
9024   /* If there are call relocations against an externally-defined symbol,
9025      see whether we can create a MIPS lazy-binding stub for it.  We can
9026      only do this if all references to the function are through call
9027      relocations, and in that case, the traditional lazy-binding stubs
9028      are much more efficient than PLT entries.
9029 
9030      Traditional stubs are only available on SVR4 psABI-based systems;
9031      VxWorks always uses PLTs instead.  */
9032   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9033     {
9034       if (! elf_hash_table (info)->dynamic_sections_created)
9035 	return TRUE;
9036 
9037       /* If this symbol is not defined in a regular file, then set
9038 	 the symbol to the stub location.  This is required to make
9039 	 function pointers compare as equal between the normal
9040 	 executable and the shared library.  */
9041       if (!h->def_regular)
9042 	{
9043 	  hmips->needs_lazy_stub = TRUE;
9044 	  htab->lazy_stub_count++;
9045 	  return TRUE;
9046 	}
9047     }
9048   /* As above, VxWorks requires PLT entries for externally-defined
9049      functions that are only accessed through call relocations.
9050 
9051      Both VxWorks and non-VxWorks targets also need PLT entries if there
9052      are static-only relocations against an externally-defined function.
9053      This can technically occur for shared libraries if there are
9054      branches to the symbol, although it is unlikely that this will be
9055      used in practice due to the short ranges involved.  It can occur
9056      for any relative or absolute relocation in executables; in that
9057      case, the PLT entry becomes the function's canonical address.  */
9058   else if (((h->needs_plt && !hmips->no_fn_stub)
9059 	    || (h->type == STT_FUNC && hmips->has_static_relocs))
9060 	   && htab->use_plts_and_copy_relocs
9061 	   && !SYMBOL_CALLS_LOCAL (info, h)
9062 	   && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9063 		&& h->root.type == bfd_link_hash_undefweak))
9064     {
9065       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9066       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9067 
9068       /* If this is the first symbol to need a PLT entry, then make some
9069          basic setup.  Also work out PLT entry sizes.  We'll need them
9070          for PLT offset calculations.  */
9071       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9072 	{
9073 	  BFD_ASSERT (htab->sgotplt->size == 0);
9074 	  BFD_ASSERT (htab->plt_got_index == 0);
9075 
9076 	  /* If we're using the PLT additions to the psABI, each PLT
9077 	     entry is 16 bytes and the PLT0 entry is 32 bytes.
9078 	     Encourage better cache usage by aligning.  We do this
9079 	     lazily to avoid pessimizing traditional objects.  */
9080 	  if (!htab->is_vxworks
9081 	      && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9082 	    return FALSE;
9083 
9084 	  /* Make sure that .got.plt is word-aligned.  We do this lazily
9085 	     for the same reason as above.  */
9086 	  if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9087 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9088 	    return FALSE;
9089 
9090 	  /* On non-VxWorks targets, the first two entries in .got.plt
9091 	     are reserved.  */
9092 	  if (!htab->is_vxworks)
9093 	    htab->plt_got_index
9094 	      += (get_elf_backend_data (dynobj)->got_header_size
9095 		  / MIPS_ELF_GOT_SIZE (dynobj));
9096 
9097 	  /* On VxWorks, also allocate room for the header's
9098 	     .rela.plt.unloaded entries.  */
9099 	  if (htab->is_vxworks && !bfd_link_pic (info))
9100 	    htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9101 
9102 	  /* Now work out the sizes of individual PLT entries.  */
9103 	  if (htab->is_vxworks && bfd_link_pic (info))
9104 	    htab->plt_mips_entry_size
9105 	      = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9106 	  else if (htab->is_vxworks)
9107 	    htab->plt_mips_entry_size
9108 	      = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9109 	  else if (newabi_p)
9110 	    htab->plt_mips_entry_size
9111 	      = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9112 	  else if (!micromips_p)
9113 	    {
9114 	      htab->plt_mips_entry_size
9115 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9116 	      htab->plt_comp_entry_size
9117 		= 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9118 	    }
9119 	  else if (htab->insn32)
9120 	    {
9121 	      htab->plt_mips_entry_size
9122 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9123 	      htab->plt_comp_entry_size
9124 		= 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9125 	    }
9126 	  else
9127 	    {
9128 	      htab->plt_mips_entry_size
9129 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9130 	      htab->plt_comp_entry_size
9131 		= 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9132 	    }
9133 	}
9134 
9135       if (h->plt.plist == NULL)
9136 	h->plt.plist = mips_elf_make_plt_record (dynobj);
9137       if (h->plt.plist == NULL)
9138 	return FALSE;
9139 
9140       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9141          n32 or n64, so always use a standard entry there.
9142 
9143          If the symbol has a MIPS16 call stub and gets a PLT entry, then
9144          all MIPS16 calls will go via that stub, and there is no benefit
9145          to having a MIPS16 entry.  And in the case of call_stub a
9146          standard entry actually has to be used as the stub ends with a J
9147          instruction.  */
9148       if (newabi_p
9149 	  || htab->is_vxworks
9150 	  || hmips->call_stub
9151 	  || hmips->call_fp_stub)
9152 	{
9153 	  h->plt.plist->need_mips = TRUE;
9154 	  h->plt.plist->need_comp = FALSE;
9155 	}
9156 
9157       /* Otherwise, if there are no direct calls to the function, we
9158          have a free choice of whether to use standard or compressed
9159          entries.  Prefer microMIPS entries if the object is known to
9160          contain microMIPS code, so that it becomes possible to create
9161          pure microMIPS binaries.  Prefer standard entries otherwise,
9162          because MIPS16 ones are no smaller and are usually slower.  */
9163       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9164 	{
9165 	  if (micromips_p)
9166 	    h->plt.plist->need_comp = TRUE;
9167 	  else
9168 	    h->plt.plist->need_mips = TRUE;
9169 	}
9170 
9171       if (h->plt.plist->need_mips)
9172 	{
9173 	  h->plt.plist->mips_offset = htab->plt_mips_offset;
9174 	  htab->plt_mips_offset += htab->plt_mips_entry_size;
9175 	}
9176       if (h->plt.plist->need_comp)
9177 	{
9178 	  h->plt.plist->comp_offset = htab->plt_comp_offset;
9179 	  htab->plt_comp_offset += htab->plt_comp_entry_size;
9180 	}
9181 
9182       /* Reserve the corresponding .got.plt entry now too.  */
9183       h->plt.plist->gotplt_index = htab->plt_got_index++;
9184 
9185       /* If the output file has no definition of the symbol, set the
9186 	 symbol's value to the address of the stub.  */
9187       if (!bfd_link_pic (info) && !h->def_regular)
9188 	hmips->use_plt_entry = TRUE;
9189 
9190       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9191       htab->srelplt->size += (htab->is_vxworks
9192 			      ? MIPS_ELF_RELA_SIZE (dynobj)
9193 			      : MIPS_ELF_REL_SIZE (dynobj));
9194 
9195       /* Make room for the .rela.plt.unloaded relocations.  */
9196       if (htab->is_vxworks && !bfd_link_pic (info))
9197 	htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9198 
9199       /* All relocations against this symbol that could have been made
9200 	 dynamic will now refer to the PLT entry instead.  */
9201       hmips->possibly_dynamic_relocs = 0;
9202 
9203       return TRUE;
9204     }
9205 
9206   /* If this is a weak symbol, and there is a real definition, the
9207      processor independent code will have arranged for us to see the
9208      real definition first, and we can just use the same value.  */
9209   if (h->u.weakdef != NULL)
9210     {
9211       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9212 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
9213       h->root.u.def.section = h->u.weakdef->root.u.def.section;
9214       h->root.u.def.value = h->u.weakdef->root.u.def.value;
9215       return TRUE;
9216     }
9217 
9218   /* Otherwise, there is nothing further to do for symbols defined
9219      in regular objects.  */
9220   if (h->def_regular)
9221     return TRUE;
9222 
9223   /* There's also nothing more to do if we'll convert all relocations
9224      against this symbol into dynamic relocations.  */
9225   if (!hmips->has_static_relocs)
9226     return TRUE;
9227 
9228   /* We're now relying on copy relocations.  Complain if we have
9229      some that we can't convert.  */
9230   if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9231     {
9232       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9233 			       "dynamic symbol %s"),
9234 			     h->root.root.string);
9235       bfd_set_error (bfd_error_bad_value);
9236       return FALSE;
9237     }
9238 
9239   /* We must allocate the symbol in our .dynbss section, which will
9240      become part of the .bss section of the executable.  There will be
9241      an entry for this symbol in the .dynsym section.  The dynamic
9242      object will contain position independent code, so all references
9243      from the dynamic object to this symbol will go through the global
9244      offset table.  The dynamic linker will use the .dynsym entry to
9245      determine the address it must put in the global offset table, so
9246      both the dynamic object and the regular object will refer to the
9247      same memory location for the variable.  */
9248 
9249   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9250     {
9251       if (htab->is_vxworks)
9252 	htab->srelbss->size += sizeof (Elf32_External_Rela);
9253       else
9254 	mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9255       h->needs_copy = 1;
9256     }
9257 
9258   /* All relocations against this symbol that could have been made
9259      dynamic will now refer to the local copy instead.  */
9260   hmips->possibly_dynamic_relocs = 0;
9261 
9262   return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
9263 }
9264 
9265 /* This function is called after all the input files have been read,
9266    and the input sections have been assigned to output sections.  We
9267    check for any mips16 stub sections that we can discard.  */
9268 
9269 bfd_boolean
_bfd_mips_elf_always_size_sections(bfd * output_bfd,struct bfd_link_info * info)9270 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9271 				    struct bfd_link_info *info)
9272 {
9273   asection *sect;
9274   struct mips_elf_link_hash_table *htab;
9275   struct mips_htab_traverse_info hti;
9276 
9277   htab = mips_elf_hash_table (info);
9278   BFD_ASSERT (htab != NULL);
9279 
9280   /* The .reginfo section has a fixed size.  */
9281   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9282   if (sect != NULL)
9283     bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9284 
9285   /* The .MIPS.abiflags section has a fixed size.  */
9286   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9287   if (sect != NULL)
9288     bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9289 
9290   hti.info = info;
9291   hti.output_bfd = output_bfd;
9292   hti.error = FALSE;
9293   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9294 			       mips_elf_check_symbols, &hti);
9295   if (hti.error)
9296     return FALSE;
9297 
9298   return TRUE;
9299 }
9300 
9301 /* If the link uses a GOT, lay it out and work out its size.  */
9302 
9303 static bfd_boolean
mips_elf_lay_out_got(bfd * output_bfd,struct bfd_link_info * info)9304 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9305 {
9306   bfd *dynobj;
9307   asection *s;
9308   struct mips_got_info *g;
9309   bfd_size_type loadable_size = 0;
9310   bfd_size_type page_gotno;
9311   bfd *ibfd;
9312   struct mips_elf_traverse_got_arg tga;
9313   struct mips_elf_link_hash_table *htab;
9314 
9315   htab = mips_elf_hash_table (info);
9316   BFD_ASSERT (htab != NULL);
9317 
9318   s = htab->sgot;
9319   if (s == NULL)
9320     return TRUE;
9321 
9322   dynobj = elf_hash_table (info)->dynobj;
9323   g = htab->got_info;
9324 
9325   /* Allocate room for the reserved entries.  VxWorks always reserves
9326      3 entries; other objects only reserve 2 entries.  */
9327   BFD_ASSERT (g->assigned_low_gotno == 0);
9328   if (htab->is_vxworks)
9329     htab->reserved_gotno = 3;
9330   else
9331     htab->reserved_gotno = 2;
9332   g->local_gotno += htab->reserved_gotno;
9333   g->assigned_low_gotno = htab->reserved_gotno;
9334 
9335   /* Decide which symbols need to go in the global part of the GOT and
9336      count the number of reloc-only GOT symbols.  */
9337   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9338 
9339   if (!mips_elf_resolve_final_got_entries (info, g))
9340     return FALSE;
9341 
9342   /* Calculate the total loadable size of the output.  That
9343      will give us the maximum number of GOT_PAGE entries
9344      required.  */
9345   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9346     {
9347       asection *subsection;
9348 
9349       for (subsection = ibfd->sections;
9350 	   subsection;
9351 	   subsection = subsection->next)
9352 	{
9353 	  if ((subsection->flags & SEC_ALLOC) == 0)
9354 	    continue;
9355 	  loadable_size += ((subsection->size + 0xf)
9356 			    &~ (bfd_size_type) 0xf);
9357 	}
9358     }
9359 
9360   if (htab->is_vxworks)
9361     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9362        relocations against local symbols evaluate to "G", and the EABI does
9363        not include R_MIPS_GOT_PAGE.  */
9364     page_gotno = 0;
9365   else
9366     /* Assume there are two loadable segments consisting of contiguous
9367        sections.  Is 5 enough?  */
9368     page_gotno = (loadable_size >> 16) + 5;
9369 
9370   /* Choose the smaller of the two page estimates; both are intended to be
9371      conservative.  */
9372   if (page_gotno > g->page_gotno)
9373     page_gotno = g->page_gotno;
9374 
9375   g->local_gotno += page_gotno;
9376   g->assigned_high_gotno = g->local_gotno - 1;
9377 
9378   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9379   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9380   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9381 
9382   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9383      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9384      dynamic loader.  */
9385   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9386     {
9387       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9388 	return FALSE;
9389     }
9390   else
9391     {
9392       /* Record that all bfds use G.  This also has the effect of freeing
9393 	 the per-bfd GOTs, which we no longer need.  */
9394       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9395 	if (mips_elf_bfd_got (ibfd, FALSE))
9396 	  mips_elf_replace_bfd_got (ibfd, g);
9397       mips_elf_replace_bfd_got (output_bfd, g);
9398 
9399       /* Set up TLS entries.  */
9400       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9401       tga.info = info;
9402       tga.g = g;
9403       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9404       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9405       if (!tga.g)
9406 	return FALSE;
9407       BFD_ASSERT (g->tls_assigned_gotno
9408 		  == g->global_gotno + g->local_gotno + g->tls_gotno);
9409 
9410       /* Each VxWorks GOT entry needs an explicit relocation.  */
9411       if (htab->is_vxworks && bfd_link_pic (info))
9412 	g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9413 
9414       /* Allocate room for the TLS relocations.  */
9415       if (g->relocs)
9416 	mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9417     }
9418 
9419   return TRUE;
9420 }
9421 
9422 /* Estimate the size of the .MIPS.stubs section.  */
9423 
9424 static void
mips_elf_estimate_stub_size(bfd * output_bfd,struct bfd_link_info * info)9425 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9426 {
9427   struct mips_elf_link_hash_table *htab;
9428   bfd_size_type dynsymcount;
9429 
9430   htab = mips_elf_hash_table (info);
9431   BFD_ASSERT (htab != NULL);
9432 
9433   if (htab->lazy_stub_count == 0)
9434     return;
9435 
9436   /* IRIX rld assumes that a function stub isn't at the end of the .text
9437      section, so add a dummy entry to the end.  */
9438   htab->lazy_stub_count++;
9439 
9440   /* Get a worst-case estimate of the number of dynamic symbols needed.
9441      At this point, dynsymcount does not account for section symbols
9442      and count_section_dynsyms may overestimate the number that will
9443      be needed.  */
9444   dynsymcount = (elf_hash_table (info)->dynsymcount
9445 		 + count_section_dynsyms (output_bfd, info));
9446 
9447   /* Determine the size of one stub entry.  There's no disadvantage
9448      from using microMIPS code here, so for the sake of pure-microMIPS
9449      binaries we prefer it whenever there's any microMIPS code in
9450      output produced at all.  This has a benefit of stubs being
9451      shorter by 4 bytes each too, unless in the insn32 mode.  */
9452   if (!MICROMIPS_P (output_bfd))
9453     htab->function_stub_size = (dynsymcount > 0x10000
9454 				? MIPS_FUNCTION_STUB_BIG_SIZE
9455 				: MIPS_FUNCTION_STUB_NORMAL_SIZE);
9456   else if (htab->insn32)
9457     htab->function_stub_size = (dynsymcount > 0x10000
9458 				? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9459 				: MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9460   else
9461     htab->function_stub_size = (dynsymcount > 0x10000
9462 				? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9463 				: MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9464 
9465   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9466 }
9467 
9468 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9469    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9470    stub, allocate an entry in the stubs section.  */
9471 
9472 static bfd_boolean
mips_elf_allocate_lazy_stub(struct mips_elf_link_hash_entry * h,void * data)9473 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9474 {
9475   struct mips_htab_traverse_info *hti = data;
9476   struct mips_elf_link_hash_table *htab;
9477   struct bfd_link_info *info;
9478   bfd *output_bfd;
9479 
9480   info = hti->info;
9481   output_bfd = hti->output_bfd;
9482   htab = mips_elf_hash_table (info);
9483   BFD_ASSERT (htab != NULL);
9484 
9485   if (h->needs_lazy_stub)
9486     {
9487       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9488       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9489       bfd_vma isa_bit = micromips_p;
9490 
9491       BFD_ASSERT (htab->root.dynobj != NULL);
9492       if (h->root.plt.plist == NULL)
9493 	h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9494       if (h->root.plt.plist == NULL)
9495 	{
9496 	  hti->error = TRUE;
9497 	  return FALSE;
9498 	}
9499       h->root.root.u.def.section = htab->sstubs;
9500       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9501       h->root.plt.plist->stub_offset = htab->sstubs->size;
9502       h->root.other = other;
9503       htab->sstubs->size += htab->function_stub_size;
9504     }
9505   return TRUE;
9506 }
9507 
9508 /* Allocate offsets in the stubs section to each symbol that needs one.
9509    Set the final size of the .MIPS.stub section.  */
9510 
9511 static bfd_boolean
mips_elf_lay_out_lazy_stubs(struct bfd_link_info * info)9512 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9513 {
9514   bfd *output_bfd = info->output_bfd;
9515   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9516   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9517   bfd_vma isa_bit = micromips_p;
9518   struct mips_elf_link_hash_table *htab;
9519   struct mips_htab_traverse_info hti;
9520   struct elf_link_hash_entry *h;
9521   bfd *dynobj;
9522 
9523   htab = mips_elf_hash_table (info);
9524   BFD_ASSERT (htab != NULL);
9525 
9526   if (htab->lazy_stub_count == 0)
9527     return TRUE;
9528 
9529   htab->sstubs->size = 0;
9530   hti.info = info;
9531   hti.output_bfd = output_bfd;
9532   hti.error = FALSE;
9533   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9534   if (hti.error)
9535     return FALSE;
9536   htab->sstubs->size += htab->function_stub_size;
9537   BFD_ASSERT (htab->sstubs->size
9538 	      == htab->lazy_stub_count * htab->function_stub_size);
9539 
9540   dynobj = elf_hash_table (info)->dynobj;
9541   BFD_ASSERT (dynobj != NULL);
9542   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9543   if (h == NULL)
9544     return FALSE;
9545   h->root.u.def.value = isa_bit;
9546   h->other = other;
9547   h->type = STT_FUNC;
9548 
9549   return TRUE;
9550 }
9551 
9552 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9553    bfd_link_info.  If H uses the address of a PLT entry as the value
9554    of the symbol, then set the entry in the symbol table now.  Prefer
9555    a standard MIPS PLT entry.  */
9556 
9557 static bfd_boolean
mips_elf_set_plt_sym_value(struct mips_elf_link_hash_entry * h,void * data)9558 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9559 {
9560   struct bfd_link_info *info = data;
9561   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9562   struct mips_elf_link_hash_table *htab;
9563   unsigned int other;
9564   bfd_vma isa_bit;
9565   bfd_vma val;
9566 
9567   htab = mips_elf_hash_table (info);
9568   BFD_ASSERT (htab != NULL);
9569 
9570   if (h->use_plt_entry)
9571     {
9572       BFD_ASSERT (h->root.plt.plist != NULL);
9573       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9574 		  || h->root.plt.plist->comp_offset != MINUS_ONE);
9575 
9576       val = htab->plt_header_size;
9577       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9578 	{
9579 	  isa_bit = 0;
9580 	  val += h->root.plt.plist->mips_offset;
9581 	  other = 0;
9582 	}
9583       else
9584 	{
9585 	  isa_bit = 1;
9586 	  val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9587 	  other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9588 	}
9589       val += isa_bit;
9590       /* For VxWorks, point at the PLT load stub rather than the lazy
9591          resolution stub; this stub will become the canonical function
9592          address.  */
9593       if (htab->is_vxworks)
9594 	val += 8;
9595 
9596       h->root.root.u.def.section = htab->splt;
9597       h->root.root.u.def.value = val;
9598       h->root.other = other;
9599     }
9600 
9601   return TRUE;
9602 }
9603 
9604 /* Set the sizes of the dynamic sections.  */
9605 
9606 bfd_boolean
_bfd_mips_elf_size_dynamic_sections(bfd * output_bfd,struct bfd_link_info * info)9607 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9608 				     struct bfd_link_info *info)
9609 {
9610   bfd *dynobj;
9611   asection *s, *sreldyn;
9612   bfd_boolean reltext;
9613   struct mips_elf_link_hash_table *htab;
9614 
9615   htab = mips_elf_hash_table (info);
9616   BFD_ASSERT (htab != NULL);
9617   dynobj = elf_hash_table (info)->dynobj;
9618   BFD_ASSERT (dynobj != NULL);
9619 
9620   if (elf_hash_table (info)->dynamic_sections_created)
9621     {
9622       /* Set the contents of the .interp section to the interpreter.  */
9623       if (bfd_link_executable (info) && !info->nointerp)
9624 	{
9625 	  s = bfd_get_linker_section (dynobj, ".interp");
9626 	  BFD_ASSERT (s != NULL);
9627 	  s->size
9628 	    = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9629 	  s->contents
9630 	    = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9631 	}
9632 
9633       /* Figure out the size of the PLT header if we know that we
9634          are using it.  For the sake of cache alignment always use
9635          a standard header whenever any standard entries are present
9636          even if microMIPS entries are present as well.  This also
9637          lets the microMIPS header rely on the value of $v0 only set
9638          by microMIPS entries, for a small size reduction.
9639 
9640          Set symbol table entry values for symbols that use the
9641          address of their PLT entry now that we can calculate it.
9642 
9643          Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9644          haven't already in _bfd_elf_create_dynamic_sections.  */
9645       if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9646 	{
9647 	  bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9648 				     && !htab->plt_mips_offset);
9649 	  unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9650 	  bfd_vma isa_bit = micromips_p;
9651 	  struct elf_link_hash_entry *h;
9652 	  bfd_vma size;
9653 
9654 	  BFD_ASSERT (htab->use_plts_and_copy_relocs);
9655 	  BFD_ASSERT (htab->sgotplt->size == 0);
9656 	  BFD_ASSERT (htab->splt->size == 0);
9657 
9658 	  if (htab->is_vxworks && bfd_link_pic (info))
9659 	    size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9660 	  else if (htab->is_vxworks)
9661 	    size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9662 	  else if (ABI_64_P (output_bfd))
9663 	    size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9664 	  else if (ABI_N32_P (output_bfd))
9665 	    size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9666 	  else if (!micromips_p)
9667 	    size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9668 	  else if (htab->insn32)
9669 	    size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9670 	  else
9671 	    size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9672 
9673 	  htab->plt_header_is_comp = micromips_p;
9674 	  htab->plt_header_size = size;
9675 	  htab->splt->size = (size
9676 			      + htab->plt_mips_offset
9677 			      + htab->plt_comp_offset);
9678 	  htab->sgotplt->size = (htab->plt_got_index
9679 				 * MIPS_ELF_GOT_SIZE (dynobj));
9680 
9681 	  mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9682 
9683 	  if (htab->root.hplt == NULL)
9684 	    {
9685 	      h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9686 					       "_PROCEDURE_LINKAGE_TABLE_");
9687 	      htab->root.hplt = h;
9688 	      if (h == NULL)
9689 		return FALSE;
9690 	    }
9691 
9692 	  h = htab->root.hplt;
9693 	  h->root.u.def.value = isa_bit;
9694 	  h->other = other;
9695 	  h->type = STT_FUNC;
9696 	}
9697     }
9698 
9699   /* Allocate space for global sym dynamic relocs.  */
9700   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9701 
9702   mips_elf_estimate_stub_size (output_bfd, info);
9703 
9704   if (!mips_elf_lay_out_got (output_bfd, info))
9705     return FALSE;
9706 
9707   mips_elf_lay_out_lazy_stubs (info);
9708 
9709   /* The check_relocs and adjust_dynamic_symbol entry points have
9710      determined the sizes of the various dynamic sections.  Allocate
9711      memory for them.  */
9712   reltext = FALSE;
9713   for (s = dynobj->sections; s != NULL; s = s->next)
9714     {
9715       const char *name;
9716 
9717       /* It's OK to base decisions on the section name, because none
9718 	 of the dynobj section names depend upon the input files.  */
9719       name = bfd_get_section_name (dynobj, s);
9720 
9721       if ((s->flags & SEC_LINKER_CREATED) == 0)
9722 	continue;
9723 
9724       if (CONST_STRNEQ (name, ".rel"))
9725 	{
9726 	  if (s->size != 0)
9727 	    {
9728 	      const char *outname;
9729 	      asection *target;
9730 
9731 	      /* If this relocation section applies to a read only
9732                  section, then we probably need a DT_TEXTREL entry.
9733                  If the relocation section is .rel(a).dyn, we always
9734                  assert a DT_TEXTREL entry rather than testing whether
9735                  there exists a relocation to a read only section or
9736                  not.  */
9737 	      outname = bfd_get_section_name (output_bfd,
9738 					      s->output_section);
9739 	      target = bfd_get_section_by_name (output_bfd, outname + 4);
9740 	      if ((target != NULL
9741 		   && (target->flags & SEC_READONLY) != 0
9742 		   && (target->flags & SEC_ALLOC) != 0)
9743 		  || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9744 		reltext = TRUE;
9745 
9746 	      /* We use the reloc_count field as a counter if we need
9747 		 to copy relocs into the output file.  */
9748 	      if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9749 		s->reloc_count = 0;
9750 
9751 	      /* If combreloc is enabled, elf_link_sort_relocs() will
9752 		 sort relocations, but in a different way than we do,
9753 		 and before we're done creating relocations.  Also, it
9754 		 will move them around between input sections'
9755 		 relocation's contents, so our sorting would be
9756 		 broken, so don't let it run.  */
9757 	      info->combreloc = 0;
9758 	    }
9759 	}
9760       else if (bfd_link_executable (info)
9761 	       && ! mips_elf_hash_table (info)->use_rld_obj_head
9762 	       && CONST_STRNEQ (name, ".rld_map"))
9763 	{
9764 	  /* We add a room for __rld_map.  It will be filled in by the
9765 	     rtld to contain a pointer to the _r_debug structure.  */
9766 	  s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9767 	}
9768       else if (SGI_COMPAT (output_bfd)
9769 	       && CONST_STRNEQ (name, ".compact_rel"))
9770 	s->size += mips_elf_hash_table (info)->compact_rel_size;
9771       else if (s == htab->splt)
9772 	{
9773 	  /* If the last PLT entry has a branch delay slot, allocate
9774 	     room for an extra nop to fill the delay slot.  This is
9775 	     for CPUs without load interlocking.  */
9776 	  if (! LOAD_INTERLOCKS_P (output_bfd)
9777 	      && ! htab->is_vxworks && s->size > 0)
9778 	    s->size += 4;
9779 	}
9780       else if (! CONST_STRNEQ (name, ".init")
9781 	       && s != htab->sgot
9782 	       && s != htab->sgotplt
9783 	       && s != htab->sstubs
9784 	       && s != htab->sdynbss)
9785 	{
9786 	  /* It's not one of our sections, so don't allocate space.  */
9787 	  continue;
9788 	}
9789 
9790       if (s->size == 0)
9791 	{
9792 	  s->flags |= SEC_EXCLUDE;
9793 	  continue;
9794 	}
9795 
9796       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9797 	continue;
9798 
9799       /* Allocate memory for the section contents.  */
9800       s->contents = bfd_zalloc (dynobj, s->size);
9801       if (s->contents == NULL)
9802 	{
9803 	  bfd_set_error (bfd_error_no_memory);
9804 	  return FALSE;
9805 	}
9806     }
9807 
9808   if (elf_hash_table (info)->dynamic_sections_created)
9809     {
9810       /* Add some entries to the .dynamic section.  We fill in the
9811 	 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9812 	 must add the entries now so that we get the correct size for
9813 	 the .dynamic section.  */
9814 
9815       /* SGI object has the equivalence of DT_DEBUG in the
9816 	 DT_MIPS_RLD_MAP entry.  This must come first because glibc
9817 	 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9818 	 may only look at the first one they see.  */
9819       if (!bfd_link_pic (info)
9820 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9821 	return FALSE;
9822 
9823       if (bfd_link_executable (info)
9824 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9825 	return FALSE;
9826 
9827       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9828 	 used by the debugger.  */
9829       if (bfd_link_executable (info)
9830 	  && !SGI_COMPAT (output_bfd)
9831 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9832 	return FALSE;
9833 
9834       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9835 	info->flags |= DF_TEXTREL;
9836 
9837       if ((info->flags & DF_TEXTREL) != 0)
9838 	{
9839 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9840 	    return FALSE;
9841 
9842 	  /* Clear the DF_TEXTREL flag.  It will be set again if we
9843 	     write out an actual text relocation; we may not, because
9844 	     at this point we do not know whether e.g. any .eh_frame
9845 	     absolute relocations have been converted to PC-relative.  */
9846 	  info->flags &= ~DF_TEXTREL;
9847 	}
9848 
9849       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9850 	return FALSE;
9851 
9852       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9853       if (htab->is_vxworks)
9854 	{
9855 	  /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9856 	     use any of the DT_MIPS_* tags.  */
9857 	  if (sreldyn && sreldyn->size > 0)
9858 	    {
9859 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9860 		return FALSE;
9861 
9862 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9863 		return FALSE;
9864 
9865 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9866 		return FALSE;
9867 	    }
9868 	}
9869       else
9870 	{
9871 	  if (sreldyn && sreldyn->size > 0)
9872 	    {
9873 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9874 		return FALSE;
9875 
9876 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9877 		return FALSE;
9878 
9879 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9880 		return FALSE;
9881 	    }
9882 
9883 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9884 	    return FALSE;
9885 
9886 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9887 	    return FALSE;
9888 
9889 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9890 	    return FALSE;
9891 
9892 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9893 	    return FALSE;
9894 
9895 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9896 	    return FALSE;
9897 
9898 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9899 	    return FALSE;
9900 
9901 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9902 	    return FALSE;
9903 
9904 	  if (IRIX_COMPAT (dynobj) == ict_irix5
9905 	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9906 	    return FALSE;
9907 
9908 	  if (IRIX_COMPAT (dynobj) == ict_irix6
9909 	      && (bfd_get_section_by_name
9910 		  (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9911 	      && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9912 	    return FALSE;
9913 	}
9914       if (htab->splt->size > 0)
9915 	{
9916 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9917 	    return FALSE;
9918 
9919 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9920 	    return FALSE;
9921 
9922 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9923 	    return FALSE;
9924 
9925 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9926 	    return FALSE;
9927 	}
9928       if (htab->is_vxworks
9929 	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9930 	return FALSE;
9931     }
9932 
9933   return TRUE;
9934 }
9935 
9936 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9937    Adjust its R_ADDEND field so that it is correct for the output file.
9938    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9939    and sections respectively; both use symbol indexes.  */
9940 
9941 static void
mips_elf_adjust_addend(bfd * output_bfd,struct bfd_link_info * info,bfd * input_bfd,Elf_Internal_Sym * local_syms,asection ** local_sections,Elf_Internal_Rela * rel)9942 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9943 			bfd *input_bfd, Elf_Internal_Sym *local_syms,
9944 			asection **local_sections, Elf_Internal_Rela *rel)
9945 {
9946   unsigned int r_type, r_symndx;
9947   Elf_Internal_Sym *sym;
9948   asection *sec;
9949 
9950   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9951     {
9952       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9953       if (gprel16_reloc_p (r_type)
9954 	  || r_type == R_MIPS_GPREL32
9955 	  || literal_reloc_p (r_type))
9956 	{
9957 	  rel->r_addend += _bfd_get_gp_value (input_bfd);
9958 	  rel->r_addend -= _bfd_get_gp_value (output_bfd);
9959 	}
9960 
9961       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9962       sym = local_syms + r_symndx;
9963 
9964       /* Adjust REL's addend to account for section merging.  */
9965       if (!bfd_link_relocatable (info))
9966 	{
9967 	  sec = local_sections[r_symndx];
9968 	  _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9969 	}
9970 
9971       /* This would normally be done by the rela_normal code in elflink.c.  */
9972       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9973 	rel->r_addend += local_sections[r_symndx]->output_offset;
9974     }
9975 }
9976 
9977 /* Handle relocations against symbols from removed linkonce sections,
9978    or sections discarded by a linker script.  We use this wrapper around
9979    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9980    on 64-bit ELF targets.  In this case for any relocation handled, which
9981    always be the first in a triplet, the remaining two have to be processed
9982    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9983    index referred by the first reloc that applies to all the three and the
9984    remaining two never refer to an object symbol.  And it is the final
9985    relocation (the last non-null one) that determines the output field of
9986    the whole relocation so retrieve the corresponding howto structure for
9987    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9988 
9989    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9990    and therefore requires to be pasted in a loop.  It also defines a block
9991    and does not protect any of its arguments, hence the extra brackets.  */
9992 
9993 static void
mips_reloc_against_discarded_section(bfd * output_bfd,struct bfd_link_info * info,bfd * input_bfd,asection * input_section,Elf_Internal_Rela ** rel,const Elf_Internal_Rela ** relend,bfd_boolean rel_reloc,reloc_howto_type * howto,bfd_byte * contents)9994 mips_reloc_against_discarded_section (bfd *output_bfd,
9995 				      struct bfd_link_info *info,
9996 				      bfd *input_bfd, asection *input_section,
9997 				      Elf_Internal_Rela **rel,
9998 				      const Elf_Internal_Rela **relend,
9999 				      bfd_boolean rel_reloc,
10000 				      reloc_howto_type *howto,
10001 				      bfd_byte *contents)
10002 {
10003   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10004   int count = bed->s->int_rels_per_ext_rel;
10005   unsigned int r_type;
10006   int i;
10007 
10008   for (i = count - 1; i > 0; i--)
10009     {
10010       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10011       if (r_type != R_MIPS_NONE)
10012 	{
10013 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10014 	  break;
10015 	}
10016     }
10017   do
10018     {
10019        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10020 					(*rel), count, (*relend),
10021 					howto, i, contents);
10022     }
10023   while (0);
10024 }
10025 
10026 /* Relocate a MIPS ELF section.  */
10027 
10028 bfd_boolean
_bfd_mips_elf_relocate_section(bfd * output_bfd,struct bfd_link_info * info,bfd * input_bfd,asection * input_section,bfd_byte * contents,Elf_Internal_Rela * relocs,Elf_Internal_Sym * local_syms,asection ** local_sections)10029 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10030 				bfd *input_bfd, asection *input_section,
10031 				bfd_byte *contents, Elf_Internal_Rela *relocs,
10032 				Elf_Internal_Sym *local_syms,
10033 				asection **local_sections)
10034 {
10035   Elf_Internal_Rela *rel;
10036   const Elf_Internal_Rela *relend;
10037   bfd_vma addend = 0;
10038   bfd_boolean use_saved_addend_p = FALSE;
10039   const struct elf_backend_data *bed;
10040 
10041   bed = get_elf_backend_data (output_bfd);
10042   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10043   for (rel = relocs; rel < relend; ++rel)
10044     {
10045       const char *name;
10046       bfd_vma value = 0;
10047       reloc_howto_type *howto;
10048       bfd_boolean cross_mode_jump_p = FALSE;
10049       /* TRUE if the relocation is a RELA relocation, rather than a
10050          REL relocation.  */
10051       bfd_boolean rela_relocation_p = TRUE;
10052       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10053       const char *msg;
10054       unsigned long r_symndx;
10055       asection *sec;
10056       Elf_Internal_Shdr *symtab_hdr;
10057       struct elf_link_hash_entry *h;
10058       bfd_boolean rel_reloc;
10059 
10060       rel_reloc = (NEWABI_P (input_bfd)
10061 		   && mips_elf_rel_relocation_p (input_bfd, input_section,
10062 						 relocs, rel));
10063       /* Find the relocation howto for this relocation.  */
10064       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10065 
10066       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10067       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10068       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10069 	{
10070 	  sec = local_sections[r_symndx];
10071 	  h = NULL;
10072 	}
10073       else
10074 	{
10075 	  unsigned long extsymoff;
10076 
10077 	  extsymoff = 0;
10078 	  if (!elf_bad_symtab (input_bfd))
10079 	    extsymoff = symtab_hdr->sh_info;
10080 	  h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10081 	  while (h->root.type == bfd_link_hash_indirect
10082 		 || h->root.type == bfd_link_hash_warning)
10083 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
10084 
10085 	  sec = NULL;
10086 	  if (h->root.type == bfd_link_hash_defined
10087 	      || h->root.type == bfd_link_hash_defweak)
10088 	    sec = h->root.u.def.section;
10089 	}
10090 
10091       if (sec != NULL && discarded_section (sec))
10092 	{
10093 	  mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10094 						input_section, &rel, &relend,
10095 						rel_reloc, howto, contents);
10096 	  continue;
10097 	}
10098 
10099       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10100 	{
10101 	  /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10102 	     64-bit code, but make sure all their addresses are in the
10103 	     lowermost or uppermost 32-bit section of the 64-bit address
10104 	     space.  Thus, when they use an R_MIPS_64 they mean what is
10105 	     usually meant by R_MIPS_32, with the exception that the
10106 	     stored value is sign-extended to 64 bits.  */
10107 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10108 
10109 	  /* On big-endian systems, we need to lie about the position
10110 	     of the reloc.  */
10111 	  if (bfd_big_endian (input_bfd))
10112 	    rel->r_offset += 4;
10113 	}
10114 
10115       if (!use_saved_addend_p)
10116 	{
10117 	  /* If these relocations were originally of the REL variety,
10118 	     we must pull the addend out of the field that will be
10119 	     relocated.  Otherwise, we simply use the contents of the
10120 	     RELA relocation.  */
10121 	  if (mips_elf_rel_relocation_p (input_bfd, input_section,
10122 					 relocs, rel))
10123 	    {
10124 	      rela_relocation_p = FALSE;
10125 	      addend = mips_elf_read_rel_addend (input_bfd, rel,
10126 						 howto, contents);
10127 	      if (hi16_reloc_p (r_type)
10128 		  || (got16_reloc_p (r_type)
10129 		      && mips_elf_local_relocation_p (input_bfd, rel,
10130 						      local_sections)))
10131 		{
10132 		  if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10133 						     contents, &addend))
10134 		    {
10135 		      if (h)
10136 			name = h->root.root.string;
10137 		      else
10138 			name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10139 						 local_syms + r_symndx,
10140 						 sec);
10141 		      (*_bfd_error_handler)
10142 			(_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10143 			 input_bfd, input_section, name, howto->name,
10144 			 rel->r_offset);
10145 		    }
10146 		}
10147 	      else
10148 		addend <<= howto->rightshift;
10149 	    }
10150 	  else
10151 	    addend = rel->r_addend;
10152 	  mips_elf_adjust_addend (output_bfd, info, input_bfd,
10153 				  local_syms, local_sections, rel);
10154 	}
10155 
10156       if (bfd_link_relocatable (info))
10157 	{
10158 	  if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10159 	      && bfd_big_endian (input_bfd))
10160 	    rel->r_offset -= 4;
10161 
10162 	  if (!rela_relocation_p && rel->r_addend)
10163 	    {
10164 	      addend += rel->r_addend;
10165 	      if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10166 		addend = mips_elf_high (addend);
10167 	      else if (r_type == R_MIPS_HIGHER)
10168 		addend = mips_elf_higher (addend);
10169 	      else if (r_type == R_MIPS_HIGHEST)
10170 		addend = mips_elf_highest (addend);
10171 	      else
10172 		addend >>= howto->rightshift;
10173 
10174 	      /* We use the source mask, rather than the destination
10175 		 mask because the place to which we are writing will be
10176 		 source of the addend in the final link.  */
10177 	      addend &= howto->src_mask;
10178 
10179 	      if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10180 		/* See the comment above about using R_MIPS_64 in the 32-bit
10181 		   ABI.  Here, we need to update the addend.  It would be
10182 		   possible to get away with just using the R_MIPS_32 reloc
10183 		   but for endianness.  */
10184 		{
10185 		  bfd_vma sign_bits;
10186 		  bfd_vma low_bits;
10187 		  bfd_vma high_bits;
10188 
10189 		  if (addend & ((bfd_vma) 1 << 31))
10190 #ifdef BFD64
10191 		    sign_bits = ((bfd_vma) 1 << 32) - 1;
10192 #else
10193 		    sign_bits = -1;
10194 #endif
10195 		  else
10196 		    sign_bits = 0;
10197 
10198 		  /* If we don't know that we have a 64-bit type,
10199 		     do two separate stores.  */
10200 		  if (bfd_big_endian (input_bfd))
10201 		    {
10202 		      /* Store the sign-bits (which are most significant)
10203 			 first.  */
10204 		      low_bits = sign_bits;
10205 		      high_bits = addend;
10206 		    }
10207 		  else
10208 		    {
10209 		      low_bits = addend;
10210 		      high_bits = sign_bits;
10211 		    }
10212 		  bfd_put_32 (input_bfd, low_bits,
10213 			      contents + rel->r_offset);
10214 		  bfd_put_32 (input_bfd, high_bits,
10215 			      contents + rel->r_offset + 4);
10216 		  continue;
10217 		}
10218 
10219 	      if (! mips_elf_perform_relocation (info, howto, rel, addend,
10220 						 input_bfd, input_section,
10221 						 contents, FALSE))
10222 		return FALSE;
10223 	    }
10224 
10225 	  /* Go on to the next relocation.  */
10226 	  continue;
10227 	}
10228 
10229       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10230 	 relocations for the same offset.  In that case we are
10231 	 supposed to treat the output of each relocation as the addend
10232 	 for the next.  */
10233       if (rel + 1 < relend
10234 	  && rel->r_offset == rel[1].r_offset
10235 	  && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10236 	use_saved_addend_p = TRUE;
10237       else
10238 	use_saved_addend_p = FALSE;
10239 
10240       /* Figure out what value we are supposed to relocate.  */
10241       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10242 					     input_section, info, rel,
10243 					     addend, howto, local_syms,
10244 					     local_sections, &value,
10245 					     &name, &cross_mode_jump_p,
10246 					     use_saved_addend_p))
10247 	{
10248 	case bfd_reloc_continue:
10249 	  /* There's nothing to do.  */
10250 	  continue;
10251 
10252 	case bfd_reloc_undefined:
10253 	  /* mips_elf_calculate_relocation already called the
10254 	     undefined_symbol callback.  There's no real point in
10255 	     trying to perform the relocation at this point, so we
10256 	     just skip ahead to the next relocation.  */
10257 	  continue;
10258 
10259 	case bfd_reloc_notsupported:
10260 	  msg = _("internal error: unsupported relocation error");
10261 	  info->callbacks->warning
10262 	    (info, msg, name, input_bfd, input_section, rel->r_offset);
10263 	  return FALSE;
10264 
10265 	case bfd_reloc_overflow:
10266 	  if (use_saved_addend_p)
10267 	    /* Ignore overflow until we reach the last relocation for
10268 	       a given location.  */
10269 	    ;
10270 	  else
10271 	    {
10272 	      struct mips_elf_link_hash_table *htab;
10273 
10274 	      htab = mips_elf_hash_table (info);
10275 	      BFD_ASSERT (htab != NULL);
10276 	      BFD_ASSERT (name != NULL);
10277 	      if (!htab->small_data_overflow_reported
10278 		  && (gprel16_reloc_p (howto->type)
10279 		      || literal_reloc_p (howto->type)))
10280 		{
10281 		  msg = _("small-data section exceeds 64KB;"
10282 			  " lower small-data size limit (see option -G)");
10283 
10284 		  htab->small_data_overflow_reported = TRUE;
10285 		  (*info->callbacks->einfo) ("%P: %s\n", msg);
10286 		}
10287 	      (*info->callbacks->reloc_overflow)
10288 		(info, NULL, name, howto->name, (bfd_vma) 0,
10289 		 input_bfd, input_section, rel->r_offset);
10290 	    }
10291 	  break;
10292 
10293 	case bfd_reloc_ok:
10294 	  break;
10295 
10296 	case bfd_reloc_outofrange:
10297 	  msg = NULL;
10298 	  if (jal_reloc_p (howto->type))
10299 	    msg = _("JALX to a non-word-aligned address");
10300 	  else if (b_reloc_p (howto->type))
10301 	    msg = _("Branch to a non-instruction-aligned address");
10302 	  else if (aligned_pcrel_reloc_p (howto->type))
10303 	    msg = _("PC-relative load from unaligned address");
10304 	  if (msg)
10305 	    {
10306 	      info->callbacks->einfo
10307 		("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10308 	      break;
10309 	    }
10310 	  /* Fall through.  */
10311 
10312 	default:
10313 	  abort ();
10314 	  break;
10315 	}
10316 
10317       /* If we've got another relocation for the address, keep going
10318 	 until we reach the last one.  */
10319       if (use_saved_addend_p)
10320 	{
10321 	  addend = value;
10322 	  continue;
10323 	}
10324 
10325       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10326 	/* See the comment above about using R_MIPS_64 in the 32-bit
10327 	   ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10328 	   that calculated the right value.  Now, however, we
10329 	   sign-extend the 32-bit result to 64-bits, and store it as a
10330 	   64-bit value.  We are especially generous here in that we
10331 	   go to extreme lengths to support this usage on systems with
10332 	   only a 32-bit VMA.  */
10333 	{
10334 	  bfd_vma sign_bits;
10335 	  bfd_vma low_bits;
10336 	  bfd_vma high_bits;
10337 
10338 	  if (value & ((bfd_vma) 1 << 31))
10339 #ifdef BFD64
10340 	    sign_bits = ((bfd_vma) 1 << 32) - 1;
10341 #else
10342 	    sign_bits = -1;
10343 #endif
10344 	  else
10345 	    sign_bits = 0;
10346 
10347 	  /* If we don't know that we have a 64-bit type,
10348 	     do two separate stores.  */
10349 	  if (bfd_big_endian (input_bfd))
10350 	    {
10351 	      /* Undo what we did above.  */
10352 	      rel->r_offset -= 4;
10353 	      /* Store the sign-bits (which are most significant)
10354 		 first.  */
10355 	      low_bits = sign_bits;
10356 	      high_bits = value;
10357 	    }
10358 	  else
10359 	    {
10360 	      low_bits = value;
10361 	      high_bits = sign_bits;
10362 	    }
10363 	  bfd_put_32 (input_bfd, low_bits,
10364 		      contents + rel->r_offset);
10365 	  bfd_put_32 (input_bfd, high_bits,
10366 		      contents + rel->r_offset + 4);
10367 	  continue;
10368 	}
10369 
10370       /* Actually perform the relocation.  */
10371       if (! mips_elf_perform_relocation (info, howto, rel, value,
10372 					 input_bfd, input_section,
10373 					 contents, cross_mode_jump_p))
10374 	return FALSE;
10375     }
10376 
10377   return TRUE;
10378 }
10379 
10380 /* A function that iterates over each entry in la25_stubs and fills
10381    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10382 
10383 static int
mips_elf_create_la25_stub(void ** slot,void * data)10384 mips_elf_create_la25_stub (void **slot, void *data)
10385 {
10386   struct mips_htab_traverse_info *hti;
10387   struct mips_elf_link_hash_table *htab;
10388   struct mips_elf_la25_stub *stub;
10389   asection *s;
10390   bfd_byte *loc;
10391   bfd_vma offset, target, target_high, target_low;
10392 
10393   stub = (struct mips_elf_la25_stub *) *slot;
10394   hti = (struct mips_htab_traverse_info *) data;
10395   htab = mips_elf_hash_table (hti->info);
10396   BFD_ASSERT (htab != NULL);
10397 
10398   /* Create the section contents, if we haven't already.  */
10399   s = stub->stub_section;
10400   loc = s->contents;
10401   if (loc == NULL)
10402     {
10403       loc = bfd_malloc (s->size);
10404       if (loc == NULL)
10405 	{
10406 	  hti->error = TRUE;
10407 	  return FALSE;
10408 	}
10409       s->contents = loc;
10410     }
10411 
10412   /* Work out where in the section this stub should go.  */
10413   offset = stub->offset;
10414 
10415   /* Work out the target address.  */
10416   target = mips_elf_get_la25_target (stub, &s);
10417   target += s->output_section->vma + s->output_offset;
10418 
10419   target_high = ((target + 0x8000) >> 16) & 0xffff;
10420   target_low = (target & 0xffff);
10421 
10422   if (stub->stub_section != htab->strampoline)
10423     {
10424       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10425 	 of the section and write the two instructions at the end.  */
10426       memset (loc, 0, offset);
10427       loc += offset;
10428       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10429 	{
10430 	  bfd_put_micromips_32 (hti->output_bfd,
10431 				LA25_LUI_MICROMIPS (target_high),
10432 				loc);
10433 	  bfd_put_micromips_32 (hti->output_bfd,
10434 				LA25_ADDIU_MICROMIPS (target_low),
10435 				loc + 4);
10436 	}
10437       else
10438 	{
10439 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10440 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10441 	}
10442     }
10443   else
10444     {
10445       /* This is trampoline.  */
10446       loc += offset;
10447       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10448 	{
10449 	  bfd_put_micromips_32 (hti->output_bfd,
10450 				LA25_LUI_MICROMIPS (target_high), loc);
10451 	  bfd_put_micromips_32 (hti->output_bfd,
10452 				LA25_J_MICROMIPS (target), loc + 4);
10453 	  bfd_put_micromips_32 (hti->output_bfd,
10454 				LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10455 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10456 	}
10457       else
10458 	{
10459 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10460 	  bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10461 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10462 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10463 	}
10464     }
10465   return TRUE;
10466 }
10467 
10468 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10469    adjust it appropriately now.  */
10470 
10471 static void
mips_elf_irix6_finish_dynamic_symbol(bfd * abfd ATTRIBUTE_UNUSED,const char * name,Elf_Internal_Sym * sym)10472 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10473 				      const char *name, Elf_Internal_Sym *sym)
10474 {
10475   /* The linker script takes care of providing names and values for
10476      these, but we must place them into the right sections.  */
10477   static const char* const text_section_symbols[] = {
10478     "_ftext",
10479     "_etext",
10480     "__dso_displacement",
10481     "__elf_header",
10482     "__program_header_table",
10483     NULL
10484   };
10485 
10486   static const char* const data_section_symbols[] = {
10487     "_fdata",
10488     "_edata",
10489     "_end",
10490     "_fbss",
10491     NULL
10492   };
10493 
10494   const char* const *p;
10495   int i;
10496 
10497   for (i = 0; i < 2; ++i)
10498     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10499 	 *p;
10500 	 ++p)
10501       if (strcmp (*p, name) == 0)
10502 	{
10503 	  /* All of these symbols are given type STT_SECTION by the
10504 	     IRIX6 linker.  */
10505 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10506 	  sym->st_other = STO_PROTECTED;
10507 
10508 	  /* The IRIX linker puts these symbols in special sections.  */
10509 	  if (i == 0)
10510 	    sym->st_shndx = SHN_MIPS_TEXT;
10511 	  else
10512 	    sym->st_shndx = SHN_MIPS_DATA;
10513 
10514 	  break;
10515 	}
10516 }
10517 
10518 /* Finish up dynamic symbol handling.  We set the contents of various
10519    dynamic sections here.  */
10520 
10521 bfd_boolean
_bfd_mips_elf_finish_dynamic_symbol(bfd * output_bfd,struct bfd_link_info * info,struct elf_link_hash_entry * h,Elf_Internal_Sym * sym)10522 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10523 				     struct bfd_link_info *info,
10524 				     struct elf_link_hash_entry *h,
10525 				     Elf_Internal_Sym *sym)
10526 {
10527   bfd *dynobj;
10528   asection *sgot;
10529   struct mips_got_info *g, *gg;
10530   const char *name;
10531   int idx;
10532   struct mips_elf_link_hash_table *htab;
10533   struct mips_elf_link_hash_entry *hmips;
10534 
10535   htab = mips_elf_hash_table (info);
10536   BFD_ASSERT (htab != NULL);
10537   dynobj = elf_hash_table (info)->dynobj;
10538   hmips = (struct mips_elf_link_hash_entry *) h;
10539 
10540   BFD_ASSERT (!htab->is_vxworks);
10541 
10542   if (h->plt.plist != NULL
10543       && (h->plt.plist->mips_offset != MINUS_ONE
10544 	  || h->plt.plist->comp_offset != MINUS_ONE))
10545     {
10546       /* We've decided to create a PLT entry for this symbol.  */
10547       bfd_byte *loc;
10548       bfd_vma header_address, got_address;
10549       bfd_vma got_address_high, got_address_low, load;
10550       bfd_vma got_index;
10551       bfd_vma isa_bit;
10552 
10553       got_index = h->plt.plist->gotplt_index;
10554 
10555       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10556       BFD_ASSERT (h->dynindx != -1);
10557       BFD_ASSERT (htab->splt != NULL);
10558       BFD_ASSERT (got_index != MINUS_ONE);
10559       BFD_ASSERT (!h->def_regular);
10560 
10561       /* Calculate the address of the PLT header.  */
10562       isa_bit = htab->plt_header_is_comp;
10563       header_address = (htab->splt->output_section->vma
10564 			+ htab->splt->output_offset + isa_bit);
10565 
10566       /* Calculate the address of the .got.plt entry.  */
10567       got_address = (htab->sgotplt->output_section->vma
10568 		     + htab->sgotplt->output_offset
10569 		     + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10570 
10571       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10572       got_address_low = got_address & 0xffff;
10573 
10574       /* Initially point the .got.plt entry at the PLT header.  */
10575       loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10576       if (ABI_64_P (output_bfd))
10577 	bfd_put_64 (output_bfd, header_address, loc);
10578       else
10579 	bfd_put_32 (output_bfd, header_address, loc);
10580 
10581       /* Now handle the PLT itself.  First the standard entry (the order
10582          does not matter, we just have to pick one).  */
10583       if (h->plt.plist->mips_offset != MINUS_ONE)
10584 	{
10585 	  const bfd_vma *plt_entry;
10586 	  bfd_vma plt_offset;
10587 
10588 	  plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10589 
10590 	  BFD_ASSERT (plt_offset <= htab->splt->size);
10591 
10592 	  /* Find out where the .plt entry should go.  */
10593 	  loc = htab->splt->contents + plt_offset;
10594 
10595 	  /* Pick the load opcode.  */
10596 	  load = MIPS_ELF_LOAD_WORD (output_bfd);
10597 
10598 	  /* Fill in the PLT entry itself.  */
10599 
10600 	  if (MIPSR6_P (output_bfd))
10601 	    plt_entry = mipsr6_exec_plt_entry;
10602 	  else
10603 	    plt_entry = mips_exec_plt_entry;
10604 	  bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10605 	  bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10606 		      loc + 4);
10607 
10608 	  if (! LOAD_INTERLOCKS_P (output_bfd))
10609 	    {
10610 	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10611 	      bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10612 	    }
10613 	  else
10614 	    {
10615 	      bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10616 	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10617 			  loc + 12);
10618 	    }
10619 	}
10620 
10621       /* Now the compressed entry.  They come after any standard ones.  */
10622       if (h->plt.plist->comp_offset != MINUS_ONE)
10623 	{
10624 	  bfd_vma plt_offset;
10625 
10626 	  plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10627 			+ h->plt.plist->comp_offset);
10628 
10629 	  BFD_ASSERT (plt_offset <= htab->splt->size);
10630 
10631 	  /* Find out where the .plt entry should go.  */
10632 	  loc = htab->splt->contents + plt_offset;
10633 
10634 	  /* Fill in the PLT entry itself.  */
10635 	  if (!MICROMIPS_P (output_bfd))
10636 	    {
10637 	      const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10638 
10639 	      bfd_put_16 (output_bfd, plt_entry[0], loc);
10640 	      bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10641 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10642 	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10643 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10644 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10645 	      bfd_put_32 (output_bfd, got_address, loc + 12);
10646 	    }
10647 	  else if (htab->insn32)
10648 	    {
10649 	      const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10650 
10651 	      bfd_put_16 (output_bfd, plt_entry[0], loc);
10652 	      bfd_put_16 (output_bfd, got_address_high, loc + 2);
10653 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10654 	      bfd_put_16 (output_bfd, got_address_low, loc + 6);
10655 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10656 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10657 	      bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10658 	      bfd_put_16 (output_bfd, got_address_low, loc + 14);
10659 	    }
10660 	  else
10661 	    {
10662 	      const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10663 	      bfd_signed_vma gotpc_offset;
10664 	      bfd_vma loc_address;
10665 
10666 	      BFD_ASSERT (got_address % 4 == 0);
10667 
10668 	      loc_address = (htab->splt->output_section->vma
10669 			     + htab->splt->output_offset + plt_offset);
10670 	      gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10671 
10672 	      /* ADDIUPC has a span of +/-16MB, check we're in range.  */
10673 	      if (gotpc_offset + 0x1000000 >= 0x2000000)
10674 		{
10675 		  (*_bfd_error_handler)
10676 		    (_("%B: `%A' offset of %ld from `%A' "
10677 		       "beyond the range of ADDIUPC"),
10678 		     output_bfd,
10679 		     htab->sgotplt->output_section,
10680 		     htab->splt->output_section,
10681 		     (long) gotpc_offset);
10682 		  bfd_set_error (bfd_error_no_error);
10683 		  return FALSE;
10684 		}
10685 	      bfd_put_16 (output_bfd,
10686 			  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10687 	      bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10688 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10689 	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10690 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10691 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10692 	    }
10693 	}
10694 
10695       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10696       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10697 					  got_index - 2, h->dynindx,
10698 					  R_MIPS_JUMP_SLOT, got_address);
10699 
10700       /* We distinguish between PLT entries and lazy-binding stubs by
10701 	 giving the former an st_other value of STO_MIPS_PLT.  Set the
10702 	 flag and leave the value if there are any relocations in the
10703 	 binary where pointer equality matters.  */
10704       sym->st_shndx = SHN_UNDEF;
10705       if (h->pointer_equality_needed)
10706 	sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10707       else
10708 	{
10709 	  sym->st_value = 0;
10710 	  sym->st_other = 0;
10711 	}
10712     }
10713 
10714   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10715     {
10716       /* We've decided to create a lazy-binding stub.  */
10717       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10718       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10719       bfd_vma stub_size = htab->function_stub_size;
10720       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10721       bfd_vma isa_bit = micromips_p;
10722       bfd_vma stub_big_size;
10723 
10724       if (!micromips_p)
10725 	stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10726       else if (htab->insn32)
10727 	stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10728       else
10729 	stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10730 
10731       /* This symbol has a stub.  Set it up.  */
10732 
10733       BFD_ASSERT (h->dynindx != -1);
10734 
10735       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10736 
10737       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10738 	 sign extension at runtime in the stub, resulting in a negative
10739 	 index value.  */
10740       if (h->dynindx & ~0x7fffffff)
10741 	return FALSE;
10742 
10743       /* Fill the stub.  */
10744       if (micromips_p)
10745 	{
10746 	  idx = 0;
10747 	  bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10748 				stub + idx);
10749 	  idx += 4;
10750 	  if (htab->insn32)
10751 	    {
10752 	      bfd_put_micromips_32 (output_bfd,
10753 				    STUB_MOVE32_MICROMIPS, stub + idx);
10754 	      idx += 4;
10755 	    }
10756 	  else
10757 	    {
10758 	      bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10759 	      idx += 2;
10760 	    }
10761 	  if (stub_size == stub_big_size)
10762 	    {
10763 	      long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10764 
10765 	      bfd_put_micromips_32 (output_bfd,
10766 				    STUB_LUI_MICROMIPS (dynindx_hi),
10767 				    stub + idx);
10768 	      idx += 4;
10769 	    }
10770 	  if (htab->insn32)
10771 	    {
10772 	      bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10773 				    stub + idx);
10774 	      idx += 4;
10775 	    }
10776 	  else
10777 	    {
10778 	      bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10779 	      idx += 2;
10780 	    }
10781 
10782 	  /* If a large stub is not required and sign extension is not a
10783 	     problem, then use legacy code in the stub.  */
10784 	  if (stub_size == stub_big_size)
10785 	    bfd_put_micromips_32 (output_bfd,
10786 				  STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10787 				  stub + idx);
10788 	  else if (h->dynindx & ~0x7fff)
10789 	    bfd_put_micromips_32 (output_bfd,
10790 				  STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10791 				  stub + idx);
10792 	  else
10793 	    bfd_put_micromips_32 (output_bfd,
10794 				  STUB_LI16S_MICROMIPS (output_bfd,
10795 							h->dynindx),
10796 				  stub + idx);
10797 	}
10798       else
10799 	{
10800 	  idx = 0;
10801 	  bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10802 	  idx += 4;
10803 	  bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
10804 	  idx += 4;
10805 	  if (stub_size == stub_big_size)
10806 	    {
10807 	      bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10808 			  stub + idx);
10809 	      idx += 4;
10810 	    }
10811 	  bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10812 	  idx += 4;
10813 
10814 	  /* If a large stub is not required and sign extension is not a
10815 	     problem, then use legacy code in the stub.  */
10816 	  if (stub_size == stub_big_size)
10817 	    bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10818 			stub + idx);
10819 	  else if (h->dynindx & ~0x7fff)
10820 	    bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10821 			stub + idx);
10822 	  else
10823 	    bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10824 			stub + idx);
10825 	}
10826 
10827       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10828       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10829 	      stub, stub_size);
10830 
10831       /* Mark the symbol as undefined.  stub_offset != -1 occurs
10832 	 only for the referenced symbol.  */
10833       sym->st_shndx = SHN_UNDEF;
10834 
10835       /* The run-time linker uses the st_value field of the symbol
10836 	 to reset the global offset table entry for this external
10837 	 to its stub address when unlinking a shared object.  */
10838       sym->st_value = (htab->sstubs->output_section->vma
10839 		       + htab->sstubs->output_offset
10840 		       + h->plt.plist->stub_offset
10841 		       + isa_bit);
10842       sym->st_other = other;
10843     }
10844 
10845   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10846      refer to the stub, since only the stub uses the standard calling
10847      conventions.  */
10848   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10849     {
10850       BFD_ASSERT (hmips->need_fn_stub);
10851       sym->st_value = (hmips->fn_stub->output_section->vma
10852 		       + hmips->fn_stub->output_offset);
10853       sym->st_size = hmips->fn_stub->size;
10854       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10855     }
10856 
10857   BFD_ASSERT (h->dynindx != -1
10858 	      || h->forced_local);
10859 
10860   sgot = htab->sgot;
10861   g = htab->got_info;
10862   BFD_ASSERT (g != NULL);
10863 
10864   /* Run through the global symbol table, creating GOT entries for all
10865      the symbols that need them.  */
10866   if (hmips->global_got_area != GGA_NONE)
10867     {
10868       bfd_vma offset;
10869       bfd_vma value;
10870 
10871       value = sym->st_value;
10872       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10873       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10874     }
10875 
10876   if (hmips->global_got_area != GGA_NONE && g->next)
10877     {
10878       struct mips_got_entry e, *p;
10879       bfd_vma entry;
10880       bfd_vma offset;
10881 
10882       gg = g;
10883 
10884       e.abfd = output_bfd;
10885       e.symndx = -1;
10886       e.d.h = hmips;
10887       e.tls_type = GOT_TLS_NONE;
10888 
10889       for (g = g->next; g->next != gg; g = g->next)
10890 	{
10891 	  if (g->got_entries
10892 	      && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10893 							   &e)))
10894 	    {
10895 	      offset = p->gotidx;
10896 	      BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10897 	      if (bfd_link_pic (info)
10898 		  || (elf_hash_table (info)->dynamic_sections_created
10899 		      && p->d.h != NULL
10900 		      && p->d.h->root.def_dynamic
10901 		      && !p->d.h->root.def_regular))
10902 		{
10903 		  /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10904 		     the various compatibility problems, it's easier to mock
10905 		     up an R_MIPS_32 or R_MIPS_64 relocation and leave
10906 		     mips_elf_create_dynamic_relocation to calculate the
10907 		     appropriate addend.  */
10908 		  Elf_Internal_Rela rel[3];
10909 
10910 		  memset (rel, 0, sizeof (rel));
10911 		  if (ABI_64_P (output_bfd))
10912 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10913 		  else
10914 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10915 		  rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10916 
10917 		  entry = 0;
10918 		  if (! (mips_elf_create_dynamic_relocation
10919 			 (output_bfd, info, rel,
10920 			  e.d.h, NULL, sym->st_value, &entry, sgot)))
10921 		    return FALSE;
10922 		}
10923 	      else
10924 		entry = sym->st_value;
10925 	      MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10926 	    }
10927 	}
10928     }
10929 
10930   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10931   name = h->root.root.string;
10932   if (h == elf_hash_table (info)->hdynamic
10933       || h == elf_hash_table (info)->hgot)
10934     sym->st_shndx = SHN_ABS;
10935   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10936 	   || strcmp (name, "_DYNAMIC_LINKING") == 0)
10937     {
10938       sym->st_shndx = SHN_ABS;
10939       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10940       sym->st_value = 1;
10941     }
10942   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10943     {
10944       sym->st_shndx = SHN_ABS;
10945       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10946       sym->st_value = elf_gp (output_bfd);
10947     }
10948   else if (SGI_COMPAT (output_bfd))
10949     {
10950       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10951 	  || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10952 	{
10953 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10954 	  sym->st_other = STO_PROTECTED;
10955 	  sym->st_value = 0;
10956 	  sym->st_shndx = SHN_MIPS_DATA;
10957 	}
10958       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10959 	{
10960 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10961 	  sym->st_other = STO_PROTECTED;
10962 	  sym->st_value = mips_elf_hash_table (info)->procedure_count;
10963 	  sym->st_shndx = SHN_ABS;
10964 	}
10965       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10966 	{
10967 	  if (h->type == STT_FUNC)
10968 	    sym->st_shndx = SHN_MIPS_TEXT;
10969 	  else if (h->type == STT_OBJECT)
10970 	    sym->st_shndx = SHN_MIPS_DATA;
10971 	}
10972     }
10973 
10974   /* Emit a copy reloc, if needed.  */
10975   if (h->needs_copy)
10976     {
10977       asection *s;
10978       bfd_vma symval;
10979 
10980       BFD_ASSERT (h->dynindx != -1);
10981       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10982 
10983       s = mips_elf_rel_dyn_section (info, FALSE);
10984       symval = (h->root.u.def.section->output_section->vma
10985 		+ h->root.u.def.section->output_offset
10986 		+ h->root.u.def.value);
10987       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10988 					  h->dynindx, R_MIPS_COPY, symval);
10989     }
10990 
10991   /* Handle the IRIX6-specific symbols.  */
10992   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10993     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10994 
10995   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
10996      to treat compressed symbols like any other.  */
10997   if (ELF_ST_IS_MIPS16 (sym->st_other))
10998     {
10999       BFD_ASSERT (sym->st_value & 1);
11000       sym->st_other -= STO_MIPS16;
11001     }
11002   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11003     {
11004       BFD_ASSERT (sym->st_value & 1);
11005       sym->st_other -= STO_MICROMIPS;
11006     }
11007 
11008   return TRUE;
11009 }
11010 
11011 /* Likewise, for VxWorks.  */
11012 
11013 bfd_boolean
_bfd_mips_vxworks_finish_dynamic_symbol(bfd * output_bfd,struct bfd_link_info * info,struct elf_link_hash_entry * h,Elf_Internal_Sym * sym)11014 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11015 					 struct bfd_link_info *info,
11016 					 struct elf_link_hash_entry *h,
11017 					 Elf_Internal_Sym *sym)
11018 {
11019   bfd *dynobj;
11020   asection *sgot;
11021   struct mips_got_info *g;
11022   struct mips_elf_link_hash_table *htab;
11023   struct mips_elf_link_hash_entry *hmips;
11024 
11025   htab = mips_elf_hash_table (info);
11026   BFD_ASSERT (htab != NULL);
11027   dynobj = elf_hash_table (info)->dynobj;
11028   hmips = (struct mips_elf_link_hash_entry *) h;
11029 
11030   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11031     {
11032       bfd_byte *loc;
11033       bfd_vma plt_address, got_address, got_offset, branch_offset;
11034       Elf_Internal_Rela rel;
11035       static const bfd_vma *plt_entry;
11036       bfd_vma gotplt_index;
11037       bfd_vma plt_offset;
11038 
11039       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11040       gotplt_index = h->plt.plist->gotplt_index;
11041 
11042       BFD_ASSERT (h->dynindx != -1);
11043       BFD_ASSERT (htab->splt != NULL);
11044       BFD_ASSERT (gotplt_index != MINUS_ONE);
11045       BFD_ASSERT (plt_offset <= htab->splt->size);
11046 
11047       /* Calculate the address of the .plt entry.  */
11048       plt_address = (htab->splt->output_section->vma
11049 		     + htab->splt->output_offset
11050 		     + plt_offset);
11051 
11052       /* Calculate the address of the .got.plt entry.  */
11053       got_address = (htab->sgotplt->output_section->vma
11054 		     + htab->sgotplt->output_offset
11055 		     + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11056 
11057       /* Calculate the offset of the .got.plt entry from
11058 	 _GLOBAL_OFFSET_TABLE_.  */
11059       got_offset = mips_elf_gotplt_index (info, h);
11060 
11061       /* Calculate the offset for the branch at the start of the PLT
11062 	 entry.  The branch jumps to the beginning of .plt.  */
11063       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11064 
11065       /* Fill in the initial value of the .got.plt entry.  */
11066       bfd_put_32 (output_bfd, plt_address,
11067 		  (htab->sgotplt->contents
11068 		   + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11069 
11070       /* Find out where the .plt entry should go.  */
11071       loc = htab->splt->contents + plt_offset;
11072 
11073       if (bfd_link_pic (info))
11074 	{
11075 	  plt_entry = mips_vxworks_shared_plt_entry;
11076 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11077 	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11078 	}
11079       else
11080 	{
11081 	  bfd_vma got_address_high, got_address_low;
11082 
11083 	  plt_entry = mips_vxworks_exec_plt_entry;
11084 	  got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11085 	  got_address_low = got_address & 0xffff;
11086 
11087 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11088 	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11089 	  bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11090 	  bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11091 	  bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11092 	  bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11093 	  bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11094 	  bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11095 
11096 	  loc = (htab->srelplt2->contents
11097 		 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11098 
11099 	  /* Emit a relocation for the .got.plt entry.  */
11100 	  rel.r_offset = got_address;
11101 	  rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11102 	  rel.r_addend = plt_offset;
11103 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11104 
11105 	  /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11106 	  loc += sizeof (Elf32_External_Rela);
11107 	  rel.r_offset = plt_address + 8;
11108 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11109 	  rel.r_addend = got_offset;
11110 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11111 
11112 	  /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11113 	  loc += sizeof (Elf32_External_Rela);
11114 	  rel.r_offset += 4;
11115 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11116 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11117 	}
11118 
11119       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11120       loc = (htab->srelplt->contents
11121 	     + gotplt_index * sizeof (Elf32_External_Rela));
11122       rel.r_offset = got_address;
11123       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11124       rel.r_addend = 0;
11125       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11126 
11127       if (!h->def_regular)
11128 	sym->st_shndx = SHN_UNDEF;
11129     }
11130 
11131   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11132 
11133   sgot = htab->sgot;
11134   g = htab->got_info;
11135   BFD_ASSERT (g != NULL);
11136 
11137   /* See if this symbol has an entry in the GOT.  */
11138   if (hmips->global_got_area != GGA_NONE)
11139     {
11140       bfd_vma offset;
11141       Elf_Internal_Rela outrel;
11142       bfd_byte *loc;
11143       asection *s;
11144 
11145       /* Install the symbol value in the GOT.   */
11146       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11147       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11148 
11149       /* Add a dynamic relocation for it.  */
11150       s = mips_elf_rel_dyn_section (info, FALSE);
11151       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11152       outrel.r_offset = (sgot->output_section->vma
11153 			 + sgot->output_offset
11154 			 + offset);
11155       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11156       outrel.r_addend = 0;
11157       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11158     }
11159 
11160   /* Emit a copy reloc, if needed.  */
11161   if (h->needs_copy)
11162     {
11163       Elf_Internal_Rela rel;
11164 
11165       BFD_ASSERT (h->dynindx != -1);
11166 
11167       rel.r_offset = (h->root.u.def.section->output_section->vma
11168 		      + h->root.u.def.section->output_offset
11169 		      + h->root.u.def.value);
11170       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11171       rel.r_addend = 0;
11172       bfd_elf32_swap_reloca_out (output_bfd, &rel,
11173 				 htab->srelbss->contents
11174 				 + (htab->srelbss->reloc_count
11175 				    * sizeof (Elf32_External_Rela)));
11176       ++htab->srelbss->reloc_count;
11177     }
11178 
11179   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11180   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11181     sym->st_value &= ~1;
11182 
11183   return TRUE;
11184 }
11185 
11186 /* Write out a plt0 entry to the beginning of .plt.  */
11187 
11188 static bfd_boolean
mips_finish_exec_plt(bfd * output_bfd,struct bfd_link_info * info)11189 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11190 {
11191   bfd_byte *loc;
11192   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11193   static const bfd_vma *plt_entry;
11194   struct mips_elf_link_hash_table *htab;
11195 
11196   htab = mips_elf_hash_table (info);
11197   BFD_ASSERT (htab != NULL);
11198 
11199   if (ABI_64_P (output_bfd))
11200     plt_entry = mips_n64_exec_plt0_entry;
11201   else if (ABI_N32_P (output_bfd))
11202     plt_entry = mips_n32_exec_plt0_entry;
11203   else if (!htab->plt_header_is_comp)
11204     plt_entry = mips_o32_exec_plt0_entry;
11205   else if (htab->insn32)
11206     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11207   else
11208     plt_entry = micromips_o32_exec_plt0_entry;
11209 
11210   /* Calculate the value of .got.plt.  */
11211   gotplt_value = (htab->sgotplt->output_section->vma
11212 		  + htab->sgotplt->output_offset);
11213   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11214   gotplt_value_low = gotplt_value & 0xffff;
11215 
11216   /* The PLT sequence is not safe for N64 if .got.plt's address can
11217      not be loaded in two instructions.  */
11218   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11219 	      || ~(gotplt_value | 0x7fffffff) == 0);
11220 
11221   /* Install the PLT header.  */
11222   loc = htab->splt->contents;
11223   if (plt_entry == micromips_o32_exec_plt0_entry)
11224     {
11225       bfd_vma gotpc_offset;
11226       bfd_vma loc_address;
11227       size_t i;
11228 
11229       BFD_ASSERT (gotplt_value % 4 == 0);
11230 
11231       loc_address = (htab->splt->output_section->vma
11232 		     + htab->splt->output_offset);
11233       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11234 
11235       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11236       if (gotpc_offset + 0x1000000 >= 0x2000000)
11237 	{
11238 	  (*_bfd_error_handler)
11239 	    (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11240 	     output_bfd,
11241 	     htab->sgotplt->output_section,
11242 	     htab->splt->output_section,
11243 	     (long) gotpc_offset);
11244 	  bfd_set_error (bfd_error_no_error);
11245 	  return FALSE;
11246 	}
11247       bfd_put_16 (output_bfd,
11248 		  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11249       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11250       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11251 	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11252     }
11253   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11254     {
11255       size_t i;
11256 
11257       bfd_put_16 (output_bfd, plt_entry[0], loc);
11258       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11259       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11260       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11261       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11262       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11263       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11264 	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11265     }
11266   else
11267     {
11268       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11269       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11270       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11271       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11272       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11273       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11274       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11275       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11276     }
11277 
11278   return TRUE;
11279 }
11280 
11281 /* Install the PLT header for a VxWorks executable and finalize the
11282    contents of .rela.plt.unloaded.  */
11283 
11284 static void
mips_vxworks_finish_exec_plt(bfd * output_bfd,struct bfd_link_info * info)11285 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11286 {
11287   Elf_Internal_Rela rela;
11288   bfd_byte *loc;
11289   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11290   static const bfd_vma *plt_entry;
11291   struct mips_elf_link_hash_table *htab;
11292 
11293   htab = mips_elf_hash_table (info);
11294   BFD_ASSERT (htab != NULL);
11295 
11296   plt_entry = mips_vxworks_exec_plt0_entry;
11297 
11298   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11299   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11300 	       + htab->root.hgot->root.u.def.section->output_offset
11301 	       + htab->root.hgot->root.u.def.value);
11302 
11303   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11304   got_value_low = got_value & 0xffff;
11305 
11306   /* Calculate the address of the PLT header.  */
11307   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11308 
11309   /* Install the PLT header.  */
11310   loc = htab->splt->contents;
11311   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11312   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11313   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11314   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11315   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11316   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11317 
11318   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11319   loc = htab->srelplt2->contents;
11320   rela.r_offset = plt_address;
11321   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11322   rela.r_addend = 0;
11323   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11324   loc += sizeof (Elf32_External_Rela);
11325 
11326   /* Output the relocation for the following addiu of
11327      %lo(_GLOBAL_OFFSET_TABLE_).  */
11328   rela.r_offset += 4;
11329   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11330   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11331   loc += sizeof (Elf32_External_Rela);
11332 
11333   /* Fix up the remaining relocations.  They may have the wrong
11334      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11335      in which symbols were output.  */
11336   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11337     {
11338       Elf_Internal_Rela rel;
11339 
11340       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11341       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11342       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11343       loc += sizeof (Elf32_External_Rela);
11344 
11345       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11346       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11347       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11348       loc += sizeof (Elf32_External_Rela);
11349 
11350       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11351       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11352       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11353       loc += sizeof (Elf32_External_Rela);
11354     }
11355 }
11356 
11357 /* Install the PLT header for a VxWorks shared library.  */
11358 
11359 static void
mips_vxworks_finish_shared_plt(bfd * output_bfd,struct bfd_link_info * info)11360 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11361 {
11362   unsigned int i;
11363   struct mips_elf_link_hash_table *htab;
11364 
11365   htab = mips_elf_hash_table (info);
11366   BFD_ASSERT (htab != NULL);
11367 
11368   /* We just need to copy the entry byte-by-byte.  */
11369   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11370     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11371 		htab->splt->contents + i * 4);
11372 }
11373 
11374 /* Finish up the dynamic sections.  */
11375 
11376 bfd_boolean
_bfd_mips_elf_finish_dynamic_sections(bfd * output_bfd,struct bfd_link_info * info)11377 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11378 				       struct bfd_link_info *info)
11379 {
11380   bfd *dynobj;
11381   asection *sdyn;
11382   asection *sgot;
11383   struct mips_got_info *gg, *g;
11384   struct mips_elf_link_hash_table *htab;
11385 
11386   htab = mips_elf_hash_table (info);
11387   BFD_ASSERT (htab != NULL);
11388 
11389   dynobj = elf_hash_table (info)->dynobj;
11390 
11391   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11392 
11393   sgot = htab->sgot;
11394   gg = htab->got_info;
11395 
11396   if (elf_hash_table (info)->dynamic_sections_created)
11397     {
11398       bfd_byte *b;
11399       int dyn_to_skip = 0, dyn_skipped = 0;
11400 
11401       BFD_ASSERT (sdyn != NULL);
11402       BFD_ASSERT (gg != NULL);
11403 
11404       g = mips_elf_bfd_got (output_bfd, FALSE);
11405       BFD_ASSERT (g != NULL);
11406 
11407       for (b = sdyn->contents;
11408 	   b < sdyn->contents + sdyn->size;
11409 	   b += MIPS_ELF_DYN_SIZE (dynobj))
11410 	{
11411 	  Elf_Internal_Dyn dyn;
11412 	  const char *name;
11413 	  size_t elemsize;
11414 	  asection *s;
11415 	  bfd_boolean swap_out_p;
11416 
11417 	  /* Read in the current dynamic entry.  */
11418 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11419 
11420 	  /* Assume that we're going to modify it and write it out.  */
11421 	  swap_out_p = TRUE;
11422 
11423 	  switch (dyn.d_tag)
11424 	    {
11425 	    case DT_RELENT:
11426 	      dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11427 	      break;
11428 
11429 	    case DT_RELAENT:
11430 	      BFD_ASSERT (htab->is_vxworks);
11431 	      dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11432 	      break;
11433 
11434 	    case DT_STRSZ:
11435 	      /* Rewrite DT_STRSZ.  */
11436 	      dyn.d_un.d_val =
11437 		_bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11438 	      break;
11439 
11440 	    case DT_PLTGOT:
11441 	      s = htab->sgot;
11442 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11443 	      break;
11444 
11445 	    case DT_MIPS_PLTGOT:
11446 	      s = htab->sgotplt;
11447 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11448 	      break;
11449 
11450 	    case DT_MIPS_RLD_VERSION:
11451 	      dyn.d_un.d_val = 1; /* XXX */
11452 	      break;
11453 
11454 	    case DT_MIPS_FLAGS:
11455 	      dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11456 	      break;
11457 
11458 	    case DT_MIPS_TIME_STAMP:
11459 	      {
11460 		time_t t;
11461 		time (&t);
11462 		dyn.d_un.d_val = t;
11463 	      }
11464 	      break;
11465 
11466 	    case DT_MIPS_ICHECKSUM:
11467 	      /* XXX FIXME: */
11468 	      swap_out_p = FALSE;
11469 	      break;
11470 
11471 	    case DT_MIPS_IVERSION:
11472 	      /* XXX FIXME: */
11473 	      swap_out_p = FALSE;
11474 	      break;
11475 
11476 	    case DT_MIPS_BASE_ADDRESS:
11477 	      s = output_bfd->sections;
11478 	      BFD_ASSERT (s != NULL);
11479 	      dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11480 	      break;
11481 
11482 	    case DT_MIPS_LOCAL_GOTNO:
11483 	      dyn.d_un.d_val = g->local_gotno;
11484 	      break;
11485 
11486 	    case DT_MIPS_UNREFEXTNO:
11487 	      /* The index into the dynamic symbol table which is the
11488 		 entry of the first external symbol that is not
11489 		 referenced within the same object.  */
11490 	      dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11491 	      break;
11492 
11493 	    case DT_MIPS_GOTSYM:
11494 	      if (htab->global_gotsym)
11495 		{
11496 		  dyn.d_un.d_val = htab->global_gotsym->dynindx;
11497 		  break;
11498 		}
11499 	      /* In case if we don't have global got symbols we default
11500 		 to setting DT_MIPS_GOTSYM to the same value as
11501 		 DT_MIPS_SYMTABNO, so we just fall through.  */
11502 
11503 	    case DT_MIPS_SYMTABNO:
11504 	      name = ".dynsym";
11505 	      elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11506 	      s = bfd_get_linker_section (dynobj, name);
11507 
11508 	      if (s != NULL)
11509 		dyn.d_un.d_val = s->size / elemsize;
11510 	      else
11511 		dyn.d_un.d_val = 0;
11512 	      break;
11513 
11514 	    case DT_MIPS_HIPAGENO:
11515 	      dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11516 	      break;
11517 
11518 	    case DT_MIPS_RLD_MAP:
11519 	      {
11520 		struct elf_link_hash_entry *h;
11521 		h = mips_elf_hash_table (info)->rld_symbol;
11522 		if (!h)
11523 		  {
11524 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11525 		    swap_out_p = FALSE;
11526 		    break;
11527 		  }
11528 		s = h->root.u.def.section;
11529 
11530 		/* The MIPS_RLD_MAP tag stores the absolute address of the
11531 		   debug pointer.  */
11532 		dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11533 				  + h->root.u.def.value);
11534 	      }
11535 	      break;
11536 
11537 	    case DT_MIPS_RLD_MAP_REL:
11538 	      {
11539 		struct elf_link_hash_entry *h;
11540 		bfd_vma dt_addr, rld_addr;
11541 		h = mips_elf_hash_table (info)->rld_symbol;
11542 		if (!h)
11543 		  {
11544 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11545 		    swap_out_p = FALSE;
11546 		    break;
11547 		  }
11548 		s = h->root.u.def.section;
11549 
11550 		/* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11551 		   pointer, relative to the address of the tag.  */
11552 		dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11553 			   + (b - sdyn->contents));
11554 		rld_addr = (s->output_section->vma + s->output_offset
11555 			    + h->root.u.def.value);
11556 		dyn.d_un.d_ptr = rld_addr - dt_addr;
11557 	      }
11558 	      break;
11559 
11560 	    case DT_MIPS_OPTIONS:
11561 	      s = (bfd_get_section_by_name
11562 		   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11563 	      dyn.d_un.d_ptr = s->vma;
11564 	      break;
11565 
11566 	    case DT_RELASZ:
11567 	      BFD_ASSERT (htab->is_vxworks);
11568 	      /* The count does not include the JUMP_SLOT relocations.  */
11569 	      if (htab->srelplt)
11570 		dyn.d_un.d_val -= htab->srelplt->size;
11571 	      break;
11572 
11573 	    case DT_PLTREL:
11574 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11575 	      if (htab->is_vxworks)
11576 		dyn.d_un.d_val = DT_RELA;
11577 	      else
11578 		dyn.d_un.d_val = DT_REL;
11579 	      break;
11580 
11581 	    case DT_PLTRELSZ:
11582 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11583 	      dyn.d_un.d_val = htab->srelplt->size;
11584 	      break;
11585 
11586 	    case DT_JMPREL:
11587 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11588 	      dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
11589 				+ htab->srelplt->output_offset);
11590 	      break;
11591 
11592 	    case DT_TEXTREL:
11593 	      /* If we didn't need any text relocations after all, delete
11594 		 the dynamic tag.  */
11595 	      if (!(info->flags & DF_TEXTREL))
11596 		{
11597 		  dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11598 		  swap_out_p = FALSE;
11599 		}
11600 	      break;
11601 
11602 	    case DT_FLAGS:
11603 	      /* If we didn't need any text relocations after all, clear
11604 		 DF_TEXTREL from DT_FLAGS.  */
11605 	      if (!(info->flags & DF_TEXTREL))
11606 		dyn.d_un.d_val &= ~DF_TEXTREL;
11607 	      else
11608 		swap_out_p = FALSE;
11609 	      break;
11610 
11611 	    default:
11612 	      swap_out_p = FALSE;
11613 	      if (htab->is_vxworks
11614 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11615 		swap_out_p = TRUE;
11616 	      break;
11617 	    }
11618 
11619 	  if (swap_out_p || dyn_skipped)
11620 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11621 	      (dynobj, &dyn, b - dyn_skipped);
11622 
11623 	  if (dyn_to_skip)
11624 	    {
11625 	      dyn_skipped += dyn_to_skip;
11626 	      dyn_to_skip = 0;
11627 	    }
11628 	}
11629 
11630       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
11631       if (dyn_skipped > 0)
11632 	memset (b - dyn_skipped, 0, dyn_skipped);
11633     }
11634 
11635   if (sgot != NULL && sgot->size > 0
11636       && !bfd_is_abs_section (sgot->output_section))
11637     {
11638       if (htab->is_vxworks)
11639 	{
11640 	  /* The first entry of the global offset table points to the
11641 	     ".dynamic" section.  The second is initialized by the
11642 	     loader and contains the shared library identifier.
11643 	     The third is also initialized by the loader and points
11644 	     to the lazy resolution stub.  */
11645 	  MIPS_ELF_PUT_WORD (output_bfd,
11646 			     sdyn->output_offset + sdyn->output_section->vma,
11647 			     sgot->contents);
11648 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
11649 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11650 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
11651 			     sgot->contents
11652 			     + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11653 	}
11654       else
11655 	{
11656 	  /* The first entry of the global offset table will be filled at
11657 	     runtime. The second entry will be used by some runtime loaders.
11658 	     This isn't the case of IRIX rld.  */
11659 	  MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11660 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11661 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11662 	}
11663 
11664       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11665 	 = MIPS_ELF_GOT_SIZE (output_bfd);
11666     }
11667 
11668   /* Generate dynamic relocations for the non-primary gots.  */
11669   if (gg != NULL && gg->next)
11670     {
11671       Elf_Internal_Rela rel[3];
11672       bfd_vma addend = 0;
11673 
11674       memset (rel, 0, sizeof (rel));
11675       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11676 
11677       for (g = gg->next; g->next != gg; g = g->next)
11678 	{
11679 	  bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11680 	    + g->next->tls_gotno;
11681 
11682 	  MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11683 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11684 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11685 			     sgot->contents
11686 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11687 
11688 	  if (! bfd_link_pic (info))
11689 	    continue;
11690 
11691 	  for (; got_index < g->local_gotno; got_index++)
11692 	    {
11693 	      if (got_index >= g->assigned_low_gotno
11694 		  && got_index <= g->assigned_high_gotno)
11695 		continue;
11696 
11697 	      rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11698 		= got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11699 	      if (!(mips_elf_create_dynamic_relocation
11700 		    (output_bfd, info, rel, NULL,
11701 		     bfd_abs_section_ptr,
11702 		     0, &addend, sgot)))
11703 		return FALSE;
11704 	      BFD_ASSERT (addend == 0);
11705 	    }
11706 	}
11707     }
11708 
11709   /* The generation of dynamic relocations for the non-primary gots
11710      adds more dynamic relocations.  We cannot count them until
11711      here.  */
11712 
11713   if (elf_hash_table (info)->dynamic_sections_created)
11714     {
11715       bfd_byte *b;
11716       bfd_boolean swap_out_p;
11717 
11718       BFD_ASSERT (sdyn != NULL);
11719 
11720       for (b = sdyn->contents;
11721 	   b < sdyn->contents + sdyn->size;
11722 	   b += MIPS_ELF_DYN_SIZE (dynobj))
11723 	{
11724 	  Elf_Internal_Dyn dyn;
11725 	  asection *s;
11726 
11727 	  /* Read in the current dynamic entry.  */
11728 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11729 
11730 	  /* Assume that we're going to modify it and write it out.  */
11731 	  swap_out_p = TRUE;
11732 
11733 	  switch (dyn.d_tag)
11734 	    {
11735 	    case DT_RELSZ:
11736 	      /* Reduce DT_RELSZ to account for any relocations we
11737 		 decided not to make.  This is for the n64 irix rld,
11738 		 which doesn't seem to apply any relocations if there
11739 		 are trailing null entries.  */
11740 	      s = mips_elf_rel_dyn_section (info, FALSE);
11741 	      dyn.d_un.d_val = (s->reloc_count
11742 				* (ABI_64_P (output_bfd)
11743 				   ? sizeof (Elf64_Mips_External_Rel)
11744 				   : sizeof (Elf32_External_Rel)));
11745 	      /* Adjust the section size too.  Tools like the prelinker
11746 		 can reasonably expect the values to the same.  */
11747 	      elf_section_data (s->output_section)->this_hdr.sh_size
11748 		= dyn.d_un.d_val;
11749 	      break;
11750 
11751 	    default:
11752 	      swap_out_p = FALSE;
11753 	      break;
11754 	    }
11755 
11756 	  if (swap_out_p)
11757 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11758 	      (dynobj, &dyn, b);
11759 	}
11760     }
11761 
11762   {
11763     asection *s;
11764     Elf32_compact_rel cpt;
11765 
11766     if (SGI_COMPAT (output_bfd))
11767       {
11768 	/* Write .compact_rel section out.  */
11769 	s = bfd_get_linker_section (dynobj, ".compact_rel");
11770 	if (s != NULL)
11771 	  {
11772 	    cpt.id1 = 1;
11773 	    cpt.num = s->reloc_count;
11774 	    cpt.id2 = 2;
11775 	    cpt.offset = (s->output_section->filepos
11776 			  + sizeof (Elf32_External_compact_rel));
11777 	    cpt.reserved0 = 0;
11778 	    cpt.reserved1 = 0;
11779 	    bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11780 					    ((Elf32_External_compact_rel *)
11781 					     s->contents));
11782 
11783 	    /* Clean up a dummy stub function entry in .text.  */
11784 	    if (htab->sstubs != NULL)
11785 	      {
11786 		file_ptr dummy_offset;
11787 
11788 		BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11789 		dummy_offset = htab->sstubs->size - htab->function_stub_size;
11790 		memset (htab->sstubs->contents + dummy_offset, 0,
11791 			htab->function_stub_size);
11792 	      }
11793 	  }
11794       }
11795 
11796     /* The psABI says that the dynamic relocations must be sorted in
11797        increasing order of r_symndx.  The VxWorks EABI doesn't require
11798        this, and because the code below handles REL rather than RELA
11799        relocations, using it for VxWorks would be outright harmful.  */
11800     if (!htab->is_vxworks)
11801       {
11802 	s = mips_elf_rel_dyn_section (info, FALSE);
11803 	if (s != NULL
11804 	    && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11805 	  {
11806 	    reldyn_sorting_bfd = output_bfd;
11807 
11808 	    if (ABI_64_P (output_bfd))
11809 	      qsort ((Elf64_External_Rel *) s->contents + 1,
11810 		     s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11811 		     sort_dynamic_relocs_64);
11812 	    else
11813 	      qsort ((Elf32_External_Rel *) s->contents + 1,
11814 		     s->reloc_count - 1, sizeof (Elf32_External_Rel),
11815 		     sort_dynamic_relocs);
11816 	  }
11817       }
11818   }
11819 
11820   if (htab->splt && htab->splt->size > 0)
11821     {
11822       if (htab->is_vxworks)
11823 	{
11824 	  if (bfd_link_pic (info))
11825 	    mips_vxworks_finish_shared_plt (output_bfd, info);
11826 	  else
11827 	    mips_vxworks_finish_exec_plt (output_bfd, info);
11828 	}
11829       else
11830 	{
11831 	  BFD_ASSERT (!bfd_link_pic (info));
11832 	  if (!mips_finish_exec_plt (output_bfd, info))
11833 	    return FALSE;
11834 	}
11835     }
11836   return TRUE;
11837 }
11838 
11839 
11840 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
11841 
11842 static void
mips_set_isa_flags(bfd * abfd)11843 mips_set_isa_flags (bfd *abfd)
11844 {
11845   flagword val;
11846 
11847   switch (bfd_get_mach (abfd))
11848     {
11849     default:
11850     case bfd_mach_mips3000:
11851       val = E_MIPS_ARCH_1;
11852       break;
11853 
11854     case bfd_mach_mips3900:
11855       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
11856       break;
11857 
11858     case bfd_mach_mips6000:
11859       val = E_MIPS_ARCH_2;
11860       break;
11861 
11862     case bfd_mach_mips4000:
11863     case bfd_mach_mips4300:
11864     case bfd_mach_mips4400:
11865     case bfd_mach_mips4600:
11866       val = E_MIPS_ARCH_3;
11867       break;
11868 
11869     case bfd_mach_mips4010:
11870       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11871       break;
11872 
11873     case bfd_mach_mips4100:
11874       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11875       break;
11876 
11877     case bfd_mach_mips4111:
11878       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11879       break;
11880 
11881     case bfd_mach_mips4120:
11882       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11883       break;
11884 
11885     case bfd_mach_mips4650:
11886       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11887       break;
11888 
11889     case bfd_mach_mips5400:
11890       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11891       break;
11892 
11893     case bfd_mach_mips5500:
11894       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11895       break;
11896 
11897     case bfd_mach_mips5900:
11898       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11899       break;
11900 
11901     case bfd_mach_mips9000:
11902       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11903       break;
11904 
11905     case bfd_mach_mips5000:
11906     case bfd_mach_mips7000:
11907     case bfd_mach_mips8000:
11908     case bfd_mach_mips10000:
11909     case bfd_mach_mips12000:
11910     case bfd_mach_mips14000:
11911     case bfd_mach_mips16000:
11912       val = E_MIPS_ARCH_4;
11913       break;
11914 
11915     case bfd_mach_mips5:
11916       val = E_MIPS_ARCH_5;
11917       break;
11918 
11919     case bfd_mach_mips_loongson_2e:
11920       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11921       break;
11922 
11923     case bfd_mach_mips_loongson_2f:
11924       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11925       break;
11926 
11927     case bfd_mach_mips_sb1:
11928       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11929       break;
11930 
11931     case bfd_mach_mips_loongson_3a:
11932       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
11933       break;
11934 
11935     case bfd_mach_mips_octeon:
11936     case bfd_mach_mips_octeonp:
11937       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11938       break;
11939 
11940     case bfd_mach_mips_octeon3:
11941       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
11942       break;
11943 
11944     case bfd_mach_mips_xlr:
11945       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11946       break;
11947 
11948     case bfd_mach_mips_octeon2:
11949       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11950       break;
11951 
11952     case bfd_mach_mipsisa32:
11953       val = E_MIPS_ARCH_32;
11954       break;
11955 
11956     case bfd_mach_mipsisa64:
11957       val = E_MIPS_ARCH_64;
11958       break;
11959 
11960     case bfd_mach_mipsisa32r2:
11961     case bfd_mach_mipsisa32r3:
11962     case bfd_mach_mipsisa32r5:
11963       val = E_MIPS_ARCH_32R2;
11964       break;
11965 
11966     case bfd_mach_mipsisa64r2:
11967     case bfd_mach_mipsisa64r3:
11968     case bfd_mach_mipsisa64r5:
11969       val = E_MIPS_ARCH_64R2;
11970       break;
11971 
11972     case bfd_mach_mipsisa32r6:
11973       val = E_MIPS_ARCH_32R6;
11974       break;
11975 
11976     case bfd_mach_mipsisa64r6:
11977       val = E_MIPS_ARCH_64R6;
11978       break;
11979     }
11980   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11981   elf_elfheader (abfd)->e_flags |= val;
11982 
11983 }
11984 
11985 
11986 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
11987    Don't do so for code sections.  We want to keep ordering of HI16/LO16
11988    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
11989    relocs to be sorted.  */
11990 
11991 bfd_boolean
_bfd_mips_elf_sort_relocs_p(asection * sec)11992 _bfd_mips_elf_sort_relocs_p (asection *sec)
11993 {
11994   return (sec->flags & SEC_CODE) == 0;
11995 }
11996 
11997 
11998 /* The final processing done just before writing out a MIPS ELF object
11999    file.  This gets the MIPS architecture right based on the machine
12000    number.  This is used by both the 32-bit and the 64-bit ABI.  */
12001 
12002 void
_bfd_mips_elf_final_write_processing(bfd * abfd,bfd_boolean linker ATTRIBUTE_UNUSED)12003 _bfd_mips_elf_final_write_processing (bfd *abfd,
12004 				      bfd_boolean linker ATTRIBUTE_UNUSED)
12005 {
12006   unsigned int i;
12007   Elf_Internal_Shdr **hdrpp;
12008   const char *name;
12009   asection *sec;
12010 
12011   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12012      is nonzero.  This is for compatibility with old objects, which used
12013      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
12014   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12015     mips_set_isa_flags (abfd);
12016 
12017   /* Set the sh_info field for .gptab sections and other appropriate
12018      info for each special section.  */
12019   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12020        i < elf_numsections (abfd);
12021        i++, hdrpp++)
12022     {
12023       switch ((*hdrpp)->sh_type)
12024 	{
12025 	case SHT_MIPS_MSYM:
12026 	case SHT_MIPS_LIBLIST:
12027 	  sec = bfd_get_section_by_name (abfd, ".dynstr");
12028 	  if (sec != NULL)
12029 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12030 	  break;
12031 
12032 	case SHT_MIPS_GPTAB:
12033 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12034 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12035 	  BFD_ASSERT (name != NULL
12036 		      && CONST_STRNEQ (name, ".gptab."));
12037 	  sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12038 	  BFD_ASSERT (sec != NULL);
12039 	  (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12040 	  break;
12041 
12042 	case SHT_MIPS_CONTENT:
12043 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12044 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12045 	  BFD_ASSERT (name != NULL
12046 		      && CONST_STRNEQ (name, ".MIPS.content"));
12047 	  sec = bfd_get_section_by_name (abfd,
12048 					 name + sizeof ".MIPS.content" - 1);
12049 	  BFD_ASSERT (sec != NULL);
12050 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12051 	  break;
12052 
12053 	case SHT_MIPS_SYMBOL_LIB:
12054 	  sec = bfd_get_section_by_name (abfd, ".dynsym");
12055 	  if (sec != NULL)
12056 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12057 	  sec = bfd_get_section_by_name (abfd, ".liblist");
12058 	  if (sec != NULL)
12059 	    (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12060 	  break;
12061 
12062 	case SHT_MIPS_EVENTS:
12063 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12064 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12065 	  BFD_ASSERT (name != NULL);
12066 	  if (CONST_STRNEQ (name, ".MIPS.events"))
12067 	    sec = bfd_get_section_by_name (abfd,
12068 					   name + sizeof ".MIPS.events" - 1);
12069 	  else
12070 	    {
12071 	      BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12072 	      sec = bfd_get_section_by_name (abfd,
12073 					     (name
12074 					      + sizeof ".MIPS.post_rel" - 1));
12075 	    }
12076 	  BFD_ASSERT (sec != NULL);
12077 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12078 	  break;
12079 
12080 	}
12081     }
12082 }
12083 
12084 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12085    segments.  */
12086 
12087 int
_bfd_mips_elf_additional_program_headers(bfd * abfd,struct bfd_link_info * info ATTRIBUTE_UNUSED)12088 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12089 					  struct bfd_link_info *info ATTRIBUTE_UNUSED)
12090 {
12091   asection *s;
12092   int ret = 0;
12093 
12094   /* See if we need a PT_MIPS_REGINFO segment.  */
12095   s = bfd_get_section_by_name (abfd, ".reginfo");
12096   if (s && (s->flags & SEC_LOAD))
12097     ++ret;
12098 
12099   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12100   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12101     ++ret;
12102 
12103   /* See if we need a PT_MIPS_OPTIONS segment.  */
12104   if (IRIX_COMPAT (abfd) == ict_irix6
12105       && bfd_get_section_by_name (abfd,
12106 				  MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12107     ++ret;
12108 
12109   /* See if we need a PT_MIPS_RTPROC segment.  */
12110   if (IRIX_COMPAT (abfd) == ict_irix5
12111       && bfd_get_section_by_name (abfd, ".dynamic")
12112       && bfd_get_section_by_name (abfd, ".mdebug"))
12113     ++ret;
12114 
12115   /* Allocate a PT_NULL header in dynamic objects.  See
12116      _bfd_mips_elf_modify_segment_map for details.  */
12117   if (!SGI_COMPAT (abfd)
12118       && bfd_get_section_by_name (abfd, ".dynamic"))
12119     ++ret;
12120 
12121   return ret;
12122 }
12123 
12124 /* Modify the segment map for an IRIX5 executable.  */
12125 
12126 bfd_boolean
_bfd_mips_elf_modify_segment_map(bfd * abfd,struct bfd_link_info * info)12127 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12128 				  struct bfd_link_info *info)
12129 {
12130   asection *s;
12131   struct elf_segment_map *m, **pm;
12132   bfd_size_type amt;
12133 
12134   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12135      segment.  */
12136   s = bfd_get_section_by_name (abfd, ".reginfo");
12137   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12138     {
12139       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12140 	if (m->p_type == PT_MIPS_REGINFO)
12141 	  break;
12142       if (m == NULL)
12143 	{
12144 	  amt = sizeof *m;
12145 	  m = bfd_zalloc (abfd, amt);
12146 	  if (m == NULL)
12147 	    return FALSE;
12148 
12149 	  m->p_type = PT_MIPS_REGINFO;
12150 	  m->count = 1;
12151 	  m->sections[0] = s;
12152 
12153 	  /* We want to put it after the PHDR and INTERP segments.  */
12154 	  pm = &elf_seg_map (abfd);
12155 	  while (*pm != NULL
12156 		 && ((*pm)->p_type == PT_PHDR
12157 		     || (*pm)->p_type == PT_INTERP))
12158 	    pm = &(*pm)->next;
12159 
12160 	  m->next = *pm;
12161 	  *pm = m;
12162 	}
12163     }
12164 
12165   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12166      segment.  */
12167   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12168   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12169     {
12170       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12171 	if (m->p_type == PT_MIPS_ABIFLAGS)
12172 	  break;
12173       if (m == NULL)
12174 	{
12175 	  amt = sizeof *m;
12176 	  m = bfd_zalloc (abfd, amt);
12177 	  if (m == NULL)
12178 	    return FALSE;
12179 
12180 	  m->p_type = PT_MIPS_ABIFLAGS;
12181 	  m->count = 1;
12182 	  m->sections[0] = s;
12183 
12184 	  /* We want to put it after the PHDR and INTERP segments.  */
12185 	  pm = &elf_seg_map (abfd);
12186 	  while (*pm != NULL
12187 		 && ((*pm)->p_type == PT_PHDR
12188 		     || (*pm)->p_type == PT_INTERP))
12189 	    pm = &(*pm)->next;
12190 
12191 	  m->next = *pm;
12192 	  *pm = m;
12193 	}
12194     }
12195 
12196   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12197      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12198      PT_MIPS_OPTIONS segment immediately following the program header
12199      table.  */
12200   if (NEWABI_P (abfd)
12201       /* On non-IRIX6 new abi, we'll have already created a segment
12202 	 for this section, so don't create another.  I'm not sure this
12203 	 is not also the case for IRIX 6, but I can't test it right
12204 	 now.  */
12205       && IRIX_COMPAT (abfd) == ict_irix6)
12206     {
12207       for (s = abfd->sections; s; s = s->next)
12208 	if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12209 	  break;
12210 
12211       if (s)
12212 	{
12213 	  struct elf_segment_map *options_segment;
12214 
12215 	  pm = &elf_seg_map (abfd);
12216 	  while (*pm != NULL
12217 		 && ((*pm)->p_type == PT_PHDR
12218 		     || (*pm)->p_type == PT_INTERP))
12219 	    pm = &(*pm)->next;
12220 
12221 	  if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12222 	    {
12223 	      amt = sizeof (struct elf_segment_map);
12224 	      options_segment = bfd_zalloc (abfd, amt);
12225 	      options_segment->next = *pm;
12226 	      options_segment->p_type = PT_MIPS_OPTIONS;
12227 	      options_segment->p_flags = PF_R;
12228 	      options_segment->p_flags_valid = TRUE;
12229 	      options_segment->count = 1;
12230 	      options_segment->sections[0] = s;
12231 	      *pm = options_segment;
12232 	    }
12233 	}
12234     }
12235   else
12236     {
12237       if (IRIX_COMPAT (abfd) == ict_irix5)
12238 	{
12239 	  /* If there are .dynamic and .mdebug sections, we make a room
12240 	     for the RTPROC header.  FIXME: Rewrite without section names.  */
12241 	  if (bfd_get_section_by_name (abfd, ".interp") == NULL
12242 	      && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12243 	      && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12244 	    {
12245 	      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12246 		if (m->p_type == PT_MIPS_RTPROC)
12247 		  break;
12248 	      if (m == NULL)
12249 		{
12250 		  amt = sizeof *m;
12251 		  m = bfd_zalloc (abfd, amt);
12252 		  if (m == NULL)
12253 		    return FALSE;
12254 
12255 		  m->p_type = PT_MIPS_RTPROC;
12256 
12257 		  s = bfd_get_section_by_name (abfd, ".rtproc");
12258 		  if (s == NULL)
12259 		    {
12260 		      m->count = 0;
12261 		      m->p_flags = 0;
12262 		      m->p_flags_valid = 1;
12263 		    }
12264 		  else
12265 		    {
12266 		      m->count = 1;
12267 		      m->sections[0] = s;
12268 		    }
12269 
12270 		  /* We want to put it after the DYNAMIC segment.  */
12271 		  pm = &elf_seg_map (abfd);
12272 		  while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12273 		    pm = &(*pm)->next;
12274 		  if (*pm != NULL)
12275 		    pm = &(*pm)->next;
12276 
12277 		  m->next = *pm;
12278 		  *pm = m;
12279 		}
12280 	    }
12281 	}
12282       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12283 	 .dynstr, .dynsym, and .hash sections, and everything in
12284 	 between.  */
12285       for (pm = &elf_seg_map (abfd); *pm != NULL;
12286 	   pm = &(*pm)->next)
12287 	if ((*pm)->p_type == PT_DYNAMIC)
12288 	  break;
12289       m = *pm;
12290       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12291 	 glibc's dynamic linker has traditionally derived the number of
12292 	 tags from the p_filesz field, and sometimes allocates stack
12293 	 arrays of that size.  An overly-big PT_DYNAMIC segment can
12294 	 be actively harmful in such cases.  Making PT_DYNAMIC contain
12295 	 other sections can also make life hard for the prelinker,
12296 	 which might move one of the other sections to a different
12297 	 PT_LOAD segment.  */
12298       if (SGI_COMPAT (abfd)
12299 	  && m != NULL
12300 	  && m->count == 1
12301 	  && strcmp (m->sections[0]->name, ".dynamic") == 0)
12302 	{
12303 	  static const char *sec_names[] =
12304 	  {
12305 	    ".dynamic", ".dynstr", ".dynsym", ".hash"
12306 	  };
12307 	  bfd_vma low, high;
12308 	  unsigned int i, c;
12309 	  struct elf_segment_map *n;
12310 
12311 	  low = ~(bfd_vma) 0;
12312 	  high = 0;
12313 	  for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12314 	    {
12315 	      s = bfd_get_section_by_name (abfd, sec_names[i]);
12316 	      if (s != NULL && (s->flags & SEC_LOAD) != 0)
12317 		{
12318 		  bfd_size_type sz;
12319 
12320 		  if (low > s->vma)
12321 		    low = s->vma;
12322 		  sz = s->size;
12323 		  if (high < s->vma + sz)
12324 		    high = s->vma + sz;
12325 		}
12326 	    }
12327 
12328 	  c = 0;
12329 	  for (s = abfd->sections; s != NULL; s = s->next)
12330 	    if ((s->flags & SEC_LOAD) != 0
12331 		&& s->vma >= low
12332 		&& s->vma + s->size <= high)
12333 	      ++c;
12334 
12335 	  amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12336 	  n = bfd_zalloc (abfd, amt);
12337 	  if (n == NULL)
12338 	    return FALSE;
12339 	  *n = *m;
12340 	  n->count = c;
12341 
12342 	  i = 0;
12343 	  for (s = abfd->sections; s != NULL; s = s->next)
12344 	    {
12345 	      if ((s->flags & SEC_LOAD) != 0
12346 		  && s->vma >= low
12347 		  && s->vma + s->size <= high)
12348 		{
12349 		  n->sections[i] = s;
12350 		  ++i;
12351 		}
12352 	    }
12353 
12354 	  *pm = n;
12355 	}
12356     }
12357 
12358   /* Allocate a spare program header in dynamic objects so that tools
12359      like the prelinker can add an extra PT_LOAD entry.
12360 
12361      If the prelinker needs to make room for a new PT_LOAD entry, its
12362      standard procedure is to move the first (read-only) sections into
12363      the new (writable) segment.  However, the MIPS ABI requires
12364      .dynamic to be in a read-only segment, and the section will often
12365      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12366 
12367      Although the prelinker could in principle move .dynamic to a
12368      writable segment, it seems better to allocate a spare program
12369      header instead, and avoid the need to move any sections.
12370      There is a long tradition of allocating spare dynamic tags,
12371      so allocating a spare program header seems like a natural
12372      extension.
12373 
12374      If INFO is NULL, we may be copying an already prelinked binary
12375      with objcopy or strip, so do not add this header.  */
12376   if (info != NULL
12377       && !SGI_COMPAT (abfd)
12378       && bfd_get_section_by_name (abfd, ".dynamic"))
12379     {
12380       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12381 	if ((*pm)->p_type == PT_NULL)
12382 	  break;
12383       if (*pm == NULL)
12384 	{
12385 	  m = bfd_zalloc (abfd, sizeof (*m));
12386 	  if (m == NULL)
12387 	    return FALSE;
12388 
12389 	  m->p_type = PT_NULL;
12390 	  *pm = m;
12391 	}
12392     }
12393 
12394   return TRUE;
12395 }
12396 
12397 /* Return the section that should be marked against GC for a given
12398    relocation.  */
12399 
12400 asection *
_bfd_mips_elf_gc_mark_hook(asection * sec,struct bfd_link_info * info,Elf_Internal_Rela * rel,struct elf_link_hash_entry * h,Elf_Internal_Sym * sym)12401 _bfd_mips_elf_gc_mark_hook (asection *sec,
12402 			    struct bfd_link_info *info,
12403 			    Elf_Internal_Rela *rel,
12404 			    struct elf_link_hash_entry *h,
12405 			    Elf_Internal_Sym *sym)
12406 {
12407   /* ??? Do mips16 stub sections need to be handled special?  */
12408 
12409   if (h != NULL)
12410     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12411       {
12412       case R_MIPS_GNU_VTINHERIT:
12413       case R_MIPS_GNU_VTENTRY:
12414 	return NULL;
12415       }
12416 
12417   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12418 }
12419 
12420 /* Update the got entry reference counts for the section being removed.  */
12421 
12422 bfd_boolean
_bfd_mips_elf_gc_sweep_hook(bfd * abfd ATTRIBUTE_UNUSED,struct bfd_link_info * info ATTRIBUTE_UNUSED,asection * sec ATTRIBUTE_UNUSED,const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)12423 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12424 			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
12425 			     asection *sec ATTRIBUTE_UNUSED,
12426 			     const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12427 {
12428 #if 0
12429   Elf_Internal_Shdr *symtab_hdr;
12430   struct elf_link_hash_entry **sym_hashes;
12431   bfd_signed_vma *local_got_refcounts;
12432   const Elf_Internal_Rela *rel, *relend;
12433   unsigned long r_symndx;
12434   struct elf_link_hash_entry *h;
12435 
12436   if (bfd_link_relocatable (info))
12437     return TRUE;
12438 
12439   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12440   sym_hashes = elf_sym_hashes (abfd);
12441   local_got_refcounts = elf_local_got_refcounts (abfd);
12442 
12443   relend = relocs + sec->reloc_count;
12444   for (rel = relocs; rel < relend; rel++)
12445     switch (ELF_R_TYPE (abfd, rel->r_info))
12446       {
12447       case R_MIPS16_GOT16:
12448       case R_MIPS16_CALL16:
12449       case R_MIPS_GOT16:
12450       case R_MIPS_CALL16:
12451       case R_MIPS_CALL_HI16:
12452       case R_MIPS_CALL_LO16:
12453       case R_MIPS_GOT_HI16:
12454       case R_MIPS_GOT_LO16:
12455       case R_MIPS_GOT_DISP:
12456       case R_MIPS_GOT_PAGE:
12457       case R_MIPS_GOT_OFST:
12458       case R_MICROMIPS_GOT16:
12459       case R_MICROMIPS_CALL16:
12460       case R_MICROMIPS_CALL_HI16:
12461       case R_MICROMIPS_CALL_LO16:
12462       case R_MICROMIPS_GOT_HI16:
12463       case R_MICROMIPS_GOT_LO16:
12464       case R_MICROMIPS_GOT_DISP:
12465       case R_MICROMIPS_GOT_PAGE:
12466       case R_MICROMIPS_GOT_OFST:
12467 	/* ??? It would seem that the existing MIPS code does no sort
12468 	   of reference counting or whatnot on its GOT and PLT entries,
12469 	   so it is not possible to garbage collect them at this time.  */
12470 	break;
12471 
12472       default:
12473 	break;
12474       }
12475 #endif
12476 
12477   return TRUE;
12478 }
12479 
12480 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12481 
12482 bfd_boolean
_bfd_mips_elf_gc_mark_extra_sections(struct bfd_link_info * info,elf_gc_mark_hook_fn gc_mark_hook)12483 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12484 				      elf_gc_mark_hook_fn gc_mark_hook)
12485 {
12486   bfd *sub;
12487 
12488   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12489 
12490   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12491     {
12492       asection *o;
12493 
12494       if (! is_mips_elf (sub))
12495 	continue;
12496 
12497       for (o = sub->sections; o != NULL; o = o->next)
12498 	if (!o->gc_mark
12499 	    && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12500 		 (bfd_get_section_name (sub, o)))
12501 	  {
12502 	    if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12503 	      return FALSE;
12504 	  }
12505     }
12506 
12507   return TRUE;
12508 }
12509 
12510 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12511    hiding the old indirect symbol.  Process additional relocation
12512    information.  Also called for weakdefs, in which case we just let
12513    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12514 
12515 void
_bfd_mips_elf_copy_indirect_symbol(struct bfd_link_info * info,struct elf_link_hash_entry * dir,struct elf_link_hash_entry * ind)12516 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12517 				    struct elf_link_hash_entry *dir,
12518 				    struct elf_link_hash_entry *ind)
12519 {
12520   struct mips_elf_link_hash_entry *dirmips, *indmips;
12521 
12522   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12523 
12524   dirmips = (struct mips_elf_link_hash_entry *) dir;
12525   indmips = (struct mips_elf_link_hash_entry *) ind;
12526   /* Any absolute non-dynamic relocations against an indirect or weak
12527      definition will be against the target symbol.  */
12528   if (indmips->has_static_relocs)
12529     dirmips->has_static_relocs = TRUE;
12530 
12531   if (ind->root.type != bfd_link_hash_indirect)
12532     return;
12533 
12534   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12535   if (indmips->readonly_reloc)
12536     dirmips->readonly_reloc = TRUE;
12537   if (indmips->no_fn_stub)
12538     dirmips->no_fn_stub = TRUE;
12539   if (indmips->fn_stub)
12540     {
12541       dirmips->fn_stub = indmips->fn_stub;
12542       indmips->fn_stub = NULL;
12543     }
12544   if (indmips->need_fn_stub)
12545     {
12546       dirmips->need_fn_stub = TRUE;
12547       indmips->need_fn_stub = FALSE;
12548     }
12549   if (indmips->call_stub)
12550     {
12551       dirmips->call_stub = indmips->call_stub;
12552       indmips->call_stub = NULL;
12553     }
12554   if (indmips->call_fp_stub)
12555     {
12556       dirmips->call_fp_stub = indmips->call_fp_stub;
12557       indmips->call_fp_stub = NULL;
12558     }
12559   if (indmips->global_got_area < dirmips->global_got_area)
12560     dirmips->global_got_area = indmips->global_got_area;
12561   if (indmips->global_got_area < GGA_NONE)
12562     indmips->global_got_area = GGA_NONE;
12563   if (indmips->has_nonpic_branches)
12564     dirmips->has_nonpic_branches = TRUE;
12565 }
12566 
12567 #define PDR_SIZE 32
12568 
12569 bfd_boolean
_bfd_mips_elf_discard_info(bfd * abfd,struct elf_reloc_cookie * cookie,struct bfd_link_info * info)12570 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12571 			    struct bfd_link_info *info)
12572 {
12573   asection *o;
12574   bfd_boolean ret = FALSE;
12575   unsigned char *tdata;
12576   size_t i, skip;
12577 
12578   o = bfd_get_section_by_name (abfd, ".pdr");
12579   if (! o)
12580     return FALSE;
12581   if (o->size == 0)
12582     return FALSE;
12583   if (o->size % PDR_SIZE != 0)
12584     return FALSE;
12585   if (o->output_section != NULL
12586       && bfd_is_abs_section (o->output_section))
12587     return FALSE;
12588 
12589   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12590   if (! tdata)
12591     return FALSE;
12592 
12593   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12594 					    info->keep_memory);
12595   if (!cookie->rels)
12596     {
12597       free (tdata);
12598       return FALSE;
12599     }
12600 
12601   cookie->rel = cookie->rels;
12602   cookie->relend = cookie->rels + o->reloc_count;
12603 
12604   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12605     {
12606       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12607 	{
12608 	  tdata[i] = 1;
12609 	  skip ++;
12610 	}
12611     }
12612 
12613   if (skip != 0)
12614     {
12615       mips_elf_section_data (o)->u.tdata = tdata;
12616       if (o->rawsize == 0)
12617 	o->rawsize = o->size;
12618       o->size -= skip * PDR_SIZE;
12619       ret = TRUE;
12620     }
12621   else
12622     free (tdata);
12623 
12624   if (! info->keep_memory)
12625     free (cookie->rels);
12626 
12627   return ret;
12628 }
12629 
12630 bfd_boolean
_bfd_mips_elf_ignore_discarded_relocs(asection * sec)12631 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12632 {
12633   if (strcmp (sec->name, ".pdr") == 0)
12634     return TRUE;
12635   return FALSE;
12636 }
12637 
12638 bfd_boolean
_bfd_mips_elf_write_section(bfd * output_bfd,struct bfd_link_info * link_info ATTRIBUTE_UNUSED,asection * sec,bfd_byte * contents)12639 _bfd_mips_elf_write_section (bfd *output_bfd,
12640 			     struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12641                              asection *sec, bfd_byte *contents)
12642 {
12643   bfd_byte *to, *from, *end;
12644   int i;
12645 
12646   if (strcmp (sec->name, ".pdr") != 0)
12647     return FALSE;
12648 
12649   if (mips_elf_section_data (sec)->u.tdata == NULL)
12650     return FALSE;
12651 
12652   to = contents;
12653   end = contents + sec->size;
12654   for (from = contents, i = 0;
12655        from < end;
12656        from += PDR_SIZE, i++)
12657     {
12658       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12659 	continue;
12660       if (to != from)
12661 	memcpy (to, from, PDR_SIZE);
12662       to += PDR_SIZE;
12663     }
12664   bfd_set_section_contents (output_bfd, sec->output_section, contents,
12665 			    sec->output_offset, sec->size);
12666   return TRUE;
12667 }
12668 
12669 /* microMIPS code retains local labels for linker relaxation.  Omit them
12670    from output by default for clarity.  */
12671 
12672 bfd_boolean
_bfd_mips_elf_is_target_special_symbol(bfd * abfd,asymbol * sym)12673 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12674 {
12675   return _bfd_elf_is_local_label_name (abfd, sym->name);
12676 }
12677 
12678 /* MIPS ELF uses a special find_nearest_line routine in order the
12679    handle the ECOFF debugging information.  */
12680 
12681 struct mips_elf_find_line
12682 {
12683   struct ecoff_debug_info d;
12684   struct ecoff_find_line i;
12685 };
12686 
12687 bfd_boolean
_bfd_mips_elf_find_nearest_line(bfd * abfd,asymbol ** symbols,asection * section,bfd_vma offset,const char ** filename_ptr,const char ** functionname_ptr,unsigned int * line_ptr,unsigned int * discriminator_ptr)12688 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12689 				 asection *section, bfd_vma offset,
12690 				 const char **filename_ptr,
12691 				 const char **functionname_ptr,
12692 				 unsigned int *line_ptr,
12693 				 unsigned int *discriminator_ptr)
12694 {
12695   asection *msec;
12696 
12697   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12698 				     filename_ptr, functionname_ptr,
12699 				     line_ptr, discriminator_ptr,
12700 				     dwarf_debug_sections,
12701 				     ABI_64_P (abfd) ? 8 : 0,
12702 				     &elf_tdata (abfd)->dwarf2_find_line_info))
12703     return TRUE;
12704 
12705   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12706 				     filename_ptr, functionname_ptr,
12707 				     line_ptr))
12708     return TRUE;
12709 
12710   msec = bfd_get_section_by_name (abfd, ".mdebug");
12711   if (msec != NULL)
12712     {
12713       flagword origflags;
12714       struct mips_elf_find_line *fi;
12715       const struct ecoff_debug_swap * const swap =
12716 	get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12717 
12718       /* If we are called during a link, mips_elf_final_link may have
12719 	 cleared the SEC_HAS_CONTENTS field.  We force it back on here
12720 	 if appropriate (which it normally will be).  */
12721       origflags = msec->flags;
12722       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12723 	msec->flags |= SEC_HAS_CONTENTS;
12724 
12725       fi = mips_elf_tdata (abfd)->find_line_info;
12726       if (fi == NULL)
12727 	{
12728 	  bfd_size_type external_fdr_size;
12729 	  char *fraw_src;
12730 	  char *fraw_end;
12731 	  struct fdr *fdr_ptr;
12732 	  bfd_size_type amt = sizeof (struct mips_elf_find_line);
12733 
12734 	  fi = bfd_zalloc (abfd, amt);
12735 	  if (fi == NULL)
12736 	    {
12737 	      msec->flags = origflags;
12738 	      return FALSE;
12739 	    }
12740 
12741 	  if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12742 	    {
12743 	      msec->flags = origflags;
12744 	      return FALSE;
12745 	    }
12746 
12747 	  /* Swap in the FDR information.  */
12748 	  amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12749 	  fi->d.fdr = bfd_alloc (abfd, amt);
12750 	  if (fi->d.fdr == NULL)
12751 	    {
12752 	      msec->flags = origflags;
12753 	      return FALSE;
12754 	    }
12755 	  external_fdr_size = swap->external_fdr_size;
12756 	  fdr_ptr = fi->d.fdr;
12757 	  fraw_src = (char *) fi->d.external_fdr;
12758 	  fraw_end = (fraw_src
12759 		      + fi->d.symbolic_header.ifdMax * external_fdr_size);
12760 	  for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12761 	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12762 
12763 	  mips_elf_tdata (abfd)->find_line_info = fi;
12764 
12765 	  /* Note that we don't bother to ever free this information.
12766              find_nearest_line is either called all the time, as in
12767              objdump -l, so the information should be saved, or it is
12768              rarely called, as in ld error messages, so the memory
12769              wasted is unimportant.  Still, it would probably be a
12770              good idea for free_cached_info to throw it away.  */
12771 	}
12772 
12773       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12774 				  &fi->i, filename_ptr, functionname_ptr,
12775 				  line_ptr))
12776 	{
12777 	  msec->flags = origflags;
12778 	  return TRUE;
12779 	}
12780 
12781       msec->flags = origflags;
12782     }
12783 
12784   /* Fall back on the generic ELF find_nearest_line routine.  */
12785 
12786   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12787 				     filename_ptr, functionname_ptr,
12788 				     line_ptr, discriminator_ptr);
12789 }
12790 
12791 bfd_boolean
_bfd_mips_elf_find_inliner_info(bfd * abfd,const char ** filename_ptr,const char ** functionname_ptr,unsigned int * line_ptr)12792 _bfd_mips_elf_find_inliner_info (bfd *abfd,
12793 				 const char **filename_ptr,
12794 				 const char **functionname_ptr,
12795 				 unsigned int *line_ptr)
12796 {
12797   bfd_boolean found;
12798   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12799 					 functionname_ptr, line_ptr,
12800 					 & elf_tdata (abfd)->dwarf2_find_line_info);
12801   return found;
12802 }
12803 
12804 
12805 /* When are writing out the .options or .MIPS.options section,
12806    remember the bytes we are writing out, so that we can install the
12807    GP value in the section_processing routine.  */
12808 
12809 bfd_boolean
_bfd_mips_elf_set_section_contents(bfd * abfd,sec_ptr section,const void * location,file_ptr offset,bfd_size_type count)12810 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12811 				    const void *location,
12812 				    file_ptr offset, bfd_size_type count)
12813 {
12814   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12815     {
12816       bfd_byte *c;
12817 
12818       if (elf_section_data (section) == NULL)
12819 	{
12820 	  bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12821 	  section->used_by_bfd = bfd_zalloc (abfd, amt);
12822 	  if (elf_section_data (section) == NULL)
12823 	    return FALSE;
12824 	}
12825       c = mips_elf_section_data (section)->u.tdata;
12826       if (c == NULL)
12827 	{
12828 	  c = bfd_zalloc (abfd, section->size);
12829 	  if (c == NULL)
12830 	    return FALSE;
12831 	  mips_elf_section_data (section)->u.tdata = c;
12832 	}
12833 
12834       memcpy (c + offset, location, count);
12835     }
12836 
12837   return _bfd_elf_set_section_contents (abfd, section, location, offset,
12838 					count);
12839 }
12840 
12841 /* This is almost identical to bfd_generic_get_... except that some
12842    MIPS relocations need to be handled specially.  Sigh.  */
12843 
12844 bfd_byte *
_bfd_elf_mips_get_relocated_section_contents(bfd * abfd,struct bfd_link_info * link_info,struct bfd_link_order * link_order,bfd_byte * data,bfd_boolean relocatable,asymbol ** symbols)12845 _bfd_elf_mips_get_relocated_section_contents
12846   (bfd *abfd,
12847    struct bfd_link_info *link_info,
12848    struct bfd_link_order *link_order,
12849    bfd_byte *data,
12850    bfd_boolean relocatable,
12851    asymbol **symbols)
12852 {
12853   /* Get enough memory to hold the stuff */
12854   bfd *input_bfd = link_order->u.indirect.section->owner;
12855   asection *input_section = link_order->u.indirect.section;
12856   bfd_size_type sz;
12857 
12858   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
12859   arelent **reloc_vector = NULL;
12860   long reloc_count;
12861 
12862   if (reloc_size < 0)
12863     goto error_return;
12864 
12865   reloc_vector = bfd_malloc (reloc_size);
12866   if (reloc_vector == NULL && reloc_size != 0)
12867     goto error_return;
12868 
12869   /* read in the section */
12870   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
12871   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
12872     goto error_return;
12873 
12874   reloc_count = bfd_canonicalize_reloc (input_bfd,
12875 					input_section,
12876 					reloc_vector,
12877 					symbols);
12878   if (reloc_count < 0)
12879     goto error_return;
12880 
12881   if (reloc_count > 0)
12882     {
12883       arelent **parent;
12884       /* for mips */
12885       int gp_found;
12886       bfd_vma gp = 0x12345678;	/* initialize just to shut gcc up */
12887 
12888       {
12889 	struct bfd_hash_entry *h;
12890 	struct bfd_link_hash_entry *lh;
12891 	/* Skip all this stuff if we aren't mixing formats.  */
12892 	if (abfd && input_bfd
12893 	    && abfd->xvec == input_bfd->xvec)
12894 	  lh = 0;
12895 	else
12896 	  {
12897 	    h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
12898 	    lh = (struct bfd_link_hash_entry *) h;
12899 	  }
12900       lookup:
12901 	if (lh)
12902 	  {
12903 	    switch (lh->type)
12904 	      {
12905 	      case bfd_link_hash_undefined:
12906 	      case bfd_link_hash_undefweak:
12907 	      case bfd_link_hash_common:
12908 		gp_found = 0;
12909 		break;
12910 	      case bfd_link_hash_defined:
12911 	      case bfd_link_hash_defweak:
12912 		gp_found = 1;
12913 		gp = lh->u.def.value;
12914 		break;
12915 	      case bfd_link_hash_indirect:
12916 	      case bfd_link_hash_warning:
12917 		lh = lh->u.i.link;
12918 		/* @@FIXME  ignoring warning for now */
12919 		goto lookup;
12920 	      case bfd_link_hash_new:
12921 	      default:
12922 		abort ();
12923 	      }
12924 	  }
12925 	else
12926 	  gp_found = 0;
12927       }
12928       /* end mips */
12929       for (parent = reloc_vector; *parent != NULL; parent++)
12930 	{
12931 	  char *error_message = NULL;
12932 	  bfd_reloc_status_type r;
12933 
12934 	  /* Specific to MIPS: Deal with relocation types that require
12935 	     knowing the gp of the output bfd.  */
12936 	  asymbol *sym = *(*parent)->sym_ptr_ptr;
12937 
12938 	  /* If we've managed to find the gp and have a special
12939 	     function for the relocation then go ahead, else default
12940 	     to the generic handling.  */
12941 	  if (gp_found
12942 	      && (*parent)->howto->special_function
12943 	      == _bfd_mips_elf32_gprel16_reloc)
12944 	    r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
12945 					       input_section, relocatable,
12946 					       data, gp);
12947 	  else
12948 	    r = bfd_perform_relocation (input_bfd, *parent, data,
12949 					input_section,
12950 					relocatable ? abfd : NULL,
12951 					&error_message);
12952 
12953 	  if (relocatable)
12954 	    {
12955 	      asection *os = input_section->output_section;
12956 
12957 	      /* A partial link, so keep the relocs */
12958 	      os->orelocation[os->reloc_count] = *parent;
12959 	      os->reloc_count++;
12960 	    }
12961 
12962 	  if (r != bfd_reloc_ok)
12963 	    {
12964 	      switch (r)
12965 		{
12966 		case bfd_reloc_undefined:
12967 		  (*link_info->callbacks->undefined_symbol)
12968 		    (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12969 		     input_bfd, input_section, (*parent)->address, TRUE);
12970 		  break;
12971 		case bfd_reloc_dangerous:
12972 		  BFD_ASSERT (error_message != NULL);
12973 		  (*link_info->callbacks->reloc_dangerous)
12974 		    (link_info, error_message,
12975 		     input_bfd, input_section, (*parent)->address);
12976 		  break;
12977 		case bfd_reloc_overflow:
12978 		  (*link_info->callbacks->reloc_overflow)
12979 		    (link_info, NULL,
12980 		     bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12981 		     (*parent)->howto->name, (*parent)->addend,
12982 		     input_bfd, input_section, (*parent)->address);
12983 		  break;
12984 		case bfd_reloc_outofrange:
12985 		default:
12986 		  abort ();
12987 		  break;
12988 		}
12989 
12990 	    }
12991 	}
12992     }
12993   if (reloc_vector != NULL)
12994     free (reloc_vector);
12995   return data;
12996 
12997 error_return:
12998   if (reloc_vector != NULL)
12999     free (reloc_vector);
13000   return NULL;
13001 }
13002 
13003 static bfd_boolean
mips_elf_relax_delete_bytes(bfd * abfd,asection * sec,bfd_vma addr,int count)13004 mips_elf_relax_delete_bytes (bfd *abfd,
13005 			     asection *sec, bfd_vma addr, int count)
13006 {
13007   Elf_Internal_Shdr *symtab_hdr;
13008   unsigned int sec_shndx;
13009   bfd_byte *contents;
13010   Elf_Internal_Rela *irel, *irelend;
13011   Elf_Internal_Sym *isym;
13012   Elf_Internal_Sym *isymend;
13013   struct elf_link_hash_entry **sym_hashes;
13014   struct elf_link_hash_entry **end_hashes;
13015   struct elf_link_hash_entry **start_hashes;
13016   unsigned int symcount;
13017 
13018   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13019   contents = elf_section_data (sec)->this_hdr.contents;
13020 
13021   irel = elf_section_data (sec)->relocs;
13022   irelend = irel + sec->reloc_count;
13023 
13024   /* Actually delete the bytes.  */
13025   memmove (contents + addr, contents + addr + count,
13026 	   (size_t) (sec->size - addr - count));
13027   sec->size -= count;
13028 
13029   /* Adjust all the relocs.  */
13030   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13031     {
13032       /* Get the new reloc address.  */
13033       if (irel->r_offset > addr)
13034 	irel->r_offset -= count;
13035     }
13036 
13037   BFD_ASSERT (addr % 2 == 0);
13038   BFD_ASSERT (count % 2 == 0);
13039 
13040   /* Adjust the local symbols defined in this section.  */
13041   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13042   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13043   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13044     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13045       isym->st_value -= count;
13046 
13047   /* Now adjust the global symbols defined in this section.  */
13048   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13049 	      - symtab_hdr->sh_info);
13050   sym_hashes = start_hashes = elf_sym_hashes (abfd);
13051   end_hashes = sym_hashes + symcount;
13052 
13053   for (; sym_hashes < end_hashes; sym_hashes++)
13054     {
13055       struct elf_link_hash_entry *sym_hash = *sym_hashes;
13056 
13057       if ((sym_hash->root.type == bfd_link_hash_defined
13058 	   || sym_hash->root.type == bfd_link_hash_defweak)
13059 	  && sym_hash->root.u.def.section == sec)
13060 	{
13061 	  bfd_vma value = sym_hash->root.u.def.value;
13062 
13063 	  if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13064 	    value &= MINUS_TWO;
13065 	  if (value > addr)
13066 	    sym_hash->root.u.def.value -= count;
13067 	}
13068     }
13069 
13070   return TRUE;
13071 }
13072 
13073 
13074 /* Opcodes needed for microMIPS relaxation as found in
13075    opcodes/micromips-opc.c.  */
13076 
13077 struct opcode_descriptor {
13078   unsigned long match;
13079   unsigned long mask;
13080 };
13081 
13082 /* The $ra register aka $31.  */
13083 
13084 #define RA 31
13085 
13086 /* 32-bit instruction format register fields.  */
13087 
13088 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13089 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13090 
13091 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13092 
13093 #define OP16_VALID_REG(r) \
13094   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13095 
13096 
13097 /* 32-bit and 16-bit branches.  */
13098 
13099 static const struct opcode_descriptor b_insns_32[] = {
13100   { /* "b",	"p",		*/ 0x40400000, 0xffff0000 }, /* bgez 0 */
13101   { /* "b",	"p",		*/ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13102   { 0, 0 }  /* End marker for find_match().  */
13103 };
13104 
13105 static const struct opcode_descriptor bc_insn_32 =
13106   { /* "bc(1|2)(ft)", "N,p",	*/ 0x42800000, 0xfec30000 };
13107 
13108 static const struct opcode_descriptor bz_insn_32 =
13109   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 };
13110 
13111 static const struct opcode_descriptor bzal_insn_32 =
13112   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 };
13113 
13114 static const struct opcode_descriptor beq_insn_32 =
13115   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 };
13116 
13117 static const struct opcode_descriptor b_insn_16 =
13118   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 };
13119 
13120 static const struct opcode_descriptor bz_insn_16 =
13121   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 };
13122 
13123 
13124 /* 32-bit and 16-bit branch EQ and NE zero.  */
13125 
13126 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13127    eq and second the ne.  This convention is used when replacing a
13128    32-bit BEQ/BNE with the 16-bit version.  */
13129 
13130 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13131 
13132 static const struct opcode_descriptor bz_rs_insns_32[] = {
13133   { /* "beqz",	"s,p",		*/ 0x94000000, 0xffe00000 },
13134   { /* "bnez",	"s,p",		*/ 0xb4000000, 0xffe00000 },
13135   { 0, 0 }  /* End marker for find_match().  */
13136 };
13137 
13138 static const struct opcode_descriptor bz_rt_insns_32[] = {
13139   { /* "beqz",	"t,p",		*/ 0x94000000, 0xfc01f000 },
13140   { /* "bnez",	"t,p",		*/ 0xb4000000, 0xfc01f000 },
13141   { 0, 0 }  /* End marker for find_match().  */
13142 };
13143 
13144 static const struct opcode_descriptor bzc_insns_32[] = {
13145   { /* "beqzc",	"s,p",		*/ 0x40e00000, 0xffe00000 },
13146   { /* "bnezc",	"s,p",		*/ 0x40a00000, 0xffe00000 },
13147   { 0, 0 }  /* End marker for find_match().  */
13148 };
13149 
13150 static const struct opcode_descriptor bz_insns_16[] = {
13151   { /* "beqz",	"md,mE",	*/ 0x8c00,     0xfc00 },
13152   { /* "bnez",	"md,mE",	*/ 0xac00,     0xfc00 },
13153   { 0, 0 }  /* End marker for find_match().  */
13154 };
13155 
13156 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13157 
13158 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13159 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13160 
13161 
13162 /* 32-bit instructions with a delay slot.  */
13163 
13164 static const struct opcode_descriptor jal_insn_32_bd16 =
13165   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 };
13166 
13167 static const struct opcode_descriptor jal_insn_32_bd32 =
13168   { /* "jal",	"a",		*/ 0xf4000000, 0xfc000000 };
13169 
13170 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13171   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 };
13172 
13173 static const struct opcode_descriptor j_insn_32 =
13174   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 };
13175 
13176 static const struct opcode_descriptor jalr_insn_32 =
13177   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff };
13178 
13179 /* This table can be compacted, because no opcode replacement is made.  */
13180 
13181 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13182   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 },
13183 
13184   { /* "jalrs[.hb]", "t,s",	*/ 0x00004f3c, 0xfc00efff },
13185   { /* "b(ge|lt)zals", "s,p",	*/ 0x42200000, 0xffa00000 },
13186 
13187   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 },
13188   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 },
13189   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 },
13190   { 0, 0 }  /* End marker for find_match().  */
13191 };
13192 
13193 /* This table can be compacted, because no opcode replacement is made.  */
13194 
13195 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13196   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 },
13197 
13198   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff },
13199   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 },
13200   { 0, 0 }  /* End marker for find_match().  */
13201 };
13202 
13203 
13204 /* 16-bit instructions with a delay slot.  */
13205 
13206 static const struct opcode_descriptor jalr_insn_16_bd16 =
13207   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 };
13208 
13209 static const struct opcode_descriptor jalr_insn_16_bd32 =
13210   { /* "jalr",	"my,mj",	*/ 0x45c0,     0xffe0 };
13211 
13212 static const struct opcode_descriptor jr_insn_16 =
13213   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 };
13214 
13215 #define JR16_REG(opcode) ((opcode) & 0x1f)
13216 
13217 /* This table can be compacted, because no opcode replacement is made.  */
13218 
13219 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13220   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 },
13221 
13222   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 },
13223   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 },
13224   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 },
13225   { 0, 0 }  /* End marker for find_match().  */
13226 };
13227 
13228 
13229 /* LUI instruction.  */
13230 
13231 static const struct opcode_descriptor lui_insn =
13232  { /* "lui",	"s,u",		*/ 0x41a00000, 0xffe00000 };
13233 
13234 
13235 /* ADDIU instruction.  */
13236 
13237 static const struct opcode_descriptor addiu_insn =
13238   { /* "addiu",	"t,r,j",	*/ 0x30000000, 0xfc000000 };
13239 
13240 static const struct opcode_descriptor addiupc_insn =
13241   { /* "addiu",	"mb,$pc,mQ",	*/ 0x78000000, 0xfc000000 };
13242 
13243 #define ADDIUPC_REG_FIELD(r) \
13244   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13245 
13246 
13247 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13248 
13249 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13250    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13251 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13252 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13253 
13254 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13255 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13256 
13257 static const struct opcode_descriptor move_insns_32[] = {
13258   { /* "move",	"d,s",		*/ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13259   { /* "move",	"d,s",		*/ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13260   { 0, 0 }  /* End marker for find_match().  */
13261 };
13262 
13263 static const struct opcode_descriptor move_insn_16 =
13264   { /* "move",	"mp,mj",	*/ 0x0c00,     0xfc00 };
13265 
13266 
13267 /* NOP instructions.  */
13268 
13269 static const struct opcode_descriptor nop_insn_32 =
13270   { /* "nop",	"",		*/ 0x00000000, 0xffffffff };
13271 
13272 static const struct opcode_descriptor nop_insn_16 =
13273   { /* "nop",	"",		*/ 0x0c00,     0xffff };
13274 
13275 
13276 /* Instruction match support.  */
13277 
13278 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13279 
13280 static int
find_match(unsigned long opcode,const struct opcode_descriptor insn[])13281 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13282 {
13283   unsigned long indx;
13284 
13285   for (indx = 0; insn[indx].mask != 0; indx++)
13286     if (MATCH (opcode, insn[indx]))
13287       return indx;
13288 
13289   return -1;
13290 }
13291 
13292 
13293 /* Branch and delay slot decoding support.  */
13294 
13295 /* If PTR points to what *might* be a 16-bit branch or jump, then
13296    return the minimum length of its delay slot, otherwise return 0.
13297    Non-zero results are not definitive as we might be checking against
13298    the second half of another instruction.  */
13299 
13300 static int
check_br16_dslot(bfd * abfd,bfd_byte * ptr)13301 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13302 {
13303   unsigned long opcode;
13304   int bdsize;
13305 
13306   opcode = bfd_get_16 (abfd, ptr);
13307   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13308     /* 16-bit branch/jump with a 32-bit delay slot.  */
13309     bdsize = 4;
13310   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13311 	   || find_match (opcode, ds_insns_16_bd16) >= 0)
13312     /* 16-bit branch/jump with a 16-bit delay slot.  */
13313     bdsize = 2;
13314   else
13315     /* No delay slot.  */
13316     bdsize = 0;
13317 
13318   return bdsize;
13319 }
13320 
13321 /* If PTR points to what *might* be a 32-bit branch or jump, then
13322    return the minimum length of its delay slot, otherwise return 0.
13323    Non-zero results are not definitive as we might be checking against
13324    the second half of another instruction.  */
13325 
13326 static int
check_br32_dslot(bfd * abfd,bfd_byte * ptr)13327 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13328 {
13329   unsigned long opcode;
13330   int bdsize;
13331 
13332   opcode = bfd_get_micromips_32 (abfd, ptr);
13333   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13334     /* 32-bit branch/jump with a 32-bit delay slot.  */
13335     bdsize = 4;
13336   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13337     /* 32-bit branch/jump with a 16-bit delay slot.  */
13338     bdsize = 2;
13339   else
13340     /* No delay slot.  */
13341     bdsize = 0;
13342 
13343   return bdsize;
13344 }
13345 
13346 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13347    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13348 
13349 static bfd_boolean
check_br16(bfd * abfd,bfd_byte * ptr,unsigned long reg)13350 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13351 {
13352   unsigned long opcode;
13353 
13354   opcode = bfd_get_16 (abfd, ptr);
13355   if (MATCH (opcode, b_insn_16)
13356 						/* B16  */
13357       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13358 						/* JR16  */
13359       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13360 						/* BEQZ16, BNEZ16  */
13361       || (MATCH (opcode, jalr_insn_16_bd32)
13362 						/* JALR16  */
13363 	  && reg != JR16_REG (opcode) && reg != RA))
13364     return TRUE;
13365 
13366   return FALSE;
13367 }
13368 
13369 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13370    then return TRUE, otherwise FALSE.  */
13371 
13372 static bfd_boolean
check_br32(bfd * abfd,bfd_byte * ptr,unsigned long reg)13373 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13374 {
13375   unsigned long opcode;
13376 
13377   opcode = bfd_get_micromips_32 (abfd, ptr);
13378   if (MATCH (opcode, j_insn_32)
13379 						/* J  */
13380       || MATCH (opcode, bc_insn_32)
13381 						/* BC1F, BC1T, BC2F, BC2T  */
13382       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13383 						/* JAL, JALX  */
13384       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13385 						/* BGEZ, BGTZ, BLEZ, BLTZ  */
13386       || (MATCH (opcode, bzal_insn_32)
13387 						/* BGEZAL, BLTZAL  */
13388 	  && reg != OP32_SREG (opcode) && reg != RA)
13389       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13390 						/* JALR, JALR.HB, BEQ, BNE  */
13391 	  && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13392     return TRUE;
13393 
13394   return FALSE;
13395 }
13396 
13397 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13398    IRELEND) at OFFSET indicate that there must be a compact branch there,
13399    then return TRUE, otherwise FALSE.  */
13400 
13401 static bfd_boolean
check_relocated_bzc(bfd * abfd,const bfd_byte * ptr,bfd_vma offset,const Elf_Internal_Rela * internal_relocs,const Elf_Internal_Rela * irelend)13402 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13403 		     const Elf_Internal_Rela *internal_relocs,
13404 		     const Elf_Internal_Rela *irelend)
13405 {
13406   const Elf_Internal_Rela *irel;
13407   unsigned long opcode;
13408 
13409   opcode = bfd_get_micromips_32 (abfd, ptr);
13410   if (find_match (opcode, bzc_insns_32) < 0)
13411     return FALSE;
13412 
13413   for (irel = internal_relocs; irel < irelend; irel++)
13414     if (irel->r_offset == offset
13415 	&& ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13416       return TRUE;
13417 
13418   return FALSE;
13419 }
13420 
13421 /* Bitsize checking.  */
13422 #define IS_BITSIZE(val, N)						\
13423   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))		\
13424     - (1ULL << ((N) - 1))) == (val))
13425 
13426 
13427 bfd_boolean
_bfd_mips_elf_relax_section(bfd * abfd,asection * sec,struct bfd_link_info * link_info,bfd_boolean * again)13428 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13429 			     struct bfd_link_info *link_info,
13430 			     bfd_boolean *again)
13431 {
13432   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13433   Elf_Internal_Shdr *symtab_hdr;
13434   Elf_Internal_Rela *internal_relocs;
13435   Elf_Internal_Rela *irel, *irelend;
13436   bfd_byte *contents = NULL;
13437   Elf_Internal_Sym *isymbuf = NULL;
13438 
13439   /* Assume nothing changes.  */
13440   *again = FALSE;
13441 
13442   /* We don't have to do anything for a relocatable link, if
13443      this section does not have relocs, or if this is not a
13444      code section.  */
13445 
13446   if (bfd_link_relocatable (link_info)
13447       || (sec->flags & SEC_RELOC) == 0
13448       || sec->reloc_count == 0
13449       || (sec->flags & SEC_CODE) == 0)
13450     return TRUE;
13451 
13452   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13453 
13454   /* Get a copy of the native relocations.  */
13455   internal_relocs = (_bfd_elf_link_read_relocs
13456 		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13457 		      link_info->keep_memory));
13458   if (internal_relocs == NULL)
13459     goto error_return;
13460 
13461   /* Walk through them looking for relaxing opportunities.  */
13462   irelend = internal_relocs + sec->reloc_count;
13463   for (irel = internal_relocs; irel < irelend; irel++)
13464     {
13465       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13466       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13467       bfd_boolean target_is_micromips_code_p;
13468       unsigned long opcode;
13469       bfd_vma symval;
13470       bfd_vma pcrval;
13471       bfd_byte *ptr;
13472       int fndopc;
13473 
13474       /* The number of bytes to delete for relaxation and from where
13475          to delete these bytes starting at irel->r_offset.  */
13476       int delcnt = 0;
13477       int deloff = 0;
13478 
13479       /* If this isn't something that can be relaxed, then ignore
13480          this reloc.  */
13481       if (r_type != R_MICROMIPS_HI16
13482 	  && r_type != R_MICROMIPS_PC16_S1
13483 	  && r_type != R_MICROMIPS_26_S1)
13484 	continue;
13485 
13486       /* Get the section contents if we haven't done so already.  */
13487       if (contents == NULL)
13488 	{
13489 	  /* Get cached copy if it exists.  */
13490 	  if (elf_section_data (sec)->this_hdr.contents != NULL)
13491 	    contents = elf_section_data (sec)->this_hdr.contents;
13492 	  /* Go get them off disk.  */
13493 	  else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13494 	    goto error_return;
13495 	}
13496       ptr = contents + irel->r_offset;
13497 
13498       /* Read this BFD's local symbols if we haven't done so already.  */
13499       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13500 	{
13501 	  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13502 	  if (isymbuf == NULL)
13503 	    isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13504 					    symtab_hdr->sh_info, 0,
13505 					    NULL, NULL, NULL);
13506 	  if (isymbuf == NULL)
13507 	    goto error_return;
13508 	}
13509 
13510       /* Get the value of the symbol referred to by the reloc.  */
13511       if (r_symndx < symtab_hdr->sh_info)
13512 	{
13513 	  /* A local symbol.  */
13514 	  Elf_Internal_Sym *isym;
13515 	  asection *sym_sec;
13516 
13517 	  isym = isymbuf + r_symndx;
13518 	  if (isym->st_shndx == SHN_UNDEF)
13519 	    sym_sec = bfd_und_section_ptr;
13520 	  else if (isym->st_shndx == SHN_ABS)
13521 	    sym_sec = bfd_abs_section_ptr;
13522 	  else if (isym->st_shndx == SHN_COMMON)
13523 	    sym_sec = bfd_com_section_ptr;
13524 	  else
13525 	    sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13526 	  symval = (isym->st_value
13527 		    + sym_sec->output_section->vma
13528 		    + sym_sec->output_offset);
13529 	  target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13530 	}
13531       else
13532 	{
13533 	  unsigned long indx;
13534 	  struct elf_link_hash_entry *h;
13535 
13536 	  /* An external symbol.  */
13537 	  indx = r_symndx - symtab_hdr->sh_info;
13538 	  h = elf_sym_hashes (abfd)[indx];
13539 	  BFD_ASSERT (h != NULL);
13540 
13541 	  if (h->root.type != bfd_link_hash_defined
13542 	      && h->root.type != bfd_link_hash_defweak)
13543 	    /* This appears to be a reference to an undefined
13544 	       symbol.  Just ignore it -- it will be caught by the
13545 	       regular reloc processing.  */
13546 	    continue;
13547 
13548 	  symval = (h->root.u.def.value
13549 		    + h->root.u.def.section->output_section->vma
13550 		    + h->root.u.def.section->output_offset);
13551 	  target_is_micromips_code_p = (!h->needs_plt
13552 					&& ELF_ST_IS_MICROMIPS (h->other));
13553 	}
13554 
13555 
13556       /* For simplicity of coding, we are going to modify the
13557          section contents, the section relocs, and the BFD symbol
13558          table.  We must tell the rest of the code not to free up this
13559          information.  It would be possible to instead create a table
13560          of changes which have to be made, as is done in coff-mips.c;
13561          that would be more work, but would require less memory when
13562          the linker is run.  */
13563 
13564       /* Only 32-bit instructions relaxed.  */
13565       if (irel->r_offset + 4 > sec->size)
13566 	continue;
13567 
13568       opcode = bfd_get_micromips_32 (abfd, ptr);
13569 
13570       /* This is the pc-relative distance from the instruction the
13571          relocation is applied to, to the symbol referred.  */
13572       pcrval = (symval
13573 		- (sec->output_section->vma + sec->output_offset)
13574 		- irel->r_offset);
13575 
13576       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13577          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13578          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13579 
13580            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13581 
13582          where pcrval has first to be adjusted to apply against the LO16
13583          location (we make the adjustment later on, when we have figured
13584          out the offset).  */
13585       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13586 	{
13587 	  bfd_boolean bzc = FALSE;
13588 	  unsigned long nextopc;
13589 	  unsigned long reg;
13590 	  bfd_vma offset;
13591 
13592 	  /* Give up if the previous reloc was a HI16 against this symbol
13593 	     too.  */
13594 	  if (irel > internal_relocs
13595 	      && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13596 	      && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13597 	    continue;
13598 
13599 	  /* Or if the next reloc is not a LO16 against this symbol.  */
13600 	  if (irel + 1 >= irelend
13601 	      || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13602 	      || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13603 	    continue;
13604 
13605 	  /* Or if the second next reloc is a LO16 against this symbol too.  */
13606 	  if (irel + 2 >= irelend
13607 	      && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13608 	      && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13609 	    continue;
13610 
13611 	  /* See if the LUI instruction *might* be in a branch delay slot.
13612 	     We check whether what looks like a 16-bit branch or jump is
13613 	     actually an immediate argument to a compact branch, and let
13614 	     it through if so.  */
13615 	  if (irel->r_offset >= 2
13616 	      && check_br16_dslot (abfd, ptr - 2)
13617 	      && !(irel->r_offset >= 4
13618 		   && (bzc = check_relocated_bzc (abfd,
13619 						  ptr - 4, irel->r_offset - 4,
13620 						  internal_relocs, irelend))))
13621 	    continue;
13622 	  if (irel->r_offset >= 4
13623 	      && !bzc
13624 	      && check_br32_dslot (abfd, ptr - 4))
13625 	    continue;
13626 
13627 	  reg = OP32_SREG (opcode);
13628 
13629 	  /* We only relax adjacent instructions or ones separated with
13630 	     a branch or jump that has a delay slot.  The branch or jump
13631 	     must not fiddle with the register used to hold the address.
13632 	     Subtract 4 for the LUI itself.  */
13633 	  offset = irel[1].r_offset - irel[0].r_offset;
13634 	  switch (offset - 4)
13635 	    {
13636 	    case 0:
13637 	      break;
13638 	    case 2:
13639 	      if (check_br16 (abfd, ptr + 4, reg))
13640 		break;
13641 	      continue;
13642 	    case 4:
13643 	      if (check_br32 (abfd, ptr + 4, reg))
13644 		break;
13645 	      continue;
13646 	    default:
13647 	      continue;
13648 	    }
13649 
13650 	  nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13651 
13652 	  /* Give up unless the same register is used with both
13653 	     relocations.  */
13654 	  if (OP32_SREG (nextopc) != reg)
13655 	    continue;
13656 
13657 	  /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13658 	     and rounding up to take masking of the two LSBs into account.  */
13659 	  pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13660 
13661 	  /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
13662 	  if (IS_BITSIZE (symval, 16))
13663 	    {
13664 	      /* Fix the relocation's type.  */
13665 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13666 
13667 	      /* Instructions using R_MICROMIPS_LO16 have the base or
13668 	         source register in bits 20:16.  This register becomes $0
13669 	         (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
13670 	      nextopc &= ~0x001f0000;
13671 	      bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13672 			  contents + irel[1].r_offset);
13673 	    }
13674 
13675 	  /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13676 	     We add 4 to take LUI deletion into account while checking
13677 	     the PC-relative distance.  */
13678 	  else if (symval % 4 == 0
13679 		   && IS_BITSIZE (pcrval + 4, 25)
13680 		   && MATCH (nextopc, addiu_insn)
13681 		   && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13682 		   && OP16_VALID_REG (OP32_TREG (nextopc)))
13683 	    {
13684 	      /* Fix the relocation's type.  */
13685 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13686 
13687 	      /* Replace ADDIU with the ADDIUPC version.  */
13688 	      nextopc = (addiupc_insn.match
13689 			 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13690 
13691 	      bfd_put_micromips_32 (abfd, nextopc,
13692 				    contents + irel[1].r_offset);
13693 	    }
13694 
13695 	  /* Can't do anything, give up, sigh...  */
13696 	  else
13697 	    continue;
13698 
13699 	  /* Fix the relocation's type.  */
13700 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13701 
13702 	  /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
13703 	  delcnt = 4;
13704 	  deloff = 0;
13705 	}
13706 
13707       /* Compact branch relaxation -- due to the multitude of macros
13708          employed by the compiler/assembler, compact branches are not
13709          always generated.  Obviously, this can/will be fixed elsewhere,
13710          but there is no drawback in double checking it here.  */
13711       else if (r_type == R_MICROMIPS_PC16_S1
13712 	       && irel->r_offset + 5 < sec->size
13713 	       && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13714 		   || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13715 	       && ((!insn32
13716 		    && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13717 					nop_insn_16) ? 2 : 0))
13718 		   || (irel->r_offset + 7 < sec->size
13719 		       && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13720 								 ptr + 4),
13721 					   nop_insn_32) ? 4 : 0))))
13722 	{
13723 	  unsigned long reg;
13724 
13725 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13726 
13727 	  /* Replace BEQZ/BNEZ with the compact version.  */
13728 	  opcode = (bzc_insns_32[fndopc].match
13729 		    | BZC32_REG_FIELD (reg)
13730 		    | (opcode & 0xffff));		/* Addend value.  */
13731 
13732 	  bfd_put_micromips_32 (abfd, opcode, ptr);
13733 
13734 	  /* Delete the delay slot NOP: two or four bytes from
13735 	     irel->offset + 4; delcnt has already been set above.  */
13736 	  deloff = 4;
13737 	}
13738 
13739       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
13740          to check the distance from the next instruction, so subtract 2.  */
13741       else if (!insn32
13742 	       && r_type == R_MICROMIPS_PC16_S1
13743 	       && IS_BITSIZE (pcrval - 2, 11)
13744 	       && find_match (opcode, b_insns_32) >= 0)
13745 	{
13746 	  /* Fix the relocation's type.  */
13747 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13748 
13749 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
13750 	  bfd_put_16 (abfd,
13751 		      (b_insn_16.match
13752 		       | (opcode & 0x3ff)),		/* Addend value.  */
13753 		      ptr);
13754 
13755 	  /* Delete 2 bytes from irel->r_offset + 2.  */
13756 	  delcnt = 2;
13757 	  deloff = 2;
13758 	}
13759 
13760       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
13761          to check the distance from the next instruction, so subtract 2.  */
13762       else if (!insn32
13763 	       && r_type == R_MICROMIPS_PC16_S1
13764 	       && IS_BITSIZE (pcrval - 2, 8)
13765 	       && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13766 		    && OP16_VALID_REG (OP32_SREG (opcode)))
13767 		   || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13768 		       && OP16_VALID_REG (OP32_TREG (opcode)))))
13769 	{
13770 	  unsigned long reg;
13771 
13772 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13773 
13774 	  /* Fix the relocation's type.  */
13775 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13776 
13777 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
13778 	  bfd_put_16 (abfd,
13779 		      (bz_insns_16[fndopc].match
13780 		       | BZ16_REG_FIELD (reg)
13781 		       | (opcode & 0x7f)),		/* Addend value.  */
13782 		      ptr);
13783 
13784 	  /* Delete 2 bytes from irel->r_offset + 2.  */
13785 	  delcnt = 2;
13786 	  deloff = 2;
13787 	}
13788 
13789       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
13790       else if (!insn32
13791 	       && r_type == R_MICROMIPS_26_S1
13792 	       && target_is_micromips_code_p
13793 	       && irel->r_offset + 7 < sec->size
13794 	       && MATCH (opcode, jal_insn_32_bd32))
13795 	{
13796 	  unsigned long n32opc;
13797 	  bfd_boolean relaxed = FALSE;
13798 
13799 	  n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13800 
13801 	  if (MATCH (n32opc, nop_insn_32))
13802 	    {
13803 	      /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
13804 	      bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13805 
13806 	      relaxed = TRUE;
13807 	    }
13808 	  else if (find_match (n32opc, move_insns_32) >= 0)
13809 	    {
13810 	      /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
13811 	      bfd_put_16 (abfd,
13812 			  (move_insn_16.match
13813 			   | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13814 			   | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13815 			  ptr + 4);
13816 
13817 	      relaxed = TRUE;
13818 	    }
13819 	  /* Other 32-bit instructions relaxable to 16-bit
13820 	     instructions will be handled here later.  */
13821 
13822 	  if (relaxed)
13823 	    {
13824 	      /* JAL with 32-bit delay slot that is changed to a JALS
13825 	         with 16-bit delay slot.  */
13826 	      bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13827 
13828 	      /* Delete 2 bytes from irel->r_offset + 6.  */
13829 	      delcnt = 2;
13830 	      deloff = 6;
13831 	    }
13832 	}
13833 
13834       if (delcnt != 0)
13835 	{
13836 	  /* Note that we've changed the relocs, section contents, etc.  */
13837 	  elf_section_data (sec)->relocs = internal_relocs;
13838 	  elf_section_data (sec)->this_hdr.contents = contents;
13839 	  symtab_hdr->contents = (unsigned char *) isymbuf;
13840 
13841 	  /* Delete bytes depending on the delcnt and deloff.  */
13842 	  if (!mips_elf_relax_delete_bytes (abfd, sec,
13843 					    irel->r_offset + deloff, delcnt))
13844 	    goto error_return;
13845 
13846 	  /* That will change things, so we should relax again.
13847 	     Note that this is not required, and it may be slow.  */
13848 	  *again = TRUE;
13849 	}
13850     }
13851 
13852   if (isymbuf != NULL
13853       && symtab_hdr->contents != (unsigned char *) isymbuf)
13854     {
13855       if (! link_info->keep_memory)
13856 	free (isymbuf);
13857       else
13858 	{
13859 	  /* Cache the symbols for elf_link_input_bfd.  */
13860 	  symtab_hdr->contents = (unsigned char *) isymbuf;
13861 	}
13862     }
13863 
13864   if (contents != NULL
13865       && elf_section_data (sec)->this_hdr.contents != contents)
13866     {
13867       if (! link_info->keep_memory)
13868 	free (contents);
13869       else
13870 	{
13871 	  /* Cache the section contents for elf_link_input_bfd.  */
13872 	  elf_section_data (sec)->this_hdr.contents = contents;
13873 	}
13874     }
13875 
13876   if (internal_relocs != NULL
13877       && elf_section_data (sec)->relocs != internal_relocs)
13878     free (internal_relocs);
13879 
13880   return TRUE;
13881 
13882  error_return:
13883   if (isymbuf != NULL
13884       && symtab_hdr->contents != (unsigned char *) isymbuf)
13885     free (isymbuf);
13886   if (contents != NULL
13887       && elf_section_data (sec)->this_hdr.contents != contents)
13888     free (contents);
13889   if (internal_relocs != NULL
13890       && elf_section_data (sec)->relocs != internal_relocs)
13891     free (internal_relocs);
13892 
13893   return FALSE;
13894 }
13895 
13896 /* Create a MIPS ELF linker hash table.  */
13897 
13898 struct bfd_link_hash_table *
_bfd_mips_elf_link_hash_table_create(bfd * abfd)13899 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
13900 {
13901   struct mips_elf_link_hash_table *ret;
13902   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
13903 
13904   ret = bfd_zmalloc (amt);
13905   if (ret == NULL)
13906     return NULL;
13907 
13908   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
13909 				      mips_elf_link_hash_newfunc,
13910 				      sizeof (struct mips_elf_link_hash_entry),
13911 				      MIPS_ELF_DATA))
13912     {
13913       free (ret);
13914       return NULL;
13915     }
13916   ret->root.init_plt_refcount.plist = NULL;
13917   ret->root.init_plt_offset.plist = NULL;
13918 
13919   return &ret->root.root;
13920 }
13921 
13922 /* Likewise, but indicate that the target is VxWorks.  */
13923 
13924 struct bfd_link_hash_table *
_bfd_mips_vxworks_link_hash_table_create(bfd * abfd)13925 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
13926 {
13927   struct bfd_link_hash_table *ret;
13928 
13929   ret = _bfd_mips_elf_link_hash_table_create (abfd);
13930   if (ret)
13931     {
13932       struct mips_elf_link_hash_table *htab;
13933 
13934       htab = (struct mips_elf_link_hash_table *) ret;
13935       htab->use_plts_and_copy_relocs = TRUE;
13936       htab->is_vxworks = TRUE;
13937     }
13938   return ret;
13939 }
13940 
13941 /* A function that the linker calls if we are allowed to use PLTs
13942    and copy relocs.  */
13943 
13944 void
_bfd_mips_elf_use_plts_and_copy_relocs(struct bfd_link_info * info)13945 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
13946 {
13947   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
13948 }
13949 
13950 /* A function that the linker calls to select between all or only
13951    32-bit microMIPS instructions.  */
13952 
13953 void
_bfd_mips_elf_insn32(struct bfd_link_info * info,bfd_boolean on)13954 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
13955 {
13956   mips_elf_hash_table (info)->insn32 = on;
13957 }
13958 
13959 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13960 
13961 struct mips_mach_extension
13962 {
13963   unsigned long extension, base;
13964 };
13965 
13966 
13967 /* An array describing how BFD machines relate to one another.  The entries
13968    are ordered topologically with MIPS I extensions listed last.  */
13969 
13970 static const struct mips_mach_extension mips_mach_extensions[] =
13971 {
13972   /* MIPS64r2 extensions.  */
13973   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
13974   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13975   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13976   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13977   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
13978 
13979   /* MIPS64 extensions.  */
13980   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13981   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13982   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13983 
13984   /* MIPS V extensions.  */
13985   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13986 
13987   /* R10000 extensions.  */
13988   { bfd_mach_mips12000, bfd_mach_mips10000 },
13989   { bfd_mach_mips14000, bfd_mach_mips10000 },
13990   { bfd_mach_mips16000, bfd_mach_mips10000 },
13991 
13992   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13993      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13994      better to allow vr5400 and vr5500 code to be merged anyway, since
13995      many libraries will just use the core ISA.  Perhaps we could add
13996      some sort of ASE flag if this ever proves a problem.  */
13997   { bfd_mach_mips5500, bfd_mach_mips5400 },
13998   { bfd_mach_mips5400, bfd_mach_mips5000 },
13999 
14000   /* MIPS IV extensions.  */
14001   { bfd_mach_mips5, bfd_mach_mips8000 },
14002   { bfd_mach_mips10000, bfd_mach_mips8000 },
14003   { bfd_mach_mips5000, bfd_mach_mips8000 },
14004   { bfd_mach_mips7000, bfd_mach_mips8000 },
14005   { bfd_mach_mips9000, bfd_mach_mips8000 },
14006 
14007   /* VR4100 extensions.  */
14008   { bfd_mach_mips4120, bfd_mach_mips4100 },
14009   { bfd_mach_mips4111, bfd_mach_mips4100 },
14010 
14011   /* MIPS III extensions.  */
14012   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14013   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14014   { bfd_mach_mips8000, bfd_mach_mips4000 },
14015   { bfd_mach_mips4650, bfd_mach_mips4000 },
14016   { bfd_mach_mips4600, bfd_mach_mips4000 },
14017   { bfd_mach_mips4400, bfd_mach_mips4000 },
14018   { bfd_mach_mips4300, bfd_mach_mips4000 },
14019   { bfd_mach_mips4100, bfd_mach_mips4000 },
14020   { bfd_mach_mips4010, bfd_mach_mips4000 },
14021   { bfd_mach_mips5900, bfd_mach_mips4000 },
14022 
14023   /* MIPS32 extensions.  */
14024   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14025 
14026   /* MIPS II extensions.  */
14027   { bfd_mach_mips4000, bfd_mach_mips6000 },
14028   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14029 
14030   /* MIPS I extensions.  */
14031   { bfd_mach_mips6000, bfd_mach_mips3000 },
14032   { bfd_mach_mips3900, bfd_mach_mips3000 }
14033 };
14034 
14035 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14036 
14037 static bfd_boolean
mips_mach_extends_p(unsigned long base,unsigned long extension)14038 mips_mach_extends_p (unsigned long base, unsigned long extension)
14039 {
14040   size_t i;
14041 
14042   if (extension == base)
14043     return TRUE;
14044 
14045   if (base == bfd_mach_mipsisa32
14046       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14047     return TRUE;
14048 
14049   if (base == bfd_mach_mipsisa32r2
14050       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14051     return TRUE;
14052 
14053   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14054     if (extension == mips_mach_extensions[i].extension)
14055       {
14056 	extension = mips_mach_extensions[i].base;
14057 	if (extension == base)
14058 	  return TRUE;
14059       }
14060 
14061   return FALSE;
14062 }
14063 
14064 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14065 
14066 static unsigned long
bfd_mips_isa_ext_mach(unsigned int isa_ext)14067 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14068 {
14069   switch (isa_ext)
14070     {
14071     case AFL_EXT_3900:        return bfd_mach_mips3900;
14072     case AFL_EXT_4010:        return bfd_mach_mips4010;
14073     case AFL_EXT_4100:        return bfd_mach_mips4100;
14074     case AFL_EXT_4111:        return bfd_mach_mips4111;
14075     case AFL_EXT_4120:        return bfd_mach_mips4120;
14076     case AFL_EXT_4650:        return bfd_mach_mips4650;
14077     case AFL_EXT_5400:        return bfd_mach_mips5400;
14078     case AFL_EXT_5500:        return bfd_mach_mips5500;
14079     case AFL_EXT_5900:        return bfd_mach_mips5900;
14080     case AFL_EXT_10000:       return bfd_mach_mips10000;
14081     case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14082     case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14083     case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
14084     case AFL_EXT_SB1:         return bfd_mach_mips_sb1;
14085     case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14086     case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14087     case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14088     case AFL_EXT_XLR:         return bfd_mach_mips_xlr;
14089     default:                  return bfd_mach_mips3000;
14090     }
14091 }
14092 
14093 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
14094 
14095 unsigned int
bfd_mips_isa_ext(bfd * abfd)14096 bfd_mips_isa_ext (bfd *abfd)
14097 {
14098   switch (bfd_get_mach (abfd))
14099     {
14100     case bfd_mach_mips3900:         return AFL_EXT_3900;
14101     case bfd_mach_mips4010:         return AFL_EXT_4010;
14102     case bfd_mach_mips4100:         return AFL_EXT_4100;
14103     case bfd_mach_mips4111:         return AFL_EXT_4111;
14104     case bfd_mach_mips4120:         return AFL_EXT_4120;
14105     case bfd_mach_mips4650:         return AFL_EXT_4650;
14106     case bfd_mach_mips5400:         return AFL_EXT_5400;
14107     case bfd_mach_mips5500:         return AFL_EXT_5500;
14108     case bfd_mach_mips5900:         return AFL_EXT_5900;
14109     case bfd_mach_mips10000:        return AFL_EXT_10000;
14110     case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14111     case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14112     case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
14113     case bfd_mach_mips_sb1:         return AFL_EXT_SB1;
14114     case bfd_mach_mips_octeon:      return AFL_EXT_OCTEON;
14115     case bfd_mach_mips_octeonp:     return AFL_EXT_OCTEONP;
14116     case bfd_mach_mips_octeon3:     return AFL_EXT_OCTEON3;
14117     case bfd_mach_mips_octeon2:     return AFL_EXT_OCTEON2;
14118     case bfd_mach_mips_xlr:         return AFL_EXT_XLR;
14119     default:                        return 0;
14120     }
14121 }
14122 
14123 /* Encode ISA level and revision as a single value.  */
14124 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14125 
14126 /* Decode a single value into level and revision.  */
14127 #define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14128 #define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14129 
14130 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14131 
14132 static void
update_mips_abiflags_isa(bfd * abfd,Elf_Internal_ABIFlags_v0 * abiflags)14133 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14134 {
14135   int new_isa = 0;
14136   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14137     {
14138     case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14139     case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14140     case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14141     case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14142     case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14143     case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14144     case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14145     case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14146     case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14147     case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14148     case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14149     default:
14150       (*_bfd_error_handler)
14151 	(_("%B: Unknown architecture %s"),
14152 	 abfd, bfd_printable_name (abfd));
14153     }
14154 
14155   if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14156     {
14157       abiflags->isa_level = ISA_LEVEL (new_isa);
14158       abiflags->isa_rev = ISA_REV (new_isa);
14159     }
14160 
14161   /* Update the isa_ext if ABFD describes a further extension.  */
14162   if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14163 			   bfd_get_mach (abfd)))
14164     abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14165 }
14166 
14167 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14168 
14169 static bfd_boolean
mips_32bit_flags_p(flagword flags)14170 mips_32bit_flags_p (flagword flags)
14171 {
14172   return ((flags & EF_MIPS_32BITMODE) != 0
14173 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14174 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14175 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14176 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14177 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14178 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14179 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14180 }
14181 
14182 /* Infer the content of the ABI flags based on the elf header.  */
14183 
14184 static void
infer_mips_abiflags(bfd * abfd,Elf_Internal_ABIFlags_v0 * abiflags)14185 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14186 {
14187   obj_attribute *in_attr;
14188 
14189   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14190   update_mips_abiflags_isa (abfd, abiflags);
14191 
14192   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14193     abiflags->gpr_size = AFL_REG_32;
14194   else
14195     abiflags->gpr_size = AFL_REG_64;
14196 
14197   abiflags->cpr1_size = AFL_REG_NONE;
14198 
14199   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14200   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14201 
14202   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14203       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14204       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14205 	  && abiflags->gpr_size == AFL_REG_32))
14206     abiflags->cpr1_size = AFL_REG_32;
14207   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14208 	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14209 	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14210     abiflags->cpr1_size = AFL_REG_64;
14211 
14212   abiflags->cpr2_size = AFL_REG_NONE;
14213 
14214   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14215     abiflags->ases |= AFL_ASE_MDMX;
14216   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14217     abiflags->ases |= AFL_ASE_MIPS16;
14218   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14219     abiflags->ases |= AFL_ASE_MICROMIPS;
14220 
14221   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14222       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14223       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14224       && abiflags->isa_level >= 32
14225       && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14226     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14227 }
14228 
14229 /* We need to use a special link routine to handle the .reginfo and
14230    the .mdebug sections.  We need to merge all instances of these
14231    sections together, not write them all out sequentially.  */
14232 
14233 bfd_boolean
_bfd_mips_elf_final_link(bfd * abfd,struct bfd_link_info * info)14234 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14235 {
14236   asection *o;
14237   struct bfd_link_order *p;
14238   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14239   asection *rtproc_sec, *abiflags_sec;
14240   Elf32_RegInfo reginfo;
14241   struct ecoff_debug_info debug;
14242   struct mips_htab_traverse_info hti;
14243   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14244   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14245   HDRR *symhdr = &debug.symbolic_header;
14246   void *mdebug_handle = NULL;
14247   asection *s;
14248   EXTR esym;
14249   unsigned int i;
14250   bfd_size_type amt;
14251   struct mips_elf_link_hash_table *htab;
14252 
14253   static const char * const secname[] =
14254   {
14255     ".text", ".init", ".fini", ".data",
14256     ".rodata", ".sdata", ".sbss", ".bss"
14257   };
14258   static const int sc[] =
14259   {
14260     scText, scInit, scFini, scData,
14261     scRData, scSData, scSBss, scBss
14262   };
14263 
14264   /* Sort the dynamic symbols so that those with GOT entries come after
14265      those without.  */
14266   htab = mips_elf_hash_table (info);
14267   BFD_ASSERT (htab != NULL);
14268 
14269   if (!mips_elf_sort_hash_table (abfd, info))
14270     return FALSE;
14271 
14272   /* Create any scheduled LA25 stubs.  */
14273   hti.info = info;
14274   hti.output_bfd = abfd;
14275   hti.error = FALSE;
14276   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14277   if (hti.error)
14278     return FALSE;
14279 
14280   /* Get a value for the GP register.  */
14281   if (elf_gp (abfd) == 0)
14282     {
14283       struct bfd_link_hash_entry *h;
14284 
14285       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14286       if (h != NULL && h->type == bfd_link_hash_defined)
14287 	elf_gp (abfd) = (h->u.def.value
14288 			 + h->u.def.section->output_section->vma
14289 			 + h->u.def.section->output_offset);
14290       else if (htab->is_vxworks
14291 	       && (h = bfd_link_hash_lookup (info->hash,
14292 					     "_GLOBAL_OFFSET_TABLE_",
14293 					     FALSE, FALSE, TRUE))
14294 	       && h->type == bfd_link_hash_defined)
14295 	elf_gp (abfd) = (h->u.def.section->output_section->vma
14296 			 + h->u.def.section->output_offset
14297 			 + h->u.def.value);
14298       else if (bfd_link_relocatable (info))
14299 	{
14300 	  bfd_vma lo = MINUS_ONE;
14301 
14302 	  /* Find the GP-relative section with the lowest offset.  */
14303 	  for (o = abfd->sections; o != NULL; o = o->next)
14304 	    if (o->vma < lo
14305 		&& (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14306 	      lo = o->vma;
14307 
14308 	  /* And calculate GP relative to that.  */
14309 	  elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14310 	}
14311       else
14312 	{
14313 	  /* If the relocate_section function needs to do a reloc
14314 	     involving the GP value, it should make a reloc_dangerous
14315 	     callback to warn that GP is not defined.  */
14316 	}
14317     }
14318 
14319   /* Go through the sections and collect the .reginfo and .mdebug
14320      information.  */
14321   abiflags_sec = NULL;
14322   reginfo_sec = NULL;
14323   mdebug_sec = NULL;
14324   gptab_data_sec = NULL;
14325   gptab_bss_sec = NULL;
14326   for (o = abfd->sections; o != NULL; o = o->next)
14327     {
14328       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14329 	{
14330 	  /* We have found the .MIPS.abiflags section in the output file.
14331 	     Look through all the link_orders comprising it and remove them.
14332 	     The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14333 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14334 	    {
14335 	      asection *input_section;
14336 
14337 	      if (p->type != bfd_indirect_link_order)
14338 		{
14339 		  if (p->type == bfd_data_link_order)
14340 		    continue;
14341 		  abort ();
14342 		}
14343 
14344 	      input_section = p->u.indirect.section;
14345 
14346 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14347 		 elf_link_input_bfd ignores this section.  */
14348 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14349 	    }
14350 
14351 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14352 	  BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14353 
14354 	  /* Skip this section later on (I don't think this currently
14355 	     matters, but someday it might).  */
14356 	  o->map_head.link_order = NULL;
14357 
14358 	  abiflags_sec = o;
14359 	}
14360 
14361       if (strcmp (o->name, ".reginfo") == 0)
14362 	{
14363 	  memset (&reginfo, 0, sizeof reginfo);
14364 
14365 	  /* We have found the .reginfo section in the output file.
14366 	     Look through all the link_orders comprising it and merge
14367 	     the information together.  */
14368 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14369 	    {
14370 	      asection *input_section;
14371 	      bfd *input_bfd;
14372 	      Elf32_External_RegInfo ext;
14373 	      Elf32_RegInfo sub;
14374 
14375 	      if (p->type != bfd_indirect_link_order)
14376 		{
14377 		  if (p->type == bfd_data_link_order)
14378 		    continue;
14379 		  abort ();
14380 		}
14381 
14382 	      input_section = p->u.indirect.section;
14383 	      input_bfd = input_section->owner;
14384 
14385 	      if (! bfd_get_section_contents (input_bfd, input_section,
14386 					      &ext, 0, sizeof ext))
14387 		return FALSE;
14388 
14389 	      bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14390 
14391 	      reginfo.ri_gprmask |= sub.ri_gprmask;
14392 	      reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14393 	      reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14394 	      reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14395 	      reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14396 
14397 	      /* ri_gp_value is set by the function
14398 		 mips_elf32_section_processing when the section is
14399 		 finally written out.  */
14400 
14401 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14402 		 elf_link_input_bfd ignores this section.  */
14403 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14404 	    }
14405 
14406 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14407 	  BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14408 
14409 	  /* Skip this section later on (I don't think this currently
14410 	     matters, but someday it might).  */
14411 	  o->map_head.link_order = NULL;
14412 
14413 	  reginfo_sec = o;
14414 	}
14415 
14416       if (strcmp (o->name, ".mdebug") == 0)
14417 	{
14418 	  struct extsym_info einfo;
14419 	  bfd_vma last;
14420 
14421 	  /* We have found the .mdebug section in the output file.
14422 	     Look through all the link_orders comprising it and merge
14423 	     the information together.  */
14424 	  symhdr->magic = swap->sym_magic;
14425 	  /* FIXME: What should the version stamp be?  */
14426 	  symhdr->vstamp = 0;
14427 	  symhdr->ilineMax = 0;
14428 	  symhdr->cbLine = 0;
14429 	  symhdr->idnMax = 0;
14430 	  symhdr->ipdMax = 0;
14431 	  symhdr->isymMax = 0;
14432 	  symhdr->ioptMax = 0;
14433 	  symhdr->iauxMax = 0;
14434 	  symhdr->issMax = 0;
14435 	  symhdr->issExtMax = 0;
14436 	  symhdr->ifdMax = 0;
14437 	  symhdr->crfd = 0;
14438 	  symhdr->iextMax = 0;
14439 
14440 	  /* We accumulate the debugging information itself in the
14441 	     debug_info structure.  */
14442 	  debug.line = NULL;
14443 	  debug.external_dnr = NULL;
14444 	  debug.external_pdr = NULL;
14445 	  debug.external_sym = NULL;
14446 	  debug.external_opt = NULL;
14447 	  debug.external_aux = NULL;
14448 	  debug.ss = NULL;
14449 	  debug.ssext = debug.ssext_end = NULL;
14450 	  debug.external_fdr = NULL;
14451 	  debug.external_rfd = NULL;
14452 	  debug.external_ext = debug.external_ext_end = NULL;
14453 
14454 	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14455 	  if (mdebug_handle == NULL)
14456 	    return FALSE;
14457 
14458 	  esym.jmptbl = 0;
14459 	  esym.cobol_main = 0;
14460 	  esym.weakext = 0;
14461 	  esym.reserved = 0;
14462 	  esym.ifd = ifdNil;
14463 	  esym.asym.iss = issNil;
14464 	  esym.asym.st = stLocal;
14465 	  esym.asym.reserved = 0;
14466 	  esym.asym.index = indexNil;
14467 	  last = 0;
14468 	  for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14469 	    {
14470 	      esym.asym.sc = sc[i];
14471 	      s = bfd_get_section_by_name (abfd, secname[i]);
14472 	      if (s != NULL)
14473 		{
14474 		  esym.asym.value = s->vma;
14475 		  last = s->vma + s->size;
14476 		}
14477 	      else
14478 		esym.asym.value = last;
14479 	      if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14480 						 secname[i], &esym))
14481 		return FALSE;
14482 	    }
14483 
14484 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14485 	    {
14486 	      asection *input_section;
14487 	      bfd *input_bfd;
14488 	      const struct ecoff_debug_swap *input_swap;
14489 	      struct ecoff_debug_info input_debug;
14490 	      char *eraw_src;
14491 	      char *eraw_end;
14492 
14493 	      if (p->type != bfd_indirect_link_order)
14494 		{
14495 		  if (p->type == bfd_data_link_order)
14496 		    continue;
14497 		  abort ();
14498 		}
14499 
14500 	      input_section = p->u.indirect.section;
14501 	      input_bfd = input_section->owner;
14502 
14503 	      if (!is_mips_elf (input_bfd))
14504 		{
14505 		  /* I don't know what a non MIPS ELF bfd would be
14506 		     doing with a .mdebug section, but I don't really
14507 		     want to deal with it.  */
14508 		  continue;
14509 		}
14510 
14511 	      input_swap = (get_elf_backend_data (input_bfd)
14512 			    ->elf_backend_ecoff_debug_swap);
14513 
14514 	      BFD_ASSERT (p->size == input_section->size);
14515 
14516 	      /* The ECOFF linking code expects that we have already
14517 		 read in the debugging information and set up an
14518 		 ecoff_debug_info structure, so we do that now.  */
14519 	      if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14520 						   &input_debug))
14521 		return FALSE;
14522 
14523 	      if (! (bfd_ecoff_debug_accumulate
14524 		     (mdebug_handle, abfd, &debug, swap, input_bfd,
14525 		      &input_debug, input_swap, info)))
14526 		return FALSE;
14527 
14528 	      /* Loop through the external symbols.  For each one with
14529 		 interesting information, try to find the symbol in
14530 		 the linker global hash table and save the information
14531 		 for the output external symbols.  */
14532 	      eraw_src = input_debug.external_ext;
14533 	      eraw_end = (eraw_src
14534 			  + (input_debug.symbolic_header.iextMax
14535 			     * input_swap->external_ext_size));
14536 	      for (;
14537 		   eraw_src < eraw_end;
14538 		   eraw_src += input_swap->external_ext_size)
14539 		{
14540 		  EXTR ext;
14541 		  const char *name;
14542 		  struct mips_elf_link_hash_entry *h;
14543 
14544 		  (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14545 		  if (ext.asym.sc == scNil
14546 		      || ext.asym.sc == scUndefined
14547 		      || ext.asym.sc == scSUndefined)
14548 		    continue;
14549 
14550 		  name = input_debug.ssext + ext.asym.iss;
14551 		  h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14552 						 name, FALSE, FALSE, TRUE);
14553 		  if (h == NULL || h->esym.ifd != -2)
14554 		    continue;
14555 
14556 		  if (ext.ifd != -1)
14557 		    {
14558 		      BFD_ASSERT (ext.ifd
14559 				  < input_debug.symbolic_header.ifdMax);
14560 		      ext.ifd = input_debug.ifdmap[ext.ifd];
14561 		    }
14562 
14563 		  h->esym = ext;
14564 		}
14565 
14566 	      /* Free up the information we just read.  */
14567 	      free (input_debug.line);
14568 	      free (input_debug.external_dnr);
14569 	      free (input_debug.external_pdr);
14570 	      free (input_debug.external_sym);
14571 	      free (input_debug.external_opt);
14572 	      free (input_debug.external_aux);
14573 	      free (input_debug.ss);
14574 	      free (input_debug.ssext);
14575 	      free (input_debug.external_fdr);
14576 	      free (input_debug.external_rfd);
14577 	      free (input_debug.external_ext);
14578 
14579 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14580 		 elf_link_input_bfd ignores this section.  */
14581 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14582 	    }
14583 
14584 	  if (SGI_COMPAT (abfd) && bfd_link_pic (info))
14585 	    {
14586 	      /* Create .rtproc section.  */
14587 	      rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14588 	      if (rtproc_sec == NULL)
14589 		{
14590 		  flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14591 				    | SEC_LINKER_CREATED | SEC_READONLY);
14592 
14593 		  rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14594 								   ".rtproc",
14595 								   flags);
14596 		  if (rtproc_sec == NULL
14597 		      || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14598 		    return FALSE;
14599 		}
14600 
14601 	      if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14602 						     info, rtproc_sec,
14603 						     &debug))
14604 		return FALSE;
14605 	    }
14606 
14607 	  /* Build the external symbol information.  */
14608 	  einfo.abfd = abfd;
14609 	  einfo.info = info;
14610 	  einfo.debug = &debug;
14611 	  einfo.swap = swap;
14612 	  einfo.failed = FALSE;
14613 	  mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14614 				       mips_elf_output_extsym, &einfo);
14615 	  if (einfo.failed)
14616 	    return FALSE;
14617 
14618 	  /* Set the size of the .mdebug section.  */
14619 	  o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14620 
14621 	  /* Skip this section later on (I don't think this currently
14622 	     matters, but someday it might).  */
14623 	  o->map_head.link_order = NULL;
14624 
14625 	  mdebug_sec = o;
14626 	}
14627 
14628       if (CONST_STRNEQ (o->name, ".gptab."))
14629 	{
14630 	  const char *subname;
14631 	  unsigned int c;
14632 	  Elf32_gptab *tab;
14633 	  Elf32_External_gptab *ext_tab;
14634 	  unsigned int j;
14635 
14636 	  /* The .gptab.sdata and .gptab.sbss sections hold
14637 	     information describing how the small data area would
14638 	     change depending upon the -G switch.  These sections
14639 	     not used in executables files.  */
14640 	  if (! bfd_link_relocatable (info))
14641 	    {
14642 	      for (p = o->map_head.link_order; p != NULL; p = p->next)
14643 		{
14644 		  asection *input_section;
14645 
14646 		  if (p->type != bfd_indirect_link_order)
14647 		    {
14648 		      if (p->type == bfd_data_link_order)
14649 			continue;
14650 		      abort ();
14651 		    }
14652 
14653 		  input_section = p->u.indirect.section;
14654 
14655 		  /* Hack: reset the SEC_HAS_CONTENTS flag so that
14656 		     elf_link_input_bfd ignores this section.  */
14657 		  input_section->flags &= ~SEC_HAS_CONTENTS;
14658 		}
14659 
14660 	      /* Skip this section later on (I don't think this
14661 		 currently matters, but someday it might).  */
14662 	      o->map_head.link_order = NULL;
14663 
14664 	      /* Really remove the section.  */
14665 	      bfd_section_list_remove (abfd, o);
14666 	      --abfd->section_count;
14667 
14668 	      continue;
14669 	    }
14670 
14671 	  /* There is one gptab for initialized data, and one for
14672 	     uninitialized data.  */
14673 	  if (strcmp (o->name, ".gptab.sdata") == 0)
14674 	    gptab_data_sec = o;
14675 	  else if (strcmp (o->name, ".gptab.sbss") == 0)
14676 	    gptab_bss_sec = o;
14677 	  else
14678 	    {
14679 	      (*_bfd_error_handler)
14680 		(_("%s: illegal section name `%s'"),
14681 		 bfd_get_filename (abfd), o->name);
14682 	      bfd_set_error (bfd_error_nonrepresentable_section);
14683 	      return FALSE;
14684 	    }
14685 
14686 	  /* The linker script always combines .gptab.data and
14687 	     .gptab.sdata into .gptab.sdata, and likewise for
14688 	     .gptab.bss and .gptab.sbss.  It is possible that there is
14689 	     no .sdata or .sbss section in the output file, in which
14690 	     case we must change the name of the output section.  */
14691 	  subname = o->name + sizeof ".gptab" - 1;
14692 	  if (bfd_get_section_by_name (abfd, subname) == NULL)
14693 	    {
14694 	      if (o == gptab_data_sec)
14695 		o->name = ".gptab.data";
14696 	      else
14697 		o->name = ".gptab.bss";
14698 	      subname = o->name + sizeof ".gptab" - 1;
14699 	      BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14700 	    }
14701 
14702 	  /* Set up the first entry.  */
14703 	  c = 1;
14704 	  amt = c * sizeof (Elf32_gptab);
14705 	  tab = bfd_malloc (amt);
14706 	  if (tab == NULL)
14707 	    return FALSE;
14708 	  tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14709 	  tab[0].gt_header.gt_unused = 0;
14710 
14711 	  /* Combine the input sections.  */
14712 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14713 	    {
14714 	      asection *input_section;
14715 	      bfd *input_bfd;
14716 	      bfd_size_type size;
14717 	      unsigned long last;
14718 	      bfd_size_type gpentry;
14719 
14720 	      if (p->type != bfd_indirect_link_order)
14721 		{
14722 		  if (p->type == bfd_data_link_order)
14723 		    continue;
14724 		  abort ();
14725 		}
14726 
14727 	      input_section = p->u.indirect.section;
14728 	      input_bfd = input_section->owner;
14729 
14730 	      /* Combine the gptab entries for this input section one
14731 		 by one.  We know that the input gptab entries are
14732 		 sorted by ascending -G value.  */
14733 	      size = input_section->size;
14734 	      last = 0;
14735 	      for (gpentry = sizeof (Elf32_External_gptab);
14736 		   gpentry < size;
14737 		   gpentry += sizeof (Elf32_External_gptab))
14738 		{
14739 		  Elf32_External_gptab ext_gptab;
14740 		  Elf32_gptab int_gptab;
14741 		  unsigned long val;
14742 		  unsigned long add;
14743 		  bfd_boolean exact;
14744 		  unsigned int look;
14745 
14746 		  if (! (bfd_get_section_contents
14747 			 (input_bfd, input_section, &ext_gptab, gpentry,
14748 			  sizeof (Elf32_External_gptab))))
14749 		    {
14750 		      free (tab);
14751 		      return FALSE;
14752 		    }
14753 
14754 		  bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14755 						&int_gptab);
14756 		  val = int_gptab.gt_entry.gt_g_value;
14757 		  add = int_gptab.gt_entry.gt_bytes - last;
14758 
14759 		  exact = FALSE;
14760 		  for (look = 1; look < c; look++)
14761 		    {
14762 		      if (tab[look].gt_entry.gt_g_value >= val)
14763 			tab[look].gt_entry.gt_bytes += add;
14764 
14765 		      if (tab[look].gt_entry.gt_g_value == val)
14766 			exact = TRUE;
14767 		    }
14768 
14769 		  if (! exact)
14770 		    {
14771 		      Elf32_gptab *new_tab;
14772 		      unsigned int max;
14773 
14774 		      /* We need a new table entry.  */
14775 		      amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14776 		      new_tab = bfd_realloc (tab, amt);
14777 		      if (new_tab == NULL)
14778 			{
14779 			  free (tab);
14780 			  return FALSE;
14781 			}
14782 		      tab = new_tab;
14783 		      tab[c].gt_entry.gt_g_value = val;
14784 		      tab[c].gt_entry.gt_bytes = add;
14785 
14786 		      /* Merge in the size for the next smallest -G
14787 			 value, since that will be implied by this new
14788 			 value.  */
14789 		      max = 0;
14790 		      for (look = 1; look < c; look++)
14791 			{
14792 			  if (tab[look].gt_entry.gt_g_value < val
14793 			      && (max == 0
14794 				  || (tab[look].gt_entry.gt_g_value
14795 				      > tab[max].gt_entry.gt_g_value)))
14796 			    max = look;
14797 			}
14798 		      if (max != 0)
14799 			tab[c].gt_entry.gt_bytes +=
14800 			  tab[max].gt_entry.gt_bytes;
14801 
14802 		      ++c;
14803 		    }
14804 
14805 		  last = int_gptab.gt_entry.gt_bytes;
14806 		}
14807 
14808 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14809 		 elf_link_input_bfd ignores this section.  */
14810 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14811 	    }
14812 
14813 	  /* The table must be sorted by -G value.  */
14814 	  if (c > 2)
14815 	    qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14816 
14817 	  /* Swap out the table.  */
14818 	  amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14819 	  ext_tab = bfd_alloc (abfd, amt);
14820 	  if (ext_tab == NULL)
14821 	    {
14822 	      free (tab);
14823 	      return FALSE;
14824 	    }
14825 
14826 	  for (j = 0; j < c; j++)
14827 	    bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14828 	  free (tab);
14829 
14830 	  o->size = c * sizeof (Elf32_External_gptab);
14831 	  o->contents = (bfd_byte *) ext_tab;
14832 
14833 	  /* Skip this section later on (I don't think this currently
14834 	     matters, but someday it might).  */
14835 	  o->map_head.link_order = NULL;
14836 	}
14837     }
14838 
14839   /* Invoke the regular ELF backend linker to do all the work.  */
14840   if (!bfd_elf_final_link (abfd, info))
14841     return FALSE;
14842 
14843   /* Now write out the computed sections.  */
14844 
14845   if (abiflags_sec != NULL)
14846     {
14847       Elf_External_ABIFlags_v0 ext;
14848       Elf_Internal_ABIFlags_v0 *abiflags;
14849 
14850       abiflags = &mips_elf_tdata (abfd)->abiflags;
14851 
14852       /* Set up the abiflags if no valid input sections were found.  */
14853       if (!mips_elf_tdata (abfd)->abiflags_valid)
14854 	{
14855 	  infer_mips_abiflags (abfd, abiflags);
14856 	  mips_elf_tdata (abfd)->abiflags_valid = TRUE;
14857 	}
14858       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
14859       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
14860 	return FALSE;
14861     }
14862 
14863   if (reginfo_sec != NULL)
14864     {
14865       Elf32_External_RegInfo ext;
14866 
14867       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
14868       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
14869 	return FALSE;
14870     }
14871 
14872   if (mdebug_sec != NULL)
14873     {
14874       BFD_ASSERT (abfd->output_has_begun);
14875       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
14876 					       swap, info,
14877 					       mdebug_sec->filepos))
14878 	return FALSE;
14879 
14880       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
14881     }
14882 
14883   if (gptab_data_sec != NULL)
14884     {
14885       if (! bfd_set_section_contents (abfd, gptab_data_sec,
14886 				      gptab_data_sec->contents,
14887 				      0, gptab_data_sec->size))
14888 	return FALSE;
14889     }
14890 
14891   if (gptab_bss_sec != NULL)
14892     {
14893       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
14894 				      gptab_bss_sec->contents,
14895 				      0, gptab_bss_sec->size))
14896 	return FALSE;
14897     }
14898 
14899   if (SGI_COMPAT (abfd))
14900     {
14901       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
14902       if (rtproc_sec != NULL)
14903 	{
14904 	  if (! bfd_set_section_contents (abfd, rtproc_sec,
14905 					  rtproc_sec->contents,
14906 					  0, rtproc_sec->size))
14907 	    return FALSE;
14908 	}
14909     }
14910 
14911   return TRUE;
14912 }
14913 
14914 /* Merge object file header flags from IBFD into OBFD.  Raise an error
14915    if there are conflicting settings.  */
14916 
14917 static bfd_boolean
mips_elf_merge_obj_e_flags(bfd * ibfd,bfd * obfd)14918 mips_elf_merge_obj_e_flags (bfd *ibfd, bfd *obfd)
14919 {
14920   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
14921   flagword old_flags;
14922   flagword new_flags;
14923   bfd_boolean ok;
14924 
14925   new_flags = elf_elfheader (ibfd)->e_flags;
14926   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
14927   old_flags = elf_elfheader (obfd)->e_flags;
14928 
14929   /* Check flag compatibility.  */
14930 
14931   new_flags &= ~EF_MIPS_NOREORDER;
14932   old_flags &= ~EF_MIPS_NOREORDER;
14933 
14934   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14935      doesn't seem to matter.  */
14936   new_flags &= ~EF_MIPS_XGOT;
14937   old_flags &= ~EF_MIPS_XGOT;
14938 
14939   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14940      just be able to ignore this.  */
14941   new_flags &= ~EF_MIPS_UCODE;
14942   old_flags &= ~EF_MIPS_UCODE;
14943 
14944   /* DSOs should only be linked with CPIC code.  */
14945   if ((ibfd->flags & DYNAMIC) != 0)
14946     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14947 
14948   if (new_flags == old_flags)
14949     return TRUE;
14950 
14951   ok = TRUE;
14952 
14953   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14954       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14955     {
14956       (*_bfd_error_handler)
14957 	(_("%B: warning: linking abicalls files with non-abicalls files"),
14958 	 ibfd);
14959       ok = TRUE;
14960     }
14961 
14962   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14963     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14964   if (! (new_flags & EF_MIPS_PIC))
14965     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14966 
14967   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14968   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14969 
14970   /* Compare the ISAs.  */
14971   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14972     {
14973       (*_bfd_error_handler)
14974 	(_("%B: linking 32-bit code with 64-bit code"),
14975 	 ibfd);
14976       ok = FALSE;
14977     }
14978   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14979     {
14980       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14981       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14982 	{
14983 	  /* Copy the architecture info from IBFD to OBFD.  Also copy
14984 	     the 32-bit flag (if set) so that we continue to recognise
14985 	     OBFD as a 32-bit binary.  */
14986 	  bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14987 	  elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14988 	  elf_elfheader (obfd)->e_flags
14989 	    |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14990 
14991 	  /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
14992 	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
14993 
14994 	  /* Copy across the ABI flags if OBFD doesn't use them
14995 	     and if that was what caused us to treat IBFD as 32-bit.  */
14996 	  if ((old_flags & EF_MIPS_ABI) == 0
14997 	      && mips_32bit_flags_p (new_flags)
14998 	      && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14999 	    elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15000 	}
15001       else
15002 	{
15003 	  /* The ISAs aren't compatible.  */
15004 	  (*_bfd_error_handler)
15005 	    (_("%B: linking %s module with previous %s modules"),
15006 	     ibfd,
15007 	     bfd_printable_name (ibfd),
15008 	     bfd_printable_name (obfd));
15009 	  ok = FALSE;
15010 	}
15011     }
15012 
15013   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15014   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15015 
15016   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
15017      does set EI_CLASS differently from any 32-bit ABI.  */
15018   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15019       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15020 	  != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15021     {
15022       /* Only error if both are set (to different values).  */
15023       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15024 	  || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15025 	      != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15026 	{
15027 	  (*_bfd_error_handler)
15028 	    (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15029 	     ibfd,
15030 	     elf_mips_abi_name (ibfd),
15031 	     elf_mips_abi_name (obfd));
15032 	  ok = FALSE;
15033 	}
15034       new_flags &= ~EF_MIPS_ABI;
15035       old_flags &= ~EF_MIPS_ABI;
15036     }
15037 
15038   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15039      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15040   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15041     {
15042       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15043       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15044       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15045       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15046       int micro_mis = old_m16 && new_micro;
15047       int m16_mis = old_micro && new_m16;
15048 
15049       if (m16_mis || micro_mis)
15050 	{
15051 	  (*_bfd_error_handler)
15052 	    (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15053 	     ibfd,
15054 	     m16_mis ? "MIPS16" : "microMIPS",
15055 	     m16_mis ? "microMIPS" : "MIPS16");
15056 	  ok = FALSE;
15057 	}
15058 
15059       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15060 
15061       new_flags &= ~ EF_MIPS_ARCH_ASE;
15062       old_flags &= ~ EF_MIPS_ARCH_ASE;
15063     }
15064 
15065   /* Compare NaN encodings.  */
15066   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15067     {
15068       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15069 			  ibfd,
15070 			  (new_flags & EF_MIPS_NAN2008
15071 			   ? "-mnan=2008" : "-mnan=legacy"),
15072 			  (old_flags & EF_MIPS_NAN2008
15073 			   ? "-mnan=2008" : "-mnan=legacy"));
15074       ok = FALSE;
15075       new_flags &= ~EF_MIPS_NAN2008;
15076       old_flags &= ~EF_MIPS_NAN2008;
15077     }
15078 
15079   /* Compare FP64 state.  */
15080   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15081     {
15082       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15083 			  ibfd,
15084 			  (new_flags & EF_MIPS_FP64
15085 			   ? "-mfp64" : "-mfp32"),
15086 			  (old_flags & EF_MIPS_FP64
15087 			   ? "-mfp64" : "-mfp32"));
15088       ok = FALSE;
15089       new_flags &= ~EF_MIPS_FP64;
15090       old_flags &= ~EF_MIPS_FP64;
15091     }
15092 
15093   /* Warn about any other mismatches */
15094   if (new_flags != old_flags)
15095     {
15096       (*_bfd_error_handler)
15097 	(_("%B: uses different e_flags (0x%lx) fields than previous modules "
15098 	   "(0x%lx)"),
15099 	 ibfd, (unsigned long) new_flags,
15100 	 (unsigned long) old_flags);
15101       ok = FALSE;
15102     }
15103 
15104   return ok;
15105 }
15106 
15107 /* Merge object attributes from IBFD into OBFD.  Raise an error if
15108    there are conflicting attributes.  */
15109 static bfd_boolean
mips_elf_merge_obj_attributes(bfd * ibfd,bfd * obfd)15110 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
15111 {
15112   obj_attribute *in_attr;
15113   obj_attribute *out_attr;
15114   bfd *abi_fp_bfd;
15115   bfd *abi_msa_bfd;
15116 
15117   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15118   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15119   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15120     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15121 
15122   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15123   if (!abi_msa_bfd
15124       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15125     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15126 
15127   if (!elf_known_obj_attributes_proc (obfd)[0].i)
15128     {
15129       /* This is the first object.  Copy the attributes.  */
15130       _bfd_elf_copy_obj_attributes (ibfd, obfd);
15131 
15132       /* Use the Tag_null value to indicate the attributes have been
15133 	 initialized.  */
15134       elf_known_obj_attributes_proc (obfd)[0].i = 1;
15135 
15136       return TRUE;
15137     }
15138 
15139   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15140      non-conflicting ones.  */
15141   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15142   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15143     {
15144       int out_fp, in_fp;
15145 
15146       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15147       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15148       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15149       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15150 	out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15151       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15152 	       && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15153 		   || in_fp == Val_GNU_MIPS_ABI_FP_64
15154 		   || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15155 	{
15156 	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15157 	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15158 	}
15159       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15160 	       && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15161 		   || out_fp == Val_GNU_MIPS_ABI_FP_64
15162 		   || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15163 	/* Keep the current setting.  */;
15164       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15165 	       && in_fp == Val_GNU_MIPS_ABI_FP_64)
15166 	{
15167 	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15168 	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15169 	}
15170       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15171 	       && out_fp == Val_GNU_MIPS_ABI_FP_64)
15172 	/* Keep the current setting.  */;
15173       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15174 	{
15175 	  const char *out_string, *in_string;
15176 
15177 	  out_string = _bfd_mips_fp_abi_string (out_fp);
15178 	  in_string = _bfd_mips_fp_abi_string (in_fp);
15179 	  /* First warn about cases involving unrecognised ABIs.  */
15180 	  if (!out_string && !in_string)
15181 	    _bfd_error_handler
15182 	      (_("Warning: %B uses unknown floating point ABI %d "
15183 		 "(set by %B), %B uses unknown floating point ABI %d"),
15184 	       obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
15185 	  else if (!out_string)
15186 	    _bfd_error_handler
15187 	      (_("Warning: %B uses unknown floating point ABI %d "
15188 		 "(set by %B), %B uses %s"),
15189 	       obfd, abi_fp_bfd, ibfd, out_fp, in_string);
15190 	  else if (!in_string)
15191 	    _bfd_error_handler
15192 	      (_("Warning: %B uses %s (set by %B), "
15193 		 "%B uses unknown floating point ABI %d"),
15194 	       obfd, abi_fp_bfd, ibfd, out_string, in_fp);
15195 	  else
15196 	    {
15197 	      /* If one of the bfds is soft-float, the other must be
15198 		 hard-float.  The exact choice of hard-float ABI isn't
15199 		 really relevant to the error message.  */
15200 	      if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15201 		out_string = "-mhard-float";
15202 	      else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15203 		in_string = "-mhard-float";
15204 	      _bfd_error_handler
15205 		(_("Warning: %B uses %s (set by %B), %B uses %s"),
15206 		 obfd, abi_fp_bfd, ibfd, out_string, in_string);
15207 	    }
15208 	}
15209     }
15210 
15211   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15212      non-conflicting ones.  */
15213   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15214     {
15215       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15216       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15217 	out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15218       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15219 	switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15220 	  {
15221 	  case Val_GNU_MIPS_ABI_MSA_128:
15222 	    _bfd_error_handler
15223 	      (_("Warning: %B uses %s (set by %B), "
15224 		 "%B uses unknown MSA ABI %d"),
15225 	       obfd, abi_msa_bfd, ibfd,
15226 	       "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15227 	    break;
15228 
15229 	  default:
15230 	    switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15231 	      {
15232 	      case Val_GNU_MIPS_ABI_MSA_128:
15233 		_bfd_error_handler
15234 		  (_("Warning: %B uses unknown MSA ABI %d "
15235 		     "(set by %B), %B uses %s"),
15236 		     obfd, abi_msa_bfd, ibfd,
15237 		     out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15238 		  break;
15239 
15240 	      default:
15241 		_bfd_error_handler
15242 		  (_("Warning: %B uses unknown MSA ABI %d "
15243 		     "(set by %B), %B uses unknown MSA ABI %d"),
15244 		   obfd, abi_msa_bfd, ibfd,
15245 		   out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15246 		   in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15247 		break;
15248 	      }
15249 	  }
15250     }
15251 
15252   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15253   return _bfd_elf_merge_object_attributes (ibfd, obfd);
15254 }
15255 
15256 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15257    there are conflicting settings.  */
15258 
15259 static bfd_boolean
mips_elf_merge_obj_abiflags(bfd * ibfd,bfd * obfd)15260 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15261 {
15262   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15263   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15264   struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15265 
15266   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15267   out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15268 
15269 #define max(a, b) ((a) > (b) ? (a) : (b))
15270   /* Merge abiflags.  */
15271   out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15272 				       in_tdata->abiflags.isa_level);
15273   out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15274 				     in_tdata->abiflags.isa_rev);
15275   out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15276 				      in_tdata->abiflags.gpr_size);
15277   out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15278 				       in_tdata->abiflags.cpr1_size);
15279   out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15280 				       in_tdata->abiflags.cpr2_size);
15281 #undef max
15282   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15283   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15284 
15285   return TRUE;
15286 }
15287 
15288 /* Merge backend specific data from an object file to the output
15289    object file when linking.  */
15290 
15291 bfd_boolean
_bfd_mips_elf_merge_private_bfd_data(bfd * ibfd,bfd * obfd)15292 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
15293 {
15294   struct mips_elf_obj_tdata *out_tdata;
15295   struct mips_elf_obj_tdata *in_tdata;
15296   bfd_boolean null_input_bfd = TRUE;
15297   asection *sec;
15298   bfd_boolean ok;
15299 
15300   /* Check if we have the same endianness.  */
15301   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
15302     {
15303       (*_bfd_error_handler)
15304 	(_("%B: endianness incompatible with that of the selected emulation"),
15305 	 ibfd);
15306       return FALSE;
15307     }
15308 
15309   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15310     return TRUE;
15311 
15312   in_tdata = mips_elf_tdata (ibfd);
15313   out_tdata = mips_elf_tdata (obfd);
15314 
15315   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15316     {
15317       (*_bfd_error_handler)
15318 	(_("%B: ABI is incompatible with that of the selected emulation"),
15319 	 ibfd);
15320       return FALSE;
15321     }
15322 
15323   /* Check to see if the input BFD actually contains any sections.  If not,
15324      then it has no attributes, and its flags may not have been initialized
15325      either, but it cannot actually cause any incompatibility.  */
15326   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15327     {
15328       /* Ignore synthetic sections and empty .text, .data and .bss sections
15329 	 which are automatically generated by gas.  Also ignore fake
15330 	 (s)common sections, since merely defining a common symbol does
15331 	 not affect compatibility.  */
15332       if ((sec->flags & SEC_IS_COMMON) == 0
15333 	  && strcmp (sec->name, ".reginfo")
15334 	  && strcmp (sec->name, ".mdebug")
15335 	  && (sec->size != 0
15336 	      || (strcmp (sec->name, ".text")
15337 		  && strcmp (sec->name, ".data")
15338 		  && strcmp (sec->name, ".bss"))))
15339 	{
15340 	  null_input_bfd = FALSE;
15341 	  break;
15342 	}
15343     }
15344   if (null_input_bfd)
15345     return TRUE;
15346 
15347   /* Populate abiflags using existing information.  */
15348   if (in_tdata->abiflags_valid)
15349     {
15350       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15351       Elf_Internal_ABIFlags_v0 in_abiflags;
15352       Elf_Internal_ABIFlags_v0 abiflags;
15353 
15354       /* Set up the FP ABI attribute from the abiflags if it is not already
15355          set.  */
15356       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15357         in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15358 
15359       infer_mips_abiflags (ibfd, &abiflags);
15360       in_abiflags = in_tdata->abiflags;
15361 
15362       /* It is not possible to infer the correct ISA revision
15363          for R3 or R5 so drop down to R2 for the checks.  */
15364       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15365 	in_abiflags.isa_rev = 2;
15366 
15367       if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15368 	  < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15369 	(*_bfd_error_handler)
15370 	  (_("%B: warning: Inconsistent ISA between e_flags and "
15371 	     ".MIPS.abiflags"), ibfd);
15372       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15373 	  && in_abiflags.fp_abi != abiflags.fp_abi)
15374 	(*_bfd_error_handler)
15375 	  (_("%B: warning: Inconsistent FP ABI between .gnu.attributes and "
15376 	     ".MIPS.abiflags"), ibfd);
15377       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15378 	(*_bfd_error_handler)
15379 	  (_("%B: warning: Inconsistent ASEs between e_flags and "
15380 	     ".MIPS.abiflags"), ibfd);
15381       /* The isa_ext is allowed to be an extension of what can be inferred
15382 	 from e_flags.  */
15383       if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15384 				bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15385 	(*_bfd_error_handler)
15386 	  (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15387 	     ".MIPS.abiflags"), ibfd);
15388       if (in_abiflags.flags2 != 0)
15389 	(*_bfd_error_handler)
15390 	  (_("%B: warning: Unexpected flag in the flags2 field of "
15391 	     ".MIPS.abiflags (0x%lx)"), ibfd,
15392 	   (unsigned long) in_abiflags.flags2);
15393     }
15394   else
15395     {
15396       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15397       in_tdata->abiflags_valid = TRUE;
15398     }
15399 
15400   if (!out_tdata->abiflags_valid)
15401     {
15402       /* Copy input abiflags if output abiflags are not already valid.  */
15403       out_tdata->abiflags = in_tdata->abiflags;
15404       out_tdata->abiflags_valid = TRUE;
15405     }
15406 
15407   if (! elf_flags_init (obfd))
15408     {
15409       elf_flags_init (obfd) = TRUE;
15410       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15411       elf_elfheader (obfd)->e_ident[EI_CLASS]
15412 	= elf_elfheader (ibfd)->e_ident[EI_CLASS];
15413 
15414       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15415 	  && (bfd_get_arch_info (obfd)->the_default
15416 	      || mips_mach_extends_p (bfd_get_mach (obfd),
15417 				      bfd_get_mach (ibfd))))
15418 	{
15419 	  if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15420 				   bfd_get_mach (ibfd)))
15421 	    return FALSE;
15422 
15423 	  /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15424 	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15425 	}
15426 
15427       ok = TRUE;
15428     }
15429   else
15430     ok = mips_elf_merge_obj_e_flags (ibfd, obfd);
15431 
15432   ok = mips_elf_merge_obj_attributes (ibfd, obfd) && ok;
15433 
15434   ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15435 
15436   if (!ok)
15437     {
15438       bfd_set_error (bfd_error_bad_value);
15439       return FALSE;
15440     }
15441 
15442   return TRUE;
15443 }
15444 
15445 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15446 
15447 bfd_boolean
_bfd_mips_elf_set_private_flags(bfd * abfd,flagword flags)15448 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15449 {
15450   BFD_ASSERT (!elf_flags_init (abfd)
15451 	      || elf_elfheader (abfd)->e_flags == flags);
15452 
15453   elf_elfheader (abfd)->e_flags = flags;
15454   elf_flags_init (abfd) = TRUE;
15455   return TRUE;
15456 }
15457 
15458 char *
_bfd_mips_elf_get_target_dtag(bfd_vma dtag)15459 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15460 {
15461   switch (dtag)
15462     {
15463     default: return "";
15464     case DT_MIPS_RLD_VERSION:
15465       return "MIPS_RLD_VERSION";
15466     case DT_MIPS_TIME_STAMP:
15467       return "MIPS_TIME_STAMP";
15468     case DT_MIPS_ICHECKSUM:
15469       return "MIPS_ICHECKSUM";
15470     case DT_MIPS_IVERSION:
15471       return "MIPS_IVERSION";
15472     case DT_MIPS_FLAGS:
15473       return "MIPS_FLAGS";
15474     case DT_MIPS_BASE_ADDRESS:
15475       return "MIPS_BASE_ADDRESS";
15476     case DT_MIPS_MSYM:
15477       return "MIPS_MSYM";
15478     case DT_MIPS_CONFLICT:
15479       return "MIPS_CONFLICT";
15480     case DT_MIPS_LIBLIST:
15481       return "MIPS_LIBLIST";
15482     case DT_MIPS_LOCAL_GOTNO:
15483       return "MIPS_LOCAL_GOTNO";
15484     case DT_MIPS_CONFLICTNO:
15485       return "MIPS_CONFLICTNO";
15486     case DT_MIPS_LIBLISTNO:
15487       return "MIPS_LIBLISTNO";
15488     case DT_MIPS_SYMTABNO:
15489       return "MIPS_SYMTABNO";
15490     case DT_MIPS_UNREFEXTNO:
15491       return "MIPS_UNREFEXTNO";
15492     case DT_MIPS_GOTSYM:
15493       return "MIPS_GOTSYM";
15494     case DT_MIPS_HIPAGENO:
15495       return "MIPS_HIPAGENO";
15496     case DT_MIPS_RLD_MAP:
15497       return "MIPS_RLD_MAP";
15498     case DT_MIPS_RLD_MAP_REL:
15499       return "MIPS_RLD_MAP_REL";
15500     case DT_MIPS_DELTA_CLASS:
15501       return "MIPS_DELTA_CLASS";
15502     case DT_MIPS_DELTA_CLASS_NO:
15503       return "MIPS_DELTA_CLASS_NO";
15504     case DT_MIPS_DELTA_INSTANCE:
15505       return "MIPS_DELTA_INSTANCE";
15506     case DT_MIPS_DELTA_INSTANCE_NO:
15507       return "MIPS_DELTA_INSTANCE_NO";
15508     case DT_MIPS_DELTA_RELOC:
15509       return "MIPS_DELTA_RELOC";
15510     case DT_MIPS_DELTA_RELOC_NO:
15511       return "MIPS_DELTA_RELOC_NO";
15512     case DT_MIPS_DELTA_SYM:
15513       return "MIPS_DELTA_SYM";
15514     case DT_MIPS_DELTA_SYM_NO:
15515       return "MIPS_DELTA_SYM_NO";
15516     case DT_MIPS_DELTA_CLASSSYM:
15517       return "MIPS_DELTA_CLASSSYM";
15518     case DT_MIPS_DELTA_CLASSSYM_NO:
15519       return "MIPS_DELTA_CLASSSYM_NO";
15520     case DT_MIPS_CXX_FLAGS:
15521       return "MIPS_CXX_FLAGS";
15522     case DT_MIPS_PIXIE_INIT:
15523       return "MIPS_PIXIE_INIT";
15524     case DT_MIPS_SYMBOL_LIB:
15525       return "MIPS_SYMBOL_LIB";
15526     case DT_MIPS_LOCALPAGE_GOTIDX:
15527       return "MIPS_LOCALPAGE_GOTIDX";
15528     case DT_MIPS_LOCAL_GOTIDX:
15529       return "MIPS_LOCAL_GOTIDX";
15530     case DT_MIPS_HIDDEN_GOTIDX:
15531       return "MIPS_HIDDEN_GOTIDX";
15532     case DT_MIPS_PROTECTED_GOTIDX:
15533       return "MIPS_PROTECTED_GOT_IDX";
15534     case DT_MIPS_OPTIONS:
15535       return "MIPS_OPTIONS";
15536     case DT_MIPS_INTERFACE:
15537       return "MIPS_INTERFACE";
15538     case DT_MIPS_DYNSTR_ALIGN:
15539       return "DT_MIPS_DYNSTR_ALIGN";
15540     case DT_MIPS_INTERFACE_SIZE:
15541       return "DT_MIPS_INTERFACE_SIZE";
15542     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15543       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15544     case DT_MIPS_PERF_SUFFIX:
15545       return "DT_MIPS_PERF_SUFFIX";
15546     case DT_MIPS_COMPACT_SIZE:
15547       return "DT_MIPS_COMPACT_SIZE";
15548     case DT_MIPS_GP_VALUE:
15549       return "DT_MIPS_GP_VALUE";
15550     case DT_MIPS_AUX_DYNAMIC:
15551       return "DT_MIPS_AUX_DYNAMIC";
15552     case DT_MIPS_PLTGOT:
15553       return "DT_MIPS_PLTGOT";
15554     case DT_MIPS_RWPLT:
15555       return "DT_MIPS_RWPLT";
15556     }
15557 }
15558 
15559 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15560    not known.  */
15561 
15562 const char *
_bfd_mips_fp_abi_string(int fp)15563 _bfd_mips_fp_abi_string (int fp)
15564 {
15565   switch (fp)
15566     {
15567       /* These strings aren't translated because they're simply
15568 	 option lists.  */
15569     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15570       return "-mdouble-float";
15571 
15572     case Val_GNU_MIPS_ABI_FP_SINGLE:
15573       return "-msingle-float";
15574 
15575     case Val_GNU_MIPS_ABI_FP_SOFT:
15576       return "-msoft-float";
15577 
15578     case Val_GNU_MIPS_ABI_FP_OLD_64:
15579       return _("-mips32r2 -mfp64 (12 callee-saved)");
15580 
15581     case Val_GNU_MIPS_ABI_FP_XX:
15582       return "-mfpxx";
15583 
15584     case Val_GNU_MIPS_ABI_FP_64:
15585       return "-mgp32 -mfp64";
15586 
15587     case Val_GNU_MIPS_ABI_FP_64A:
15588       return "-mgp32 -mfp64 -mno-odd-spreg";
15589 
15590     default:
15591       return 0;
15592     }
15593 }
15594 
15595 static void
print_mips_ases(FILE * file,unsigned int mask)15596 print_mips_ases (FILE *file, unsigned int mask)
15597 {
15598   if (mask & AFL_ASE_DSP)
15599     fputs ("\n\tDSP ASE", file);
15600   if (mask & AFL_ASE_DSPR2)
15601     fputs ("\n\tDSP R2 ASE", file);
15602   if (mask & AFL_ASE_DSPR3)
15603     fputs ("\n\tDSP R3 ASE", file);
15604   if (mask & AFL_ASE_EVA)
15605     fputs ("\n\tEnhanced VA Scheme", file);
15606   if (mask & AFL_ASE_MCU)
15607     fputs ("\n\tMCU (MicroController) ASE", file);
15608   if (mask & AFL_ASE_MDMX)
15609     fputs ("\n\tMDMX ASE", file);
15610   if (mask & AFL_ASE_MIPS3D)
15611     fputs ("\n\tMIPS-3D ASE", file);
15612   if (mask & AFL_ASE_MT)
15613     fputs ("\n\tMT ASE", file);
15614   if (mask & AFL_ASE_SMARTMIPS)
15615     fputs ("\n\tSmartMIPS ASE", file);
15616   if (mask & AFL_ASE_VIRT)
15617     fputs ("\n\tVZ ASE", file);
15618   if (mask & AFL_ASE_MSA)
15619     fputs ("\n\tMSA ASE", file);
15620   if (mask & AFL_ASE_MIPS16)
15621     fputs ("\n\tMIPS16 ASE", file);
15622   if (mask & AFL_ASE_MICROMIPS)
15623     fputs ("\n\tMICROMIPS ASE", file);
15624   if (mask & AFL_ASE_XPA)
15625     fputs ("\n\tXPA ASE", file);
15626   if (mask == 0)
15627     fprintf (file, "\n\t%s", _("None"));
15628   else if ((mask & ~AFL_ASE_MASK) != 0)
15629     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15630 }
15631 
15632 static void
print_mips_isa_ext(FILE * file,unsigned int isa_ext)15633 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15634 {
15635   switch (isa_ext)
15636     {
15637     case 0:
15638       fputs (_("None"), file);
15639       break;
15640     case AFL_EXT_XLR:
15641       fputs ("RMI XLR", file);
15642       break;
15643     case AFL_EXT_OCTEON3:
15644       fputs ("Cavium Networks Octeon3", file);
15645       break;
15646     case AFL_EXT_OCTEON2:
15647       fputs ("Cavium Networks Octeon2", file);
15648       break;
15649     case AFL_EXT_OCTEONP:
15650       fputs ("Cavium Networks OcteonP", file);
15651       break;
15652     case AFL_EXT_LOONGSON_3A:
15653       fputs ("Loongson 3A", file);
15654       break;
15655     case AFL_EXT_OCTEON:
15656       fputs ("Cavium Networks Octeon", file);
15657       break;
15658     case AFL_EXT_5900:
15659       fputs ("Toshiba R5900", file);
15660       break;
15661     case AFL_EXT_4650:
15662       fputs ("MIPS R4650", file);
15663       break;
15664     case AFL_EXT_4010:
15665       fputs ("LSI R4010", file);
15666       break;
15667     case AFL_EXT_4100:
15668       fputs ("NEC VR4100", file);
15669       break;
15670     case AFL_EXT_3900:
15671       fputs ("Toshiba R3900", file);
15672       break;
15673     case AFL_EXT_10000:
15674       fputs ("MIPS R10000", file);
15675       break;
15676     case AFL_EXT_SB1:
15677       fputs ("Broadcom SB-1", file);
15678       break;
15679     case AFL_EXT_4111:
15680       fputs ("NEC VR4111/VR4181", file);
15681       break;
15682     case AFL_EXT_4120:
15683       fputs ("NEC VR4120", file);
15684       break;
15685     case AFL_EXT_5400:
15686       fputs ("NEC VR5400", file);
15687       break;
15688     case AFL_EXT_5500:
15689       fputs ("NEC VR5500", file);
15690       break;
15691     case AFL_EXT_LOONGSON_2E:
15692       fputs ("ST Microelectronics Loongson 2E", file);
15693       break;
15694     case AFL_EXT_LOONGSON_2F:
15695       fputs ("ST Microelectronics Loongson 2F", file);
15696       break;
15697     default:
15698       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15699       break;
15700     }
15701 }
15702 
15703 static void
print_mips_fp_abi_value(FILE * file,int val)15704 print_mips_fp_abi_value (FILE *file, int val)
15705 {
15706   switch (val)
15707     {
15708     case Val_GNU_MIPS_ABI_FP_ANY:
15709       fprintf (file, _("Hard or soft float\n"));
15710       break;
15711     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15712       fprintf (file, _("Hard float (double precision)\n"));
15713       break;
15714     case Val_GNU_MIPS_ABI_FP_SINGLE:
15715       fprintf (file, _("Hard float (single precision)\n"));
15716       break;
15717     case Val_GNU_MIPS_ABI_FP_SOFT:
15718       fprintf (file, _("Soft float\n"));
15719       break;
15720     case Val_GNU_MIPS_ABI_FP_OLD_64:
15721       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15722       break;
15723     case Val_GNU_MIPS_ABI_FP_XX:
15724       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15725       break;
15726     case Val_GNU_MIPS_ABI_FP_64:
15727       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15728       break;
15729     case Val_GNU_MIPS_ABI_FP_64A:
15730       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15731       break;
15732     default:
15733       fprintf (file, "??? (%d)\n", val);
15734       break;
15735     }
15736 }
15737 
15738 static int
get_mips_reg_size(int reg_size)15739 get_mips_reg_size (int reg_size)
15740 {
15741   return (reg_size == AFL_REG_NONE) ? 0
15742 	 : (reg_size == AFL_REG_32) ? 32
15743 	 : (reg_size == AFL_REG_64) ? 64
15744 	 : (reg_size == AFL_REG_128) ? 128
15745 	 : -1;
15746 }
15747 
15748 bfd_boolean
_bfd_mips_elf_print_private_bfd_data(bfd * abfd,void * ptr)15749 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15750 {
15751   FILE *file = ptr;
15752 
15753   BFD_ASSERT (abfd != NULL && ptr != NULL);
15754 
15755   /* Print normal ELF private data.  */
15756   _bfd_elf_print_private_bfd_data (abfd, ptr);
15757 
15758   /* xgettext:c-format */
15759   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15760 
15761   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15762     fprintf (file, _(" [abi=O32]"));
15763   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15764     fprintf (file, _(" [abi=O64]"));
15765   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15766     fprintf (file, _(" [abi=EABI32]"));
15767   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15768     fprintf (file, _(" [abi=EABI64]"));
15769   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15770     fprintf (file, _(" [abi unknown]"));
15771   else if (ABI_N32_P (abfd))
15772     fprintf (file, _(" [abi=N32]"));
15773   else if (ABI_64_P (abfd))
15774     fprintf (file, _(" [abi=64]"));
15775   else
15776     fprintf (file, _(" [no abi set]"));
15777 
15778   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15779     fprintf (file, " [mips1]");
15780   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15781     fprintf (file, " [mips2]");
15782   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15783     fprintf (file, " [mips3]");
15784   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15785     fprintf (file, " [mips4]");
15786   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15787     fprintf (file, " [mips5]");
15788   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15789     fprintf (file, " [mips32]");
15790   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15791     fprintf (file, " [mips64]");
15792   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15793     fprintf (file, " [mips32r2]");
15794   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15795     fprintf (file, " [mips64r2]");
15796   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15797     fprintf (file, " [mips32r6]");
15798   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15799     fprintf (file, " [mips64r6]");
15800   else
15801     fprintf (file, _(" [unknown ISA]"));
15802 
15803   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15804     fprintf (file, " [mdmx]");
15805 
15806   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15807     fprintf (file, " [mips16]");
15808 
15809   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15810     fprintf (file, " [micromips]");
15811 
15812   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15813     fprintf (file, " [nan2008]");
15814 
15815   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15816     fprintf (file, " [old fp64]");
15817 
15818   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15819     fprintf (file, " [32bitmode]");
15820   else
15821     fprintf (file, _(" [not 32bitmode]"));
15822 
15823   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
15824     fprintf (file, " [noreorder]");
15825 
15826   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
15827     fprintf (file, " [PIC]");
15828 
15829   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
15830     fprintf (file, " [CPIC]");
15831 
15832   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
15833     fprintf (file, " [XGOT]");
15834 
15835   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
15836     fprintf (file, " [UCODE]");
15837 
15838   fputc ('\n', file);
15839 
15840   if (mips_elf_tdata (abfd)->abiflags_valid)
15841     {
15842       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15843       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15844       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15845       if (abiflags->isa_rev > 1)
15846 	fprintf (file, "r%d", abiflags->isa_rev);
15847       fprintf (file, "\nGPR size: %d",
15848 	       get_mips_reg_size (abiflags->gpr_size));
15849       fprintf (file, "\nCPR1 size: %d",
15850 	       get_mips_reg_size (abiflags->cpr1_size));
15851       fprintf (file, "\nCPR2 size: %d",
15852 	       get_mips_reg_size (abiflags->cpr2_size));
15853       fputs ("\nFP ABI: ", file);
15854       print_mips_fp_abi_value (file, abiflags->fp_abi);
15855       fputs ("ISA Extension: ", file);
15856       print_mips_isa_ext (file, abiflags->isa_ext);
15857       fputs ("\nASEs:", file);
15858       print_mips_ases (file, abiflags->ases);
15859       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
15860       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
15861       fputc ('\n', file);
15862     }
15863 
15864   return TRUE;
15865 }
15866 
15867 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
15868 {
15869   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15870   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15871   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
15872   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15873   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15874   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
15875   { NULL,                     0,  0, 0,              0 }
15876 };
15877 
15878 /* Merge non visibility st_other attributes.  Ensure that the
15879    STO_OPTIONAL flag is copied into h->other, even if this is not a
15880    definiton of the symbol.  */
15881 void
_bfd_mips_elf_merge_symbol_attribute(struct elf_link_hash_entry * h,const Elf_Internal_Sym * isym,bfd_boolean definition,bfd_boolean dynamic ATTRIBUTE_UNUSED)15882 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
15883 				      const Elf_Internal_Sym *isym,
15884 				      bfd_boolean definition,
15885 				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
15886 {
15887   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
15888     {
15889       unsigned char other;
15890 
15891       other = (definition ? isym->st_other : h->other);
15892       other &= ~ELF_ST_VISIBILITY (-1);
15893       h->other = other | ELF_ST_VISIBILITY (h->other);
15894     }
15895 
15896   if (!definition
15897       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
15898     h->other |= STO_OPTIONAL;
15899 }
15900 
15901 /* Decide whether an undefined symbol is special and can be ignored.
15902    This is the case for OPTIONAL symbols on IRIX.  */
15903 bfd_boolean
_bfd_mips_elf_ignore_undef_symbol(struct elf_link_hash_entry * h)15904 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
15905 {
15906   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
15907 }
15908 
15909 bfd_boolean
_bfd_mips_elf_common_definition(Elf_Internal_Sym * sym)15910 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
15911 {
15912   return (sym->st_shndx == SHN_COMMON
15913 	  || sym->st_shndx == SHN_MIPS_ACOMMON
15914 	  || sym->st_shndx == SHN_MIPS_SCOMMON);
15915 }
15916 
15917 /* Return address for Ith PLT stub in section PLT, for relocation REL
15918    or (bfd_vma) -1 if it should not be included.  */
15919 
15920 bfd_vma
_bfd_mips_elf_plt_sym_val(bfd_vma i,const asection * plt,const arelent * rel ATTRIBUTE_UNUSED)15921 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
15922 			   const arelent *rel ATTRIBUTE_UNUSED)
15923 {
15924   return (plt->vma
15925 	  + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
15926 	  + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
15927 }
15928 
15929 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
15930    and microMIPS PLT slots we may have a many-to-one mapping between .plt
15931    and .got.plt and also the slots may be of a different size each we walk
15932    the PLT manually fetching instructions and matching them against known
15933    patterns.  To make things easier standard MIPS slots, if any, always come
15934    first.  As we don't create proper ELF symbols we use the UDATA.I member
15935    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
15936    with the ST_OTHER member of the ELF symbol.  */
15937 
15938 long
_bfd_mips_elf_get_synthetic_symtab(bfd * abfd,long symcount ATTRIBUTE_UNUSED,asymbol ** syms ATTRIBUTE_UNUSED,long dynsymcount,asymbol ** dynsyms,asymbol ** ret)15939 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
15940 				    long symcount ATTRIBUTE_UNUSED,
15941 				    asymbol **syms ATTRIBUTE_UNUSED,
15942 				    long dynsymcount, asymbol **dynsyms,
15943 				    asymbol **ret)
15944 {
15945   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
15946   static const char microsuffix[] = "@micromipsplt";
15947   static const char m16suffix[] = "@mips16plt";
15948   static const char mipssuffix[] = "@plt";
15949 
15950   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
15951   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
15952   bfd_boolean micromips_p = MICROMIPS_P (abfd);
15953   Elf_Internal_Shdr *hdr;
15954   bfd_byte *plt_data;
15955   bfd_vma plt_offset;
15956   unsigned int other;
15957   bfd_vma entry_size;
15958   bfd_vma plt0_size;
15959   asection *relplt;
15960   bfd_vma opcode;
15961   asection *plt;
15962   asymbol *send;
15963   size_t size;
15964   char *names;
15965   long counti;
15966   arelent *p;
15967   asymbol *s;
15968   char *nend;
15969   long count;
15970   long pi;
15971   long i;
15972   long n;
15973 
15974   *ret = NULL;
15975 
15976   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
15977     return 0;
15978 
15979   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
15980   if (relplt == NULL)
15981     return 0;
15982 
15983   hdr = &elf_section_data (relplt)->this_hdr;
15984   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
15985     return 0;
15986 
15987   plt = bfd_get_section_by_name (abfd, ".plt");
15988   if (plt == NULL)
15989     return 0;
15990 
15991   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
15992   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
15993     return -1;
15994   p = relplt->relocation;
15995 
15996   /* Calculating the exact amount of space required for symbols would
15997      require two passes over the PLT, so just pessimise assuming two
15998      PLT slots per relocation.  */
15999   count = relplt->size / hdr->sh_entsize;
16000   counti = count * bed->s->int_rels_per_ext_rel;
16001   size = 2 * count * sizeof (asymbol);
16002   size += count * (sizeof (mipssuffix) +
16003 		   (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16004   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16005     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16006 
16007   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
16008   size += sizeof (asymbol) + sizeof (pltname);
16009 
16010   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16011     return -1;
16012 
16013   if (plt->size < 16)
16014     return -1;
16015 
16016   s = *ret = bfd_malloc (size);
16017   if (s == NULL)
16018     return -1;
16019   send = s + 2 * count + 1;
16020 
16021   names = (char *) send;
16022   nend = (char *) s + size;
16023   n = 0;
16024 
16025   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16026   if (opcode == 0x3302fffe)
16027     {
16028       if (!micromips_p)
16029 	return -1;
16030       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16031       other = STO_MICROMIPS;
16032     }
16033   else if (opcode == 0x0398c1d0)
16034     {
16035       if (!micromips_p)
16036 	return -1;
16037       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16038       other = STO_MICROMIPS;
16039     }
16040   else
16041     {
16042       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16043       other = 0;
16044     }
16045 
16046   s->the_bfd = abfd;
16047   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16048   s->section = plt;
16049   s->value = 0;
16050   s->name = names;
16051   s->udata.i = other;
16052   memcpy (names, pltname, sizeof (pltname));
16053   names += sizeof (pltname);
16054   ++s, ++n;
16055 
16056   pi = 0;
16057   for (plt_offset = plt0_size;
16058        plt_offset + 8 <= plt->size && s < send;
16059        plt_offset += entry_size)
16060     {
16061       bfd_vma gotplt_addr;
16062       const char *suffix;
16063       bfd_vma gotplt_hi;
16064       bfd_vma gotplt_lo;
16065       size_t suffixlen;
16066 
16067       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16068 
16069       /* Check if the second word matches the expected MIPS16 instruction.  */
16070       if (opcode == 0x651aeb00)
16071 	{
16072 	  if (micromips_p)
16073 	    return -1;
16074 	  /* Truncated table???  */
16075 	  if (plt_offset + 16 > plt->size)
16076 	    break;
16077 	  gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16078 	  entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16079 	  suffixlen = sizeof (m16suffix);
16080 	  suffix = m16suffix;
16081 	  other = STO_MIPS16;
16082 	}
16083       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16084       else if (opcode == 0xff220000)
16085 	{
16086 	  if (!micromips_p)
16087 	    return -1;
16088 	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16089 	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16090 	  gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16091 	  gotplt_lo <<= 2;
16092 	  gotplt_addr = gotplt_hi + gotplt_lo;
16093 	  gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16094 	  entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16095 	  suffixlen = sizeof (microsuffix);
16096 	  suffix = microsuffix;
16097 	  other = STO_MICROMIPS;
16098 	}
16099       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16100       else if ((opcode & 0xffff0000) == 0xff2f0000)
16101 	{
16102 	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16103 	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16104 	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16105 	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16106 	  gotplt_addr = gotplt_hi + gotplt_lo;
16107 	  entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16108 	  suffixlen = sizeof (microsuffix);
16109 	  suffix = microsuffix;
16110 	  other = STO_MICROMIPS;
16111 	}
16112       /* Otherwise assume standard MIPS code.  */
16113       else
16114 	{
16115 	  gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16116 	  gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16117 	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16118 	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16119 	  gotplt_addr = gotplt_hi + gotplt_lo;
16120 	  entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16121 	  suffixlen = sizeof (mipssuffix);
16122 	  suffix = mipssuffix;
16123 	  other = 0;
16124 	}
16125       /* Truncated table???  */
16126       if (plt_offset + entry_size > plt->size)
16127 	break;
16128 
16129       for (i = 0;
16130 	   i < count && p[pi].address != gotplt_addr;
16131 	   i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16132 
16133       if (i < count)
16134 	{
16135 	  size_t namelen;
16136 	  size_t len;
16137 
16138 	  *s = **p[pi].sym_ptr_ptr;
16139 	  /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16140 	     we are defining a symbol, ensure one of them is set.  */
16141 	  if ((s->flags & BSF_LOCAL) == 0)
16142 	    s->flags |= BSF_GLOBAL;
16143 	  s->flags |= BSF_SYNTHETIC;
16144 	  s->section = plt;
16145 	  s->value = plt_offset;
16146 	  s->name = names;
16147 	  s->udata.i = other;
16148 
16149 	  len = strlen ((*p[pi].sym_ptr_ptr)->name);
16150 	  namelen = len + suffixlen;
16151 	  if (names + namelen > nend)
16152 	    break;
16153 
16154 	  memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16155 	  names += len;
16156 	  memcpy (names, suffix, suffixlen);
16157 	  names += suffixlen;
16158 
16159 	  ++s, ++n;
16160 	  pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16161 	}
16162     }
16163 
16164   free (plt_data);
16165 
16166   return n;
16167 }
16168 
16169 void
_bfd_mips_post_process_headers(bfd * abfd,struct bfd_link_info * link_info)16170 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16171 {
16172   struct mips_elf_link_hash_table *htab;
16173   Elf_Internal_Ehdr *i_ehdrp;
16174 
16175   i_ehdrp = elf_elfheader (abfd);
16176   if (link_info)
16177     {
16178       htab = mips_elf_hash_table (link_info);
16179       BFD_ASSERT (htab != NULL);
16180 
16181       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16182 	i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16183     }
16184 
16185   _bfd_elf_post_process_headers (abfd, link_info);
16186 
16187   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16188       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16189     i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16190 }
16191 
16192 int
_bfd_mips_elf_compact_eh_encoding(struct bfd_link_info * link_info ATTRIBUTE_UNUSED)16193 _bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16194 {
16195   return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16196 }
16197 
16198 /* Return the opcode for can't unwind.  */
16199 
16200 int
_bfd_mips_elf_cant_unwind_opcode(struct bfd_link_info * link_info ATTRIBUTE_UNUSED)16201 _bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16202 {
16203   return COMPACT_EH_CANT_UNWIND_OPCODE;
16204 }
16205