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