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