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