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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [bfd/] [elfxx-mips.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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