OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-6.8/] [bfd/] [elfxx-mips.c] - Blame information for rev 24

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.