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