Annotation of src/external/gpl3/binutils.old/lib/libbfd/arch/mips64el/bfd.h, Revision 1.7
1.1 christos 1: /* This file is automatically generated. DO NOT EDIT! */
1.7 ! christos 2: /* Generated from: NetBSD: mknative-binutils,v 1.13 2020/04/04 01:34:53 christos Exp */
1.6 christos 3: /* Generated from: NetBSD: mknative.common,v 1.16 2018/04/15 15:13:37 christos Exp */
1.1 christos 4:
1.6 christos 5: /* DO NOT EDIT! -*- buffer-read-only: t -*- This file is automatically
6: generated from "bfd-in.h", "init.c", "opncls.c", "libbfd.c",
7: "bfdio.c", "bfdwin.c", "section.c", "archures.c", "reloc.c",
8: "syms.c", "bfd.c", "archive.c", "corefile.c", "targets.c", "format.c",
1.1 christos 9: "linker.c", "simple.c" and "compress.c".
10: Run "make headers" in your build bfd/ to regenerate. */
11:
12: /* Main header file for the bfd library -- portable access to object files.
13:
1.7 ! christos 14: Copyright (C) 1990-2020 Free Software Foundation, Inc.
1.1 christos 15:
16: Contributed by Cygnus Support.
17:
18: This file is part of BFD, the Binary File Descriptor library.
19:
20: This program is free software; you can redistribute it and/or modify
21: it under the terms of the GNU General Public License as published by
22: the Free Software Foundation; either version 3 of the License, or
23: (at your option) any later version.
24:
25: This program is distributed in the hope that it will be useful,
26: but WITHOUT ANY WARRANTY; without even the implied warranty of
27: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28: GNU General Public License for more details.
29:
30: You should have received a copy of the GNU General Public License
31: along with this program; if not, write to the Free Software
32: Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
33:
34: #ifndef __BFD_H_SEEN__
35: #define __BFD_H_SEEN__
36:
37: /* PR 14072: Ensure that config.h is included first. */
38: #if !defined PACKAGE && !defined PACKAGE_VERSION
39: #error config.h must be included before this header
40: #endif
41:
42: #ifdef __cplusplus
43: extern "C" {
44: #endif
45:
46: #include "ansidecl.h"
47: #include "symcat.h"
1.7 ! christos 48: #include "bfd_stdint.h"
1.6 christos 49: #include "diagnostics.h"
50: #include <stdarg.h>
1.1 christos 51: #include <sys/stat.h>
52:
53: #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
54: #ifndef SABER
55: /* This hack is to avoid a problem with some strict ANSI C preprocessors.
56: The problem is, "32_" is not a valid preprocessing token, and we don't
57: want extra underscores (e.g., "nlm_32_"). The XCONCAT2 macro will
58: cause the inner CONCAT2 macros to be evaluated first, producing
59: still-valid pp-tokens. Then the final concatenation can be done. */
60: #undef CONCAT4
61: #define CONCAT4(a,b,c,d) XCONCAT2(CONCAT2(a,b),CONCAT2(c,d))
62: #endif
63: #endif
64:
65: /* This is a utility macro to handle the situation where the code
66: wants to place a constant string into the code, followed by a
67: comma and then the length of the string. Doing this by hand
68: is error prone, so using this macro is safer. */
69: #define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
70: /* Unfortunately it is not possible to use the STRING_COMMA_LEN macro
71: to create the arguments to another macro, since the preprocessor
72: will mis-count the number of arguments to the outer macro (by not
73: evaluating STRING_COMMA_LEN and so missing the comma). This is a
74: problem for example when trying to use STRING_COMMA_LEN to build
75: the arguments to the strncmp() macro. Hence this alternative
76: definition of strncmp is provided here.
1.3 christos 77:
1.1 christos 78: Note - these macros do NOT work if STR2 is not a constant string. */
79: #define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
80: /* strcpy() can have a similar problem, but since we know we are
81: copying a constant string, we can use memcpy which will be faster
82: since there is no need to check for a NUL byte inside STR. We
83: can also save time if we do not need to copy the terminating NUL. */
84: #define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1)
85: #define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2))
86:
87:
1.3 christos 88: #define BFD_SUPPORTS_PLUGINS 1
1.1 christos 89:
90: /* The word size used by BFD on the host. This may be 64 with a 32
91: bit target if the host is 64 bit, or if other 64 bit targets have
92: been selected with --enable-targets, or if --enable-64-bit-bfd. */
93: #define BFD_ARCH_SIZE 64
94:
95: /* The word size of the default bfd target. */
96: #define BFD_DEFAULT_TARGET_SIZE 64
97:
98: #define BFD_HOST_64BIT_LONG 0
99: #define BFD_HOST_64BIT_LONG_LONG 1
100: #if 1
101: #define BFD_HOST_64_BIT long long
102: #define BFD_HOST_U_64_BIT unsigned long long
103: typedef BFD_HOST_64_BIT bfd_int64_t;
104: typedef BFD_HOST_U_64_BIT bfd_uint64_t;
105: #endif
106:
1.6 christos 107: #ifdef HAVE_INTTYPES_H
108: # include <inttypes.h>
109: #else
110: # if BFD_HOST_64BIT_LONG
111: # define BFD_PRI64 "l"
112: # elif defined (__MSVCRT__)
113: # define BFD_PRI64 "I64"
114: # else
115: # define BFD_PRI64 "ll"
116: # endif
117: # undef PRId64
118: # define PRId64 BFD_PRI64 "d"
119: # undef PRIu64
120: # define PRIu64 BFD_PRI64 "u"
121: # undef PRIx64
122: # define PRIx64 BFD_PRI64 "x"
123: #endif
124:
1.1 christos 125: #if BFD_ARCH_SIZE >= 64
126: #define BFD64
127: #endif
128:
129: #ifndef INLINE
130: #if __GNUC__ >= 2
131: #define INLINE __inline__
132: #else
133: #define INLINE
134: #endif
135: #endif
136:
137: /* Declaring a type wide enough to hold a host long and a host pointer. */
1.6 christos 138: #define BFD_HOSTPTR_T unsigned long
1.1 christos 139: typedef BFD_HOSTPTR_T bfd_hostptr_t;
140:
141: /* Forward declaration. */
142: typedef struct bfd bfd;
143:
144: /* Boolean type used in bfd. Too many systems define their own
145: versions of "boolean" for us to safely typedef a "boolean" of
146: our own. Using an enum for "bfd_boolean" has its own set of
147: problems, with strange looking casts required to avoid warnings
148: on some older compilers. Thus we just use an int.
149:
150: General rule: Functions which are bfd_boolean return TRUE on
151: success and FALSE on failure (unless they're a predicate). */
152:
153: typedef int bfd_boolean;
154: #undef FALSE
155: #undef TRUE
156: #define FALSE 0
157: #define TRUE 1
158:
159: #ifdef BFD64
160:
161: #ifndef BFD_HOST_64_BIT
162: #error No 64 bit integer type available
163: #endif /* ! defined (BFD_HOST_64_BIT) */
164:
165: typedef BFD_HOST_U_64_BIT bfd_vma;
166: typedef BFD_HOST_64_BIT bfd_signed_vma;
167: typedef BFD_HOST_U_64_BIT bfd_size_type;
168: typedef BFD_HOST_U_64_BIT symvalue;
169:
170: #if BFD_HOST_64BIT_LONG
171: #define BFD_VMA_FMT "l"
172: #elif defined (__MSVCRT__)
173: #define BFD_VMA_FMT "I64"
174: #else
175: #define BFD_VMA_FMT "ll"
176: #endif
177:
178: #ifndef fprintf_vma
179: #define sprintf_vma(s,x) sprintf (s, "%016" BFD_VMA_FMT "x", x)
180: #define fprintf_vma(f,x) fprintf (f, "%016" BFD_VMA_FMT "x", x)
181: #endif
182:
183: #else /* not BFD64 */
184:
185: /* Represent a target address. Also used as a generic unsigned type
186: which is guaranteed to be big enough to hold any arithmetic types
187: we need to deal with. */
188: typedef unsigned long bfd_vma;
189:
190: /* A generic signed type which is guaranteed to be big enough to hold any
191: arithmetic types we need to deal with. Can be assumed to be compatible
192: with bfd_vma in the same way that signed and unsigned ints are compatible
193: (as parameters, in assignment, etc). */
194: typedef long bfd_signed_vma;
195:
196: typedef unsigned long symvalue;
197: typedef unsigned long bfd_size_type;
198:
199: /* Print a bfd_vma x on stream s. */
200: #define BFD_VMA_FMT "l"
201: #define fprintf_vma(s,x) fprintf (s, "%08" BFD_VMA_FMT "x", x)
202: #define sprintf_vma(s,x) sprintf (s, "%08" BFD_VMA_FMT "x", x)
203:
204: #endif /* not BFD64 */
205:
206: #define HALF_BFD_SIZE_TYPE \
207: (((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2))
208:
209: #ifndef BFD_HOST_64_BIT
210: /* Fall back on a 32 bit type. The idea is to make these types always
211: available for function return types, but in the case that
212: BFD_HOST_64_BIT is undefined such a function should abort or
213: otherwise signal an error. */
214: typedef bfd_signed_vma bfd_int64_t;
215: typedef bfd_vma bfd_uint64_t;
216: #endif
217:
218: /* An offset into a file. BFD always uses the largest possible offset
219: based on the build time availability of fseek, fseeko, or fseeko64. */
220: typedef BFD_HOST_64_BIT file_ptr;
221: typedef unsigned BFD_HOST_64_BIT ufile_ptr;
222:
223: extern void bfd_sprintf_vma (bfd *, char *, bfd_vma);
224: extern void bfd_fprintf_vma (bfd *, void *, bfd_vma);
225:
226: #define printf_vma(x) fprintf_vma(stdout,x)
227: #define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x)
228:
229: typedef unsigned int flagword; /* 32 bits of flags */
230: typedef unsigned char bfd_byte;
231:
232: /* File formats. */
233:
234: typedef enum bfd_format
235: {
236: bfd_unknown = 0, /* File format is unknown. */
237: bfd_object, /* Linker/assembler/compiler output. */
238: bfd_archive, /* Object archive file. */
239: bfd_core, /* Core dump. */
240: bfd_type_end /* Marks the end; don't use it! */
241: }
242: bfd_format;
243:
244: /* Symbols and relocation. */
245:
246: /* A count of carsyms (canonical archive symbols). */
247: typedef unsigned long symindex;
248:
249: #define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
250:
251: /* A canonical archive symbol. */
252: /* This is a type pun with struct ranlib on purpose! */
253: typedef struct carsym
254: {
1.7 ! christos 255: const char *name;
1.1 christos 256: file_ptr file_offset; /* Look here to find the file. */
257: }
258: carsym; /* To make these you call a carsymogen. */
259:
260: /* Used in generating armaps (archive tables of contents).
261: Perhaps just a forward definition would do? */
1.6 christos 262: struct orl /* Output ranlib. */
1.1 christos 263: {
264: char **name; /* Symbol name. */
265: union
266: {
267: file_ptr pos;
268: bfd *abfd;
269: } u; /* bfd* or file position. */
270: int namidx; /* Index into string table. */
271: };
1.6 christos 272:
1.1 christos 273: /* Linenumber stuff. */
274: typedef struct lineno_cache_entry
275: {
276: unsigned int line_number; /* Linenumber from start of function. */
277: union
278: {
279: struct bfd_symbol *sym; /* Function name. */
1.6 christos 280: bfd_vma offset; /* Offset into section. */
1.1 christos 281: } u;
282: }
283: alent;
284:
285: /* Object and core file sections. */
1.6 christos 286: typedef struct bfd_section *sec_ptr;
1.1 christos 287:
288: #define align_power(addr, align) \
1.3 christos 289: (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
1.1 christos 290:
1.6 christos 291: /* Align an address upward to a boundary, expressed as a number of bytes.
292: E.g. align to an 8-byte boundary with argument of 8. Take care never
293: to wrap around if the address is within boundary-1 of the end of the
294: address space. */
295: #define BFD_ALIGN(this, boundary) \
296: ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \
297: ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
298: : ~ (bfd_vma) 0)
1.1 christos 299:
300: typedef enum bfd_print_symbol
301: {
302: bfd_print_symbol_name,
303: bfd_print_symbol_more,
304: bfd_print_symbol_all
305: } bfd_print_symbol_type;
306:
307: /* Information about a symbol that nm needs. */
308:
309: typedef struct _symbol_info
310: {
311: symvalue value;
312: char type;
1.6 christos 313: const char *name; /* Symbol name. */
314: unsigned char stab_type; /* Stab type. */
315: char stab_other; /* Stab other. */
316: short stab_desc; /* Stab desc. */
317: const char *stab_name; /* String for stab type. */
1.1 christos 318: } symbol_info;
319:
320: /* Get the name of a stabs type code. */
321:
322: extern const char *bfd_get_stab_name (int);
323:
324: /* Hash table routines. There is no way to free up a hash table. */
325:
326: /* An element in the hash table. Most uses will actually use a larger
327: structure, and an instance of this will be the first field. */
328:
329: struct bfd_hash_entry
330: {
331: /* Next entry for this hash code. */
332: struct bfd_hash_entry *next;
333: /* String being hashed. */
334: const char *string;
335: /* Hash code. This is the full hash code, not the index into the
336: table. */
337: unsigned long hash;
338: };
339:
340: /* A hash table. */
341:
342: struct bfd_hash_table
343: {
344: /* The hash array. */
345: struct bfd_hash_entry **table;
346: /* A function used to create new elements in the hash table. The
347: first entry is itself a pointer to an element. When this
348: function is first invoked, this pointer will be NULL. However,
349: having the pointer permits a hierarchy of method functions to be
350: built each of which calls the function in the superclass. Thus
351: each function should be written to allocate a new block of memory
352: only if the argument is NULL. */
353: struct bfd_hash_entry *(*newfunc)
354: (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
1.6 christos 355: /* An objalloc for this hash table. This is a struct objalloc *,
1.1 christos 356: but we use void * to avoid requiring the inclusion of objalloc.h. */
357: void *memory;
358: /* The number of slots in the hash table. */
359: unsigned int size;
360: /* The number of entries in the hash table. */
361: unsigned int count;
362: /* The size of elements. */
363: unsigned int entsize;
364: /* If non-zero, don't grow the hash table. */
365: unsigned int frozen:1;
366: };
367:
368: /* Initialize a hash table. */
369: extern bfd_boolean bfd_hash_table_init
370: (struct bfd_hash_table *,
371: struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
372: struct bfd_hash_table *,
373: const char *),
374: unsigned int);
375:
376: /* Initialize a hash table specifying a size. */
377: extern bfd_boolean bfd_hash_table_init_n
378: (struct bfd_hash_table *,
379: struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
380: struct bfd_hash_table *,
381: const char *),
382: unsigned int, unsigned int);
383:
384: /* Free up a hash table. */
385: extern void bfd_hash_table_free
386: (struct bfd_hash_table *);
387:
388: /* Look up a string in a hash table. If CREATE is TRUE, a new entry
389: will be created for this string if one does not already exist. The
390: COPY argument must be TRUE if this routine should copy the string
391: into newly allocated memory when adding an entry. */
392: extern struct bfd_hash_entry *bfd_hash_lookup
393: (struct bfd_hash_table *, const char *, bfd_boolean create,
394: bfd_boolean copy);
395:
396: /* Insert an entry in a hash table. */
397: extern struct bfd_hash_entry *bfd_hash_insert
398: (struct bfd_hash_table *, const char *, unsigned long);
399:
400: /* Rename an entry in a hash table. */
401: extern void bfd_hash_rename
402: (struct bfd_hash_table *, const char *, struct bfd_hash_entry *);
403:
404: /* Replace an entry in a hash table. */
405: extern void bfd_hash_replace
406: (struct bfd_hash_table *, struct bfd_hash_entry *old,
407: struct bfd_hash_entry *nw);
408:
409: /* Base method for creating a hash table entry. */
410: extern struct bfd_hash_entry *bfd_hash_newfunc
411: (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
412:
413: /* Grab some space for a hash table entry. */
414: extern void *bfd_hash_allocate
415: (struct bfd_hash_table *, unsigned int);
416:
417: /* Traverse a hash table in a random order, calling a function on each
418: element. If the function returns FALSE, the traversal stops. The
419: INFO argument is passed to the function. */
420: extern void bfd_hash_traverse
421: (struct bfd_hash_table *,
422: bfd_boolean (*) (struct bfd_hash_entry *, void *),
423: void *info);
424:
425: /* Allows the default size of a hash table to be configured. New hash
426: tables allocated using bfd_hash_table_init will be created with
427: this size. */
428: extern unsigned long bfd_hash_set_default_size (unsigned long);
429:
1.3 christos 430: /* Types of compressed DWARF debug sections. We currently support
431: zlib. */
432: enum compressed_debug_section_type
433: {
434: COMPRESS_DEBUG_NONE = 0,
435: COMPRESS_DEBUG = 1 << 0,
436: COMPRESS_DEBUG_GNU_ZLIB = COMPRESS_DEBUG | 1 << 1,
437: COMPRESS_DEBUG_GABI_ZLIB = COMPRESS_DEBUG | 1 << 2
438: };
439:
1.1 christos 440: /* This structure is used to keep track of stabs in sections
441: information while linking. */
442:
443: struct stab_info
444: {
445: /* A hash table used to hold stabs strings. */
446: struct bfd_strtab_hash *strings;
447: /* The header file hash table. */
448: struct bfd_hash_table includes;
449: /* The first .stabstr section. */
450: struct bfd_section *stabstr;
451: };
452:
453: #define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
454:
455: /* User program access to BFD facilities. */
456:
457: /* Direct I/O routines, for programs which know more about the object
458: file than BFD does. Use higher level routines if possible. */
459:
460: extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *);
461: extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *);
462: extern int bfd_seek (bfd *, file_ptr, int);
463: extern file_ptr bfd_tell (bfd *);
464: extern int bfd_flush (bfd *);
465: extern int bfd_stat (bfd *, struct stat *);
466:
467: /* Deprecated old routines. */
468: #if __GNUC__
469: #define bfd_read(BUF, ELTSIZE, NITEMS, ABFD) \
1.6 christos 470: (_bfd_warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__), \
1.1 christos 471: bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
472: #define bfd_write(BUF, ELTSIZE, NITEMS, ABFD) \
1.6 christos 473: (_bfd_warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__), \
1.1 christos 474: bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
475: #else
476: #define bfd_read(BUF, ELTSIZE, NITEMS, ABFD) \
1.6 christos 477: (_bfd_warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \
1.1 christos 478: bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
479: #define bfd_write(BUF, ELTSIZE, NITEMS, ABFD) \
1.6 christos 480: (_bfd_warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\
1.1 christos 481: bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
482: #endif
1.6 christos 483: extern void _bfd_warn_deprecated (const char *, const char *, int, const char *);
1.1 christos 484:
485: extern bfd_boolean bfd_cache_close
486: (bfd *abfd);
487: /* NB: This declaration should match the autogenerated one in libbfd.h. */
488:
489: extern bfd_boolean bfd_cache_close_all (void);
490:
491: extern bfd_boolean bfd_record_phdr
492: (bfd *, unsigned long, bfd_boolean, flagword, bfd_boolean, bfd_vma,
493: bfd_boolean, bfd_boolean, unsigned int, struct bfd_section **);
494:
495: /* Byte swapping routines. */
496:
497: bfd_uint64_t bfd_getb64 (const void *);
498: bfd_uint64_t bfd_getl64 (const void *);
499: bfd_int64_t bfd_getb_signed_64 (const void *);
500: bfd_int64_t bfd_getl_signed_64 (const void *);
501: bfd_vma bfd_getb32 (const void *);
502: bfd_vma bfd_getl32 (const void *);
503: bfd_signed_vma bfd_getb_signed_32 (const void *);
504: bfd_signed_vma bfd_getl_signed_32 (const void *);
505: bfd_vma bfd_getb16 (const void *);
506: bfd_vma bfd_getl16 (const void *);
507: bfd_signed_vma bfd_getb_signed_16 (const void *);
508: bfd_signed_vma bfd_getl_signed_16 (const void *);
509: void bfd_putb64 (bfd_uint64_t, void *);
510: void bfd_putl64 (bfd_uint64_t, void *);
511: void bfd_putb32 (bfd_vma, void *);
512: void bfd_putl32 (bfd_vma, void *);
1.6 christos 513: void bfd_putb24 (bfd_vma, void *);
514: void bfd_putl24 (bfd_vma, void *);
1.1 christos 515: void bfd_putb16 (bfd_vma, void *);
516: void bfd_putl16 (bfd_vma, void *);
517:
518: /* Byte swapping routines which take size and endiannes as arguments. */
519:
520: bfd_uint64_t bfd_get_bits (const void *, int, bfd_boolean);
521: void bfd_put_bits (bfd_uint64_t, void *, int, bfd_boolean);
522:
523:
524: /* mmap hacks */
525:
526: struct _bfd_window_internal;
527: typedef struct _bfd_window_internal bfd_window_internal;
528:
529: typedef struct _bfd_window
530: {
531: /* What the user asked for. */
532: void *data;
533: bfd_size_type size;
534: /* The actual window used by BFD. Small user-requested read-only
535: regions sharing a page may share a single window into the object
536: file. Read-write versions shouldn't until I've fixed things to
537: keep track of which portions have been claimed by the
538: application; don't want to give the same region back when the
539: application wants two writable copies! */
540: struct _bfd_window_internal *i;
541: }
542: bfd_window;
543:
544: extern void bfd_init_window
545: (bfd_window *);
546: extern void bfd_free_window
547: (bfd_window *);
548: extern bfd_boolean bfd_get_file_window
549: (bfd *, file_ptr, bfd_size_type, bfd_window *, bfd_boolean);
1.7 ! christos 550:
! 551: /* Externally visible ELF routines. */
1.1 christos 552:
1.7 ! christos 553: /* Create a new BFD as if by bfd_openr. Rather than opening a file,
! 554: reconstruct an ELF file by reading the segments out of remote
! 555: memory based on the ELF file header at EHDR_VMA and the ELF program
! 556: headers it points to. If non-zero, SIZE is the known extent of the
! 557: object. If not null, *LOADBASEP is filled in with the difference
! 558: between the VMAs from which the segments were read, and the VMAs
! 559: the file headers (and hence BFD's idea of each section's VMA) put
! 560: them at.
1.1 christos 561:
1.7 ! christos 562: The function TARGET_READ_MEMORY is called to copy LEN bytes from
! 563: the remote memory at target address VMA into the local buffer at
! 564: MYADDR; it should return zero on success or an `errno' code on
! 565: failure. TEMPL must be a BFD for a target with the word size and
! 566: byte order found in the remote memory. */
! 567: extern bfd *bfd_elf_bfd_from_remote_memory
! 568: (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
! 569: int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
! 570: bfd_size_type len));
1.1 christos 571:
1.7 ! christos 572: /* Forward declarations. */
! 573: struct ecoff_debug_info;
! 574: struct ecoff_debug_swap;
! 575: struct ecoff_extr;
! 576: struct bfd_link_info;
! 577: struct bfd_link_hash_entry;
! 578: /* Extracted from init.c. */
! 579: unsigned int bfd_init (void);
1.1 christos 580:
581:
1.7 ! christos 582: /* Value returned by bfd_init. */
1.1 christos 583:
1.7 ! christos 584: #define BFD_INIT_MAGIC (sizeof (struct bfd_section))
1.1 christos 585: /* Extracted from opncls.c. */
1.3 christos 586: /* Set to N to open the next N BFDs using an alternate id space. */
1.1 christos 587: extern unsigned int bfd_use_reserved_id;
588: bfd *bfd_fopen (const char *filename, const char *target,
589: const char *mode, int fd);
590:
591: bfd *bfd_openr (const char *filename, const char *target);
592:
593: bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
594:
1.6 christos 595: bfd *bfd_openstreamr (const char * filename, const char * target,
596: void * stream);
1.1 christos 597:
598: bfd *bfd_openr_iovec (const char *filename, const char *target,
599: void *(*open_func) (struct bfd *nbfd,
600: void *open_closure),
601: void *open_closure,
602: file_ptr (*pread_func) (struct bfd *nbfd,
603: void *stream,
604: void *buf,
605: file_ptr nbytes,
606: file_ptr offset),
607: int (*close_func) (struct bfd *nbfd,
608: void *stream),
609: int (*stat_func) (struct bfd *abfd,
610: void *stream,
611: struct stat *sb));
612:
613: bfd *bfd_openw (const char *filename, const char *target);
614:
615: bfd_boolean bfd_close (bfd *abfd);
616:
617: bfd_boolean bfd_close_all_done (bfd *);
618:
619: bfd *bfd_create (const char *filename, bfd *templ);
620:
621: bfd_boolean bfd_make_writable (bfd *abfd);
622:
623: bfd_boolean bfd_make_readable (bfd *abfd);
624:
625: void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
626:
627: void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
628:
629: unsigned long bfd_calc_gnu_debuglink_crc32
630: (unsigned long crc, const unsigned char *buf, bfd_size_type len);
631:
1.3 christos 632: char *bfd_get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
633:
634: char *bfd_get_alt_debug_link_info (bfd * abfd,
635: bfd_size_type *buildid_len,
636: bfd_byte **buildid_out);
637:
1.1 christos 638: char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
639:
1.3 christos 640: char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
641:
1.1 christos 642: struct bfd_section *bfd_create_gnu_debuglink_section
643: (bfd *abfd, const char *filename);
644:
645: bfd_boolean bfd_fill_in_gnu_debuglink_section
646: (bfd *abfd, struct bfd_section *sect, const char *filename);
647:
1.6 christos 648: char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir);
649:
1.7 ! christos 650: void bfd_set_filename (bfd *abfd, char *filename);
! 651:
1.1 christos 652: /* Extracted from libbfd.c. */
653:
654: /* Byte swapping macros for user section data. */
655:
656: #define bfd_put_8(abfd, val, ptr) \
657: ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
658: #define bfd_put_signed_8 \
659: bfd_put_8
660: #define bfd_get_8(abfd, ptr) \
1.7 ! christos 661: ((bfd_vma) *(const unsigned char *) (ptr) & 0xff)
1.1 christos 662: #define bfd_get_signed_8(abfd, ptr) \
1.7 ! christos 663: ((((bfd_signed_vma) *(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
1.1 christos 664:
665: #define bfd_put_16(abfd, val, ptr) \
666: BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
667: #define bfd_put_signed_16 \
668: bfd_put_16
669: #define bfd_get_16(abfd, ptr) \
670: BFD_SEND (abfd, bfd_getx16, (ptr))
671: #define bfd_get_signed_16(abfd, ptr) \
672: BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
673:
1.7 ! christos 674: #define bfd_put_24(abfd, val, ptr) \
! 675: do \
! 676: if (bfd_big_endian (abfd)) \
! 677: bfd_putb24 ((val), (ptr)); \
! 678: else \
! 679: bfd_putl24 ((val), (ptr)); \
! 680: while (0)
! 681:
! 682: bfd_vma bfd_getb24 (const void *p);
! 683: bfd_vma bfd_getl24 (const void *p);
! 684:
! 685: #define bfd_get_24(abfd, ptr) \
! 686: (bfd_big_endian (abfd) ? bfd_getb24 (ptr) : bfd_getl24 (ptr))
! 687:
1.1 christos 688: #define bfd_put_32(abfd, val, ptr) \
689: BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
690: #define bfd_put_signed_32 \
691: bfd_put_32
692: #define bfd_get_32(abfd, ptr) \
693: BFD_SEND (abfd, bfd_getx32, (ptr))
694: #define bfd_get_signed_32(abfd, ptr) \
695: BFD_SEND (abfd, bfd_getx_signed_32, (ptr))
696:
697: #define bfd_put_64(abfd, val, ptr) \
698: BFD_SEND (abfd, bfd_putx64, ((val), (ptr)))
699: #define bfd_put_signed_64 \
700: bfd_put_64
701: #define bfd_get_64(abfd, ptr) \
702: BFD_SEND (abfd, bfd_getx64, (ptr))
703: #define bfd_get_signed_64(abfd, ptr) \
704: BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
705:
706: #define bfd_get(bits, abfd, ptr) \
1.7 ! christos 707: ((bits) == 8 ? bfd_get_8 (abfd, ptr) \
1.1 christos 708: : (bits) == 16 ? bfd_get_16 (abfd, ptr) \
709: : (bits) == 32 ? bfd_get_32 (abfd, ptr) \
710: : (bits) == 64 ? bfd_get_64 (abfd, ptr) \
711: : (abort (), (bfd_vma) - 1))
712:
713: #define bfd_put(bits, abfd, val, ptr) \
714: ((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \
1.6 christos 715: : (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \
716: : (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \
717: : (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \
1.1 christos 718: : (abort (), (void) 0))
719:
720:
721: /* Byte swapping macros for file header data. */
722:
723: #define bfd_h_put_8(abfd, val, ptr) \
724: bfd_put_8 (abfd, val, ptr)
725: #define bfd_h_put_signed_8(abfd, val, ptr) \
726: bfd_put_8 (abfd, val, ptr)
727: #define bfd_h_get_8(abfd, ptr) \
728: bfd_get_8 (abfd, ptr)
729: #define bfd_h_get_signed_8(abfd, ptr) \
730: bfd_get_signed_8 (abfd, ptr)
731:
732: #define bfd_h_put_16(abfd, val, ptr) \
733: BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
734: #define bfd_h_put_signed_16 \
735: bfd_h_put_16
736: #define bfd_h_get_16(abfd, ptr) \
737: BFD_SEND (abfd, bfd_h_getx16, (ptr))
738: #define bfd_h_get_signed_16(abfd, ptr) \
739: BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))
740:
741: #define bfd_h_put_32(abfd, val, ptr) \
742: BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
743: #define bfd_h_put_signed_32 \
744: bfd_h_put_32
745: #define bfd_h_get_32(abfd, ptr) \
746: BFD_SEND (abfd, bfd_h_getx32, (ptr))
747: #define bfd_h_get_signed_32(abfd, ptr) \
748: BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))
749:
750: #define bfd_h_put_64(abfd, val, ptr) \
751: BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
752: #define bfd_h_put_signed_64 \
753: bfd_h_put_64
754: #define bfd_h_get_64(abfd, ptr) \
755: BFD_SEND (abfd, bfd_h_getx64, (ptr))
756: #define bfd_h_get_signed_64(abfd, ptr) \
757: BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))
758:
759: /* Aliases for the above, which should eventually go away. */
760:
761: #define H_PUT_64 bfd_h_put_64
762: #define H_PUT_32 bfd_h_put_32
763: #define H_PUT_16 bfd_h_put_16
764: #define H_PUT_8 bfd_h_put_8
765: #define H_PUT_S64 bfd_h_put_signed_64
766: #define H_PUT_S32 bfd_h_put_signed_32
767: #define H_PUT_S16 bfd_h_put_signed_16
768: #define H_PUT_S8 bfd_h_put_signed_8
769: #define H_GET_64 bfd_h_get_64
770: #define H_GET_32 bfd_h_get_32
771: #define H_GET_16 bfd_h_get_16
772: #define H_GET_8 bfd_h_get_8
773: #define H_GET_S64 bfd_h_get_signed_64
774: #define H_GET_S32 bfd_h_get_signed_32
775: #define H_GET_S16 bfd_h_get_signed_16
776: #define H_GET_S8 bfd_h_get_signed_8
777:
778:
779: /* Extracted from bfdio.c. */
780: long bfd_get_mtime (bfd *abfd);
781:
1.6 christos 782: ufile_ptr bfd_get_size (bfd *abfd);
783:
784: ufile_ptr bfd_get_file_size (bfd *abfd);
1.1 christos 785:
786: void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
787: int prot, int flags, file_ptr offset,
788: void **map_addr, bfd_size_type *map_len);
789:
790: /* Extracted from bfdwin.c. */
791: /* Extracted from section.c. */
1.3 christos 792:
1.1 christos 793: typedef struct bfd_section
794: {
795: /* The name of the section; the name isn't a copy, the pointer is
796: the same as that passed to bfd_make_section. */
797: const char *name;
798:
799: /* A unique sequence number. */
1.3 christos 800: unsigned int id;
1.1 christos 801:
802: /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */
1.3 christos 803: unsigned int index;
1.1 christos 804:
805: /* The next section in the list belonging to the BFD, or NULL. */
806: struct bfd_section *next;
807:
808: /* The previous section in the list belonging to the BFD, or NULL. */
809: struct bfd_section *prev;
810:
811: /* The field flags contains attributes of the section. Some
812: flags are read in from the object file, and some are
813: synthesized from other information. */
814: flagword flags;
815:
1.6 christos 816: #define SEC_NO_FLAGS 0x0
1.1 christos 817:
818: /* Tells the OS to allocate space for this section when loading.
819: This is clear for a section containing debug information only. */
1.6 christos 820: #define SEC_ALLOC 0x1
1.1 christos 821:
822: /* Tells the OS to load the section from the file when loading.
823: This is clear for a .bss section. */
1.6 christos 824: #define SEC_LOAD 0x2
1.1 christos 825:
826: /* The section contains data still to be relocated, so there is
827: some relocation information too. */
1.6 christos 828: #define SEC_RELOC 0x4
1.1 christos 829:
830: /* A signal to the OS that the section contains read only data. */
1.6 christos 831: #define SEC_READONLY 0x8
1.1 christos 832:
833: /* The section contains code only. */
1.6 christos 834: #define SEC_CODE 0x10
1.1 christos 835:
836: /* The section contains data only. */
1.6 christos 837: #define SEC_DATA 0x20
1.1 christos 838:
839: /* The section will reside in ROM. */
1.6 christos 840: #define SEC_ROM 0x40
1.1 christos 841:
842: /* The section contains constructor information. This section
843: type is used by the linker to create lists of constructors and
844: destructors used by <<g++>>. When a back end sees a symbol
845: which should be used in a constructor list, it creates a new
846: section for the type of name (e.g., <<__CTOR_LIST__>>), attaches
847: the symbol to it, and builds a relocation. To build the lists
848: of constructors, all the linker has to do is catenate all the
849: sections called <<__CTOR_LIST__>> and relocate the data
850: contained within - exactly the operations it would peform on
851: standard data. */
1.6 christos 852: #define SEC_CONSTRUCTOR 0x80
1.1 christos 853:
854: /* The section has contents - a data section could be
855: <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
856: <<SEC_HAS_CONTENTS>> */
1.6 christos 857: #define SEC_HAS_CONTENTS 0x100
1.1 christos 858:
859: /* An instruction to the linker to not output the section
860: even if it has information which would normally be written. */
1.6 christos 861: #define SEC_NEVER_LOAD 0x200
1.1 christos 862:
863: /* The section contains thread local data. */
1.6 christos 864: #define SEC_THREAD_LOCAL 0x400
1.1 christos 865:
1.6 christos 866: /* The section's size is fixed. Generic linker code will not
867: recalculate it and it is up to whoever has set this flag to
868: get the size right. */
869: #define SEC_FIXED_SIZE 0x800
1.1 christos 870:
871: /* The section contains common symbols (symbols may be defined
872: multiple times, the value of a symbol is the amount of
873: space it requires, and the largest symbol value is the one
874: used). Most targets have exactly one of these (which we
875: translate to bfd_com_section_ptr), but ECOFF has two. */
1.6 christos 876: #define SEC_IS_COMMON 0x1000
1.1 christos 877:
878: /* The section contains only debugging information. For
879: example, this is set for ELF .debug and .stab sections.
880: strip tests this flag to see if a section can be
881: discarded. */
1.6 christos 882: #define SEC_DEBUGGING 0x2000
1.1 christos 883:
884: /* The contents of this section are held in memory pointed to
885: by the contents field. This is checked by bfd_get_section_contents,
886: and the data is retrieved from memory if appropriate. */
1.6 christos 887: #define SEC_IN_MEMORY 0x4000
1.1 christos 888:
889: /* The contents of this section are to be excluded by the
890: linker for executable and shared objects unless those
891: objects are to be further relocated. */
1.6 christos 892: #define SEC_EXCLUDE 0x8000
1.1 christos 893:
894: /* The contents of this section are to be sorted based on the sum of
895: the symbol and addend values specified by the associated relocation
896: entries. Entries without associated relocation entries will be
897: appended to the end of the section in an unspecified order. */
1.6 christos 898: #define SEC_SORT_ENTRIES 0x10000
1.1 christos 899:
900: /* When linking, duplicate sections of the same name should be
901: discarded, rather than being combined into a single section as
902: is usually done. This is similar to how common symbols are
903: handled. See SEC_LINK_DUPLICATES below. */
1.6 christos 904: #define SEC_LINK_ONCE 0x20000
1.1 christos 905:
906: /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
907: should handle duplicate sections. */
1.6 christos 908: #define SEC_LINK_DUPLICATES 0xc0000
1.1 christos 909:
910: /* This value for SEC_LINK_DUPLICATES means that duplicate
911: sections with the same name should simply be discarded. */
1.6 christos 912: #define SEC_LINK_DUPLICATES_DISCARD 0x0
1.1 christos 913:
914: /* This value for SEC_LINK_DUPLICATES means that the linker
915: should warn if there are any duplicate sections, although
916: it should still only link one copy. */
1.6 christos 917: #define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000
1.1 christos 918:
919: /* This value for SEC_LINK_DUPLICATES means that the linker
920: should warn if any duplicate sections are a different size. */
921: #define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000
922:
923: /* This value for SEC_LINK_DUPLICATES means that the linker
924: should warn if any duplicate sections contain different
925: contents. */
926: #define SEC_LINK_DUPLICATES_SAME_CONTENTS \
927: (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE)
928:
929: /* This section was created by the linker as part of dynamic
930: relocation or other arcane processing. It is skipped when
931: going through the first-pass output, trusting that someone
932: else up the line will take care of it later. */
1.6 christos 933: #define SEC_LINKER_CREATED 0x100000
1.1 christos 934:
935: /* This section should not be subject to garbage collection.
936: Also set to inform the linker that this section should not be
937: listed in the link map as discarded. */
1.6 christos 938: #define SEC_KEEP 0x200000
1.1 christos 939:
940: /* This section contains "short" data, and should be placed
941: "near" the GP. */
1.6 christos 942: #define SEC_SMALL_DATA 0x400000
1.1 christos 943:
944: /* Attempt to merge identical entities in the section.
945: Entity size is given in the entsize field. */
1.6 christos 946: #define SEC_MERGE 0x800000
1.1 christos 947:
948: /* If given with SEC_MERGE, entities to merge are zero terminated
949: strings where entsize specifies character size instead of fixed
950: size entries. */
1.6 christos 951: #define SEC_STRINGS 0x1000000
1.1 christos 952:
953: /* This section contains data about section groups. */
1.6 christos 954: #define SEC_GROUP 0x2000000
1.1 christos 955:
956: /* The section is a COFF shared library section. This flag is
957: only for the linker. If this type of section appears in
958: the input file, the linker must copy it to the output file
959: without changing the vma or size. FIXME: Although this
960: was originally intended to be general, it really is COFF
961: specific (and the flag was renamed to indicate this). It
962: might be cleaner to have some more general mechanism to
963: allow the back end to control what the linker does with
964: sections. */
1.6 christos 965: #define SEC_COFF_SHARED_LIBRARY 0x4000000
1.1 christos 966:
967: /* This input section should be copied to output in reverse order
968: as an array of pointers. This is for ELF linker internal use
969: only. */
1.6 christos 970: #define SEC_ELF_REVERSE_COPY 0x4000000
1.1 christos 971:
972: /* This section contains data which may be shared with other
973: executables or shared objects. This is for COFF only. */
1.6 christos 974: #define SEC_COFF_SHARED 0x8000000
1.1 christos 975:
1.3 christos 976: /* This section should be compressed. This is for ELF linker
977: internal use only. */
1.6 christos 978: #define SEC_ELF_COMPRESS 0x8000000
1.3 christos 979:
1.1 christos 980: /* When a section with this flag is being linked, then if the size of
981: the input section is less than a page, it should not cross a page
982: boundary. If the size of the input section is one page or more,
983: it should be aligned on a page boundary. This is for TI
984: TMS320C54X only. */
1.6 christos 985: #define SEC_TIC54X_BLOCK 0x10000000
1.1 christos 986:
1.3 christos 987: /* This section should be renamed. This is for ELF linker
988: internal use only. */
1.6 christos 989: #define SEC_ELF_RENAME 0x10000000
1.3 christos 990:
1.1 christos 991: /* Conditionally link this section; do not link if there are no
992: references found to any symbol in the section. This is for TI
993: TMS320C54X only. */
1.6 christos 994: #define SEC_TIC54X_CLINK 0x20000000
1.1 christos 995:
1.3 christos 996: /* This section contains vliw code. This is for Toshiba MeP only. */
1.6 christos 997: #define SEC_MEP_VLIW 0x20000000
1.3 christos 998:
1.7 ! christos 999: /* All symbols, sizes and relocations in this section are octets
! 1000: instead of bytes. Required for DWARF debug sections as DWARF
! 1001: information is organized in octets, not bytes. */
! 1002: #define SEC_ELF_OCTETS 0x40000000
! 1003:
1.1 christos 1004: /* Indicate that section has the no read flag set. This happens
1005: when memory read flag isn't set. */
1.6 christos 1006: #define SEC_COFF_NOREAD 0x40000000
1.1 christos 1007:
1.6 christos 1008: /* Indicate that section has the purecode flag set. */
1009: #define SEC_ELF_PURECODE 0x80000000
1.5 christos 1010:
1.1 christos 1011: /* End of section flags. */
1012:
1013: /* Some internal packed boolean fields. */
1014:
1015: /* See the vma field. */
1016: unsigned int user_set_vma : 1;
1017:
1018: /* A mark flag used by some of the linker backends. */
1019: unsigned int linker_mark : 1;
1020:
1021: /* Another mark flag used by some of the linker backends. Set for
1022: output sections that have an input section. */
1023: unsigned int linker_has_input : 1;
1024:
1025: /* Mark flag used by some linker backends for garbage collection. */
1026: unsigned int gc_mark : 1;
1027:
1028: /* Section compression status. */
1029: unsigned int compress_status : 2;
1030: #define COMPRESS_SECTION_NONE 0
1031: #define COMPRESS_SECTION_DONE 1
1032: #define DECOMPRESS_SECTION_SIZED 2
1033:
1034: /* The following flags are used by the ELF linker. */
1035:
1036: /* Mark sections which have been allocated to segments. */
1037: unsigned int segment_mark : 1;
1038:
1039: /* Type of sec_info information. */
1040: unsigned int sec_info_type:3;
1041: #define SEC_INFO_TYPE_NONE 0
1042: #define SEC_INFO_TYPE_STABS 1
1043: #define SEC_INFO_TYPE_MERGE 2
1044: #define SEC_INFO_TYPE_EH_FRAME 3
1045: #define SEC_INFO_TYPE_JUST_SYMS 4
1.3 christos 1046: #define SEC_INFO_TYPE_TARGET 5
1047: #define SEC_INFO_TYPE_EH_FRAME_ENTRY 6
1.1 christos 1048:
1049: /* Nonzero if this section uses RELA relocations, rather than REL. */
1050: unsigned int use_rela_p:1;
1051:
1052: /* Bits used by various backends. The generic code doesn't touch
1053: these fields. */
1054:
1055: unsigned int sec_flg0:1;
1056: unsigned int sec_flg1:1;
1057: unsigned int sec_flg2:1;
1058: unsigned int sec_flg3:1;
1059: unsigned int sec_flg4:1;
1060: unsigned int sec_flg5:1;
1061:
1062: /* End of internal packed boolean fields. */
1063:
1064: /* The virtual memory address of the section - where it will be
1065: at run time. The symbols are relocated against this. The
1066: user_set_vma flag is maintained by bfd; if it's not set, the
1067: backend can assign addresses (for example, in <<a.out>>, where
1068: the default address for <<.data>> is dependent on the specific
1069: target and various flags). */
1070: bfd_vma vma;
1071:
1072: /* The load address of the section - where it would be in a
1073: rom image; really only used for writing section header
1074: information. */
1075: bfd_vma lma;
1076:
1.5 christos 1077: /* The size of the section in *octets*, as it will be output.
1.1 christos 1078: Contains a value even if the section has no contents (e.g., the
1079: size of <<.bss>>). */
1080: bfd_size_type size;
1081:
1082: /* For input sections, the original size on disk of the section, in
1083: octets. This field should be set for any section whose size is
1084: changed by linker relaxation. It is required for sections where
1085: the linker relaxation scheme doesn't cache altered section and
1086: reloc contents (stabs, eh_frame, SEC_MERGE, some coff relaxing
1087: targets), and thus the original size needs to be kept to read the
1088: section multiple times. For output sections, rawsize holds the
1089: section size calculated on a previous linker relaxation pass. */
1090: bfd_size_type rawsize;
1091:
1092: /* The compressed size of the section in octets. */
1093: bfd_size_type compressed_size;
1094:
1095: /* Relaxation table. */
1096: struct relax_table *relax;
1097:
1098: /* Count of used relaxation table entries. */
1099: int relax_count;
1100:
1101:
1102: /* If this section is going to be output, then this value is the
1103: offset in *bytes* into the output section of the first byte in the
1104: input section (byte ==> smallest addressable unit on the
1105: target). In most cases, if this was going to start at the
1106: 100th octet (8-bit quantity) in the output section, this value
1107: would be 100. However, if the target byte size is 16 bits
1108: (bfd_octets_per_byte is "2"), this value would be 50. */
1109: bfd_vma output_offset;
1110:
1111: /* The output section through which to map on output. */
1112: struct bfd_section *output_section;
1113:
1114: /* The alignment requirement of the section, as an exponent of 2 -
1115: e.g., 3 aligns to 2^3 (or 8). */
1116: unsigned int alignment_power;
1117:
1118: /* If an input section, a pointer to a vector of relocation
1119: records for the data in this section. */
1120: struct reloc_cache_entry *relocation;
1121:
1122: /* If an output section, a pointer to a vector of pointers to
1123: relocation records for the data in this section. */
1124: struct reloc_cache_entry **orelocation;
1125:
1126: /* The number of relocation records in one of the above. */
1127: unsigned reloc_count;
1128:
1129: /* Information below is back end specific - and not always used
1130: or updated. */
1131:
1132: /* File position of section data. */
1133: file_ptr filepos;
1134:
1135: /* File position of relocation info. */
1136: file_ptr rel_filepos;
1137:
1138: /* File position of line data. */
1139: file_ptr line_filepos;
1140:
1141: /* Pointer to data for applications. */
1142: void *userdata;
1143:
1144: /* If the SEC_IN_MEMORY flag is set, this points to the actual
1145: contents. */
1146: unsigned char *contents;
1147:
1148: /* Attached line number information. */
1149: alent *lineno;
1150:
1151: /* Number of line number records. */
1152: unsigned int lineno_count;
1153:
1154: /* Entity size for merging purposes. */
1155: unsigned int entsize;
1156:
1157: /* Points to the kept section if this section is a link-once section,
1158: and is discarded. */
1159: struct bfd_section *kept_section;
1160:
1161: /* When a section is being output, this value changes as more
1162: linenumbers are written out. */
1163: file_ptr moving_line_filepos;
1164:
1165: /* What the section number is in the target world. */
1166: int target_index;
1167:
1168: void *used_by_bfd;
1169:
1170: /* If this is a constructor section then here is a list of the
1171: relocations created to relocate items within it. */
1172: struct relent_chain *constructor_chain;
1173:
1174: /* The BFD which owns the section. */
1175: bfd *owner;
1176:
1177: /* A symbol which points at this section only. */
1178: struct bfd_symbol *symbol;
1179: struct bfd_symbol **symbol_ptr_ptr;
1180:
1181: /* Early in the link process, map_head and map_tail are used to build
1182: a list of input sections attached to an output section. Later,
1183: output sections use these fields for a list of bfd_link_order
1184: structs. */
1185: union {
1186: struct bfd_link_order *link_order;
1187: struct bfd_section *s;
1188: } map_head, map_tail;
1189: } asection;
1190:
1191: /* Relax table contains information about instructions which can
1.3 christos 1192: be removed by relaxation -- replacing a long address with a
1.1 christos 1193: short address. */
1194: struct relax_table {
1195: /* Address where bytes may be deleted. */
1196: bfd_vma addr;
1.3 christos 1197:
1.1 christos 1198: /* Number of bytes to be deleted. */
1199: int size;
1200: };
1201:
1.7 ! christos 1202: static inline const char *
! 1203: bfd_section_name (const asection *sec)
! 1204: {
! 1205: return sec->name;
! 1206: }
! 1207:
! 1208: static inline bfd_size_type
! 1209: bfd_section_size (const asection *sec)
! 1210: {
! 1211: return sec->size;
! 1212: }
! 1213:
! 1214: static inline bfd_vma
! 1215: bfd_section_vma (const asection *sec)
! 1216: {
! 1217: return sec->vma;
! 1218: }
! 1219:
! 1220: static inline bfd_vma
! 1221: bfd_section_lma (const asection *sec)
! 1222: {
! 1223: return sec->lma;
! 1224: }
! 1225:
! 1226: static inline unsigned int
! 1227: bfd_section_alignment (const asection *sec)
! 1228: {
! 1229: return sec->alignment_power;
! 1230: }
! 1231:
! 1232: static inline flagword
! 1233: bfd_section_flags (const asection *sec)
! 1234: {
! 1235: return sec->flags;
! 1236: }
! 1237:
! 1238: static inline void *
! 1239: bfd_section_userdata (const asection *sec)
! 1240: {
! 1241: return sec->userdata;
! 1242: }
! 1243: static inline bfd_boolean
! 1244: bfd_is_com_section (const asection *sec)
! 1245: {
! 1246: return (sec->flags & SEC_IS_COMMON) != 0;
! 1247: }
! 1248:
1.3 christos 1249: /* Note: the following are provided as inline functions rather than macros
1250: because not all callers use the return value. A macro implementation
1251: would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
1252: compilers will complain about comma expressions that have no effect. */
1253: static inline bfd_boolean
1.7 ! christos 1254: bfd_set_section_userdata (asection *sec, void *val)
1.3 christos 1255: {
1.7 ! christos 1256: sec->userdata = val;
1.3 christos 1257: return TRUE;
1258: }
1259:
1260: static inline bfd_boolean
1.7 ! christos 1261: bfd_set_section_vma (asection *sec, bfd_vma val)
1.3 christos 1262: {
1.7 ! christos 1263: sec->vma = sec->lma = val;
! 1264: sec->user_set_vma = TRUE;
1.3 christos 1265: return TRUE;
1266: }
1267:
1268: static inline bfd_boolean
1.7 ! christos 1269: bfd_set_section_lma (asection *sec, bfd_vma val)
1.3 christos 1270: {
1.7 ! christos 1271: sec->lma = val;
! 1272: return TRUE;
! 1273: }
! 1274:
! 1275: static inline bfd_boolean
! 1276: bfd_set_section_alignment (asection *sec, unsigned int val)
! 1277: {
! 1278: sec->alignment_power = val;
1.3 christos 1279: return TRUE;
1280: }
1281:
1.1 christos 1282: /* These sections are global, and are managed by BFD. The application
1283: and target back end are not permitted to change the values in
1284: these sections. */
1.3 christos 1285: extern asection _bfd_std_section[4];
1.1 christos 1286:
1287: #define BFD_ABS_SECTION_NAME "*ABS*"
1288: #define BFD_UND_SECTION_NAME "*UND*"
1289: #define BFD_COM_SECTION_NAME "*COM*"
1290: #define BFD_IND_SECTION_NAME "*IND*"
1291:
1292: /* Pointer to the common section. */
1.3 christos 1293: #define bfd_com_section_ptr (&_bfd_std_section[0])
1.1 christos 1294: /* Pointer to the undefined section. */
1.3 christos 1295: #define bfd_und_section_ptr (&_bfd_std_section[1])
1.1 christos 1296: /* Pointer to the absolute section. */
1.3 christos 1297: #define bfd_abs_section_ptr (&_bfd_std_section[2])
1.1 christos 1298: /* Pointer to the indirect section. */
1.3 christos 1299: #define bfd_ind_section_ptr (&_bfd_std_section[3])
1.1 christos 1300:
1.7 ! christos 1301: static inline bfd_boolean
! 1302: bfd_is_und_section (const asection *sec)
! 1303: {
! 1304: return sec == bfd_und_section_ptr;
! 1305: }
! 1306:
! 1307: static inline bfd_boolean
! 1308: bfd_is_abs_section (const asection *sec)
! 1309: {
! 1310: return sec == bfd_abs_section_ptr;
! 1311: }
1.1 christos 1312:
1.7 ! christos 1313: static inline bfd_boolean
! 1314: bfd_is_ind_section (const asection *sec)
! 1315: {
! 1316: return sec == bfd_ind_section_ptr;
! 1317: }
! 1318:
! 1319: static inline bfd_boolean
! 1320: bfd_is_const_section (const asection *sec)
! 1321: {
! 1322: return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr;
! 1323: }
! 1324:
! 1325: /* Return TRUE if input section SEC has been discarded. */
! 1326: static inline bfd_boolean
! 1327: discarded_section (const asection *sec)
! 1328: {
! 1329: return (!bfd_is_abs_section (sec)
! 1330: && bfd_is_abs_section (sec->output_section)
! 1331: && sec->sec_info_type != SEC_INFO_TYPE_MERGE
! 1332: && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS);
! 1333: }
1.1 christos 1334:
1.6 christos 1335: #define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \
1.1 christos 1336: /* name, id, index, next, prev, flags, user_set_vma, */ \
1.6 christos 1337: { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
1.1 christos 1338: \
1339: /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \
1340: 0, 0, 1, 0, \
1341: \
1342: /* segment_mark, sec_info_type, use_rela_p, */ \
1343: 0, 0, 0, \
1344: \
1345: /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \
1346: 0, 0, 0, 0, 0, 0, \
1347: \
1348: /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \
1349: 0, 0, 0, 0, 0, 0, 0, \
1350: \
1351: /* output_offset, output_section, alignment_power, */ \
1352: 0, &SEC, 0, \
1353: \
1354: /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
1355: NULL, NULL, 0, 0, 0, \
1356: \
1357: /* line_filepos, userdata, contents, lineno, lineno_count, */ \
1358: 0, NULL, NULL, NULL, 0, \
1359: \
1360: /* entsize, kept_section, moving_line_filepos, */ \
1361: 0, NULL, 0, \
1362: \
1363: /* target_index, used_by_bfd, constructor_chain, owner, */ \
1364: 0, NULL, NULL, NULL, \
1365: \
1366: /* symbol, symbol_ptr_ptr, */ \
1367: (struct bfd_symbol *) SYM, &SEC.symbol, \
1368: \
1369: /* map_head, map_tail */ \
1370: { NULL }, { NULL } \
1371: }
1372:
1.6 christos 1373: /* We use a macro to initialize the static asymbol structures because
1374: traditional C does not permit us to initialize a union member while
1375: gcc warns if we don't initialize it.
1376: the_bfd, name, value, attr, section [, udata] */
1377: #ifdef __STDC__
1378: #define GLOBAL_SYM_INIT(NAME, SECTION) \
1379: { 0, NAME, 0, BSF_SECTION_SYM, SECTION, { 0 }}
1380: #else
1381: #define GLOBAL_SYM_INIT(NAME, SECTION) \
1382: { 0, NAME, 0, BSF_SECTION_SYM, SECTION }
1383: #endif
1384:
1.1 christos 1385: void bfd_section_list_clear (bfd *);
1386:
1387: asection *bfd_get_section_by_name (bfd *abfd, const char *name);
1388:
1.3 christos 1389: asection *bfd_get_next_section_by_name (bfd *ibfd, asection *sec);
1.1 christos 1390:
1391: asection *bfd_get_linker_section (bfd *abfd, const char *name);
1392:
1393: asection *bfd_get_section_by_name_if
1394: (bfd *abfd,
1395: const char *name,
1396: bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
1397: void *obj);
1398:
1399: char *bfd_get_unique_section_name
1400: (bfd *abfd, const char *templat, int *count);
1401:
1402: asection *bfd_make_section_old_way (bfd *abfd, const char *name);
1403:
1404: asection *bfd_make_section_anyway_with_flags
1405: (bfd *abfd, const char *name, flagword flags);
1406:
1407: asection *bfd_make_section_anyway (bfd *abfd, const char *name);
1408:
1409: asection *bfd_make_section_with_flags
1410: (bfd *, const char *name, flagword flags);
1411:
1412: asection *bfd_make_section (bfd *, const char *name);
1413:
1.7 ! christos 1414: bfd_boolean bfd_set_section_flags (asection *sec, flagword flags);
1.1 christos 1415:
1416: void bfd_rename_section
1.7 ! christos 1417: (asection *sec, const char *newname);
1.1 christos 1418:
1419: void bfd_map_over_sections
1420: (bfd *abfd,
1421: void (*func) (bfd *abfd, asection *sect, void *obj),
1422: void *obj);
1423:
1424: asection *bfd_sections_find_if
1425: (bfd *abfd,
1426: bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
1427: void *obj);
1428:
1.7 ! christos 1429: bfd_boolean bfd_set_section_size (asection *sec, bfd_size_type val);
1.1 christos 1430:
1431: bfd_boolean bfd_set_section_contents
1432: (bfd *abfd, asection *section, const void *data,
1433: file_ptr offset, bfd_size_type count);
1434:
1435: bfd_boolean bfd_get_section_contents
1436: (bfd *abfd, asection *section, void *location, file_ptr offset,
1437: bfd_size_type count);
1438:
1439: bfd_boolean bfd_malloc_and_get_section
1440: (bfd *abfd, asection *section, bfd_byte **buf);
1441:
1442: bfd_boolean bfd_copy_private_section_data
1443: (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
1444:
1445: #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
1.6 christos 1446: BFD_SEND (obfd, _bfd_copy_private_section_data, \
1447: (ibfd, isection, obfd, osection))
1.1 christos 1448: bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
1449:
1.7 ! christos 1450: const char *bfd_generic_group_name (bfd *, const asection *sec);
! 1451:
1.1 christos 1452: bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
1453:
1454: /* Extracted from archures.c. */
1455: enum bfd_architecture
1456: {
1457: bfd_arch_unknown, /* File arch not known. */
1458: bfd_arch_obscure, /* Arch known, not one of these. */
1.6 christos 1459: bfd_arch_m68k, /* Motorola 68xxx. */
1460: #define bfd_mach_m68000 1
1461: #define bfd_mach_m68008 2
1462: #define bfd_mach_m68010 3
1463: #define bfd_mach_m68020 4
1464: #define bfd_mach_m68030 5
1465: #define bfd_mach_m68040 6
1466: #define bfd_mach_m68060 7
1467: #define bfd_mach_cpu32 8
1468: #define bfd_mach_fido 9
1469: #define bfd_mach_mcf_isa_a_nodiv 10
1470: #define bfd_mach_mcf_isa_a 11
1471: #define bfd_mach_mcf_isa_a_mac 12
1472: #define bfd_mach_mcf_isa_a_emac 13
1473: #define bfd_mach_mcf_isa_aplus 14
1474: #define bfd_mach_mcf_isa_aplus_mac 15
1475: #define bfd_mach_mcf_isa_aplus_emac 16
1476: #define bfd_mach_mcf_isa_b_nousp 17
1477: #define bfd_mach_mcf_isa_b_nousp_mac 18
1478: #define bfd_mach_mcf_isa_b_nousp_emac 19
1479: #define bfd_mach_mcf_isa_b 20
1480: #define bfd_mach_mcf_isa_b_mac 21
1481: #define bfd_mach_mcf_isa_b_emac 22
1482: #define bfd_mach_mcf_isa_b_float 23
1483: #define bfd_mach_mcf_isa_b_float_mac 24
1484: #define bfd_mach_mcf_isa_b_float_emac 25
1485: #define bfd_mach_mcf_isa_c 26
1486: #define bfd_mach_mcf_isa_c_mac 27
1487: #define bfd_mach_mcf_isa_c_emac 28
1488: #define bfd_mach_mcf_isa_c_nodiv 29
1489: #define bfd_mach_mcf_isa_c_nodiv_mac 30
1490: #define bfd_mach_mcf_isa_c_nodiv_emac 31
1491: bfd_arch_vax, /* DEC Vax. */
1492:
1493: bfd_arch_or1k, /* OpenRISC 1000. */
1494: #define bfd_mach_or1k 1
1495: #define bfd_mach_or1knd 2
1.1 christos 1496:
1.6 christos 1497: bfd_arch_sparc, /* SPARC. */
1.1 christos 1498: #define bfd_mach_sparc 1
1499: /* The difference between v8plus and v9 is that v9 is a true 64 bit env. */
1500: #define bfd_mach_sparc_sparclet 2
1501: #define bfd_mach_sparc_sparclite 3
1502: #define bfd_mach_sparc_v8plus 4
1503: #define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns. */
1504: #define bfd_mach_sparc_sparclite_le 6
1505: #define bfd_mach_sparc_v9 7
1506: #define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */
1507: #define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */
1508: #define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */
1.5 christos 1509: #define bfd_mach_sparc_v8plusc 11 /* with UA2005 and T1 add'ns. */
1510: #define bfd_mach_sparc_v9c 12 /* with UA2005 and T1 add'ns. */
1511: #define bfd_mach_sparc_v8plusd 13 /* with UA2007 and T3 add'ns. */
1512: #define bfd_mach_sparc_v9d 14 /* with UA2007 and T3 add'ns. */
1513: #define bfd_mach_sparc_v8pluse 15 /* with OSA2001 and T4 add'ns (no IMA). */
1514: #define bfd_mach_sparc_v9e 16 /* with OSA2001 and T4 add'ns (no IMA). */
1515: #define bfd_mach_sparc_v8plusv 17 /* with OSA2011 and T4 and IMA and FJMAU add'ns. */
1516: #define bfd_mach_sparc_v9v 18 /* with OSA2011 and T4 and IMA and FJMAU add'ns. */
1517: #define bfd_mach_sparc_v8plusm 19 /* with OSA2015 and M7 add'ns. */
1518: #define bfd_mach_sparc_v9m 20 /* with OSA2015 and M7 add'ns. */
1.6 christos 1519: #define bfd_mach_sparc_v8plusm8 21 /* with OSA2017 and M8 add'ns. */
1520: #define bfd_mach_sparc_v9m8 22 /* with OSA2017 and M8 add'ns. */
1.1 christos 1521: /* Nonzero if MACH has the v9 instruction set. */
1522: #define bfd_mach_sparc_v9_p(mach) \
1.6 christos 1523: ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9m8 \
1.1 christos 1524: && (mach) != bfd_mach_sparc_sparclite_le)
1525: /* Nonzero if MACH is a 64 bit sparc architecture. */
1526: #define bfd_mach_sparc_64bit_p(mach) \
1.5 christos 1527: ((mach) >= bfd_mach_sparc_v9 \
1528: && (mach) != bfd_mach_sparc_v8plusb \
1529: && (mach) != bfd_mach_sparc_v8plusc \
1530: && (mach) != bfd_mach_sparc_v8plusd \
1531: && (mach) != bfd_mach_sparc_v8pluse \
1532: && (mach) != bfd_mach_sparc_v8plusv \
1.6 christos 1533: && (mach) != bfd_mach_sparc_v8plusm \
1534: && (mach) != bfd_mach_sparc_v8plusm8)
1535: bfd_arch_spu, /* PowerPC SPU. */
1.3 christos 1536: #define bfd_mach_spu 256
1.6 christos 1537: bfd_arch_mips, /* MIPS Rxxxx. */
1.1 christos 1538: #define bfd_mach_mips3000 3000
1539: #define bfd_mach_mips3900 3900
1540: #define bfd_mach_mips4000 4000
1541: #define bfd_mach_mips4010 4010
1542: #define bfd_mach_mips4100 4100
1543: #define bfd_mach_mips4111 4111
1544: #define bfd_mach_mips4120 4120
1545: #define bfd_mach_mips4300 4300
1546: #define bfd_mach_mips4400 4400
1547: #define bfd_mach_mips4600 4600
1548: #define bfd_mach_mips4650 4650
1549: #define bfd_mach_mips5000 5000
1550: #define bfd_mach_mips5400 5400
1551: #define bfd_mach_mips5500 5500
1.3 christos 1552: #define bfd_mach_mips5900 5900
1.1 christos 1553: #define bfd_mach_mips6000 6000
1554: #define bfd_mach_mips7000 7000
1555: #define bfd_mach_mips8000 8000
1556: #define bfd_mach_mips9000 9000
1557: #define bfd_mach_mips10000 10000
1558: #define bfd_mach_mips12000 12000
1559: #define bfd_mach_mips14000 14000
1560: #define bfd_mach_mips16000 16000
1561: #define bfd_mach_mips16 16
1562: #define bfd_mach_mips5 5
1563: #define bfd_mach_mips_loongson_2e 3001
1564: #define bfd_mach_mips_loongson_2f 3002
1.7 ! christos 1565: #define bfd_mach_mips_gs464 3003
! 1566: #define bfd_mach_mips_gs464e 3004
! 1567: #define bfd_mach_mips_gs264e 3005
1.6 christos 1568: #define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01. */
1.1 christos 1569: #define bfd_mach_mips_octeon 6501
1570: #define bfd_mach_mips_octeonp 6601
1571: #define bfd_mach_mips_octeon2 6502
1.3 christos 1572: #define bfd_mach_mips_octeon3 6503
1.6 christos 1573: #define bfd_mach_mips_xlr 887682 /* decimal 'XLR'. */
1574: #define bfd_mach_mips_interaptiv_mr2 736550 /* decimal 'IA2'. */
1.1 christos 1575: #define bfd_mach_mipsisa32 32
1576: #define bfd_mach_mipsisa32r2 33
1.3 christos 1577: #define bfd_mach_mipsisa32r3 34
1578: #define bfd_mach_mipsisa32r5 36
1579: #define bfd_mach_mipsisa32r6 37
1.1 christos 1580: #define bfd_mach_mipsisa64 64
1581: #define bfd_mach_mipsisa64r2 65
1.3 christos 1582: #define bfd_mach_mipsisa64r3 66
1583: #define bfd_mach_mipsisa64r5 68
1584: #define bfd_mach_mipsisa64r6 69
1.1 christos 1585: #define bfd_mach_mips_micromips 96
1.6 christos 1586: bfd_arch_i386, /* Intel 386. */
1.1 christos 1587: #define bfd_mach_i386_intel_syntax (1 << 0)
1588: #define bfd_mach_i386_i8086 (1 << 1)
1589: #define bfd_mach_i386_i386 (1 << 2)
1590: #define bfd_mach_x86_64 (1 << 3)
1591: #define bfd_mach_x64_32 (1 << 4)
1592: #define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
1593: #define bfd_mach_x86_64_intel_syntax (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
1594: #define bfd_mach_x64_32_intel_syntax (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
1.6 christos 1595: bfd_arch_l1om, /* Intel L1OM. */
1.1 christos 1596: #define bfd_mach_l1om (1 << 5)
1597: #define bfd_mach_l1om_intel_syntax (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
1.6 christos 1598: bfd_arch_k1om, /* Intel K1OM. */
1.1 christos 1599: #define bfd_mach_k1om (1 << 6)
1600: #define bfd_mach_k1om_intel_syntax (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
1.3 christos 1601: #define bfd_mach_i386_nacl (1 << 7)
1602: #define bfd_mach_i386_i386_nacl (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
1603: #define bfd_mach_x86_64_nacl (bfd_mach_x86_64 | bfd_mach_i386_nacl)
1604: #define bfd_mach_x64_32_nacl (bfd_mach_x64_32 | bfd_mach_i386_nacl)
1.6 christos 1605: bfd_arch_iamcu, /* Intel MCU. */
1.3 christos 1606: #define bfd_mach_iamcu (1 << 8)
1607: #define bfd_mach_i386_iamcu (bfd_mach_i386_i386 | bfd_mach_iamcu)
1608: #define bfd_mach_i386_iamcu_intel_syntax (bfd_mach_i386_iamcu | bfd_mach_i386_intel_syntax)
1.6 christos 1609: bfd_arch_romp, /* IBM ROMP PC/RT. */
1610: bfd_arch_convex, /* Convex. */
1611: bfd_arch_m98k, /* Motorola 98xxx. */
1612: bfd_arch_pyramid, /* Pyramid Technology. */
1613: bfd_arch_h8300, /* Renesas H8/300 (formerly Hitachi H8/300). */
1614: #define bfd_mach_h8300 1
1615: #define bfd_mach_h8300h 2
1616: #define bfd_mach_h8300s 3
1617: #define bfd_mach_h8300hn 4
1618: #define bfd_mach_h8300sn 5
1619: #define bfd_mach_h8300sx 6
1620: #define bfd_mach_h8300sxn 7
1621: bfd_arch_pdp11, /* DEC PDP-11. */
1.1 christos 1622: bfd_arch_plugin,
1.6 christos 1623: bfd_arch_powerpc, /* PowerPC. */
1.1 christos 1624: #define bfd_mach_ppc 32
1625: #define bfd_mach_ppc64 64
1626: #define bfd_mach_ppc_403 403
1627: #define bfd_mach_ppc_403gc 4030
1628: #define bfd_mach_ppc_405 405
1629: #define bfd_mach_ppc_505 505
1630: #define bfd_mach_ppc_601 601
1631: #define bfd_mach_ppc_602 602
1632: #define bfd_mach_ppc_603 603
1633: #define bfd_mach_ppc_ec603e 6031
1634: #define bfd_mach_ppc_604 604
1635: #define bfd_mach_ppc_620 620
1636: #define bfd_mach_ppc_630 630
1637: #define bfd_mach_ppc_750 750
1638: #define bfd_mach_ppc_860 860
1639: #define bfd_mach_ppc_a35 35
1640: #define bfd_mach_ppc_rs64ii 642
1641: #define bfd_mach_ppc_rs64iii 643
1642: #define bfd_mach_ppc_7400 7400
1643: #define bfd_mach_ppc_e500 500
1644: #define bfd_mach_ppc_e500mc 5001
1645: #define bfd_mach_ppc_e500mc64 5005
1646: #define bfd_mach_ppc_e5500 5006
1647: #define bfd_mach_ppc_e6500 5007
1648: #define bfd_mach_ppc_titan 83
1649: #define bfd_mach_ppc_vle 84
1.6 christos 1650: bfd_arch_rs6000, /* IBM RS/6000. */
1.1 christos 1651: #define bfd_mach_rs6k 6000
1652: #define bfd_mach_rs6k_rs1 6001
1653: #define bfd_mach_rs6k_rsc 6003
1654: #define bfd_mach_rs6k_rs2 6002
1.6 christos 1655: bfd_arch_hppa, /* HP PA RISC. */
1.1 christos 1656: #define bfd_mach_hppa10 10
1657: #define bfd_mach_hppa11 11
1658: #define bfd_mach_hppa20 20
1659: #define bfd_mach_hppa20w 25
1.6 christos 1660: bfd_arch_d10v, /* Mitsubishi D10V. */
1.1 christos 1661: #define bfd_mach_d10v 1
1662: #define bfd_mach_d10v_ts2 2
1663: #define bfd_mach_d10v_ts3 3
1.6 christos 1664: bfd_arch_d30v, /* Mitsubishi D30V. */
1665: bfd_arch_dlx, /* DLX. */
1666: bfd_arch_m68hc11, /* Motorola 68HC11. */
1667: bfd_arch_m68hc12, /* Motorola 68HC12. */
1.1 christos 1668: #define bfd_mach_m6812_default 0
1669: #define bfd_mach_m6812 1
1670: #define bfd_mach_m6812s 2
1.6 christos 1671: bfd_arch_m9s12x, /* Freescale S12X. */
1672: bfd_arch_m9s12xg, /* Freescale XGATE. */
1673: bfd_arch_s12z, /* Freescale S12Z. */
1674: #define bfd_mach_s12z_default 0
1675: bfd_arch_z8k, /* Zilog Z8000. */
1.1 christos 1676: #define bfd_mach_z8001 1
1677: #define bfd_mach_z8002 2
1.6 christos 1678: bfd_arch_sh, /* Renesas / SuperH SH (formerly Hitachi SH). */
1679: #define bfd_mach_sh 1
1680: #define bfd_mach_sh2 0x20
1681: #define bfd_mach_sh_dsp 0x2d
1682: #define bfd_mach_sh2a 0x2a
1683: #define bfd_mach_sh2a_nofpu 0x2b
1.1 christos 1684: #define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
1.6 christos 1685: #define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
1686: #define bfd_mach_sh2a_or_sh4 0x2a3
1687: #define bfd_mach_sh2a_or_sh3e 0x2a4
1688: #define bfd_mach_sh2e 0x2e
1689: #define bfd_mach_sh3 0x30
1690: #define bfd_mach_sh3_nommu 0x31
1691: #define bfd_mach_sh3_dsp 0x3d
1692: #define bfd_mach_sh3e 0x3e
1693: #define bfd_mach_sh4 0x40
1694: #define bfd_mach_sh4_nofpu 0x41
1695: #define bfd_mach_sh4_nommu_nofpu 0x42
1696: #define bfd_mach_sh4a 0x4a
1697: #define bfd_mach_sh4a_nofpu 0x4b
1698: #define bfd_mach_sh4al_dsp 0x4d
1699: bfd_arch_alpha, /* Dec Alpha. */
1700: #define bfd_mach_alpha_ev4 0x10
1701: #define bfd_mach_alpha_ev5 0x20
1702: #define bfd_mach_alpha_ev6 0x30
1.1 christos 1703: bfd_arch_arm, /* Advanced Risc Machines ARM. */
1704: #define bfd_mach_arm_unknown 0
1705: #define bfd_mach_arm_2 1
1706: #define bfd_mach_arm_2a 2
1707: #define bfd_mach_arm_3 3
1708: #define bfd_mach_arm_3M 4
1709: #define bfd_mach_arm_4 5
1710: #define bfd_mach_arm_4T 6
1711: #define bfd_mach_arm_5 7
1712: #define bfd_mach_arm_5T 8
1713: #define bfd_mach_arm_5TE 9
1714: #define bfd_mach_arm_XScale 10
1715: #define bfd_mach_arm_ep9312 11
1716: #define bfd_mach_arm_iWMMXt 12
1717: #define bfd_mach_arm_iWMMXt2 13
1.7 ! christos 1718: #define bfd_mach_arm_5TEJ 14
! 1719: #define bfd_mach_arm_6 15
! 1720: #define bfd_mach_arm_6KZ 16
! 1721: #define bfd_mach_arm_6T2 17
! 1722: #define bfd_mach_arm_6K 18
! 1723: #define bfd_mach_arm_7 19
! 1724: #define bfd_mach_arm_6M 20
! 1725: #define bfd_mach_arm_6SM 21
! 1726: #define bfd_mach_arm_7EM 22
! 1727: #define bfd_mach_arm_8 23
! 1728: #define bfd_mach_arm_8R 24
! 1729: #define bfd_mach_arm_8M_BASE 25
! 1730: #define bfd_mach_arm_8M_MAIN 26
! 1731: #define bfd_mach_arm_8_1M_MAIN 27
1.6 christos 1732: bfd_arch_nds32, /* Andes NDS32. */
1.3 christos 1733: #define bfd_mach_n1 1
1734: #define bfd_mach_n1h 2
1735: #define bfd_mach_n1h_v2 3
1736: #define bfd_mach_n1h_v3 4
1737: #define bfd_mach_n1h_v3m 5
1.6 christos 1738: bfd_arch_ns32k, /* National Semiconductors ns32000. */
1739: bfd_arch_tic30, /* Texas Instruments TMS320C30. */
1740: bfd_arch_tic4x, /* Texas Instruments TMS320C3X/4X. */
1.1 christos 1741: #define bfd_mach_tic3x 30
1742: #define bfd_mach_tic4x 40
1.6 christos 1743: bfd_arch_tic54x, /* Texas Instruments TMS320C54X. */
1744: bfd_arch_tic6x, /* Texas Instruments TMS320C6X. */
1745: bfd_arch_v850, /* NEC V850. */
1746: bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI). */
1.1 christos 1747: #define bfd_mach_v850 1
1748: #define bfd_mach_v850e 'E'
1749: #define bfd_mach_v850e1 '1'
1750: #define bfd_mach_v850e2 0x4532
1751: #define bfd_mach_v850e2v3 0x45325633
1.6 christos 1752: #define bfd_mach_v850e3v5 0x45335635 /* ('E'|'3'|'V'|'5'). */
1753: bfd_arch_arc, /* ARC Cores. */
1.3 christos 1754: #define bfd_mach_arc_a4 0
1755: #define bfd_mach_arc_a5 1
1756: #define bfd_mach_arc_arc600 2
1757: #define bfd_mach_arc_arc601 4
1758: #define bfd_mach_arc_arc700 3
1759: #define bfd_mach_arc_arcv2 5
1.6 christos 1760: bfd_arch_m32c, /* Renesas M16C/M32C. */
1761: #define bfd_mach_m16c 0x75
1762: #define bfd_mach_m32c 0x78
1763: bfd_arch_m32r, /* Renesas M32R (formerly Mitsubishi M32R/D). */
1.1 christos 1764: #define bfd_mach_m32r 1 /* For backwards compatibility. */
1765: #define bfd_mach_m32rx 'x'
1766: #define bfd_mach_m32r2 '2'
1.6 christos 1767: bfd_arch_mn10200, /* Matsushita MN10200. */
1768: bfd_arch_mn10300, /* Matsushita MN10300. */
1769: #define bfd_mach_mn10300 300
1.1 christos 1770: #define bfd_mach_am33 330
1771: #define bfd_mach_am33_2 332
1772: bfd_arch_fr30,
1773: #define bfd_mach_fr30 0x46523330
1774: bfd_arch_frv,
1775: #define bfd_mach_frv 1
1776: #define bfd_mach_frvsimple 2
1777: #define bfd_mach_fr300 300
1778: #define bfd_mach_fr400 400
1779: #define bfd_mach_fr450 450
1.6 christos 1780: #define bfd_mach_frvtomcat 499 /* fr500 prototype. */
1.1 christos 1781: #define bfd_mach_fr500 500
1782: #define bfd_mach_fr550 550
1.6 christos 1783: bfd_arch_moxie, /* The moxie processor. */
1.1 christos 1784: #define bfd_mach_moxie 1
1.6 christos 1785: bfd_arch_ft32, /* The ft32 processor. */
1.3 christos 1786: #define bfd_mach_ft32 1
1.6 christos 1787: #define bfd_mach_ft32b 2
1.1 christos 1788: bfd_arch_mcore,
1789: bfd_arch_mep,
1790: #define bfd_mach_mep 1
1791: #define bfd_mach_mep_h1 0x6831
1792: #define bfd_mach_mep_c5 0x6335
1.3 christos 1793: bfd_arch_metag,
1794: #define bfd_mach_metag 1
1.6 christos 1795: bfd_arch_ia64, /* HP/Intel ia64. */
1.1 christos 1796: #define bfd_mach_ia64_elf64 64
1797: #define bfd_mach_ia64_elf32 32
1798: bfd_arch_ip2k, /* Ubicom IP2K microcontrollers. */
1799: #define bfd_mach_ip2022 1
1800: #define bfd_mach_ip2022ext 2
1801: bfd_arch_iq2000, /* Vitesse IQ2000. */
1802: #define bfd_mach_iq2000 1
1803: #define bfd_mach_iq10 2
1.7 ! christos 1804: bfd_arch_bpf, /* Linux eBPF. */
! 1805: #define bfd_mach_bpf 1
1.6 christos 1806: bfd_arch_epiphany, /* Adapteva EPIPHANY. */
1.1 christos 1807: #define bfd_mach_epiphany16 1
1808: #define bfd_mach_epiphany32 2
1809: bfd_arch_mt,
1810: #define bfd_mach_ms1 1
1811: #define bfd_mach_mrisc2 2
1812: #define bfd_mach_ms2 3
1813: bfd_arch_pj,
1814: bfd_arch_avr, /* Atmel AVR microcontrollers. */
1815: #define bfd_mach_avr1 1
1816: #define bfd_mach_avr2 2
1817: #define bfd_mach_avr25 25
1818: #define bfd_mach_avr3 3
1819: #define bfd_mach_avr31 31
1820: #define bfd_mach_avr35 35
1821: #define bfd_mach_avr4 4
1822: #define bfd_mach_avr5 5
1823: #define bfd_mach_avr51 51
1824: #define bfd_mach_avr6 6
1.6 christos 1825: #define bfd_mach_avrtiny 100
1826: #define bfd_mach_avrxmega1 101
1827: #define bfd_mach_avrxmega2 102
1828: #define bfd_mach_avrxmega3 103
1829: #define bfd_mach_avrxmega4 104
1830: #define bfd_mach_avrxmega5 105
1831: #define bfd_mach_avrxmega6 106
1832: #define bfd_mach_avrxmega7 107
1833: bfd_arch_bfin, /* ADI Blackfin. */
1.1 christos 1834: #define bfd_mach_bfin 1
1.6 christos 1835: bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */
1.1 christos 1836: #define bfd_mach_cr16 1
1837: bfd_arch_crx, /* National Semiconductor CRX. */
1838: #define bfd_mach_crx 1
1.6 christos 1839: bfd_arch_cris, /* Axis CRIS. */
1.1 christos 1840: #define bfd_mach_cris_v0_v10 255
1841: #define bfd_mach_cris_v32 32
1842: #define bfd_mach_cris_v10_v32 1032
1.6 christos 1843: bfd_arch_riscv,
1844: #define bfd_mach_riscv32 132
1845: #define bfd_mach_riscv64 164
1.1 christos 1846: bfd_arch_rl78,
1.6 christos 1847: #define bfd_mach_rl78 0x75
1.1 christos 1848: bfd_arch_rx, /* Renesas RX. */
1849: #define bfd_mach_rx 0x75
1.7 ! christos 1850: #define bfd_mach_rx_v2 0x76
! 1851: #define bfd_mach_rx_v3 0x77
1.6 christos 1852: bfd_arch_s390, /* IBM s390. */
1.1 christos 1853: #define bfd_mach_s390_31 31
1854: #define bfd_mach_s390_64 64
1.6 christos 1855: bfd_arch_score, /* Sunplus score. */
1856: #define bfd_mach_score3 3
1857: #define bfd_mach_score7 7
1.1 christos 1858: bfd_arch_mmix, /* Donald Knuth's educational processor. */
1859: bfd_arch_xstormy16,
1860: #define bfd_mach_xstormy16 1
1861: bfd_arch_msp430, /* Texas Instruments MSP430 architecture. */
1.6 christos 1862: #define bfd_mach_msp11 11
1863: #define bfd_mach_msp110 110
1864: #define bfd_mach_msp12 12
1865: #define bfd_mach_msp13 13
1866: #define bfd_mach_msp14 14
1867: #define bfd_mach_msp15 15
1868: #define bfd_mach_msp16 16
1869: #define bfd_mach_msp20 20
1870: #define bfd_mach_msp21 21
1871: #define bfd_mach_msp22 22
1872: #define bfd_mach_msp23 23
1873: #define bfd_mach_msp24 24
1874: #define bfd_mach_msp26 26
1875: #define bfd_mach_msp31 31
1876: #define bfd_mach_msp32 32
1877: #define bfd_mach_msp33 33
1878: #define bfd_mach_msp41 41
1879: #define bfd_mach_msp42 42
1880: #define bfd_mach_msp43 43
1881: #define bfd_mach_msp44 44
1882: #define bfd_mach_msp430x 45
1883: #define bfd_mach_msp46 46
1884: #define bfd_mach_msp47 47
1885: #define bfd_mach_msp54 54
1886: bfd_arch_xc16x, /* Infineon's XC16X Series. */
1.1 christos 1887: #define bfd_mach_xc16x 1
1888: #define bfd_mach_xc16xl 2
1889: #define bfd_mach_xc16xs 3
1.6 christos 1890: bfd_arch_xgate, /* Freescale XGATE. */
1.1 christos 1891: #define bfd_mach_xgate 1
1892: bfd_arch_xtensa, /* Tensilica's Xtensa cores. */
1893: #define bfd_mach_xtensa 1
1894: bfd_arch_z80,
1.7 ! christos 1895: #define bfd_mach_gbz80 0 /* GameBoy Z80 (reduced instruction set) */
! 1896: #define bfd_mach_z80strict 1 /* Z80 without undocumented opcodes. */
! 1897: #define bfd_mach_z180 2 /* Z180: successor with additional instructions, but without halves of ix and iy */
! 1898: #define bfd_mach_z80 3 /* Z80 with ixl, ixh, iyl, and iyh. */
! 1899: #define bfd_mach_ez80_z80 4 /* eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode */
! 1900: #define bfd_mach_ez80_adl 5 /* eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode */
! 1901: #define bfd_mach_z80full 7 /* Z80 with all undocumented instructions. */
1.6 christos 1902: #define bfd_mach_r800 11 /* R800: successor with multiplication. */
1903: bfd_arch_lm32, /* Lattice Mico32. */
1904: #define bfd_mach_lm32 1
1905: bfd_arch_microblaze,/* Xilinx MicroBlaze. */
1906: bfd_arch_tilepro, /* Tilera TILEPro. */
1907: bfd_arch_tilegx, /* Tilera TILE-Gx. */
1908: #define bfd_mach_tilepro 1
1909: #define bfd_mach_tilegx 1
1910: #define bfd_mach_tilegx32 2
1911: bfd_arch_aarch64, /* AArch64. */
1.1 christos 1912: #define bfd_mach_aarch64 0
1.3 christos 1913: #define bfd_mach_aarch64_ilp32 32
1.6 christos 1914: bfd_arch_nios2, /* Nios II. */
1.3 christos 1915: #define bfd_mach_nios2 0
1916: #define bfd_mach_nios2r1 1
1917: #define bfd_mach_nios2r2 2
1.6 christos 1918: bfd_arch_visium, /* Visium. */
1.3 christos 1919: #define bfd_mach_visium 1
1.6 christos 1920: bfd_arch_wasm32, /* WebAssembly. */
1921: #define bfd_mach_wasm32 1
1922: bfd_arch_pru, /* PRU. */
1923: #define bfd_mach_pru 0
1924: bfd_arch_nfp, /* Netronome Flow Processor */
1925: #define bfd_mach_nfp3200 0x3200
1926: #define bfd_mach_nfp6000 0x6000
1.7 ! christos 1927: bfd_arch_csky, /* C-SKY. */
! 1928: #define bfd_mach_ck_unknown 0
! 1929: #define bfd_mach_ck510 1
! 1930: #define bfd_mach_ck610 2
! 1931: #define bfd_mach_ck801 3
! 1932: #define bfd_mach_ck802 4
! 1933: #define bfd_mach_ck803 5
! 1934: #define bfd_mach_ck807 6
! 1935: #define bfd_mach_ck810 7
1.1 christos 1936: bfd_arch_last
1937: };
1938:
1939: typedef struct bfd_arch_info
1940: {
1941: int bits_per_word;
1942: int bits_per_address;
1943: int bits_per_byte;
1944: enum bfd_architecture arch;
1945: unsigned long mach;
1946: const char *arch_name;
1947: const char *printable_name;
1948: unsigned int section_align_power;
1949: /* TRUE if this is the default machine for the architecture.
1950: The default arch should be the first entry for an arch so that
1951: all the entries for that arch can be accessed via <<next>>. */
1952: bfd_boolean the_default;
1.6 christos 1953: const struct bfd_arch_info * (*compatible) (const struct bfd_arch_info *,
1954: const struct bfd_arch_info *);
1.1 christos 1955:
1956: bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
1957:
1958: /* Allocate via bfd_malloc and return a fill buffer of size COUNT. If
1959: IS_BIGENDIAN is TRUE, the order of bytes is big endian. If CODE is
1960: TRUE, the buffer contains code. */
1961: void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
1962: bfd_boolean code);
1963:
1964: const struct bfd_arch_info *next;
1.7 ! christos 1965:
! 1966: /* On some architectures the offset for a relocation can point into
! 1967: the middle of an instruction. This field specifies the maximum
! 1968: offset such a relocation can have (in octets). This affects the
! 1969: behaviour of the disassembler, since a value greater than zero
! 1970: means that it may need to disassemble an instruction twice, once
! 1971: to get its length and then a second time to display it. If the
! 1972: value is negative then this has to be done for every single
! 1973: instruction, regardless of the offset of the reloc. */
! 1974: signed int max_reloc_offset_into_insn;
1.1 christos 1975: }
1976: bfd_arch_info_type;
1977:
1978: const char *bfd_printable_name (bfd *abfd);
1979:
1980: const bfd_arch_info_type *bfd_scan_arch (const char *string);
1981:
1982: const char **bfd_arch_list (void);
1983:
1984: const bfd_arch_info_type *bfd_arch_get_compatible
1985: (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
1986:
1987: void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
1988:
1.6 christos 1989: bfd_boolean bfd_default_set_arch_mach
1990: (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
1991:
1.7 ! christos 1992: enum bfd_architecture bfd_get_arch (const bfd *abfd);
1.1 christos 1993:
1.7 ! christos 1994: unsigned long bfd_get_mach (const bfd *abfd);
1.1 christos 1995:
1.7 ! christos 1996: unsigned int bfd_arch_bits_per_byte (const bfd *abfd);
1.1 christos 1997:
1.7 ! christos 1998: unsigned int bfd_arch_bits_per_address (const bfd *abfd);
1.1 christos 1999:
2000: const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
2001:
2002: const bfd_arch_info_type *bfd_lookup_arch
2003: (enum bfd_architecture arch, unsigned long machine);
2004:
2005: const char *bfd_printable_arch_mach
2006: (enum bfd_architecture arch, unsigned long machine);
2007:
1.7 ! christos 2008: unsigned int bfd_octets_per_byte (const bfd *abfd,
! 2009: const asection *sec);
1.1 christos 2010:
2011: unsigned int bfd_arch_mach_octets_per_byte
2012: (enum bfd_architecture arch, unsigned long machine);
2013:
2014: /* Extracted from reloc.c. */
1.3 christos 2015:
1.1 christos 2016: typedef enum bfd_reloc_status
2017: {
1.6 christos 2018: /* No errors detected. Note - the value 2 is used so that it
2019: will not be mistaken for the boolean TRUE or FALSE values. */
2020: bfd_reloc_ok = 2,
1.1 christos 2021:
2022: /* The relocation was performed, but there was an overflow. */
2023: bfd_reloc_overflow,
2024:
2025: /* The address to relocate was not within the section supplied. */
2026: bfd_reloc_outofrange,
2027:
2028: /* Used by special functions. */
2029: bfd_reloc_continue,
2030:
2031: /* Unsupported relocation size requested. */
2032: bfd_reloc_notsupported,
2033:
2034: /* Unused. */
2035: bfd_reloc_other,
2036:
2037: /* The symbol to relocate against was undefined. */
2038: bfd_reloc_undefined,
2039:
1.6 christos 2040: /* The relocation was performed, but may not be ok. If this type is
2041: returned, the error_message argument to bfd_perform_relocation
2042: will be set. */
1.1 christos 2043: bfd_reloc_dangerous
2044: }
2045: bfd_reloc_status_type;
2046:
1.7 ! christos 2047: typedef const struct reloc_howto_struct reloc_howto_type;
1.1 christos 2048:
2049: typedef struct reloc_cache_entry
2050: {
2051: /* A pointer into the canonical table of pointers. */
2052: struct bfd_symbol **sym_ptr_ptr;
2053:
2054: /* offset in section. */
2055: bfd_size_type address;
2056:
2057: /* addend for relocation value. */
2058: bfd_vma addend;
2059:
2060: /* Pointer to how to perform the required relocation. */
2061: reloc_howto_type *howto;
2062:
2063: }
2064: arelent;
2065:
1.3 christos 2066:
1.1 christos 2067: enum complain_overflow
2068: {
2069: /* Do not complain on overflow. */
2070: complain_overflow_dont,
2071:
2072: /* Complain if the value overflows when considered as a signed
2073: number one bit larger than the field. ie. A bitfield of N bits
2074: is allowed to represent -2**n to 2**n-1. */
2075: complain_overflow_bitfield,
2076:
2077: /* Complain if the value overflows when considered as a signed
2078: number. */
2079: complain_overflow_signed,
2080:
2081: /* Complain if the value overflows when considered as an
2082: unsigned number. */
2083: complain_overflow_unsigned
2084: };
2085: struct reloc_howto_struct
2086: {
1.7 ! christos 2087: /* The type field has mainly a documentary use - the back end can
! 2088: do what it wants with it, though normally the back end's idea of
! 2089: an external reloc number is stored in this field. */
1.1 christos 2090: unsigned int type;
2091:
1.7 ! christos 2092: /* The encoded size of the item to be relocated. This is *not* a
! 2093: power-of-two measure. Use bfd_get_reloc_size to find the size
! 2094: of the item in bytes. */
! 2095: unsigned int size:3;
! 2096:
! 2097: /* The number of bits in the field to be relocated. This is used
! 2098: when doing overflow checking. */
! 2099: unsigned int bitsize:7;
! 2100:
! 2101: /* The value the final relocation is shifted right by. This drops
! 2102: unwanted data from the relocation. */
! 2103: unsigned int rightshift:6;
! 2104:
! 2105: /* The bit position of the reloc value in the destination.
! 2106: The relocated value is left shifted by this amount. */
! 2107: unsigned int bitpos:6;
1.1 christos 2108:
2109: /* What type of overflow error should be checked for when
2110: relocating. */
1.7 ! christos 2111: ENUM_BITFIELD (complain_overflow) complain_on_overflow:2;
1.1 christos 2112:
1.7 ! christos 2113: /* The relocation value should be negated before applying. */
! 2114: unsigned int negate:1;
1.1 christos 2115:
1.7 ! christos 2116: /* The relocation is relative to the item being relocated. */
! 2117: unsigned int pc_relative:1;
1.1 christos 2118:
2119: /* Some formats record a relocation addend in the section contents
2120: rather than with the relocation. For ELF formats this is the
2121: distinction between USE_REL and USE_RELA (though the code checks
2122: for USE_REL == 1/0). The value of this field is TRUE if the
2123: addend is recorded with the section contents; when performing a
2124: partial link (ld -r) the section contents (the data) will be
2125: modified. The value of this field is FALSE if addends are
2126: recorded with the relocation (in arelent.addend); when performing
2127: a partial link the relocation will be modified.
2128: All relocations for all ELF USE_RELA targets should set this field
2129: to FALSE (values of TRUE should be looked on with suspicion).
2130: However, the converse is not true: not all relocations of all ELF
2131: USE_REL targets set this field to TRUE. Why this is so is peculiar
2132: to each particular target. For relocs that aren't used in partial
2133: links (e.g. GOT stuff) it doesn't matter what this is set to. */
1.7 ! christos 2134: unsigned int partial_inplace:1;
! 2135:
! 2136: /* When some formats create PC relative instructions, they leave
! 2137: the value of the pc of the place being relocated in the offset
! 2138: slot of the instruction, so that a PC relative relocation can
! 2139: be made just by adding in an ordinary offset (e.g., sun3 a.out).
! 2140: Some formats leave the displacement part of an instruction
! 2141: empty (e.g., ELF); this flag signals the fact. */
! 2142: unsigned int pcrel_offset:1;
1.1 christos 2143:
2144: /* src_mask selects the part of the instruction (or data) to be used
2145: in the relocation sum. If the target relocations don't have an
2146: addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
2147: dst_mask to extract the addend from the section contents. If
2148: relocations do have an addend in the reloc, eg. ELF USE_RELA, this
1.7 ! christos 2149: field should normally be zero. Non-zero values for ELF USE_RELA
! 2150: targets should be viewed with suspicion as normally the value in
! 2151: the dst_mask part of the section contents should be ignored. */
1.1 christos 2152: bfd_vma src_mask;
2153:
2154: /* dst_mask selects which parts of the instruction (or data) are
2155: replaced with a relocated value. */
2156: bfd_vma dst_mask;
2157:
1.7 ! christos 2158: /* If this field is non null, then the supplied function is
! 2159: called rather than the normal function. This allows really
! 2160: strange relocation methods to be accommodated. */
! 2161: bfd_reloc_status_type (*special_function)
! 2162: (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
! 2163: bfd *, char **);
! 2164:
! 2165: /* The textual name of the relocation type. */
! 2166: const char *name;
1.1 christos 2167: };
2168:
1.7 ! christos 2169: #define HOWTO(type, right, size, bits, pcrel, left, ovf, func, name, \
! 2170: inplace, src_mask, dst_mask, pcrel_off) \
! 2171: { (unsigned) type, size < 0 ? -size : size, bits, right, left, ovf, \
! 2172: size < 0, pcrel, inplace, pcrel_off, src_mask, dst_mask, func, name }
1.1 christos 2173: #define EMPTY_HOWTO(C) \
2174: HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
2175: NULL, FALSE, 0, 0, FALSE)
2176:
2177: unsigned int bfd_get_reloc_size (reloc_howto_type *);
2178:
2179: typedef struct relent_chain
2180: {
2181: arelent relent;
2182: struct relent_chain *next;
2183: }
2184: arelent_chain;
2185:
2186: bfd_reloc_status_type bfd_check_overflow
2187: (enum complain_overflow how,
2188: unsigned int bitsize,
2189: unsigned int rightshift,
2190: unsigned int addrsize,
2191: bfd_vma relocation);
2192:
1.6 christos 2193: bfd_boolean bfd_reloc_offset_in_range
2194: (reloc_howto_type *howto,
2195: bfd *abfd,
2196: asection *section,
2197: bfd_size_type offset);
2198:
1.1 christos 2199: bfd_reloc_status_type bfd_perform_relocation
2200: (bfd *abfd,
2201: arelent *reloc_entry,
2202: void *data,
2203: asection *input_section,
2204: bfd *output_bfd,
2205: char **error_message);
2206:
2207: bfd_reloc_status_type bfd_install_relocation
2208: (bfd *abfd,
2209: arelent *reloc_entry,
2210: void *data, bfd_vma data_start,
2211: asection *input_section,
2212: char **error_message);
2213:
2214: enum bfd_reloc_code_real {
2215: _dummy_first_bfd_reloc_code_real,
2216:
2217:
2218: /* Basic absolute relocations of N bits. */
2219: BFD_RELOC_64,
2220: BFD_RELOC_32,
2221: BFD_RELOC_26,
2222: BFD_RELOC_24,
2223: BFD_RELOC_16,
2224: BFD_RELOC_14,
2225: BFD_RELOC_8,
2226:
2227: /* PC-relative relocations. Sometimes these are relative to the address
2228: of the relocation itself; sometimes they are relative to the start of
1.6 christos 2229: the section containing the relocation. It depends on the specific target. */
1.1 christos 2230: BFD_RELOC_64_PCREL,
2231: BFD_RELOC_32_PCREL,
2232: BFD_RELOC_24_PCREL,
2233: BFD_RELOC_16_PCREL,
2234: BFD_RELOC_12_PCREL,
2235: BFD_RELOC_8_PCREL,
2236:
2237: /* Section relative relocations. Some targets need this for DWARF2. */
2238: BFD_RELOC_32_SECREL,
2239:
2240: /* For ELF. */
2241: BFD_RELOC_32_GOT_PCREL,
2242: BFD_RELOC_16_GOT_PCREL,
2243: BFD_RELOC_8_GOT_PCREL,
2244: BFD_RELOC_32_GOTOFF,
2245: BFD_RELOC_16_GOTOFF,
2246: BFD_RELOC_LO16_GOTOFF,
2247: BFD_RELOC_HI16_GOTOFF,
2248: BFD_RELOC_HI16_S_GOTOFF,
2249: BFD_RELOC_8_GOTOFF,
2250: BFD_RELOC_64_PLT_PCREL,
2251: BFD_RELOC_32_PLT_PCREL,
2252: BFD_RELOC_24_PLT_PCREL,
2253: BFD_RELOC_16_PLT_PCREL,
2254: BFD_RELOC_8_PLT_PCREL,
2255: BFD_RELOC_64_PLTOFF,
2256: BFD_RELOC_32_PLTOFF,
2257: BFD_RELOC_16_PLTOFF,
2258: BFD_RELOC_LO16_PLTOFF,
2259: BFD_RELOC_HI16_PLTOFF,
2260: BFD_RELOC_HI16_S_PLTOFF,
2261: BFD_RELOC_8_PLTOFF,
2262:
1.3 christos 2263: /* Size relocations. */
2264: BFD_RELOC_SIZE32,
2265: BFD_RELOC_SIZE64,
2266:
1.1 christos 2267: /* Relocations used by 68K ELF. */
2268: BFD_RELOC_68K_GLOB_DAT,
2269: BFD_RELOC_68K_JMP_SLOT,
2270: BFD_RELOC_68K_RELATIVE,
2271: BFD_RELOC_68K_TLS_GD32,
2272: BFD_RELOC_68K_TLS_GD16,
2273: BFD_RELOC_68K_TLS_GD8,
2274: BFD_RELOC_68K_TLS_LDM32,
2275: BFD_RELOC_68K_TLS_LDM16,
2276: BFD_RELOC_68K_TLS_LDM8,
2277: BFD_RELOC_68K_TLS_LDO32,
2278: BFD_RELOC_68K_TLS_LDO16,
2279: BFD_RELOC_68K_TLS_LDO8,
2280: BFD_RELOC_68K_TLS_IE32,
2281: BFD_RELOC_68K_TLS_IE16,
2282: BFD_RELOC_68K_TLS_IE8,
2283: BFD_RELOC_68K_TLS_LE32,
2284: BFD_RELOC_68K_TLS_LE16,
2285: BFD_RELOC_68K_TLS_LE8,
2286:
2287: /* Linkage-table relative. */
2288: BFD_RELOC_32_BASEREL,
2289: BFD_RELOC_16_BASEREL,
2290: BFD_RELOC_LO16_BASEREL,
2291: BFD_RELOC_HI16_BASEREL,
2292: BFD_RELOC_HI16_S_BASEREL,
2293: BFD_RELOC_8_BASEREL,
2294: BFD_RELOC_RVA,
2295:
2296: /* Absolute 8-bit relocation, but used to form an address like 0xFFnn. */
2297: BFD_RELOC_8_FFnn,
2298:
2299: /* These PC-relative relocations are stored as word displacements --
2300: i.e., byte displacements shifted right two bits. The 30-bit word
2301: displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
2302: SPARC. (SPARC tools generally refer to this as <<WDISP30>>.) The
2303: signed 16-bit displacement is used on the MIPS, and the 23-bit
2304: displacement is used on the Alpha. */
2305: BFD_RELOC_32_PCREL_S2,
2306: BFD_RELOC_16_PCREL_S2,
2307: BFD_RELOC_23_PCREL_S2,
2308:
2309: /* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
2310: the target word. These are used on the SPARC. */
2311: BFD_RELOC_HI22,
2312: BFD_RELOC_LO10,
2313:
2314: /* For systems that allocate a Global Pointer register, these are
2315: displacements off that register. These relocation types are
2316: handled specially, because the value the register will have is
2317: decided relatively late. */
2318: BFD_RELOC_GPREL16,
2319: BFD_RELOC_GPREL32,
2320:
2321: /* SPARC ELF relocations. There is probably some overlap with other
2322: relocation types already defined. */
2323: BFD_RELOC_NONE,
2324: BFD_RELOC_SPARC_WDISP22,
2325: BFD_RELOC_SPARC22,
2326: BFD_RELOC_SPARC13,
2327: BFD_RELOC_SPARC_GOT10,
2328: BFD_RELOC_SPARC_GOT13,
2329: BFD_RELOC_SPARC_GOT22,
2330: BFD_RELOC_SPARC_PC10,
2331: BFD_RELOC_SPARC_PC22,
2332: BFD_RELOC_SPARC_WPLT30,
2333: BFD_RELOC_SPARC_COPY,
2334: BFD_RELOC_SPARC_GLOB_DAT,
2335: BFD_RELOC_SPARC_JMP_SLOT,
2336: BFD_RELOC_SPARC_RELATIVE,
2337: BFD_RELOC_SPARC_UA16,
2338: BFD_RELOC_SPARC_UA32,
2339: BFD_RELOC_SPARC_UA64,
2340: BFD_RELOC_SPARC_GOTDATA_HIX22,
2341: BFD_RELOC_SPARC_GOTDATA_LOX10,
2342: BFD_RELOC_SPARC_GOTDATA_OP_HIX22,
2343: BFD_RELOC_SPARC_GOTDATA_OP_LOX10,
2344: BFD_RELOC_SPARC_GOTDATA_OP,
2345: BFD_RELOC_SPARC_JMP_IREL,
2346: BFD_RELOC_SPARC_IRELATIVE,
2347:
2348: /* I think these are specific to SPARC a.out (e.g., Sun 4). */
2349: BFD_RELOC_SPARC_BASE13,
2350: BFD_RELOC_SPARC_BASE22,
2351:
2352: /* SPARC64 relocations */
2353: #define BFD_RELOC_SPARC_64 BFD_RELOC_64
2354: BFD_RELOC_SPARC_10,
2355: BFD_RELOC_SPARC_11,
2356: BFD_RELOC_SPARC_OLO10,
2357: BFD_RELOC_SPARC_HH22,
2358: BFD_RELOC_SPARC_HM10,
2359: BFD_RELOC_SPARC_LM22,
2360: BFD_RELOC_SPARC_PC_HH22,
2361: BFD_RELOC_SPARC_PC_HM10,
2362: BFD_RELOC_SPARC_PC_LM22,
2363: BFD_RELOC_SPARC_WDISP16,
2364: BFD_RELOC_SPARC_WDISP19,
2365: BFD_RELOC_SPARC_7,
2366: BFD_RELOC_SPARC_6,
2367: BFD_RELOC_SPARC_5,
2368: #define BFD_RELOC_SPARC_DISP64 BFD_RELOC_64_PCREL
2369: BFD_RELOC_SPARC_PLT32,
2370: BFD_RELOC_SPARC_PLT64,
2371: BFD_RELOC_SPARC_HIX22,
2372: BFD_RELOC_SPARC_LOX10,
2373: BFD_RELOC_SPARC_H44,
2374: BFD_RELOC_SPARC_M44,
2375: BFD_RELOC_SPARC_L44,
2376: BFD_RELOC_SPARC_REGISTER,
2377: BFD_RELOC_SPARC_H34,
2378: BFD_RELOC_SPARC_SIZE32,
2379: BFD_RELOC_SPARC_SIZE64,
2380: BFD_RELOC_SPARC_WDISP10,
2381:
2382: /* SPARC little endian relocation */
2383: BFD_RELOC_SPARC_REV32,
2384:
2385: /* SPARC TLS relocations */
2386: BFD_RELOC_SPARC_TLS_GD_HI22,
2387: BFD_RELOC_SPARC_TLS_GD_LO10,
2388: BFD_RELOC_SPARC_TLS_GD_ADD,
2389: BFD_RELOC_SPARC_TLS_GD_CALL,
2390: BFD_RELOC_SPARC_TLS_LDM_HI22,
2391: BFD_RELOC_SPARC_TLS_LDM_LO10,
2392: BFD_RELOC_SPARC_TLS_LDM_ADD,
2393: BFD_RELOC_SPARC_TLS_LDM_CALL,
2394: BFD_RELOC_SPARC_TLS_LDO_HIX22,
2395: BFD_RELOC_SPARC_TLS_LDO_LOX10,
2396: BFD_RELOC_SPARC_TLS_LDO_ADD,
2397: BFD_RELOC_SPARC_TLS_IE_HI22,
2398: BFD_RELOC_SPARC_TLS_IE_LO10,
2399: BFD_RELOC_SPARC_TLS_IE_LD,
2400: BFD_RELOC_SPARC_TLS_IE_LDX,
2401: BFD_RELOC_SPARC_TLS_IE_ADD,
2402: BFD_RELOC_SPARC_TLS_LE_HIX22,
2403: BFD_RELOC_SPARC_TLS_LE_LOX10,
2404: BFD_RELOC_SPARC_TLS_DTPMOD32,
2405: BFD_RELOC_SPARC_TLS_DTPMOD64,
2406: BFD_RELOC_SPARC_TLS_DTPOFF32,
2407: BFD_RELOC_SPARC_TLS_DTPOFF64,
2408: BFD_RELOC_SPARC_TLS_TPOFF32,
2409: BFD_RELOC_SPARC_TLS_TPOFF64,
2410:
2411: /* SPU Relocations. */
2412: BFD_RELOC_SPU_IMM7,
2413: BFD_RELOC_SPU_IMM8,
2414: BFD_RELOC_SPU_IMM10,
2415: BFD_RELOC_SPU_IMM10W,
2416: BFD_RELOC_SPU_IMM16,
2417: BFD_RELOC_SPU_IMM16W,
2418: BFD_RELOC_SPU_IMM18,
2419: BFD_RELOC_SPU_PCREL9a,
2420: BFD_RELOC_SPU_PCREL9b,
2421: BFD_RELOC_SPU_PCREL16,
2422: BFD_RELOC_SPU_LO16,
2423: BFD_RELOC_SPU_HI16,
2424: BFD_RELOC_SPU_PPU32,
2425: BFD_RELOC_SPU_PPU64,
2426: BFD_RELOC_SPU_ADD_PIC,
2427:
2428: /* Alpha ECOFF and ELF relocations. Some of these treat the symbol or
2429: "addend" in some special way.
2430: For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
2431: writing; when reading, it will be the absolute section symbol. The
2432: addend is the displacement in bytes of the "lda" instruction from
2433: the "ldah" instruction (which is at the address of this reloc). */
2434: BFD_RELOC_ALPHA_GPDISP_HI16,
2435:
2436: /* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
2437: with GPDISP_HI16 relocs. The addend is ignored when writing the
2438: relocations out, and is filled in with the file's GP value on
2439: reading, for convenience. */
2440: BFD_RELOC_ALPHA_GPDISP_LO16,
2441:
2442: /* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
2443: relocation except that there is no accompanying GPDISP_LO16
2444: relocation. */
2445: BFD_RELOC_ALPHA_GPDISP,
2446:
2447: /* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
2448: the assembler turns it into a LDQ instruction to load the address of
2449: the symbol, and then fills in a register in the real instruction.
2450:
2451: The LITERAL reloc, at the LDQ instruction, refers to the .lita
2452: section symbol. The addend is ignored when writing, but is filled
2453: in with the file's GP value on reading, for convenience, as with the
2454: GPDISP_LO16 reloc.
2455:
2456: The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
2457: It should refer to the symbol to be referenced, as with 16_GOTOFF,
2458: but it generates output not based on the position within the .got
2459: section, but relative to the GP value chosen for the file during the
2460: final link stage.
2461:
2462: The LITUSE reloc, on the instruction using the loaded address, gives
2463: information to the linker that it might be able to use to optimize
2464: away some literal section references. The symbol is ignored (read
2465: as the absolute section symbol), and the "addend" indicates the type
2466: of instruction using the register:
2467: 1 - "memory" fmt insn
2468: 2 - byte-manipulation (byte offset reg)
2469: 3 - jsr (target of branch) */
2470: BFD_RELOC_ALPHA_LITERAL,
2471: BFD_RELOC_ALPHA_ELF_LITERAL,
2472: BFD_RELOC_ALPHA_LITUSE,
2473:
2474: /* The HINT relocation indicates a value that should be filled into the
2475: "hint" field of a jmp/jsr/ret instruction, for possible branch-
2476: prediction logic which may be provided on some processors. */
2477: BFD_RELOC_ALPHA_HINT,
2478:
2479: /* The LINKAGE relocation outputs a linkage pair in the object file,
2480: which is filled by the linker. */
2481: BFD_RELOC_ALPHA_LINKAGE,
2482:
2483: /* The CODEADDR relocation outputs a STO_CA in the object file,
2484: which is filled by the linker. */
2485: BFD_RELOC_ALPHA_CODEADDR,
2486:
2487: /* The GPREL_HI/LO relocations together form a 32-bit offset from the
2488: GP register. */
2489: BFD_RELOC_ALPHA_GPREL_HI16,
2490: BFD_RELOC_ALPHA_GPREL_LO16,
2491:
2492: /* Like BFD_RELOC_23_PCREL_S2, except that the source and target must
2493: share a common GP, and the target address is adjusted for
2494: STO_ALPHA_STD_GPLOAD. */
2495: BFD_RELOC_ALPHA_BRSGP,
2496:
2497: /* The NOP relocation outputs a NOP if the longword displacement
2498: between two procedure entry points is < 2^21. */
2499: BFD_RELOC_ALPHA_NOP,
2500:
2501: /* The BSR relocation outputs a BSR if the longword displacement
2502: between two procedure entry points is < 2^21. */
2503: BFD_RELOC_ALPHA_BSR,
2504:
2505: /* The LDA relocation outputs a LDA if the longword displacement
2506: between two procedure entry points is < 2^16. */
2507: BFD_RELOC_ALPHA_LDA,
2508:
2509: /* The BOH relocation outputs a BSR if the longword displacement
2510: between two procedure entry points is < 2^21, or else a hint. */
2511: BFD_RELOC_ALPHA_BOH,
2512:
2513: /* Alpha thread-local storage relocations. */
2514: BFD_RELOC_ALPHA_TLSGD,
2515: BFD_RELOC_ALPHA_TLSLDM,
2516: BFD_RELOC_ALPHA_DTPMOD64,
2517: BFD_RELOC_ALPHA_GOTDTPREL16,
2518: BFD_RELOC_ALPHA_DTPREL64,
2519: BFD_RELOC_ALPHA_DTPREL_HI16,
2520: BFD_RELOC_ALPHA_DTPREL_LO16,
2521: BFD_RELOC_ALPHA_DTPREL16,
2522: BFD_RELOC_ALPHA_GOTTPREL16,
2523: BFD_RELOC_ALPHA_TPREL64,
2524: BFD_RELOC_ALPHA_TPREL_HI16,
2525: BFD_RELOC_ALPHA_TPREL_LO16,
2526: BFD_RELOC_ALPHA_TPREL16,
2527:
2528: /* The MIPS jump instruction. */
2529: BFD_RELOC_MIPS_JMP,
2530: BFD_RELOC_MICROMIPS_JMP,
2531:
2532: /* The MIPS16 jump instruction. */
2533: BFD_RELOC_MIPS16_JMP,
2534:
2535: /* MIPS16 GP relative reloc. */
2536: BFD_RELOC_MIPS16_GPREL,
2537:
2538: /* High 16 bits of 32-bit value; simple reloc. */
2539: BFD_RELOC_HI16,
2540:
2541: /* High 16 bits of 32-bit value but the low 16 bits will be sign
2542: extended and added to form the final result. If the low 16
2543: bits form a negative number, we need to add one to the high value
2544: to compensate for the borrow when the low bits are added. */
2545: BFD_RELOC_HI16_S,
2546:
2547: /* Low 16 bits. */
2548: BFD_RELOC_LO16,
2549:
2550: /* High 16 bits of 32-bit pc-relative value */
2551: BFD_RELOC_HI16_PCREL,
2552:
2553: /* High 16 bits of 32-bit pc-relative value, adjusted */
2554: BFD_RELOC_HI16_S_PCREL,
2555:
2556: /* Low 16 bits of pc-relative value */
2557: BFD_RELOC_LO16_PCREL,
2558:
2559: /* Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
2560: 16-bit immediate fields */
2561: BFD_RELOC_MIPS16_GOT16,
2562: BFD_RELOC_MIPS16_CALL16,
2563:
2564: /* MIPS16 high 16 bits of 32-bit value. */
2565: BFD_RELOC_MIPS16_HI16,
2566:
2567: /* MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
2568: extended and added to form the final result. If the low 16
2569: bits form a negative number, we need to add one to the high value
2570: to compensate for the borrow when the low bits are added. */
2571: BFD_RELOC_MIPS16_HI16_S,
2572:
2573: /* MIPS16 low 16 bits. */
2574: BFD_RELOC_MIPS16_LO16,
2575:
2576: /* MIPS16 TLS relocations */
2577: BFD_RELOC_MIPS16_TLS_GD,
2578: BFD_RELOC_MIPS16_TLS_LDM,
2579: BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
2580: BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
2581: BFD_RELOC_MIPS16_TLS_GOTTPREL,
2582: BFD_RELOC_MIPS16_TLS_TPREL_HI16,
2583: BFD_RELOC_MIPS16_TLS_TPREL_LO16,
2584:
2585: /* Relocation against a MIPS literal section. */
2586: BFD_RELOC_MIPS_LITERAL,
2587: BFD_RELOC_MICROMIPS_LITERAL,
2588:
2589: /* microMIPS PC-relative relocations. */
2590: BFD_RELOC_MICROMIPS_7_PCREL_S1,
2591: BFD_RELOC_MICROMIPS_10_PCREL_S1,
2592: BFD_RELOC_MICROMIPS_16_PCREL_S1,
2593:
1.5 christos 2594: /* MIPS16 PC-relative relocation. */
2595: BFD_RELOC_MIPS16_16_PCREL_S1,
2596:
1.3 christos 2597: /* MIPS PC-relative relocations. */
2598: BFD_RELOC_MIPS_21_PCREL_S2,
2599: BFD_RELOC_MIPS_26_PCREL_S2,
2600: BFD_RELOC_MIPS_18_PCREL_S3,
2601: BFD_RELOC_MIPS_19_PCREL_S2,
2602:
1.1 christos 2603: /* microMIPS versions of generic BFD relocs. */
2604: BFD_RELOC_MICROMIPS_GPREL16,
2605: BFD_RELOC_MICROMIPS_HI16,
2606: BFD_RELOC_MICROMIPS_HI16_S,
2607: BFD_RELOC_MICROMIPS_LO16,
2608:
2609: /* MIPS ELF relocations. */
2610: BFD_RELOC_MIPS_GOT16,
2611: BFD_RELOC_MICROMIPS_GOT16,
2612: BFD_RELOC_MIPS_CALL16,
2613: BFD_RELOC_MICROMIPS_CALL16,
2614: BFD_RELOC_MIPS_GOT_HI16,
2615: BFD_RELOC_MICROMIPS_GOT_HI16,
2616: BFD_RELOC_MIPS_GOT_LO16,
2617: BFD_RELOC_MICROMIPS_GOT_LO16,
2618: BFD_RELOC_MIPS_CALL_HI16,
2619: BFD_RELOC_MICROMIPS_CALL_HI16,
2620: BFD_RELOC_MIPS_CALL_LO16,
2621: BFD_RELOC_MICROMIPS_CALL_LO16,
2622: BFD_RELOC_MIPS_SUB,
2623: BFD_RELOC_MICROMIPS_SUB,
2624: BFD_RELOC_MIPS_GOT_PAGE,
2625: BFD_RELOC_MICROMIPS_GOT_PAGE,
2626: BFD_RELOC_MIPS_GOT_OFST,
2627: BFD_RELOC_MICROMIPS_GOT_OFST,
2628: BFD_RELOC_MIPS_GOT_DISP,
2629: BFD_RELOC_MICROMIPS_GOT_DISP,
2630: BFD_RELOC_MIPS_SHIFT5,
2631: BFD_RELOC_MIPS_SHIFT6,
2632: BFD_RELOC_MIPS_INSERT_A,
2633: BFD_RELOC_MIPS_INSERT_B,
2634: BFD_RELOC_MIPS_DELETE,
2635: BFD_RELOC_MIPS_HIGHEST,
2636: BFD_RELOC_MICROMIPS_HIGHEST,
2637: BFD_RELOC_MIPS_HIGHER,
2638: BFD_RELOC_MICROMIPS_HIGHER,
2639: BFD_RELOC_MIPS_SCN_DISP,
2640: BFD_RELOC_MICROMIPS_SCN_DISP,
2641: BFD_RELOC_MIPS_REL16,
2642: BFD_RELOC_MIPS_RELGOT,
2643: BFD_RELOC_MIPS_JALR,
2644: BFD_RELOC_MICROMIPS_JALR,
2645: BFD_RELOC_MIPS_TLS_DTPMOD32,
2646: BFD_RELOC_MIPS_TLS_DTPREL32,
2647: BFD_RELOC_MIPS_TLS_DTPMOD64,
2648: BFD_RELOC_MIPS_TLS_DTPREL64,
2649: BFD_RELOC_MIPS_TLS_GD,
2650: BFD_RELOC_MICROMIPS_TLS_GD,
2651: BFD_RELOC_MIPS_TLS_LDM,
2652: BFD_RELOC_MICROMIPS_TLS_LDM,
2653: BFD_RELOC_MIPS_TLS_DTPREL_HI16,
2654: BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16,
2655: BFD_RELOC_MIPS_TLS_DTPREL_LO16,
2656: BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16,
2657: BFD_RELOC_MIPS_TLS_GOTTPREL,
2658: BFD_RELOC_MICROMIPS_TLS_GOTTPREL,
2659: BFD_RELOC_MIPS_TLS_TPREL32,
2660: BFD_RELOC_MIPS_TLS_TPREL64,
2661: BFD_RELOC_MIPS_TLS_TPREL_HI16,
2662: BFD_RELOC_MICROMIPS_TLS_TPREL_HI16,
2663: BFD_RELOC_MIPS_TLS_TPREL_LO16,
2664: BFD_RELOC_MICROMIPS_TLS_TPREL_LO16,
1.3 christos 2665: BFD_RELOC_MIPS_EH,
1.1 christos 2666:
2667:
2668: /* MIPS ELF relocations (VxWorks and PLT extensions). */
2669: BFD_RELOC_MIPS_COPY,
2670: BFD_RELOC_MIPS_JUMP_SLOT,
2671:
2672:
2673: /* Moxie ELF relocations. */
2674: BFD_RELOC_MOXIE_10_PCREL,
2675:
2676:
1.3 christos 2677: /* FT32 ELF relocations. */
2678: BFD_RELOC_FT32_10,
2679: BFD_RELOC_FT32_20,
2680: BFD_RELOC_FT32_17,
2681: BFD_RELOC_FT32_18,
1.6 christos 2682: BFD_RELOC_FT32_RELAX,
2683: BFD_RELOC_FT32_SC0,
2684: BFD_RELOC_FT32_SC1,
2685: BFD_RELOC_FT32_15,
2686: BFD_RELOC_FT32_DIFF32,
1.3 christos 2687:
2688:
1.1 christos 2689: /* Fujitsu Frv Relocations. */
2690: BFD_RELOC_FRV_LABEL16,
2691: BFD_RELOC_FRV_LABEL24,
2692: BFD_RELOC_FRV_LO16,
2693: BFD_RELOC_FRV_HI16,
2694: BFD_RELOC_FRV_GPREL12,
2695: BFD_RELOC_FRV_GPRELU12,
2696: BFD_RELOC_FRV_GPREL32,
2697: BFD_RELOC_FRV_GPRELHI,
2698: BFD_RELOC_FRV_GPRELLO,
2699: BFD_RELOC_FRV_GOT12,
2700: BFD_RELOC_FRV_GOTHI,
2701: BFD_RELOC_FRV_GOTLO,
2702: BFD_RELOC_FRV_FUNCDESC,
2703: BFD_RELOC_FRV_FUNCDESC_GOT12,
2704: BFD_RELOC_FRV_FUNCDESC_GOTHI,
2705: BFD_RELOC_FRV_FUNCDESC_GOTLO,
2706: BFD_RELOC_FRV_FUNCDESC_VALUE,
2707: BFD_RELOC_FRV_FUNCDESC_GOTOFF12,
2708: BFD_RELOC_FRV_FUNCDESC_GOTOFFHI,
2709: BFD_RELOC_FRV_FUNCDESC_GOTOFFLO,
2710: BFD_RELOC_FRV_GOTOFF12,
2711: BFD_RELOC_FRV_GOTOFFHI,
2712: BFD_RELOC_FRV_GOTOFFLO,
2713: BFD_RELOC_FRV_GETTLSOFF,
2714: BFD_RELOC_FRV_TLSDESC_VALUE,
2715: BFD_RELOC_FRV_GOTTLSDESC12,
2716: BFD_RELOC_FRV_GOTTLSDESCHI,
2717: BFD_RELOC_FRV_GOTTLSDESCLO,
2718: BFD_RELOC_FRV_TLSMOFF12,
2719: BFD_RELOC_FRV_TLSMOFFHI,
2720: BFD_RELOC_FRV_TLSMOFFLO,
2721: BFD_RELOC_FRV_GOTTLSOFF12,
2722: BFD_RELOC_FRV_GOTTLSOFFHI,
2723: BFD_RELOC_FRV_GOTTLSOFFLO,
2724: BFD_RELOC_FRV_TLSOFF,
2725: BFD_RELOC_FRV_TLSDESC_RELAX,
2726: BFD_RELOC_FRV_GETTLSOFF_RELAX,
2727: BFD_RELOC_FRV_TLSOFF_RELAX,
2728: BFD_RELOC_FRV_TLSMOFF,
2729:
2730:
2731: /* This is a 24bit GOT-relative reloc for the mn10300. */
2732: BFD_RELOC_MN10300_GOTOFF24,
2733:
2734: /* This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
2735: in the instruction. */
2736: BFD_RELOC_MN10300_GOT32,
2737:
2738: /* This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
2739: in the instruction. */
2740: BFD_RELOC_MN10300_GOT24,
2741:
2742: /* This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
2743: in the instruction. */
2744: BFD_RELOC_MN10300_GOT16,
2745:
2746: /* Copy symbol at runtime. */
2747: BFD_RELOC_MN10300_COPY,
2748:
2749: /* Create GOT entry. */
2750: BFD_RELOC_MN10300_GLOB_DAT,
2751:
2752: /* Create PLT entry. */
2753: BFD_RELOC_MN10300_JMP_SLOT,
2754:
2755: /* Adjust by program base. */
2756: BFD_RELOC_MN10300_RELATIVE,
2757:
2758: /* Together with another reloc targeted at the same location,
2759: allows for a value that is the difference of two symbols
2760: in the same section. */
2761: BFD_RELOC_MN10300_SYM_DIFF,
2762:
2763: /* The addend of this reloc is an alignment power that must
2764: be honoured at the offset's location, regardless of linker
2765: relaxation. */
2766: BFD_RELOC_MN10300_ALIGN,
2767:
2768: /* Various TLS-related relocations. */
2769: BFD_RELOC_MN10300_TLS_GD,
2770: BFD_RELOC_MN10300_TLS_LD,
2771: BFD_RELOC_MN10300_TLS_LDO,
2772: BFD_RELOC_MN10300_TLS_GOTIE,
2773: BFD_RELOC_MN10300_TLS_IE,
2774: BFD_RELOC_MN10300_TLS_LE,
2775: BFD_RELOC_MN10300_TLS_DTPMOD,
2776: BFD_RELOC_MN10300_TLS_DTPOFF,
2777: BFD_RELOC_MN10300_TLS_TPOFF,
2778:
2779: /* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
2780: instruction. */
2781: BFD_RELOC_MN10300_32_PCREL,
2782:
2783: /* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
2784: instruction. */
2785: BFD_RELOC_MN10300_16_PCREL,
2786:
2787:
2788: /* i386/elf relocations */
2789: BFD_RELOC_386_GOT32,
2790: BFD_RELOC_386_PLT32,
2791: BFD_RELOC_386_COPY,
2792: BFD_RELOC_386_GLOB_DAT,
2793: BFD_RELOC_386_JUMP_SLOT,
2794: BFD_RELOC_386_RELATIVE,
2795: BFD_RELOC_386_GOTOFF,
2796: BFD_RELOC_386_GOTPC,
2797: BFD_RELOC_386_TLS_TPOFF,
2798: BFD_RELOC_386_TLS_IE,
2799: BFD_RELOC_386_TLS_GOTIE,
2800: BFD_RELOC_386_TLS_LE,
2801: BFD_RELOC_386_TLS_GD,
2802: BFD_RELOC_386_TLS_LDM,
2803: BFD_RELOC_386_TLS_LDO_32,
2804: BFD_RELOC_386_TLS_IE_32,
2805: BFD_RELOC_386_TLS_LE_32,
2806: BFD_RELOC_386_TLS_DTPMOD32,
2807: BFD_RELOC_386_TLS_DTPOFF32,
2808: BFD_RELOC_386_TLS_TPOFF32,
2809: BFD_RELOC_386_TLS_GOTDESC,
2810: BFD_RELOC_386_TLS_DESC_CALL,
2811: BFD_RELOC_386_TLS_DESC,
2812: BFD_RELOC_386_IRELATIVE,
1.3 christos 2813: BFD_RELOC_386_GOT32X,
1.1 christos 2814:
2815: /* x86-64/elf relocations */
2816: BFD_RELOC_X86_64_GOT32,
2817: BFD_RELOC_X86_64_PLT32,
2818: BFD_RELOC_X86_64_COPY,
2819: BFD_RELOC_X86_64_GLOB_DAT,
2820: BFD_RELOC_X86_64_JUMP_SLOT,
2821: BFD_RELOC_X86_64_RELATIVE,
2822: BFD_RELOC_X86_64_GOTPCREL,
2823: BFD_RELOC_X86_64_32S,
2824: BFD_RELOC_X86_64_DTPMOD64,
2825: BFD_RELOC_X86_64_DTPOFF64,
2826: BFD_RELOC_X86_64_TPOFF64,
2827: BFD_RELOC_X86_64_TLSGD,
2828: BFD_RELOC_X86_64_TLSLD,
2829: BFD_RELOC_X86_64_DTPOFF32,
2830: BFD_RELOC_X86_64_GOTTPOFF,
2831: BFD_RELOC_X86_64_TPOFF32,
2832: BFD_RELOC_X86_64_GOTOFF64,
2833: BFD_RELOC_X86_64_GOTPC32,
2834: BFD_RELOC_X86_64_GOT64,
2835: BFD_RELOC_X86_64_GOTPCREL64,
2836: BFD_RELOC_X86_64_GOTPC64,
2837: BFD_RELOC_X86_64_GOTPLT64,
2838: BFD_RELOC_X86_64_PLTOFF64,
2839: BFD_RELOC_X86_64_GOTPC32_TLSDESC,
2840: BFD_RELOC_X86_64_TLSDESC_CALL,
2841: BFD_RELOC_X86_64_TLSDESC,
2842: BFD_RELOC_X86_64_IRELATIVE,
1.3 christos 2843: BFD_RELOC_X86_64_PC32_BND,
2844: BFD_RELOC_X86_64_PLT32_BND,
2845: BFD_RELOC_X86_64_GOTPCRELX,
2846: BFD_RELOC_X86_64_REX_GOTPCRELX,
1.1 christos 2847:
2848: /* ns32k relocations */
2849: BFD_RELOC_NS32K_IMM_8,
2850: BFD_RELOC_NS32K_IMM_16,
2851: BFD_RELOC_NS32K_IMM_32,
2852: BFD_RELOC_NS32K_IMM_8_PCREL,
2853: BFD_RELOC_NS32K_IMM_16_PCREL,
2854: BFD_RELOC_NS32K_IMM_32_PCREL,
2855: BFD_RELOC_NS32K_DISP_8,
2856: BFD_RELOC_NS32K_DISP_16,
2857: BFD_RELOC_NS32K_DISP_32,
2858: BFD_RELOC_NS32K_DISP_8_PCREL,
2859: BFD_RELOC_NS32K_DISP_16_PCREL,
2860: BFD_RELOC_NS32K_DISP_32_PCREL,
2861:
2862: /* PDP11 relocations */
2863: BFD_RELOC_PDP11_DISP_8_PCREL,
2864: BFD_RELOC_PDP11_DISP_6_PCREL,
2865:
2866: /* Picojava relocs. Not all of these appear in object files. */
2867: BFD_RELOC_PJ_CODE_HI16,
2868: BFD_RELOC_PJ_CODE_LO16,
2869: BFD_RELOC_PJ_CODE_DIR16,
2870: BFD_RELOC_PJ_CODE_DIR32,
2871: BFD_RELOC_PJ_CODE_REL16,
2872: BFD_RELOC_PJ_CODE_REL32,
2873:
2874: /* Power(rs6000) and PowerPC relocations. */
2875: BFD_RELOC_PPC_B26,
2876: BFD_RELOC_PPC_BA26,
2877: BFD_RELOC_PPC_TOC16,
2878: BFD_RELOC_PPC_B16,
2879: BFD_RELOC_PPC_B16_BRTAKEN,
2880: BFD_RELOC_PPC_B16_BRNTAKEN,
2881: BFD_RELOC_PPC_BA16,
2882: BFD_RELOC_PPC_BA16_BRTAKEN,
2883: BFD_RELOC_PPC_BA16_BRNTAKEN,
2884: BFD_RELOC_PPC_COPY,
2885: BFD_RELOC_PPC_GLOB_DAT,
2886: BFD_RELOC_PPC_JMP_SLOT,
2887: BFD_RELOC_PPC_RELATIVE,
2888: BFD_RELOC_PPC_LOCAL24PC,
2889: BFD_RELOC_PPC_EMB_NADDR32,
2890: BFD_RELOC_PPC_EMB_NADDR16,
2891: BFD_RELOC_PPC_EMB_NADDR16_LO,
2892: BFD_RELOC_PPC_EMB_NADDR16_HI,
2893: BFD_RELOC_PPC_EMB_NADDR16_HA,
2894: BFD_RELOC_PPC_EMB_SDAI16,
2895: BFD_RELOC_PPC_EMB_SDA2I16,
2896: BFD_RELOC_PPC_EMB_SDA2REL,
2897: BFD_RELOC_PPC_EMB_SDA21,
2898: BFD_RELOC_PPC_EMB_MRKREF,
2899: BFD_RELOC_PPC_EMB_RELSEC16,
2900: BFD_RELOC_PPC_EMB_RELST_LO,
2901: BFD_RELOC_PPC_EMB_RELST_HI,
2902: BFD_RELOC_PPC_EMB_RELST_HA,
2903: BFD_RELOC_PPC_EMB_BIT_FLD,
2904: BFD_RELOC_PPC_EMB_RELSDA,
2905: BFD_RELOC_PPC_VLE_REL8,
2906: BFD_RELOC_PPC_VLE_REL15,
2907: BFD_RELOC_PPC_VLE_REL24,
2908: BFD_RELOC_PPC_VLE_LO16A,
2909: BFD_RELOC_PPC_VLE_LO16D,
2910: BFD_RELOC_PPC_VLE_HI16A,
2911: BFD_RELOC_PPC_VLE_HI16D,
2912: BFD_RELOC_PPC_VLE_HA16A,
2913: BFD_RELOC_PPC_VLE_HA16D,
2914: BFD_RELOC_PPC_VLE_SDA21,
2915: BFD_RELOC_PPC_VLE_SDA21_LO,
2916: BFD_RELOC_PPC_VLE_SDAREL_LO16A,
2917: BFD_RELOC_PPC_VLE_SDAREL_LO16D,
2918: BFD_RELOC_PPC_VLE_SDAREL_HI16A,
2919: BFD_RELOC_PPC_VLE_SDAREL_HI16D,
2920: BFD_RELOC_PPC_VLE_SDAREL_HA16A,
2921: BFD_RELOC_PPC_VLE_SDAREL_HA16D,
1.6 christos 2922: BFD_RELOC_PPC_16DX_HA,
1.3 christos 2923: BFD_RELOC_PPC_REL16DX_HA,
1.1 christos 2924: BFD_RELOC_PPC64_HIGHER,
2925: BFD_RELOC_PPC64_HIGHER_S,
2926: BFD_RELOC_PPC64_HIGHEST,
2927: BFD_RELOC_PPC64_HIGHEST_S,
2928: BFD_RELOC_PPC64_TOC16_LO,
2929: BFD_RELOC_PPC64_TOC16_HI,
2930: BFD_RELOC_PPC64_TOC16_HA,
2931: BFD_RELOC_PPC64_TOC,
2932: BFD_RELOC_PPC64_PLTGOT16,
2933: BFD_RELOC_PPC64_PLTGOT16_LO,
2934: BFD_RELOC_PPC64_PLTGOT16_HI,
2935: BFD_RELOC_PPC64_PLTGOT16_HA,
2936: BFD_RELOC_PPC64_ADDR16_DS,
2937: BFD_RELOC_PPC64_ADDR16_LO_DS,
2938: BFD_RELOC_PPC64_GOT16_DS,
2939: BFD_RELOC_PPC64_GOT16_LO_DS,
2940: BFD_RELOC_PPC64_PLT16_LO_DS,
2941: BFD_RELOC_PPC64_SECTOFF_DS,
2942: BFD_RELOC_PPC64_SECTOFF_LO_DS,
2943: BFD_RELOC_PPC64_TOC16_DS,
2944: BFD_RELOC_PPC64_TOC16_LO_DS,
2945: BFD_RELOC_PPC64_PLTGOT16_DS,
2946: BFD_RELOC_PPC64_PLTGOT16_LO_DS,
1.3 christos 2947: BFD_RELOC_PPC64_ADDR16_HIGH,
2948: BFD_RELOC_PPC64_ADDR16_HIGHA,
1.7 ! christos 2949: BFD_RELOC_PPC64_REL16_HIGH,
! 2950: BFD_RELOC_PPC64_REL16_HIGHA,
! 2951: BFD_RELOC_PPC64_REL16_HIGHER,
! 2952: BFD_RELOC_PPC64_REL16_HIGHERA,
! 2953: BFD_RELOC_PPC64_REL16_HIGHEST,
! 2954: BFD_RELOC_PPC64_REL16_HIGHESTA,
1.3 christos 2955: BFD_RELOC_PPC64_ADDR64_LOCAL,
2956: BFD_RELOC_PPC64_ENTRY,
1.7 ! christos 2957: BFD_RELOC_PPC64_REL24_NOTOC,
! 2958: BFD_RELOC_PPC64_D34,
! 2959: BFD_RELOC_PPC64_D34_LO,
! 2960: BFD_RELOC_PPC64_D34_HI30,
! 2961: BFD_RELOC_PPC64_D34_HA30,
! 2962: BFD_RELOC_PPC64_PCREL34,
! 2963: BFD_RELOC_PPC64_GOT_PCREL34,
! 2964: BFD_RELOC_PPC64_PLT_PCREL34,
! 2965: BFD_RELOC_PPC64_ADDR16_HIGHER34,
! 2966: BFD_RELOC_PPC64_ADDR16_HIGHERA34,
! 2967: BFD_RELOC_PPC64_ADDR16_HIGHEST34,
! 2968: BFD_RELOC_PPC64_ADDR16_HIGHESTA34,
! 2969: BFD_RELOC_PPC64_REL16_HIGHER34,
! 2970: BFD_RELOC_PPC64_REL16_HIGHERA34,
! 2971: BFD_RELOC_PPC64_REL16_HIGHEST34,
! 2972: BFD_RELOC_PPC64_REL16_HIGHESTA34,
! 2973: BFD_RELOC_PPC64_D28,
! 2974: BFD_RELOC_PPC64_PCREL28,
1.1 christos 2975:
2976: /* PowerPC and PowerPC64 thread-local storage relocations. */
2977: BFD_RELOC_PPC_TLS,
2978: BFD_RELOC_PPC_TLSGD,
2979: BFD_RELOC_PPC_TLSLD,
2980: BFD_RELOC_PPC_DTPMOD,
2981: BFD_RELOC_PPC_TPREL16,
2982: BFD_RELOC_PPC_TPREL16_LO,
2983: BFD_RELOC_PPC_TPREL16_HI,
2984: BFD_RELOC_PPC_TPREL16_HA,
2985: BFD_RELOC_PPC_TPREL,
2986: BFD_RELOC_PPC_DTPREL16,
2987: BFD_RELOC_PPC_DTPREL16_LO,
2988: BFD_RELOC_PPC_DTPREL16_HI,
2989: BFD_RELOC_PPC_DTPREL16_HA,
2990: BFD_RELOC_PPC_DTPREL,
2991: BFD_RELOC_PPC_GOT_TLSGD16,
2992: BFD_RELOC_PPC_GOT_TLSGD16_LO,
2993: BFD_RELOC_PPC_GOT_TLSGD16_HI,
2994: BFD_RELOC_PPC_GOT_TLSGD16_HA,
2995: BFD_RELOC_PPC_GOT_TLSLD16,
2996: BFD_RELOC_PPC_GOT_TLSLD16_LO,
2997: BFD_RELOC_PPC_GOT_TLSLD16_HI,
2998: BFD_RELOC_PPC_GOT_TLSLD16_HA,
2999: BFD_RELOC_PPC_GOT_TPREL16,
3000: BFD_RELOC_PPC_GOT_TPREL16_LO,
3001: BFD_RELOC_PPC_GOT_TPREL16_HI,
3002: BFD_RELOC_PPC_GOT_TPREL16_HA,
3003: BFD_RELOC_PPC_GOT_DTPREL16,
3004: BFD_RELOC_PPC_GOT_DTPREL16_LO,
3005: BFD_RELOC_PPC_GOT_DTPREL16_HI,
3006: BFD_RELOC_PPC_GOT_DTPREL16_HA,
3007: BFD_RELOC_PPC64_TPREL16_DS,
3008: BFD_RELOC_PPC64_TPREL16_LO_DS,
1.7 ! christos 3009: BFD_RELOC_PPC64_TPREL16_HIGH,
! 3010: BFD_RELOC_PPC64_TPREL16_HIGHA,
1.1 christos 3011: BFD_RELOC_PPC64_TPREL16_HIGHER,
3012: BFD_RELOC_PPC64_TPREL16_HIGHERA,
3013: BFD_RELOC_PPC64_TPREL16_HIGHEST,
3014: BFD_RELOC_PPC64_TPREL16_HIGHESTA,
3015: BFD_RELOC_PPC64_DTPREL16_DS,
3016: BFD_RELOC_PPC64_DTPREL16_LO_DS,
1.7 ! christos 3017: BFD_RELOC_PPC64_DTPREL16_HIGH,
! 3018: BFD_RELOC_PPC64_DTPREL16_HIGHA,
1.1 christos 3019: BFD_RELOC_PPC64_DTPREL16_HIGHER,
3020: BFD_RELOC_PPC64_DTPREL16_HIGHERA,
3021: BFD_RELOC_PPC64_DTPREL16_HIGHEST,
3022: BFD_RELOC_PPC64_DTPREL16_HIGHESTA,
1.7 ! christos 3023: BFD_RELOC_PPC64_TPREL34,
! 3024: BFD_RELOC_PPC64_DTPREL34,
! 3025: BFD_RELOC_PPC64_GOT_TLSGD34,
! 3026: BFD_RELOC_PPC64_GOT_TLSLD34,
! 3027: BFD_RELOC_PPC64_GOT_TPREL34,
! 3028: BFD_RELOC_PPC64_GOT_DTPREL34,
! 3029: BFD_RELOC_PPC64_TLS_PCREL,
1.1 christos 3030:
3031: /* IBM 370/390 relocations */
3032: BFD_RELOC_I370_D12,
3033:
3034: /* The type of reloc used to build a constructor table - at the moment
3035: probably a 32 bit wide absolute relocation, but the target can choose.
3036: It generally does map to one of the other relocation types. */
3037: BFD_RELOC_CTOR,
3038:
3039: /* ARM 26 bit pc-relative branch. The lowest two bits must be zero and are
3040: not stored in the instruction. */
3041: BFD_RELOC_ARM_PCREL_BRANCH,
3042:
3043: /* ARM 26 bit pc-relative branch. The lowest bit must be zero and is
3044: not stored in the instruction. The 2nd lowest bit comes from a 1 bit
3045: field in the instruction. */
3046: BFD_RELOC_ARM_PCREL_BLX,
3047:
3048: /* Thumb 22 bit pc-relative branch. The lowest bit must be zero and is
3049: not stored in the instruction. The 2nd lowest bit comes from a 1 bit
3050: field in the instruction. */
3051: BFD_RELOC_THUMB_PCREL_BLX,
3052:
3053: /* ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction. */
3054: BFD_RELOC_ARM_PCREL_CALL,
3055:
3056: /* ARM 26-bit pc-relative branch for B or conditional BL instruction. */
3057: BFD_RELOC_ARM_PCREL_JUMP,
3058:
1.7 ! christos 3059: /* ARM 5-bit pc-relative branch for Branch Future instructions. */
! 3060: BFD_RELOC_THUMB_PCREL_BRANCH5,
! 3061:
! 3062: /* ARM 6-bit pc-relative branch for BFCSEL instruction. */
! 3063: BFD_RELOC_THUMB_PCREL_BFCSEL,
! 3064:
! 3065: /* ARM 17-bit pc-relative branch for Branch Future instructions. */
! 3066: BFD_RELOC_ARM_THUMB_BF17,
! 3067:
! 3068: /* ARM 13-bit pc-relative branch for BFCSEL instruction. */
! 3069: BFD_RELOC_ARM_THUMB_BF13,
! 3070:
! 3071: /* ARM 19-bit pc-relative branch for Branch Future Link instruction. */
! 3072: BFD_RELOC_ARM_THUMB_BF19,
! 3073:
! 3074: /* ARM 12-bit pc-relative branch for Low Overhead Loop instructions. */
! 3075: BFD_RELOC_ARM_THUMB_LOOP12,
! 3076:
1.1 christos 3077: /* Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
3078: The lowest bit must be zero and is not stored in the instruction.
3079: Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
3080: "nn" one smaller in all cases. Note further that BRANCH23
3081: corresponds to R_ARM_THM_CALL. */
3082: BFD_RELOC_THUMB_PCREL_BRANCH7,
3083: BFD_RELOC_THUMB_PCREL_BRANCH9,
3084: BFD_RELOC_THUMB_PCREL_BRANCH12,
3085: BFD_RELOC_THUMB_PCREL_BRANCH20,
3086: BFD_RELOC_THUMB_PCREL_BRANCH23,
3087: BFD_RELOC_THUMB_PCREL_BRANCH25,
3088:
3089: /* 12-bit immediate offset, used in ARM-format ldr and str instructions. */
3090: BFD_RELOC_ARM_OFFSET_IMM,
3091:
3092: /* 5-bit immediate offset, used in Thumb-format ldr and str instructions. */
3093: BFD_RELOC_ARM_THUMB_OFFSET,
3094:
3095: /* Pc-relative or absolute relocation depending on target. Used for
3096: entries in .init_array sections. */
3097: BFD_RELOC_ARM_TARGET1,
3098:
3099: /* Read-only segment base relative address. */
3100: BFD_RELOC_ARM_ROSEGREL32,
3101:
3102: /* Data segment base relative address. */
3103: BFD_RELOC_ARM_SBREL32,
3104:
3105: /* This reloc is used for references to RTTI data from exception handling
3106: tables. The actual definition depends on the target. It may be a
3107: pc-relative or some form of GOT-indirect relocation. */
3108: BFD_RELOC_ARM_TARGET2,
3109:
3110: /* 31-bit PC relative address. */
3111: BFD_RELOC_ARM_PREL31,
3112:
3113: /* Low and High halfword relocations for MOVW and MOVT instructions. */
3114: BFD_RELOC_ARM_MOVW,
3115: BFD_RELOC_ARM_MOVT,
3116: BFD_RELOC_ARM_MOVW_PCREL,
3117: BFD_RELOC_ARM_MOVT_PCREL,
3118: BFD_RELOC_ARM_THUMB_MOVW,
3119: BFD_RELOC_ARM_THUMB_MOVT,
3120: BFD_RELOC_ARM_THUMB_MOVW_PCREL,
3121: BFD_RELOC_ARM_THUMB_MOVT_PCREL,
3122:
1.6 christos 3123: /* ARM FDPIC specific relocations. */
3124: BFD_RELOC_ARM_GOTFUNCDESC,
3125: BFD_RELOC_ARM_GOTOFFFUNCDESC,
3126: BFD_RELOC_ARM_FUNCDESC,
3127: BFD_RELOC_ARM_FUNCDESC_VALUE,
3128: BFD_RELOC_ARM_TLS_GD32_FDPIC,
3129: BFD_RELOC_ARM_TLS_LDM32_FDPIC,
3130: BFD_RELOC_ARM_TLS_IE32_FDPIC,
3131:
1.1 christos 3132: /* Relocations for setting up GOTs and PLTs for shared libraries. */
3133: BFD_RELOC_ARM_JUMP_SLOT,
3134: BFD_RELOC_ARM_GLOB_DAT,
3135: BFD_RELOC_ARM_GOT32,
3136: BFD_RELOC_ARM_PLT32,
3137: BFD_RELOC_ARM_RELATIVE,
3138: BFD_RELOC_ARM_GOTOFF,
3139: BFD_RELOC_ARM_GOTPC,
3140: BFD_RELOC_ARM_GOT_PREL,
3141:
3142: /* ARM thread-local storage relocations. */
3143: BFD_RELOC_ARM_TLS_GD32,
3144: BFD_RELOC_ARM_TLS_LDO32,
3145: BFD_RELOC_ARM_TLS_LDM32,
3146: BFD_RELOC_ARM_TLS_DTPOFF32,
3147: BFD_RELOC_ARM_TLS_DTPMOD32,
3148: BFD_RELOC_ARM_TLS_TPOFF32,
3149: BFD_RELOC_ARM_TLS_IE32,
3150: BFD_RELOC_ARM_TLS_LE32,
3151: BFD_RELOC_ARM_TLS_GOTDESC,
3152: BFD_RELOC_ARM_TLS_CALL,
3153: BFD_RELOC_ARM_THM_TLS_CALL,
3154: BFD_RELOC_ARM_TLS_DESCSEQ,
3155: BFD_RELOC_ARM_THM_TLS_DESCSEQ,
3156: BFD_RELOC_ARM_TLS_DESC,
3157:
3158: /* ARM group relocations. */
3159: BFD_RELOC_ARM_ALU_PC_G0_NC,
3160: BFD_RELOC_ARM_ALU_PC_G0,
3161: BFD_RELOC_ARM_ALU_PC_G1_NC,
3162: BFD_RELOC_ARM_ALU_PC_G1,
3163: BFD_RELOC_ARM_ALU_PC_G2,
3164: BFD_RELOC_ARM_LDR_PC_G0,
3165: BFD_RELOC_ARM_LDR_PC_G1,
3166: BFD_RELOC_ARM_LDR_PC_G2,
3167: BFD_RELOC_ARM_LDRS_PC_G0,
3168: BFD_RELOC_ARM_LDRS_PC_G1,
3169: BFD_RELOC_ARM_LDRS_PC_G2,
3170: BFD_RELOC_ARM_LDC_PC_G0,
3171: BFD_RELOC_ARM_LDC_PC_G1,
3172: BFD_RELOC_ARM_LDC_PC_G2,
3173: BFD_RELOC_ARM_ALU_SB_G0_NC,
3174: BFD_RELOC_ARM_ALU_SB_G0,
3175: BFD_RELOC_ARM_ALU_SB_G1_NC,
3176: BFD_RELOC_ARM_ALU_SB_G1,
3177: BFD_RELOC_ARM_ALU_SB_G2,
3178: BFD_RELOC_ARM_LDR_SB_G0,
3179: BFD_RELOC_ARM_LDR_SB_G1,
3180: BFD_RELOC_ARM_LDR_SB_G2,
3181: BFD_RELOC_ARM_LDRS_SB_G0,
3182: BFD_RELOC_ARM_LDRS_SB_G1,
3183: BFD_RELOC_ARM_LDRS_SB_G2,
3184: BFD_RELOC_ARM_LDC_SB_G0,
3185: BFD_RELOC_ARM_LDC_SB_G1,
3186: BFD_RELOC_ARM_LDC_SB_G2,
3187:
3188: /* Annotation of BX instructions. */
3189: BFD_RELOC_ARM_V4BX,
3190:
3191: /* ARM support for STT_GNU_IFUNC. */
3192: BFD_RELOC_ARM_IRELATIVE,
3193:
1.5 christos 3194: /* Thumb1 relocations to support execute-only code. */
3195: BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC,
3196: BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC,
3197: BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC,
3198: BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC,
3199:
1.1 christos 3200: /* These relocs are only used within the ARM assembler. They are not
3201: (at present) written to any object files. */
3202: BFD_RELOC_ARM_IMMEDIATE,
3203: BFD_RELOC_ARM_ADRL_IMMEDIATE,
3204: BFD_RELOC_ARM_T32_IMMEDIATE,
3205: BFD_RELOC_ARM_T32_ADD_IMM,
3206: BFD_RELOC_ARM_T32_IMM12,
3207: BFD_RELOC_ARM_T32_ADD_PC12,
3208: BFD_RELOC_ARM_SHIFT_IMM,
3209: BFD_RELOC_ARM_SMC,
3210: BFD_RELOC_ARM_HVC,
3211: BFD_RELOC_ARM_SWI,
3212: BFD_RELOC_ARM_MULTI,
3213: BFD_RELOC_ARM_CP_OFF_IMM,
3214: BFD_RELOC_ARM_CP_OFF_IMM_S2,
3215: BFD_RELOC_ARM_T32_CP_OFF_IMM,
3216: BFD_RELOC_ARM_T32_CP_OFF_IMM_S2,
1.7 ! christos 3217: BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM,
1.1 christos 3218: BFD_RELOC_ARM_ADR_IMM,
3219: BFD_RELOC_ARM_LDR_IMM,
3220: BFD_RELOC_ARM_LITERAL,
3221: BFD_RELOC_ARM_IN_POOL,
3222: BFD_RELOC_ARM_OFFSET_IMM8,
3223: BFD_RELOC_ARM_T32_OFFSET_U8,
3224: BFD_RELOC_ARM_T32_OFFSET_IMM,
3225: BFD_RELOC_ARM_HWLITERAL,
3226: BFD_RELOC_ARM_THUMB_ADD,
3227: BFD_RELOC_ARM_THUMB_IMM,
3228: BFD_RELOC_ARM_THUMB_SHIFT,
3229:
3230: /* Renesas / SuperH SH relocs. Not all of these appear in object files. */
3231: BFD_RELOC_SH_PCDISP8BY2,
3232: BFD_RELOC_SH_PCDISP12BY2,
3233: BFD_RELOC_SH_IMM3,
3234: BFD_RELOC_SH_IMM3U,
3235: BFD_RELOC_SH_DISP12,
3236: BFD_RELOC_SH_DISP12BY2,
3237: BFD_RELOC_SH_DISP12BY4,
3238: BFD_RELOC_SH_DISP12BY8,
3239: BFD_RELOC_SH_DISP20,
3240: BFD_RELOC_SH_DISP20BY8,
3241: BFD_RELOC_SH_IMM4,
3242: BFD_RELOC_SH_IMM4BY2,
3243: BFD_RELOC_SH_IMM4BY4,
3244: BFD_RELOC_SH_IMM8,
3245: BFD_RELOC_SH_IMM8BY2,
3246: BFD_RELOC_SH_IMM8BY4,
3247: BFD_RELOC_SH_PCRELIMM8BY2,
3248: BFD_RELOC_SH_PCRELIMM8BY4,
3249: BFD_RELOC_SH_SWITCH16,
3250: BFD_RELOC_SH_SWITCH32,
3251: BFD_RELOC_SH_USES,
3252: BFD_RELOC_SH_COUNT,
3253: BFD_RELOC_SH_ALIGN,
3254: BFD_RELOC_SH_CODE,
3255: BFD_RELOC_SH_DATA,
3256: BFD_RELOC_SH_LABEL,
3257: BFD_RELOC_SH_LOOP_START,
3258: BFD_RELOC_SH_LOOP_END,
3259: BFD_RELOC_SH_COPY,
3260: BFD_RELOC_SH_GLOB_DAT,
3261: BFD_RELOC_SH_JMP_SLOT,
3262: BFD_RELOC_SH_RELATIVE,
3263: BFD_RELOC_SH_GOTPC,
3264: BFD_RELOC_SH_GOT_LOW16,
3265: BFD_RELOC_SH_GOT_MEDLOW16,
3266: BFD_RELOC_SH_GOT_MEDHI16,
3267: BFD_RELOC_SH_GOT_HI16,
3268: BFD_RELOC_SH_GOTPLT_LOW16,
3269: BFD_RELOC_SH_GOTPLT_MEDLOW16,
3270: BFD_RELOC_SH_GOTPLT_MEDHI16,
3271: BFD_RELOC_SH_GOTPLT_HI16,
3272: BFD_RELOC_SH_PLT_LOW16,
3273: BFD_RELOC_SH_PLT_MEDLOW16,
3274: BFD_RELOC_SH_PLT_MEDHI16,
3275: BFD_RELOC_SH_PLT_HI16,
3276: BFD_RELOC_SH_GOTOFF_LOW16,
3277: BFD_RELOC_SH_GOTOFF_MEDLOW16,
3278: BFD_RELOC_SH_GOTOFF_MEDHI16,
3279: BFD_RELOC_SH_GOTOFF_HI16,
3280: BFD_RELOC_SH_GOTPC_LOW16,
3281: BFD_RELOC_SH_GOTPC_MEDLOW16,
3282: BFD_RELOC_SH_GOTPC_MEDHI16,
3283: BFD_RELOC_SH_GOTPC_HI16,
3284: BFD_RELOC_SH_COPY64,
3285: BFD_RELOC_SH_GLOB_DAT64,
3286: BFD_RELOC_SH_JMP_SLOT64,
3287: BFD_RELOC_SH_RELATIVE64,
3288: BFD_RELOC_SH_GOT10BY4,
3289: BFD_RELOC_SH_GOT10BY8,
3290: BFD_RELOC_SH_GOTPLT10BY4,
3291: BFD_RELOC_SH_GOTPLT10BY8,
3292: BFD_RELOC_SH_GOTPLT32,
3293: BFD_RELOC_SH_SHMEDIA_CODE,
3294: BFD_RELOC_SH_IMMU5,
3295: BFD_RELOC_SH_IMMS6,
3296: BFD_RELOC_SH_IMMS6BY32,
3297: BFD_RELOC_SH_IMMU6,
3298: BFD_RELOC_SH_IMMS10,
3299: BFD_RELOC_SH_IMMS10BY2,
3300: BFD_RELOC_SH_IMMS10BY4,
3301: BFD_RELOC_SH_IMMS10BY8,
3302: BFD_RELOC_SH_IMMS16,
3303: BFD_RELOC_SH_IMMU16,
3304: BFD_RELOC_SH_IMM_LOW16,
3305: BFD_RELOC_SH_IMM_LOW16_PCREL,
3306: BFD_RELOC_SH_IMM_MEDLOW16,
3307: BFD_RELOC_SH_IMM_MEDLOW16_PCREL,
3308: BFD_RELOC_SH_IMM_MEDHI16,
3309: BFD_RELOC_SH_IMM_MEDHI16_PCREL,
3310: BFD_RELOC_SH_IMM_HI16,
3311: BFD_RELOC_SH_IMM_HI16_PCREL,
3312: BFD_RELOC_SH_PT_16,
3313: BFD_RELOC_SH_TLS_GD_32,
3314: BFD_RELOC_SH_TLS_LD_32,
3315: BFD_RELOC_SH_TLS_LDO_32,
3316: BFD_RELOC_SH_TLS_IE_32,
3317: BFD_RELOC_SH_TLS_LE_32,
3318: BFD_RELOC_SH_TLS_DTPMOD32,
3319: BFD_RELOC_SH_TLS_DTPOFF32,
3320: BFD_RELOC_SH_TLS_TPOFF32,
3321: BFD_RELOC_SH_GOT20,
3322: BFD_RELOC_SH_GOTOFF20,
3323: BFD_RELOC_SH_GOTFUNCDESC,
3324: BFD_RELOC_SH_GOTFUNCDESC20,
3325: BFD_RELOC_SH_GOTOFFFUNCDESC,
3326: BFD_RELOC_SH_GOTOFFFUNCDESC20,
3327: BFD_RELOC_SH_FUNCDESC,
3328:
1.3 christos 3329: /* ARC relocs. */
3330: BFD_RELOC_ARC_NONE,
3331: BFD_RELOC_ARC_8,
3332: BFD_RELOC_ARC_16,
3333: BFD_RELOC_ARC_24,
3334: BFD_RELOC_ARC_32,
3335: BFD_RELOC_ARC_N8,
3336: BFD_RELOC_ARC_N16,
3337: BFD_RELOC_ARC_N24,
3338: BFD_RELOC_ARC_N32,
3339: BFD_RELOC_ARC_SDA,
3340: BFD_RELOC_ARC_SECTOFF,
3341: BFD_RELOC_ARC_S21H_PCREL,
3342: BFD_RELOC_ARC_S21W_PCREL,
3343: BFD_RELOC_ARC_S25H_PCREL,
3344: BFD_RELOC_ARC_S25W_PCREL,
3345: BFD_RELOC_ARC_SDA32,
3346: BFD_RELOC_ARC_SDA_LDST,
3347: BFD_RELOC_ARC_SDA_LDST1,
3348: BFD_RELOC_ARC_SDA_LDST2,
3349: BFD_RELOC_ARC_SDA16_LD,
3350: BFD_RELOC_ARC_SDA16_LD1,
3351: BFD_RELOC_ARC_SDA16_LD2,
3352: BFD_RELOC_ARC_S13_PCREL,
3353: BFD_RELOC_ARC_W,
3354: BFD_RELOC_ARC_32_ME,
3355: BFD_RELOC_ARC_32_ME_S,
3356: BFD_RELOC_ARC_N32_ME,
3357: BFD_RELOC_ARC_SECTOFF_ME,
3358: BFD_RELOC_ARC_SDA32_ME,
3359: BFD_RELOC_ARC_W_ME,
3360: BFD_RELOC_AC_SECTOFF_U8,
3361: BFD_RELOC_AC_SECTOFF_U8_1,
3362: BFD_RELOC_AC_SECTOFF_U8_2,
1.6 christos 3363: BFD_RELOC_AC_SECTOFF_S9,
3364: BFD_RELOC_AC_SECTOFF_S9_1,
3365: BFD_RELOC_AC_SECTOFF_S9_2,
1.3 christos 3366: BFD_RELOC_ARC_SECTOFF_ME_1,
3367: BFD_RELOC_ARC_SECTOFF_ME_2,
3368: BFD_RELOC_ARC_SECTOFF_1,
3369: BFD_RELOC_ARC_SECTOFF_2,
1.6 christos 3370: BFD_RELOC_ARC_SDA_12,
1.3 christos 3371: BFD_RELOC_ARC_SDA16_ST2,
3372: BFD_RELOC_ARC_32_PCREL,
3373: BFD_RELOC_ARC_PC32,
3374: BFD_RELOC_ARC_GOT32,
3375: BFD_RELOC_ARC_GOTPC32,
3376: BFD_RELOC_ARC_PLT32,
3377: BFD_RELOC_ARC_COPY,
3378: BFD_RELOC_ARC_GLOB_DAT,
3379: BFD_RELOC_ARC_JMP_SLOT,
3380: BFD_RELOC_ARC_RELATIVE,
3381: BFD_RELOC_ARC_GOTOFF,
3382: BFD_RELOC_ARC_GOTPC,
3383: BFD_RELOC_ARC_S21W_PCREL_PLT,
3384: BFD_RELOC_ARC_S25H_PCREL_PLT,
3385: BFD_RELOC_ARC_TLS_DTPMOD,
3386: BFD_RELOC_ARC_TLS_TPOFF,
3387: BFD_RELOC_ARC_TLS_GD_GOT,
3388: BFD_RELOC_ARC_TLS_GD_LD,
3389: BFD_RELOC_ARC_TLS_GD_CALL,
3390: BFD_RELOC_ARC_TLS_IE_GOT,
3391: BFD_RELOC_ARC_TLS_DTPOFF,
3392: BFD_RELOC_ARC_TLS_DTPOFF_S9,
3393: BFD_RELOC_ARC_TLS_LE_S9,
3394: BFD_RELOC_ARC_TLS_LE_32,
3395: BFD_RELOC_ARC_S25W_PCREL_PLT,
3396: BFD_RELOC_ARC_S21H_PCREL_PLT,
1.5 christos 3397: BFD_RELOC_ARC_NPS_CMEM16,
1.6 christos 3398: BFD_RELOC_ARC_JLI_SECTOFF,
1.1 christos 3399:
3400: /* ADI Blackfin 16 bit immediate absolute reloc. */
3401: BFD_RELOC_BFIN_16_IMM,
3402:
3403: /* ADI Blackfin 16 bit immediate absolute reloc higher 16 bits. */
3404: BFD_RELOC_BFIN_16_HIGH,
3405:
3406: /* ADI Blackfin 'a' part of LSETUP. */
3407: BFD_RELOC_BFIN_4_PCREL,
3408:
3409: /* ADI Blackfin. */
3410: BFD_RELOC_BFIN_5_PCREL,
3411:
3412: /* ADI Blackfin 16 bit immediate absolute reloc lower 16 bits. */
3413: BFD_RELOC_BFIN_16_LOW,
3414:
3415: /* ADI Blackfin. */
3416: BFD_RELOC_BFIN_10_PCREL,
3417:
3418: /* ADI Blackfin 'b' part of LSETUP. */
3419: BFD_RELOC_BFIN_11_PCREL,
3420:
3421: /* ADI Blackfin. */
3422: BFD_RELOC_BFIN_12_PCREL_JUMP,
3423:
3424: /* ADI Blackfin Short jump, pcrel. */
3425: BFD_RELOC_BFIN_12_PCREL_JUMP_S,
3426:
3427: /* ADI Blackfin Call.x not implemented. */
3428: BFD_RELOC_BFIN_24_PCREL_CALL_X,
3429:
3430: /* ADI Blackfin Long Jump pcrel. */
3431: BFD_RELOC_BFIN_24_PCREL_JUMP_L,
3432:
3433: /* ADI Blackfin FD-PIC relocations. */
3434: BFD_RELOC_BFIN_GOT17M4,
3435: BFD_RELOC_BFIN_GOTHI,
3436: BFD_RELOC_BFIN_GOTLO,
3437: BFD_RELOC_BFIN_FUNCDESC,
3438: BFD_RELOC_BFIN_FUNCDESC_GOT17M4,
3439: BFD_RELOC_BFIN_FUNCDESC_GOTHI,
3440: BFD_RELOC_BFIN_FUNCDESC_GOTLO,
3441: BFD_RELOC_BFIN_FUNCDESC_VALUE,
3442: BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4,
3443: BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI,
3444: BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO,
3445: BFD_RELOC_BFIN_GOTOFF17M4,
3446: BFD_RELOC_BFIN_GOTOFFHI,
3447: BFD_RELOC_BFIN_GOTOFFLO,
3448:
3449: /* ADI Blackfin GOT relocation. */
3450: BFD_RELOC_BFIN_GOT,
3451:
3452: /* ADI Blackfin PLTPC relocation. */
3453: BFD_RELOC_BFIN_PLTPC,
3454:
3455: /* ADI Blackfin arithmetic relocation. */
3456: BFD_ARELOC_BFIN_PUSH,
3457:
3458: /* ADI Blackfin arithmetic relocation. */
3459: BFD_ARELOC_BFIN_CONST,
3460:
3461: /* ADI Blackfin arithmetic relocation. */
3462: BFD_ARELOC_BFIN_ADD,
3463:
3464: /* ADI Blackfin arithmetic relocation. */
3465: BFD_ARELOC_BFIN_SUB,
3466:
3467: /* ADI Blackfin arithmetic relocation. */
3468: BFD_ARELOC_BFIN_MULT,
3469:
3470: /* ADI Blackfin arithmetic relocation. */
3471: BFD_ARELOC_BFIN_DIV,
3472:
3473: /* ADI Blackfin arithmetic relocation. */
3474: BFD_ARELOC_BFIN_MOD,
3475:
3476: /* ADI Blackfin arithmetic relocation. */
3477: BFD_ARELOC_BFIN_LSHIFT,
3478:
3479: /* ADI Blackfin arithmetic relocation. */
3480: BFD_ARELOC_BFIN_RSHIFT,
3481:
3482: /* ADI Blackfin arithmetic relocation. */
3483: BFD_ARELOC_BFIN_AND,
3484:
3485: /* ADI Blackfin arithmetic relocation. */
3486: BFD_ARELOC_BFIN_OR,
3487:
3488: /* ADI Blackfin arithmetic relocation. */
3489: BFD_ARELOC_BFIN_XOR,
3490:
3491: /* ADI Blackfin arithmetic relocation. */
3492: BFD_ARELOC_BFIN_LAND,
3493:
3494: /* ADI Blackfin arithmetic relocation. */
3495: BFD_ARELOC_BFIN_LOR,
3496:
3497: /* ADI Blackfin arithmetic relocation. */
3498: BFD_ARELOC_BFIN_LEN,
3499:
3500: /* ADI Blackfin arithmetic relocation. */
3501: BFD_ARELOC_BFIN_NEG,
3502:
3503: /* ADI Blackfin arithmetic relocation. */
3504: BFD_ARELOC_BFIN_COMP,
3505:
3506: /* ADI Blackfin arithmetic relocation. */
3507: BFD_ARELOC_BFIN_PAGE,
3508:
3509: /* ADI Blackfin arithmetic relocation. */
3510: BFD_ARELOC_BFIN_HWPAGE,
3511:
3512: /* ADI Blackfin arithmetic relocation. */
3513: BFD_ARELOC_BFIN_ADDR,
3514:
3515: /* Mitsubishi D10V relocs.
3516: This is a 10-bit reloc with the right 2 bits
3517: assumed to be 0. */
3518: BFD_RELOC_D10V_10_PCREL_R,
3519:
3520: /* Mitsubishi D10V relocs.
3521: This is a 10-bit reloc with the right 2 bits
3522: assumed to be 0. This is the same as the previous reloc
3523: except it is in the left container, i.e.,
3524: shifted left 15 bits. */
3525: BFD_RELOC_D10V_10_PCREL_L,
3526:
3527: /* This is an 18-bit reloc with the right 2 bits
3528: assumed to be 0. */
3529: BFD_RELOC_D10V_18,
3530:
3531: /* This is an 18-bit reloc with the right 2 bits
3532: assumed to be 0. */
3533: BFD_RELOC_D10V_18_PCREL,
3534:
3535: /* Mitsubishi D30V relocs.
3536: This is a 6-bit absolute reloc. */
3537: BFD_RELOC_D30V_6,
3538:
3539: /* This is a 6-bit pc-relative reloc with
3540: the right 3 bits assumed to be 0. */
3541: BFD_RELOC_D30V_9_PCREL,
3542:
3543: /* This is a 6-bit pc-relative reloc with
3544: the right 3 bits assumed to be 0. Same
3545: as the previous reloc but on the right side
3546: of the container. */
3547: BFD_RELOC_D30V_9_PCREL_R,
3548:
3549: /* This is a 12-bit absolute reloc with the
3550: right 3 bitsassumed to be 0. */
3551: BFD_RELOC_D30V_15,
3552:
3553: /* This is a 12-bit pc-relative reloc with
3554: the right 3 bits assumed to be 0. */
3555: BFD_RELOC_D30V_15_PCREL,
3556:
3557: /* This is a 12-bit pc-relative reloc with
3558: the right 3 bits assumed to be 0. Same
3559: as the previous reloc but on the right side
3560: of the container. */
3561: BFD_RELOC_D30V_15_PCREL_R,
3562:
3563: /* This is an 18-bit absolute reloc with
3564: the right 3 bits assumed to be 0. */
3565: BFD_RELOC_D30V_21,
3566:
3567: /* This is an 18-bit pc-relative reloc with
3568: the right 3 bits assumed to be 0. */
3569: BFD_RELOC_D30V_21_PCREL,
3570:
3571: /* This is an 18-bit pc-relative reloc with
3572: the right 3 bits assumed to be 0. Same
3573: as the previous reloc but on the right side
3574: of the container. */
3575: BFD_RELOC_D30V_21_PCREL_R,
3576:
3577: /* This is a 32-bit absolute reloc. */
3578: BFD_RELOC_D30V_32,
3579:
3580: /* This is a 32-bit pc-relative reloc. */
3581: BFD_RELOC_D30V_32_PCREL,
3582:
3583: /* DLX relocs */
3584: BFD_RELOC_DLX_HI16_S,
3585:
3586: /* DLX relocs */
3587: BFD_RELOC_DLX_LO16,
3588:
3589: /* DLX relocs */
3590: BFD_RELOC_DLX_JMP26,
3591:
3592: /* Renesas M16C/M32C Relocations. */
3593: BFD_RELOC_M32C_HI8,
3594: BFD_RELOC_M32C_RL_JUMP,
3595: BFD_RELOC_M32C_RL_1ADDR,
3596: BFD_RELOC_M32C_RL_2ADDR,
3597:
3598: /* Renesas M32R (formerly Mitsubishi M32R) relocs.
3599: This is a 24 bit absolute address. */
3600: BFD_RELOC_M32R_24,
3601:
3602: /* This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0. */
3603: BFD_RELOC_M32R_10_PCREL,
3604:
3605: /* This is an 18-bit reloc with the right 2 bits assumed to be 0. */
3606: BFD_RELOC_M32R_18_PCREL,
3607:
3608: /* This is a 26-bit reloc with the right 2 bits assumed to be 0. */
3609: BFD_RELOC_M32R_26_PCREL,
3610:
3611: /* This is a 16-bit reloc containing the high 16 bits of an address
3612: used when the lower 16 bits are treated as unsigned. */
3613: BFD_RELOC_M32R_HI16_ULO,
3614:
3615: /* This is a 16-bit reloc containing the high 16 bits of an address
3616: used when the lower 16 bits are treated as signed. */
3617: BFD_RELOC_M32R_HI16_SLO,
3618:
3619: /* This is a 16-bit reloc containing the lower 16 bits of an address. */
3620: BFD_RELOC_M32R_LO16,
3621:
3622: /* This is a 16-bit reloc containing the small data area offset for use in
3623: add3, load, and store instructions. */
3624: BFD_RELOC_M32R_SDA16,
3625:
3626: /* For PIC. */
3627: BFD_RELOC_M32R_GOT24,
3628: BFD_RELOC_M32R_26_PLTREL,
3629: BFD_RELOC_M32R_COPY,
3630: BFD_RELOC_M32R_GLOB_DAT,
3631: BFD_RELOC_M32R_JMP_SLOT,
3632: BFD_RELOC_M32R_RELATIVE,
3633: BFD_RELOC_M32R_GOTOFF,
3634: BFD_RELOC_M32R_GOTOFF_HI_ULO,
3635: BFD_RELOC_M32R_GOTOFF_HI_SLO,
3636: BFD_RELOC_M32R_GOTOFF_LO,
3637: BFD_RELOC_M32R_GOTPC24,
3638: BFD_RELOC_M32R_GOT16_HI_ULO,
3639: BFD_RELOC_M32R_GOT16_HI_SLO,
3640: BFD_RELOC_M32R_GOT16_LO,
3641: BFD_RELOC_M32R_GOTPC_HI_ULO,
3642: BFD_RELOC_M32R_GOTPC_HI_SLO,
3643: BFD_RELOC_M32R_GOTPC_LO,
3644:
1.3 christos 3645: /* NDS32 relocs.
3646: This is a 20 bit absolute address. */
3647: BFD_RELOC_NDS32_20,
3648:
3649: /* This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0. */
3650: BFD_RELOC_NDS32_9_PCREL,
3651:
3652: /* This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0. */
3653: BFD_RELOC_NDS32_WORD_9_PCREL,
3654:
3655: /* This is an 15-bit reloc with the right 1 bit assumed to be 0. */
3656: BFD_RELOC_NDS32_15_PCREL,
3657:
3658: /* This is an 17-bit reloc with the right 1 bit assumed to be 0. */
3659: BFD_RELOC_NDS32_17_PCREL,
3660:
3661: /* This is a 25-bit reloc with the right 1 bit assumed to be 0. */
3662: BFD_RELOC_NDS32_25_PCREL,
3663:
3664: /* This is a 20-bit reloc containing the high 20 bits of an address
3665: used with the lower 12 bits */
3666: BFD_RELOC_NDS32_HI20,
3667:
3668: /* This is a 12-bit reloc containing the lower 12 bits of an address
3669: then shift right by 3. This is used with ldi,sdi... */
3670: BFD_RELOC_NDS32_LO12S3,
3671:
3672: /* This is a 12-bit reloc containing the lower 12 bits of an address
3673: then shift left by 2. This is used with lwi,swi... */
3674: BFD_RELOC_NDS32_LO12S2,
3675:
3676: /* This is a 12-bit reloc containing the lower 12 bits of an address
3677: then shift left by 1. This is used with lhi,shi... */
3678: BFD_RELOC_NDS32_LO12S1,
3679:
3680: /* This is a 12-bit reloc containing the lower 12 bits of an address
3681: then shift left by 0. This is used with lbisbi... */
3682: BFD_RELOC_NDS32_LO12S0,
3683:
3684: /* This is a 12-bit reloc containing the lower 12 bits of an address
3685: then shift left by 0. This is only used with branch relaxations */
3686: BFD_RELOC_NDS32_LO12S0_ORI,
3687:
3688: /* This is a 15-bit reloc containing the small data area 18-bit signed offset
3689: and shift left by 3 for use in ldi, sdi... */
3690: BFD_RELOC_NDS32_SDA15S3,
3691:
3692: /* This is a 15-bit reloc containing the small data area 17-bit signed offset
3693: and shift left by 2 for use in lwi, swi... */
3694: BFD_RELOC_NDS32_SDA15S2,
3695:
3696: /* This is a 15-bit reloc containing the small data area 16-bit signed offset
3697: and shift left by 1 for use in lhi, shi... */
3698: BFD_RELOC_NDS32_SDA15S1,
3699:
3700: /* This is a 15-bit reloc containing the small data area 15-bit signed offset
3701: and shift left by 0 for use in lbi, sbi... */
3702: BFD_RELOC_NDS32_SDA15S0,
3703:
3704: /* This is a 16-bit reloc containing the small data area 16-bit signed offset
3705: and shift left by 3 */
3706: BFD_RELOC_NDS32_SDA16S3,
3707:
3708: /* This is a 17-bit reloc containing the small data area 17-bit signed offset
3709: and shift left by 2 for use in lwi.gp, swi.gp... */
3710: BFD_RELOC_NDS32_SDA17S2,
3711:
3712: /* This is a 18-bit reloc containing the small data area 18-bit signed offset
3713: and shift left by 1 for use in lhi.gp, shi.gp... */
3714: BFD_RELOC_NDS32_SDA18S1,
3715:
3716: /* This is a 19-bit reloc containing the small data area 19-bit signed offset
3717: and shift left by 0 for use in lbi.gp, sbi.gp... */
3718: BFD_RELOC_NDS32_SDA19S0,
3719:
3720: /* for PIC */
3721: BFD_RELOC_NDS32_GOT20,
3722: BFD_RELOC_NDS32_9_PLTREL,
3723: BFD_RELOC_NDS32_25_PLTREL,
3724: BFD_RELOC_NDS32_COPY,
3725: BFD_RELOC_NDS32_GLOB_DAT,
3726: BFD_RELOC_NDS32_JMP_SLOT,
3727: BFD_RELOC_NDS32_RELATIVE,
3728: BFD_RELOC_NDS32_GOTOFF,
3729: BFD_RELOC_NDS32_GOTOFF_HI20,
3730: BFD_RELOC_NDS32_GOTOFF_LO12,
3731: BFD_RELOC_NDS32_GOTPC20,
3732: BFD_RELOC_NDS32_GOT_HI20,
3733: BFD_RELOC_NDS32_GOT_LO12,
3734: BFD_RELOC_NDS32_GOTPC_HI20,
3735: BFD_RELOC_NDS32_GOTPC_LO12,
3736:
3737: /* for relax */
3738: BFD_RELOC_NDS32_INSN16,
3739: BFD_RELOC_NDS32_LABEL,
3740: BFD_RELOC_NDS32_LONGCALL1,
3741: BFD_RELOC_NDS32_LONGCALL2,
3742: BFD_RELOC_NDS32_LONGCALL3,
3743: BFD_RELOC_NDS32_LONGJUMP1,
3744: BFD_RELOC_NDS32_LONGJUMP2,
3745: BFD_RELOC_NDS32_LONGJUMP3,
3746: BFD_RELOC_NDS32_LOADSTORE,
3747: BFD_RELOC_NDS32_9_FIXED,
3748: BFD_RELOC_NDS32_15_FIXED,
3749: BFD_RELOC_NDS32_17_FIXED,
3750: BFD_RELOC_NDS32_25_FIXED,
3751: BFD_RELOC_NDS32_LONGCALL4,
3752: BFD_RELOC_NDS32_LONGCALL5,
3753: BFD_RELOC_NDS32_LONGCALL6,
3754: BFD_RELOC_NDS32_LONGJUMP4,
3755: BFD_RELOC_NDS32_LONGJUMP5,
3756: BFD_RELOC_NDS32_LONGJUMP6,
3757: BFD_RELOC_NDS32_LONGJUMP7,
3758:
3759: /* for PIC */
3760: BFD_RELOC_NDS32_PLTREL_HI20,
3761: BFD_RELOC_NDS32_PLTREL_LO12,
3762: BFD_RELOC_NDS32_PLT_GOTREL_HI20,
3763: BFD_RELOC_NDS32_PLT_GOTREL_LO12,
3764:
3765: /* for floating point */
3766: BFD_RELOC_NDS32_SDA12S2_DP,
3767: BFD_RELOC_NDS32_SDA12S2_SP,
3768: BFD_RELOC_NDS32_LO12S2_DP,
3769: BFD_RELOC_NDS32_LO12S2_SP,
3770:
3771: /* for dwarf2 debug_line. */
3772: BFD_RELOC_NDS32_DWARF2_OP1,
3773: BFD_RELOC_NDS32_DWARF2_OP2,
3774: BFD_RELOC_NDS32_DWARF2_LEB,
3775:
3776: /* for eliminate 16-bit instructions */
3777: BFD_RELOC_NDS32_UPDATE_TA,
3778:
3779: /* for PIC object relaxation */
3780: BFD_RELOC_NDS32_PLT_GOTREL_LO20,
3781: BFD_RELOC_NDS32_PLT_GOTREL_LO15,
3782: BFD_RELOC_NDS32_PLT_GOTREL_LO19,
3783: BFD_RELOC_NDS32_GOT_LO15,
3784: BFD_RELOC_NDS32_GOT_LO19,
3785: BFD_RELOC_NDS32_GOTOFF_LO15,
3786: BFD_RELOC_NDS32_GOTOFF_LO19,
3787: BFD_RELOC_NDS32_GOT15S2,
3788: BFD_RELOC_NDS32_GOT17S2,
3789:
3790: /* NDS32 relocs.
3791: This is a 5 bit absolute address. */
3792: BFD_RELOC_NDS32_5,
3793:
3794: /* This is a 10-bit unsigned pc-relative reloc with the right 1 bit assumed to be 0. */
3795: BFD_RELOC_NDS32_10_UPCREL,
3796:
3797: /* If fp were omitted, fp can used as another gp. */
3798: BFD_RELOC_NDS32_SDA_FP7U2_RELA,
3799:
3800: /* relaxation relative relocation types */
3801: BFD_RELOC_NDS32_RELAX_ENTRY,
3802: BFD_RELOC_NDS32_GOT_SUFF,
3803: BFD_RELOC_NDS32_GOTOFF_SUFF,
3804: BFD_RELOC_NDS32_PLT_GOT_SUFF,
3805: BFD_RELOC_NDS32_MULCALL_SUFF,
3806: BFD_RELOC_NDS32_PTR,
3807: BFD_RELOC_NDS32_PTR_COUNT,
3808: BFD_RELOC_NDS32_PTR_RESOLVED,
3809: BFD_RELOC_NDS32_PLTBLOCK,
3810: BFD_RELOC_NDS32_RELAX_REGION_BEGIN,
3811: BFD_RELOC_NDS32_RELAX_REGION_END,
3812: BFD_RELOC_NDS32_MINUEND,
3813: BFD_RELOC_NDS32_SUBTRAHEND,
3814: BFD_RELOC_NDS32_DIFF8,
3815: BFD_RELOC_NDS32_DIFF16,
3816: BFD_RELOC_NDS32_DIFF32,
3817: BFD_RELOC_NDS32_DIFF_ULEB128,
3818: BFD_RELOC_NDS32_EMPTY,
3819:
3820: /* This is a 25 bit absolute address. */
3821: BFD_RELOC_NDS32_25_ABS,
3822:
3823: /* For ex9 and ifc using. */
3824: BFD_RELOC_NDS32_DATA,
3825: BFD_RELOC_NDS32_TRAN,
3826: BFD_RELOC_NDS32_17IFC_PCREL,
3827: BFD_RELOC_NDS32_10IFCU_PCREL,
3828:
3829: /* For TLS. */
3830: BFD_RELOC_NDS32_TPOFF,
1.7 ! christos 3831: BFD_RELOC_NDS32_GOTTPOFF,
1.3 christos 3832: BFD_RELOC_NDS32_TLS_LE_HI20,
3833: BFD_RELOC_NDS32_TLS_LE_LO12,
1.7 ! christos 3834: BFD_RELOC_NDS32_TLS_LE_20,
! 3835: BFD_RELOC_NDS32_TLS_LE_15S0,
! 3836: BFD_RELOC_NDS32_TLS_LE_15S1,
! 3837: BFD_RELOC_NDS32_TLS_LE_15S2,
1.3 christos 3838: BFD_RELOC_NDS32_TLS_LE_ADD,
3839: BFD_RELOC_NDS32_TLS_LE_LS,
3840: BFD_RELOC_NDS32_TLS_IE_HI20,
1.7 ! christos 3841: BFD_RELOC_NDS32_TLS_IE_LO12,
1.3 christos 3842: BFD_RELOC_NDS32_TLS_IE_LO12S2,
1.7 ! christos 3843: BFD_RELOC_NDS32_TLS_IEGP_HI20,
! 3844: BFD_RELOC_NDS32_TLS_IEGP_LO12,
! 3845: BFD_RELOC_NDS32_TLS_IEGP_LO12S2,
! 3846: BFD_RELOC_NDS32_TLS_IEGP_LW,
! 3847: BFD_RELOC_NDS32_TLS_DESC,
! 3848: BFD_RELOC_NDS32_TLS_DESC_HI20,
! 3849: BFD_RELOC_NDS32_TLS_DESC_LO12,
! 3850: BFD_RELOC_NDS32_TLS_DESC_20,
! 3851: BFD_RELOC_NDS32_TLS_DESC_SDA17S2,
! 3852: BFD_RELOC_NDS32_TLS_DESC_ADD,
! 3853: BFD_RELOC_NDS32_TLS_DESC_FUNC,
! 3854: BFD_RELOC_NDS32_TLS_DESC_CALL,
! 3855: BFD_RELOC_NDS32_TLS_DESC_MEM,
! 3856: BFD_RELOC_NDS32_REMOVE,
! 3857: BFD_RELOC_NDS32_GROUP,
! 3858:
! 3859: /* For floating load store relaxation. */
! 3860: BFD_RELOC_NDS32_LSI,
1.3 christos 3861:
1.1 christos 3862: /* This is a 9-bit reloc */
3863: BFD_RELOC_V850_9_PCREL,
3864:
3865: /* This is a 22-bit reloc */
3866: BFD_RELOC_V850_22_PCREL,
3867:
3868: /* This is a 16 bit offset from the short data area pointer. */
3869: BFD_RELOC_V850_SDA_16_16_OFFSET,
3870:
3871: /* This is a 16 bit offset (of which only 15 bits are used) from the
3872: short data area pointer. */
3873: BFD_RELOC_V850_SDA_15_16_OFFSET,
3874:
3875: /* This is a 16 bit offset from the zero data area pointer. */
3876: BFD_RELOC_V850_ZDA_16_16_OFFSET,
3877:
3878: /* This is a 16 bit offset (of which only 15 bits are used) from the
3879: zero data area pointer. */
3880: BFD_RELOC_V850_ZDA_15_16_OFFSET,
3881:
3882: /* This is an 8 bit offset (of which only 6 bits are used) from the
3883: tiny data area pointer. */
3884: BFD_RELOC_V850_TDA_6_8_OFFSET,
3885:
3886: /* This is an 8bit offset (of which only 7 bits are used) from the tiny
3887: data area pointer. */
3888: BFD_RELOC_V850_TDA_7_8_OFFSET,
3889:
3890: /* This is a 7 bit offset from the tiny data area pointer. */
3891: BFD_RELOC_V850_TDA_7_7_OFFSET,
3892:
3893: /* This is a 16 bit offset from the tiny data area pointer. */
3894: BFD_RELOC_V850_TDA_16_16_OFFSET,
3895:
3896: /* This is a 5 bit offset (of which only 4 bits are used) from the tiny
3897: data area pointer. */
3898: BFD_RELOC_V850_TDA_4_5_OFFSET,
3899:
3900: /* This is a 4 bit offset from the tiny data area pointer. */
3901: BFD_RELOC_V850_TDA_4_4_OFFSET,
3902:
3903: /* This is a 16 bit offset from the short data area pointer, with the
3904: bits placed non-contiguously in the instruction. */
3905: BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET,
3906:
3907: /* This is a 16 bit offset from the zero data area pointer, with the
3908: bits placed non-contiguously in the instruction. */
3909: BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET,
3910:
3911: /* This is a 6 bit offset from the call table base pointer. */
3912: BFD_RELOC_V850_CALLT_6_7_OFFSET,
3913:
3914: /* This is a 16 bit offset from the call table base pointer. */
3915: BFD_RELOC_V850_CALLT_16_16_OFFSET,
3916:
3917: /* Used for relaxing indirect function calls. */
3918: BFD_RELOC_V850_LONGCALL,
3919:
3920: /* Used for relaxing indirect jumps. */
3921: BFD_RELOC_V850_LONGJUMP,
3922:
3923: /* Used to maintain alignment whilst relaxing. */
3924: BFD_RELOC_V850_ALIGN,
3925:
3926: /* This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
3927: instructions. */
3928: BFD_RELOC_V850_LO16_SPLIT_OFFSET,
3929:
3930: /* This is a 16-bit reloc. */
3931: BFD_RELOC_V850_16_PCREL,
3932:
3933: /* This is a 17-bit reloc. */
3934: BFD_RELOC_V850_17_PCREL,
3935:
3936: /* This is a 23-bit reloc. */
3937: BFD_RELOC_V850_23,
3938:
3939: /* This is a 32-bit reloc. */
3940: BFD_RELOC_V850_32_PCREL,
3941:
3942: /* This is a 32-bit reloc. */
3943: BFD_RELOC_V850_32_ABS,
3944:
3945: /* This is a 16-bit reloc. */
3946: BFD_RELOC_V850_16_SPLIT_OFFSET,
3947:
3948: /* This is a 16-bit reloc. */
3949: BFD_RELOC_V850_16_S1,
3950:
3951: /* Low 16 bits. 16 bit shifted by 1. */
3952: BFD_RELOC_V850_LO16_S1,
3953:
3954: /* This is a 16 bit offset from the call table base pointer. */
3955: BFD_RELOC_V850_CALLT_15_16_OFFSET,
3956:
3957: /* DSO relocations. */
3958: BFD_RELOC_V850_32_GOTPCREL,
3959:
3960: /* DSO relocations. */
3961: BFD_RELOC_V850_16_GOT,
3962:
3963: /* DSO relocations. */
3964: BFD_RELOC_V850_32_GOT,
3965:
3966: /* DSO relocations. */
3967: BFD_RELOC_V850_22_PLT_PCREL,
3968:
3969: /* DSO relocations. */
3970: BFD_RELOC_V850_32_PLT_PCREL,
3971:
3972: /* DSO relocations. */
3973: BFD_RELOC_V850_COPY,
3974:
3975: /* DSO relocations. */
3976: BFD_RELOC_V850_GLOB_DAT,
3977:
3978: /* DSO relocations. */
3979: BFD_RELOC_V850_JMP_SLOT,
3980:
3981: /* DSO relocations. */
3982: BFD_RELOC_V850_RELATIVE,
3983:
3984: /* DSO relocations. */
3985: BFD_RELOC_V850_16_GOTOFF,
3986:
3987: /* DSO relocations. */
3988: BFD_RELOC_V850_32_GOTOFF,
3989:
3990: /* start code. */
3991: BFD_RELOC_V850_CODE,
3992:
3993: /* start data in text. */
3994: BFD_RELOC_V850_DATA,
3995:
3996: /* This is a 8bit DP reloc for the tms320c30, where the most
3997: significant 8 bits of a 24 bit word are placed into the least
3998: significant 8 bits of the opcode. */
3999: BFD_RELOC_TIC30_LDP,
4000:
4001: /* This is a 7bit reloc for the tms320c54x, where the least
4002: significant 7 bits of a 16 bit word are placed into the least
4003: significant 7 bits of the opcode. */
4004: BFD_RELOC_TIC54X_PARTLS7,
4005:
4006: /* This is a 9bit DP reloc for the tms320c54x, where the most
4007: significant 9 bits of a 16 bit word are placed into the least
4008: significant 9 bits of the opcode. */
4009: BFD_RELOC_TIC54X_PARTMS9,
4010:
4011: /* This is an extended address 23-bit reloc for the tms320c54x. */
4012: BFD_RELOC_TIC54X_23,
4013:
4014: /* This is a 16-bit reloc for the tms320c54x, where the least
4015: significant 16 bits of a 23-bit extended address are placed into
4016: the opcode. */
4017: BFD_RELOC_TIC54X_16_OF_23,
4018:
4019: /* This is a reloc for the tms320c54x, where the most
4020: significant 7 bits of a 23-bit extended address are placed into
4021: the opcode. */
4022: BFD_RELOC_TIC54X_MS7_OF_23,
4023:
4024: /* TMS320C6000 relocations. */
4025: BFD_RELOC_C6000_PCR_S21,
4026: BFD_RELOC_C6000_PCR_S12,
4027: BFD_RELOC_C6000_PCR_S10,
4028: BFD_RELOC_C6000_PCR_S7,
4029: BFD_RELOC_C6000_ABS_S16,
4030: BFD_RELOC_C6000_ABS_L16,
4031: BFD_RELOC_C6000_ABS_H16,
4032: BFD_RELOC_C6000_SBR_U15_B,
4033: BFD_RELOC_C6000_SBR_U15_H,
4034: BFD_RELOC_C6000_SBR_U15_W,
4035: BFD_RELOC_C6000_SBR_S16,
4036: BFD_RELOC_C6000_SBR_L16_B,
4037: BFD_RELOC_C6000_SBR_L16_H,
4038: BFD_RELOC_C6000_SBR_L16_W,
4039: BFD_RELOC_C6000_SBR_H16_B,
4040: BFD_RELOC_C6000_SBR_H16_H,
4041: BFD_RELOC_C6000_SBR_H16_W,
4042: BFD_RELOC_C6000_SBR_GOT_U15_W,
4043: BFD_RELOC_C6000_SBR_GOT_L16_W,
4044: BFD_RELOC_C6000_SBR_GOT_H16_W,
4045: BFD_RELOC_C6000_DSBT_INDEX,
4046: BFD_RELOC_C6000_PREL31,
4047: BFD_RELOC_C6000_COPY,
4048: BFD_RELOC_C6000_JUMP_SLOT,
4049: BFD_RELOC_C6000_EHTYPE,
4050: BFD_RELOC_C6000_PCR_H16,
4051: BFD_RELOC_C6000_PCR_L16,
4052: BFD_RELOC_C6000_ALIGN,
4053: BFD_RELOC_C6000_FPHEAD,
4054: BFD_RELOC_C6000_NOCMP,
4055:
4056: /* This is a 48 bit reloc for the FR30 that stores 32 bits. */
4057: BFD_RELOC_FR30_48,
4058:
4059: /* This is a 32 bit reloc for the FR30 that stores 20 bits split up into
4060: two sections. */
4061: BFD_RELOC_FR30_20,
4062:
4063: /* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
4064: 4 bits. */
4065: BFD_RELOC_FR30_6_IN_4,
4066:
4067: /* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
4068: into 8 bits. */
4069: BFD_RELOC_FR30_8_IN_8,
4070:
4071: /* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
4072: into 8 bits. */
4073: BFD_RELOC_FR30_9_IN_8,
4074:
4075: /* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
4076: into 8 bits. */
4077: BFD_RELOC_FR30_10_IN_8,
4078:
4079: /* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
4080: short offset into 8 bits. */
4081: BFD_RELOC_FR30_9_PCREL,
4082:
4083: /* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
4084: short offset into 11 bits. */
4085: BFD_RELOC_FR30_12_PCREL,
4086:
4087: /* Motorola Mcore relocations. */
4088: BFD_RELOC_MCORE_PCREL_IMM8BY4,
4089: BFD_RELOC_MCORE_PCREL_IMM11BY2,
4090: BFD_RELOC_MCORE_PCREL_IMM4BY2,
4091: BFD_RELOC_MCORE_PCREL_32,
4092: BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
4093: BFD_RELOC_MCORE_RVA,
4094:
4095: /* Toshiba Media Processor Relocations. */
4096: BFD_RELOC_MEP_8,
4097: BFD_RELOC_MEP_16,
4098: BFD_RELOC_MEP_32,
4099: BFD_RELOC_MEP_PCREL8A2,
4100: BFD_RELOC_MEP_PCREL12A2,
4101: BFD_RELOC_MEP_PCREL17A2,
4102: BFD_RELOC_MEP_PCREL24A2,
4103: BFD_RELOC_MEP_PCABS24A2,
4104: BFD_RELOC_MEP_LOW16,
4105: BFD_RELOC_MEP_HI16U,
4106: BFD_RELOC_MEP_HI16S,
4107: BFD_RELOC_MEP_GPREL,
4108: BFD_RELOC_MEP_TPREL,
4109: BFD_RELOC_MEP_TPREL7,
4110: BFD_RELOC_MEP_TPREL7A2,
4111: BFD_RELOC_MEP_TPREL7A4,
4112: BFD_RELOC_MEP_UIMM24,
4113: BFD_RELOC_MEP_ADDR24A4,
4114: BFD_RELOC_MEP_GNU_VTINHERIT,
4115: BFD_RELOC_MEP_GNU_VTENTRY,
4116:
4117:
1.3 christos 4118: /* Imagination Technologies Meta relocations. */
4119: BFD_RELOC_METAG_HIADDR16,
4120: BFD_RELOC_METAG_LOADDR16,
4121: BFD_RELOC_METAG_RELBRANCH,
4122: BFD_RELOC_METAG_GETSETOFF,
4123: BFD_RELOC_METAG_HIOG,
4124: BFD_RELOC_METAG_LOOG,
4125: BFD_RELOC_METAG_REL8,
4126: BFD_RELOC_METAG_REL16,
4127: BFD_RELOC_METAG_HI16_GOTOFF,
4128: BFD_RELOC_METAG_LO16_GOTOFF,
4129: BFD_RELOC_METAG_GETSET_GOTOFF,
4130: BFD_RELOC_METAG_GETSET_GOT,
4131: BFD_RELOC_METAG_HI16_GOTPC,
4132: BFD_RELOC_METAG_LO16_GOTPC,
4133: BFD_RELOC_METAG_HI16_PLT,
4134: BFD_RELOC_METAG_LO16_PLT,
4135: BFD_RELOC_METAG_RELBRANCH_PLT,
4136: BFD_RELOC_METAG_GOTOFF,
4137: BFD_RELOC_METAG_PLT,
4138: BFD_RELOC_METAG_COPY,
4139: BFD_RELOC_METAG_JMP_SLOT,
4140: BFD_RELOC_METAG_RELATIVE,
4141: BFD_RELOC_METAG_GLOB_DAT,
4142: BFD_RELOC_METAG_TLS_GD,
4143: BFD_RELOC_METAG_TLS_LDM,
4144: BFD_RELOC_METAG_TLS_LDO_HI16,
4145: BFD_RELOC_METAG_TLS_LDO_LO16,
4146: BFD_RELOC_METAG_TLS_LDO,
4147: BFD_RELOC_METAG_TLS_IE,
4148: BFD_RELOC_METAG_TLS_IENONPIC,
4149: BFD_RELOC_METAG_TLS_IENONPIC_HI16,
4150: BFD_RELOC_METAG_TLS_IENONPIC_LO16,
4151: BFD_RELOC_METAG_TLS_TPOFF,
4152: BFD_RELOC_METAG_TLS_DTPMOD,
4153: BFD_RELOC_METAG_TLS_DTPOFF,
4154: BFD_RELOC_METAG_TLS_LE,
4155: BFD_RELOC_METAG_TLS_LE_HI16,
4156: BFD_RELOC_METAG_TLS_LE_LO16,
4157:
1.1 christos 4158: /* These are relocations for the GETA instruction. */
4159: BFD_RELOC_MMIX_GETA,
4160: BFD_RELOC_MMIX_GETA_1,
4161: BFD_RELOC_MMIX_GETA_2,
4162: BFD_RELOC_MMIX_GETA_3,
4163:
4164: /* These are relocations for a conditional branch instruction. */
4165: BFD_RELOC_MMIX_CBRANCH,
4166: BFD_RELOC_MMIX_CBRANCH_J,
4167: BFD_RELOC_MMIX_CBRANCH_1,
4168: BFD_RELOC_MMIX_CBRANCH_2,
4169: BFD_RELOC_MMIX_CBRANCH_3,
4170:
4171: /* These are relocations for the PUSHJ instruction. */
4172: BFD_RELOC_MMIX_PUSHJ,
4173: BFD_RELOC_MMIX_PUSHJ_1,
4174: BFD_RELOC_MMIX_PUSHJ_2,
4175: BFD_RELOC_MMIX_PUSHJ_3,
4176: BFD_RELOC_MMIX_PUSHJ_STUBBABLE,
4177:
4178: /* These are relocations for the JMP instruction. */
4179: BFD_RELOC_MMIX_JMP,
4180: BFD_RELOC_MMIX_JMP_1,
4181: BFD_RELOC_MMIX_JMP_2,
4182: BFD_RELOC_MMIX_JMP_3,
4183:
4184: /* This is a relocation for a relative address as in a GETA instruction or
4185: a branch. */
4186: BFD_RELOC_MMIX_ADDR19,
4187:
4188: /* This is a relocation for a relative address as in a JMP instruction. */
4189: BFD_RELOC_MMIX_ADDR27,
4190:
4191: /* This is a relocation for an instruction field that may be a general
4192: register or a value 0..255. */
4193: BFD_RELOC_MMIX_REG_OR_BYTE,
4194:
4195: /* This is a relocation for an instruction field that may be a general
4196: register. */
4197: BFD_RELOC_MMIX_REG,
4198:
4199: /* This is a relocation for two instruction fields holding a register and
4200: an offset, the equivalent of the relocation. */
4201: BFD_RELOC_MMIX_BASE_PLUS_OFFSET,
4202:
4203: /* This relocation is an assertion that the expression is not allocated as
4204: a global register. It does not modify contents. */
4205: BFD_RELOC_MMIX_LOCAL,
4206:
4207: /* This is a 16 bit reloc for the AVR that stores 8 bit pc relative
4208: short offset into 7 bits. */
4209: BFD_RELOC_AVR_7_PCREL,
4210:
4211: /* This is a 16 bit reloc for the AVR that stores 13 bit pc relative
4212: short offset into 12 bits. */
4213: BFD_RELOC_AVR_13_PCREL,
4214:
4215: /* This is a 16 bit reloc for the AVR that stores 17 bit value (usually
4216: program memory address) into 16 bits. */
4217: BFD_RELOC_AVR_16_PM,
4218:
4219: /* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
4220: data memory address) into 8 bit immediate value of LDI insn. */
4221: BFD_RELOC_AVR_LO8_LDI,
4222:
4223: /* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
4224: of data memory address) into 8 bit immediate value of LDI insn. */
4225: BFD_RELOC_AVR_HI8_LDI,
4226:
4227: /* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
4228: of program memory address) into 8 bit immediate value of LDI insn. */
4229: BFD_RELOC_AVR_HH8_LDI,
4230:
4231: /* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
4232: of 32 bit value) into 8 bit immediate value of LDI insn. */
4233: BFD_RELOC_AVR_MS8_LDI,
4234:
4235: /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
4236: (usually data memory address) into 8 bit immediate value of SUBI insn. */
4237: BFD_RELOC_AVR_LO8_LDI_NEG,
4238:
4239: /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
4240: (high 8 bit of data memory address) into 8 bit immediate value of
4241: SUBI insn. */
4242: BFD_RELOC_AVR_HI8_LDI_NEG,
4243:
4244: /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
4245: (most high 8 bit of program memory address) into 8 bit immediate value
4246: of LDI or SUBI insn. */
4247: BFD_RELOC_AVR_HH8_LDI_NEG,
4248:
4249: /* This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
4250: of 32 bit value) into 8 bit immediate value of LDI insn. */
4251: BFD_RELOC_AVR_MS8_LDI_NEG,
4252:
4253: /* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
4254: command address) into 8 bit immediate value of LDI insn. */
4255: BFD_RELOC_AVR_LO8_LDI_PM,
4256:
1.3 christos 4257: /* This is a 16 bit reloc for the AVR that stores 8 bit value
1.1 christos 4258: (command address) into 8 bit immediate value of LDI insn. If the address
4259: is beyond the 128k boundary, the linker inserts a jump stub for this reloc
4260: in the lower 128k. */
4261: BFD_RELOC_AVR_LO8_LDI_GS,
4262:
4263: /* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
4264: of command address) into 8 bit immediate value of LDI insn. */
4265: BFD_RELOC_AVR_HI8_LDI_PM,
4266:
4267: /* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
4268: of command address) into 8 bit immediate value of LDI insn. If the address
4269: is beyond the 128k boundary, the linker inserts a jump stub for this reloc
4270: below 128k. */
4271: BFD_RELOC_AVR_HI8_LDI_GS,
4272:
4273: /* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
4274: of command address) into 8 bit immediate value of LDI insn. */
4275: BFD_RELOC_AVR_HH8_LDI_PM,
4276:
4277: /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
4278: (usually command address) into 8 bit immediate value of SUBI insn. */
4279: BFD_RELOC_AVR_LO8_LDI_PM_NEG,
4280:
4281: /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
4282: (high 8 bit of 16 bit command address) into 8 bit immediate value
4283: of SUBI insn. */
4284: BFD_RELOC_AVR_HI8_LDI_PM_NEG,
4285:
4286: /* This is a 16 bit reloc for the AVR that stores negated 8 bit value
4287: (high 6 bit of 22 bit command address) into 8 bit immediate
4288: value of SUBI insn. */
4289: BFD_RELOC_AVR_HH8_LDI_PM_NEG,
4290:
4291: /* This is a 32 bit reloc for the AVR that stores 23 bit value
4292: into 22 bits. */
4293: BFD_RELOC_AVR_CALL,
4294:
4295: /* This is a 16 bit reloc for the AVR that stores all needed bits
4296: for absolute addressing with ldi with overflow check to linktime */
4297: BFD_RELOC_AVR_LDI,
4298:
4299: /* This is a 6 bit reloc for the AVR that stores offset for ldd/std
4300: instructions */
4301: BFD_RELOC_AVR_6,
4302:
4303: /* This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
4304: instructions */
4305: BFD_RELOC_AVR_6_ADIW,
4306:
4307: /* This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
4308: in .byte lo8(symbol) */
4309: BFD_RELOC_AVR_8_LO,
4310:
4311: /* This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
4312: in .byte hi8(symbol) */
4313: BFD_RELOC_AVR_8_HI,
4314:
4315: /* This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
4316: in .byte hlo8(symbol) */
4317: BFD_RELOC_AVR_8_HLO,
4318:
1.3 christos 4319: /* AVR relocations to mark the difference of two local symbols.
4320: These are only needed to support linker relaxation and can be ignored
4321: when not relaxing. The field is set to the value of the difference
4322: assuming no relaxation. The relocation encodes the position of the
4323: second symbol so the linker can determine whether to adjust the field
4324: value. */
4325: BFD_RELOC_AVR_DIFF8,
4326: BFD_RELOC_AVR_DIFF16,
4327: BFD_RELOC_AVR_DIFF32,
4328:
4329: /* This is a 7 bit reloc for the AVR that stores SRAM address for 16bit
4330: lds and sts instructions supported only tiny core. */
4331: BFD_RELOC_AVR_LDS_STS_16,
4332:
4333: /* This is a 6 bit reloc for the AVR that stores an I/O register
4334: number for the IN and OUT instructions */
4335: BFD_RELOC_AVR_PORT6,
4336:
4337: /* This is a 5 bit reloc for the AVR that stores an I/O register
4338: number for the SBIC, SBIS, SBI and CBI instructions */
4339: BFD_RELOC_AVR_PORT5,
4340:
1.6 christos 4341: /* RISC-V relocations. */
4342: BFD_RELOC_RISCV_HI20,
4343: BFD_RELOC_RISCV_PCREL_HI20,
4344: BFD_RELOC_RISCV_PCREL_LO12_I,
4345: BFD_RELOC_RISCV_PCREL_LO12_S,
4346: BFD_RELOC_RISCV_LO12_I,
4347: BFD_RELOC_RISCV_LO12_S,
4348: BFD_RELOC_RISCV_GPREL12_I,
4349: BFD_RELOC_RISCV_GPREL12_S,
4350: BFD_RELOC_RISCV_TPREL_HI20,
4351: BFD_RELOC_RISCV_TPREL_LO12_I,
4352: BFD_RELOC_RISCV_TPREL_LO12_S,
4353: BFD_RELOC_RISCV_TPREL_ADD,
4354: BFD_RELOC_RISCV_CALL,
4355: BFD_RELOC_RISCV_CALL_PLT,
4356: BFD_RELOC_RISCV_ADD8,
4357: BFD_RELOC_RISCV_ADD16,
4358: BFD_RELOC_RISCV_ADD32,
4359: BFD_RELOC_RISCV_ADD64,
4360: BFD_RELOC_RISCV_SUB8,
4361: BFD_RELOC_RISCV_SUB16,
4362: BFD_RELOC_RISCV_SUB32,
4363: BFD_RELOC_RISCV_SUB64,
4364: BFD_RELOC_RISCV_GOT_HI20,
4365: BFD_RELOC_RISCV_TLS_GOT_HI20,
4366: BFD_RELOC_RISCV_TLS_GD_HI20,
4367: BFD_RELOC_RISCV_JMP,
4368: BFD_RELOC_RISCV_TLS_DTPMOD32,
4369: BFD_RELOC_RISCV_TLS_DTPREL32,
4370: BFD_RELOC_RISCV_TLS_DTPMOD64,
4371: BFD_RELOC_RISCV_TLS_DTPREL64,
4372: BFD_RELOC_RISCV_TLS_TPREL32,
4373: BFD_RELOC_RISCV_TLS_TPREL64,
4374: BFD_RELOC_RISCV_ALIGN,
4375: BFD_RELOC_RISCV_RVC_BRANCH,
4376: BFD_RELOC_RISCV_RVC_JUMP,
4377: BFD_RELOC_RISCV_RVC_LUI,
4378: BFD_RELOC_RISCV_GPREL_I,
4379: BFD_RELOC_RISCV_GPREL_S,
4380: BFD_RELOC_RISCV_TPREL_I,
4381: BFD_RELOC_RISCV_TPREL_S,
4382: BFD_RELOC_RISCV_RELAX,
4383: BFD_RELOC_RISCV_CFA,
4384: BFD_RELOC_RISCV_SUB6,
4385: BFD_RELOC_RISCV_SET6,
4386: BFD_RELOC_RISCV_SET8,
4387: BFD_RELOC_RISCV_SET16,
4388: BFD_RELOC_RISCV_SET32,
4389: BFD_RELOC_RISCV_32_PCREL,
4390:
1.1 christos 4391: /* Renesas RL78 Relocations. */
4392: BFD_RELOC_RL78_NEG8,
4393: BFD_RELOC_RL78_NEG16,
4394: BFD_RELOC_RL78_NEG24,
4395: BFD_RELOC_RL78_NEG32,
4396: BFD_RELOC_RL78_16_OP,
4397: BFD_RELOC_RL78_24_OP,
4398: BFD_RELOC_RL78_32_OP,
4399: BFD_RELOC_RL78_8U,
4400: BFD_RELOC_RL78_16U,
4401: BFD_RELOC_RL78_24U,
4402: BFD_RELOC_RL78_DIR3U_PCREL,
4403: BFD_RELOC_RL78_DIFF,
4404: BFD_RELOC_RL78_GPRELB,
4405: BFD_RELOC_RL78_GPRELW,
4406: BFD_RELOC_RL78_GPRELL,
4407: BFD_RELOC_RL78_SYM,
4408: BFD_RELOC_RL78_OP_SUBTRACT,
4409: BFD_RELOC_RL78_OP_NEG,
4410: BFD_RELOC_RL78_OP_AND,
4411: BFD_RELOC_RL78_OP_SHRA,
4412: BFD_RELOC_RL78_ABS8,
4413: BFD_RELOC_RL78_ABS16,
4414: BFD_RELOC_RL78_ABS16_REV,
4415: BFD_RELOC_RL78_ABS32,
4416: BFD_RELOC_RL78_ABS32_REV,
4417: BFD_RELOC_RL78_ABS16U,
4418: BFD_RELOC_RL78_ABS16UW,
4419: BFD_RELOC_RL78_ABS16UL,
4420: BFD_RELOC_RL78_RELAX,
4421: BFD_RELOC_RL78_HI16,
4422: BFD_RELOC_RL78_HI8,
4423: BFD_RELOC_RL78_LO16,
1.3 christos 4424: BFD_RELOC_RL78_CODE,
4425: BFD_RELOC_RL78_SADDR,
1.1 christos 4426:
4427: /* Renesas RX Relocations. */
4428: BFD_RELOC_RX_NEG8,
4429: BFD_RELOC_RX_NEG16,
4430: BFD_RELOC_RX_NEG24,
4431: BFD_RELOC_RX_NEG32,
4432: BFD_RELOC_RX_16_OP,
4433: BFD_RELOC_RX_24_OP,
4434: BFD_RELOC_RX_32_OP,
4435: BFD_RELOC_RX_8U,
4436: BFD_RELOC_RX_16U,
4437: BFD_RELOC_RX_24U,
4438: BFD_RELOC_RX_DIR3U_PCREL,
4439: BFD_RELOC_RX_DIFF,
4440: BFD_RELOC_RX_GPRELB,
4441: BFD_RELOC_RX_GPRELW,
4442: BFD_RELOC_RX_GPRELL,
4443: BFD_RELOC_RX_SYM,
4444: BFD_RELOC_RX_OP_SUBTRACT,
4445: BFD_RELOC_RX_OP_NEG,
4446: BFD_RELOC_RX_ABS8,
4447: BFD_RELOC_RX_ABS16,
4448: BFD_RELOC_RX_ABS16_REV,
4449: BFD_RELOC_RX_ABS32,
4450: BFD_RELOC_RX_ABS32_REV,
4451: BFD_RELOC_RX_ABS16U,
4452: BFD_RELOC_RX_ABS16UW,
4453: BFD_RELOC_RX_ABS16UL,
4454: BFD_RELOC_RX_RELAX,
4455:
4456: /* Direct 12 bit. */
4457: BFD_RELOC_390_12,
4458:
4459: /* 12 bit GOT offset. */
4460: BFD_RELOC_390_GOT12,
4461:
4462: /* 32 bit PC relative PLT address. */
4463: BFD_RELOC_390_PLT32,
4464:
4465: /* Copy symbol at runtime. */
4466: BFD_RELOC_390_COPY,
4467:
4468: /* Create GOT entry. */
4469: BFD_RELOC_390_GLOB_DAT,
4470:
4471: /* Create PLT entry. */
4472: BFD_RELOC_390_JMP_SLOT,
4473:
4474: /* Adjust by program base. */
4475: BFD_RELOC_390_RELATIVE,
4476:
4477: /* 32 bit PC relative offset to GOT. */
4478: BFD_RELOC_390_GOTPC,
4479:
4480: /* 16 bit GOT offset. */
4481: BFD_RELOC_390_GOT16,
4482:
1.3 christos 4483: /* PC relative 12 bit shifted by 1. */
4484: BFD_RELOC_390_PC12DBL,
4485:
4486: /* 12 bit PC rel. PLT shifted by 1. */
4487: BFD_RELOC_390_PLT12DBL,
4488:
1.1 christos 4489: /* PC relative 16 bit shifted by 1. */
4490: BFD_RELOC_390_PC16DBL,
4491:
4492: /* 16 bit PC rel. PLT shifted by 1. */
4493: BFD_RELOC_390_PLT16DBL,
4494:
1.3 christos 4495: /* PC relative 24 bit shifted by 1. */
4496: BFD_RELOC_390_PC24DBL,
4497:
4498: /* 24 bit PC rel. PLT shifted by 1. */
4499: BFD_RELOC_390_PLT24DBL,
4500:
1.1 christos 4501: /* PC relative 32 bit shifted by 1. */
4502: BFD_RELOC_390_PC32DBL,
4503:
4504: /* 32 bit PC rel. PLT shifted by 1. */
4505: BFD_RELOC_390_PLT32DBL,
4506:
4507: /* 32 bit PC rel. GOT shifted by 1. */
4508: BFD_RELOC_390_GOTPCDBL,
4509:
4510: /* 64 bit GOT offset. */
4511: BFD_RELOC_390_GOT64,
4512:
4513: /* 64 bit PC relative PLT address. */
4514: BFD_RELOC_390_PLT64,
4515:
4516: /* 32 bit rel. offset to GOT entry. */
4517: BFD_RELOC_390_GOTENT,
4518:
4519: /* 64 bit offset to GOT. */
4520: BFD_RELOC_390_GOTOFF64,
4521:
4522: /* 12-bit offset to symbol-entry within GOT, with PLT handling. */
4523: BFD_RELOC_390_GOTPLT12,
4524:
4525: /* 16-bit offset to symbol-entry within GOT, with PLT handling. */
4526: BFD_RELOC_390_GOTPLT16,
4527:
4528: /* 32-bit offset to symbol-entry within GOT, with PLT handling. */
4529: BFD_RELOC_390_GOTPLT32,
4530:
4531: /* 64-bit offset to symbol-entry within GOT, with PLT handling. */
4532: BFD_RELOC_390_GOTPLT64,
4533:
4534: /* 32-bit rel. offset to symbol-entry within GOT, with PLT handling. */
4535: BFD_RELOC_390_GOTPLTENT,
4536:
4537: /* 16-bit rel. offset from the GOT to a PLT entry. */
4538: BFD_RELOC_390_PLTOFF16,
4539:
4540: /* 32-bit rel. offset from the GOT to a PLT entry. */
4541: BFD_RELOC_390_PLTOFF32,
4542:
4543: /* 64-bit rel. offset from the GOT to a PLT entry. */
4544: BFD_RELOC_390_PLTOFF64,
4545:
4546: /* s390 tls relocations. */
4547: BFD_RELOC_390_TLS_LOAD,
4548: BFD_RELOC_390_TLS_GDCALL,
4549: BFD_RELOC_390_TLS_LDCALL,
4550: BFD_RELOC_390_TLS_GD32,
4551: BFD_RELOC_390_TLS_GD64,
4552: BFD_RELOC_390_TLS_GOTIE12,
4553: BFD_RELOC_390_TLS_GOTIE32,
4554: BFD_RELOC_390_TLS_GOTIE64,
4555: BFD_RELOC_390_TLS_LDM32,
4556: BFD_RELOC_390_TLS_LDM64,
4557: BFD_RELOC_390_TLS_IE32,
4558: BFD_RELOC_390_TLS_IE64,
4559: BFD_RELOC_390_TLS_IEENT,
4560: BFD_RELOC_390_TLS_LE32,
4561: BFD_RELOC_390_TLS_LE64,
4562: BFD_RELOC_390_TLS_LDO32,
4563: BFD_RELOC_390_TLS_LDO64,
4564: BFD_RELOC_390_TLS_DTPMOD,
4565: BFD_RELOC_390_TLS_DTPOFF,
4566: BFD_RELOC_390_TLS_TPOFF,
4567:
4568: /* Long displacement extension. */
4569: BFD_RELOC_390_20,
4570: BFD_RELOC_390_GOT20,
4571: BFD_RELOC_390_GOTPLT20,
4572: BFD_RELOC_390_TLS_GOTIE20,
4573:
4574: /* STT_GNU_IFUNC relocation. */
4575: BFD_RELOC_390_IRELATIVE,
4576:
4577: /* Score relocations
4578: Low 16 bit for load/store */
4579: BFD_RELOC_SCORE_GPREL15,
4580:
4581: /* This is a 24-bit reloc with the right 1 bit assumed to be 0 */
4582: BFD_RELOC_SCORE_DUMMY2,
4583: BFD_RELOC_SCORE_JMP,
4584:
4585: /* This is a 19-bit reloc with the right 1 bit assumed to be 0 */
4586: BFD_RELOC_SCORE_BRANCH,
4587:
4588: /* This is a 32-bit reloc for 48-bit instructions. */
4589: BFD_RELOC_SCORE_IMM30,
4590:
4591: /* This is a 32-bit reloc for 48-bit instructions. */
4592: BFD_RELOC_SCORE_IMM32,
4593:
4594: /* This is a 11-bit reloc with the right 1 bit assumed to be 0 */
4595: BFD_RELOC_SCORE16_JMP,
4596:
4597: /* This is a 8-bit reloc with the right 1 bit assumed to be 0 */
4598: BFD_RELOC_SCORE16_BRANCH,
4599:
4600: /* This is a 9-bit reloc with the right 1 bit assumed to be 0 */
4601: BFD_RELOC_SCORE_BCMP,
4602:
4603: /* Undocumented Score relocs */
4604: BFD_RELOC_SCORE_GOT15,
4605: BFD_RELOC_SCORE_GOT_LO16,
4606: BFD_RELOC_SCORE_CALL15,
4607: BFD_RELOC_SCORE_DUMMY_HI16,
4608:
4609: /* Scenix IP2K - 9-bit register number / data address */
4610: BFD_RELOC_IP2K_FR9,
4611:
4612: /* Scenix IP2K - 4-bit register/data bank number */
4613: BFD_RELOC_IP2K_BANK,
4614:
4615: /* Scenix IP2K - low 13 bits of instruction word address */
4616: BFD_RELOC_IP2K_ADDR16CJP,
4617:
4618: /* Scenix IP2K - high 3 bits of instruction word address */
4619: BFD_RELOC_IP2K_PAGE3,
4620:
4621: /* Scenix IP2K - ext/low/high 8 bits of data address */
4622: BFD_RELOC_IP2K_LO8DATA,
4623: BFD_RELOC_IP2K_HI8DATA,
4624: BFD_RELOC_IP2K_EX8DATA,
4625:
4626: /* Scenix IP2K - low/high 8 bits of instruction word address */
4627: BFD_RELOC_IP2K_LO8INSN,
4628: BFD_RELOC_IP2K_HI8INSN,
4629:
4630: /* Scenix IP2K - even/odd PC modifier to modify snb pcl.0 */
4631: BFD_RELOC_IP2K_PC_SKIP,
4632:
4633: /* Scenix IP2K - 16 bit word address in text section. */
4634: BFD_RELOC_IP2K_TEXT,
4635:
4636: /* Scenix IP2K - 7-bit sp or dp offset */
4637: BFD_RELOC_IP2K_FR_OFFSET,
4638:
4639: /* Scenix VPE4K coprocessor - data/insn-space addressing */
4640: BFD_RELOC_VPE4KMATH_DATA,
4641: BFD_RELOC_VPE4KMATH_INSN,
4642:
4643: /* These two relocations are used by the linker to determine which of
4644: the entries in a C++ virtual function table are actually used. When
4645: the --gc-sections option is given, the linker will zero out the entries
4646: that are not used, so that the code for those functions need not be
4647: included in the output.
4648:
4649: VTABLE_INHERIT is a zero-space relocation used to describe to the
4650: linker the inheritance tree of a C++ virtual function table. The
4651: relocation's symbol should be the parent class' vtable, and the
4652: relocation should be located at the child vtable.
4653:
4654: VTABLE_ENTRY is a zero-space relocation that describes the use of a
4655: virtual function table entry. The reloc's symbol should refer to the
4656: table of the class mentioned in the code. Off of that base, an offset
4657: describes the entry that is being used. For Rela hosts, this offset
4658: is stored in the reloc's addend. For Rel hosts, we are forced to put
4659: this offset in the reloc's section offset. */
4660: BFD_RELOC_VTABLE_INHERIT,
4661: BFD_RELOC_VTABLE_ENTRY,
4662:
4663: /* Intel IA64 Relocations. */
4664: BFD_RELOC_IA64_IMM14,
4665: BFD_RELOC_IA64_IMM22,
4666: BFD_RELOC_IA64_IMM64,
4667: BFD_RELOC_IA64_DIR32MSB,
4668: BFD_RELOC_IA64_DIR32LSB,
4669: BFD_RELOC_IA64_DIR64MSB,
4670: BFD_RELOC_IA64_DIR64LSB,
4671: BFD_RELOC_IA64_GPREL22,
4672: BFD_RELOC_IA64_GPREL64I,
4673: BFD_RELOC_IA64_GPREL32MSB,
4674: BFD_RELOC_IA64_GPREL32LSB,
4675: BFD_RELOC_IA64_GPREL64MSB,
4676: BFD_RELOC_IA64_GPREL64LSB,
4677: BFD_RELOC_IA64_LTOFF22,
4678: BFD_RELOC_IA64_LTOFF64I,
4679: BFD_RELOC_IA64_PLTOFF22,
4680: BFD_RELOC_IA64_PLTOFF64I,
4681: BFD_RELOC_IA64_PLTOFF64MSB,
4682: BFD_RELOC_IA64_PLTOFF64LSB,
4683: BFD_RELOC_IA64_FPTR64I,
4684: BFD_RELOC_IA64_FPTR32MSB,
4685: BFD_RELOC_IA64_FPTR32LSB,
4686: BFD_RELOC_IA64_FPTR64MSB,
4687: BFD_RELOC_IA64_FPTR64LSB,
4688: BFD_RELOC_IA64_PCREL21B,
4689: BFD_RELOC_IA64_PCREL21BI,
4690: BFD_RELOC_IA64_PCREL21M,
4691: BFD_RELOC_IA64_PCREL21F,
4692: BFD_RELOC_IA64_PCREL22,
4693: BFD_RELOC_IA64_PCREL60B,
4694: BFD_RELOC_IA64_PCREL64I,
4695: BFD_RELOC_IA64_PCREL32MSB,
4696: BFD_RELOC_IA64_PCREL32LSB,
4697: BFD_RELOC_IA64_PCREL64MSB,
4698: BFD_RELOC_IA64_PCREL64LSB,
4699: BFD_RELOC_IA64_LTOFF_FPTR22,
4700: BFD_RELOC_IA64_LTOFF_FPTR64I,
4701: BFD_RELOC_IA64_LTOFF_FPTR32MSB,
4702: BFD_RELOC_IA64_LTOFF_FPTR32LSB,
4703: BFD_RELOC_IA64_LTOFF_FPTR64MSB,
4704: BFD_RELOC_IA64_LTOFF_FPTR64LSB,
4705: BFD_RELOC_IA64_SEGREL32MSB,
4706: BFD_RELOC_IA64_SEGREL32LSB,
4707: BFD_RELOC_IA64_SEGREL64MSB,
4708: BFD_RELOC_IA64_SEGREL64LSB,
4709: BFD_RELOC_IA64_SECREL32MSB,
4710: BFD_RELOC_IA64_SECREL32LSB,
4711: BFD_RELOC_IA64_SECREL64MSB,
4712: BFD_RELOC_IA64_SECREL64LSB,
4713: BFD_RELOC_IA64_REL32MSB,
4714: BFD_RELOC_IA64_REL32LSB,
4715: BFD_RELOC_IA64_REL64MSB,
4716: BFD_RELOC_IA64_REL64LSB,
4717: BFD_RELOC_IA64_LTV32MSB,
4718: BFD_RELOC_IA64_LTV32LSB,
4719: BFD_RELOC_IA64_LTV64MSB,
4720: BFD_RELOC_IA64_LTV64LSB,
4721: BFD_RELOC_IA64_IPLTMSB,
4722: BFD_RELOC_IA64_IPLTLSB,
4723: BFD_RELOC_IA64_COPY,
4724: BFD_RELOC_IA64_LTOFF22X,
4725: BFD_RELOC_IA64_LDXMOV,
4726: BFD_RELOC_IA64_TPREL14,
4727: BFD_RELOC_IA64_TPREL22,
4728: BFD_RELOC_IA64_TPREL64I,
4729: BFD_RELOC_IA64_TPREL64MSB,
4730: BFD_RELOC_IA64_TPREL64LSB,
4731: BFD_RELOC_IA64_LTOFF_TPREL22,
4732: BFD_RELOC_IA64_DTPMOD64MSB,
4733: BFD_RELOC_IA64_DTPMOD64LSB,
4734: BFD_RELOC_IA64_LTOFF_DTPMOD22,
4735: BFD_RELOC_IA64_DTPREL14,
4736: BFD_RELOC_IA64_DTPREL22,
4737: BFD_RELOC_IA64_DTPREL64I,
4738: BFD_RELOC_IA64_DTPREL32MSB,
4739: BFD_RELOC_IA64_DTPREL32LSB,
4740: BFD_RELOC_IA64_DTPREL64MSB,
4741: BFD_RELOC_IA64_DTPREL64LSB,
4742: BFD_RELOC_IA64_LTOFF_DTPREL22,
4743:
4744: /* Motorola 68HC11 reloc.
4745: This is the 8 bit high part of an absolute address. */
4746: BFD_RELOC_M68HC11_HI8,
4747:
4748: /* Motorola 68HC11 reloc.
4749: This is the 8 bit low part of an absolute address. */
4750: BFD_RELOC_M68HC11_LO8,
4751:
4752: /* Motorola 68HC11 reloc.
4753: This is the 3 bit of a value. */
4754: BFD_RELOC_M68HC11_3B,
4755:
4756: /* Motorola 68HC11 reloc.
4757: This reloc marks the beginning of a jump/call instruction.
4758: It is used for linker relaxation to correctly identify beginning
4759: of instruction and change some branches to use PC-relative
4760: addressing mode. */
4761: BFD_RELOC_M68HC11_RL_JUMP,
4762:
4763: /* Motorola 68HC11 reloc.
4764: This reloc marks a group of several instructions that gcc generates
4765: and for which the linker relaxation pass can modify and/or remove
4766: some of them. */
4767: BFD_RELOC_M68HC11_RL_GROUP,
4768:
4769: /* Motorola 68HC11 reloc.
4770: This is the 16-bit lower part of an address. It is used for 'call'
4771: instruction to specify the symbol address without any special
4772: transformation (due to memory bank window). */
4773: BFD_RELOC_M68HC11_LO16,
4774:
4775: /* Motorola 68HC11 reloc.
4776: This is a 8-bit reloc that specifies the page number of an address.
4777: It is used by 'call' instruction to specify the page number of
4778: the symbol. */
4779: BFD_RELOC_M68HC11_PAGE,
4780:
4781: /* Motorola 68HC11 reloc.
4782: This is a 24-bit reloc that represents the address with a 16-bit
4783: value and a 8-bit page number. The symbol address is transformed
4784: to follow the 16K memory bank of 68HC12 (seen as mapped in the window). */
4785: BFD_RELOC_M68HC11_24,
4786:
4787: /* Motorola 68HC12 reloc.
4788: This is the 5 bits of a value. */
4789: BFD_RELOC_M68HC12_5B,
4790:
4791: /* Freescale XGATE reloc.
4792: This reloc marks the beginning of a bra/jal instruction. */
4793: BFD_RELOC_XGATE_RL_JUMP,
4794:
4795: /* Freescale XGATE reloc.
4796: This reloc marks a group of several instructions that gcc generates
4797: and for which the linker relaxation pass can modify and/or remove
4798: some of them. */
4799: BFD_RELOC_XGATE_RL_GROUP,
4800:
4801: /* Freescale XGATE reloc.
4802: This is the 16-bit lower part of an address. It is used for the '16-bit'
4803: instructions. */
4804: BFD_RELOC_XGATE_LO16,
4805:
4806: /* Freescale XGATE reloc. */
4807: BFD_RELOC_XGATE_GPAGE,
4808:
4809: /* Freescale XGATE reloc. */
4810: BFD_RELOC_XGATE_24,
4811:
4812: /* Freescale XGATE reloc.
4813: This is a 9-bit pc-relative reloc. */
4814: BFD_RELOC_XGATE_PCREL_9,
4815:
4816: /* Freescale XGATE reloc.
4817: This is a 10-bit pc-relative reloc. */
4818: BFD_RELOC_XGATE_PCREL_10,
4819:
4820: /* Freescale XGATE reloc.
4821: This is the 16-bit lower part of an address. It is used for the '16-bit'
4822: instructions. */
4823: BFD_RELOC_XGATE_IMM8_LO,
4824:
4825: /* Freescale XGATE reloc.
4826: This is the 16-bit higher part of an address. It is used for the '16-bit'
4827: instructions. */
4828: BFD_RELOC_XGATE_IMM8_HI,
4829:
4830: /* Freescale XGATE reloc.
4831: This is a 3-bit pc-relative reloc. */
4832: BFD_RELOC_XGATE_IMM3,
4833:
4834: /* Freescale XGATE reloc.
4835: This is a 4-bit pc-relative reloc. */
4836: BFD_RELOC_XGATE_IMM4,
4837:
4838: /* Freescale XGATE reloc.
4839: This is a 5-bit pc-relative reloc. */
4840: BFD_RELOC_XGATE_IMM5,
4841:
4842: /* Motorola 68HC12 reloc.
4843: This is the 9 bits of a value. */
4844: BFD_RELOC_M68HC12_9B,
4845:
4846: /* Motorola 68HC12 reloc.
4847: This is the 16 bits of a value. */
4848: BFD_RELOC_M68HC12_16B,
4849:
4850: /* Motorola 68HC12/XGATE reloc.
4851: This is a PCREL9 branch. */
4852: BFD_RELOC_M68HC12_9_PCREL,
4853:
4854: /* Motorola 68HC12/XGATE reloc.
4855: This is a PCREL10 branch. */
4856: BFD_RELOC_M68HC12_10_PCREL,
4857:
4858: /* Motorola 68HC12/XGATE reloc.
4859: This is the 8 bit low part of an absolute address and immediately precedes
4860: a matching HI8XG part. */
4861: BFD_RELOC_M68HC12_LO8XG,
4862:
4863: /* Motorola 68HC12/XGATE reloc.
4864: This is the 8 bit high part of an absolute address and immediately follows
4865: a matching LO8XG part. */
4866: BFD_RELOC_M68HC12_HI8XG,
4867:
1.6 christos 4868: /* Freescale S12Z reloc.
4869: This is a 15 bit relative address. If the most significant bits are all zero
4870: then it may be truncated to 8 bits. */
4871: BFD_RELOC_S12Z_15_PCREL,
4872:
1.1 christos 4873: /* NS CR16 Relocations. */
4874: BFD_RELOC_CR16_NUM8,
4875: BFD_RELOC_CR16_NUM16,
4876: BFD_RELOC_CR16_NUM32,
4877: BFD_RELOC_CR16_NUM32a,
4878: BFD_RELOC_CR16_REGREL0,
4879: BFD_RELOC_CR16_REGREL4,
4880: BFD_RELOC_CR16_REGREL4a,
4881: BFD_RELOC_CR16_REGREL14,
4882: BFD_RELOC_CR16_REGREL14a,
4883: BFD_RELOC_CR16_REGREL16,
4884: BFD_RELOC_CR16_REGREL20,
4885: BFD_RELOC_CR16_REGREL20a,
4886: BFD_RELOC_CR16_ABS20,
4887: BFD_RELOC_CR16_ABS24,
4888: BFD_RELOC_CR16_IMM4,
4889: BFD_RELOC_CR16_IMM8,
4890: BFD_RELOC_CR16_IMM16,
4891: BFD_RELOC_CR16_IMM20,
4892: BFD_RELOC_CR16_IMM24,
4893: BFD_RELOC_CR16_IMM32,
4894: BFD_RELOC_CR16_IMM32a,
4895: BFD_RELOC_CR16_DISP4,
4896: BFD_RELOC_CR16_DISP8,
4897: BFD_RELOC_CR16_DISP16,
4898: BFD_RELOC_CR16_DISP20,
4899: BFD_RELOC_CR16_DISP24,
4900: BFD_RELOC_CR16_DISP24a,
4901: BFD_RELOC_CR16_SWITCH8,
4902: BFD_RELOC_CR16_SWITCH16,
4903: BFD_RELOC_CR16_SWITCH32,
4904: BFD_RELOC_CR16_GOT_REGREL20,
4905: BFD_RELOC_CR16_GOTC_REGREL20,
4906: BFD_RELOC_CR16_GLOB_DAT,
4907:
4908: /* NS CRX Relocations. */
4909: BFD_RELOC_CRX_REL4,
4910: BFD_RELOC_CRX_REL8,
4911: BFD_RELOC_CRX_REL8_CMP,
4912: BFD_RELOC_CRX_REL16,
4913: BFD_RELOC_CRX_REL24,
4914: BFD_RELOC_CRX_REL32,
4915: BFD_RELOC_CRX_REGREL12,
4916: BFD_RELOC_CRX_REGREL22,
4917: BFD_RELOC_CRX_REGREL28,
4918: BFD_RELOC_CRX_REGREL32,
4919: BFD_RELOC_CRX_ABS16,
4920: BFD_RELOC_CRX_ABS32,
4921: BFD_RELOC_CRX_NUM8,
4922: BFD_RELOC_CRX_NUM16,
4923: BFD_RELOC_CRX_NUM32,
4924: BFD_RELOC_CRX_IMM16,
4925: BFD_RELOC_CRX_IMM32,
4926: BFD_RELOC_CRX_SWITCH8,
4927: BFD_RELOC_CRX_SWITCH16,
4928: BFD_RELOC_CRX_SWITCH32,
4929:
4930: /* These relocs are only used within the CRIS assembler. They are not
4931: (at present) written to any object files. */
4932: BFD_RELOC_CRIS_BDISP8,
4933: BFD_RELOC_CRIS_UNSIGNED_5,
4934: BFD_RELOC_CRIS_SIGNED_6,
4935: BFD_RELOC_CRIS_UNSIGNED_6,
4936: BFD_RELOC_CRIS_SIGNED_8,
4937: BFD_RELOC_CRIS_UNSIGNED_8,
4938: BFD_RELOC_CRIS_SIGNED_16,
4939: BFD_RELOC_CRIS_UNSIGNED_16,
4940: BFD_RELOC_CRIS_LAPCQ_OFFSET,
4941: BFD_RELOC_CRIS_UNSIGNED_4,
4942:
4943: /* Relocs used in ELF shared libraries for CRIS. */
4944: BFD_RELOC_CRIS_COPY,
4945: BFD_RELOC_CRIS_GLOB_DAT,
4946: BFD_RELOC_CRIS_JUMP_SLOT,
4947: BFD_RELOC_CRIS_RELATIVE,
4948:
4949: /* 32-bit offset to symbol-entry within GOT. */
4950: BFD_RELOC_CRIS_32_GOT,
4951:
4952: /* 16-bit offset to symbol-entry within GOT. */
4953: BFD_RELOC_CRIS_16_GOT,
4954:
4955: /* 32-bit offset to symbol-entry within GOT, with PLT handling. */
4956: BFD_RELOC_CRIS_32_GOTPLT,
4957:
4958: /* 16-bit offset to symbol-entry within GOT, with PLT handling. */
4959: BFD_RELOC_CRIS_16_GOTPLT,
4960:
4961: /* 32-bit offset to symbol, relative to GOT. */
4962: BFD_RELOC_CRIS_32_GOTREL,
4963:
4964: /* 32-bit offset to symbol with PLT entry, relative to GOT. */
4965: BFD_RELOC_CRIS_32_PLT_GOTREL,
4966:
4967: /* 32-bit offset to symbol with PLT entry, relative to this relocation. */
4968: BFD_RELOC_CRIS_32_PLT_PCREL,
4969:
4970: /* Relocs used in TLS code for CRIS. */
4971: BFD_RELOC_CRIS_32_GOT_GD,
4972: BFD_RELOC_CRIS_16_GOT_GD,
4973: BFD_RELOC_CRIS_32_GD,
4974: BFD_RELOC_CRIS_DTP,
4975: BFD_RELOC_CRIS_32_DTPREL,
4976: BFD_RELOC_CRIS_16_DTPREL,
4977: BFD_RELOC_CRIS_32_GOT_TPREL,
4978: BFD_RELOC_CRIS_16_GOT_TPREL,
4979: BFD_RELOC_CRIS_32_TPREL,
4980: BFD_RELOC_CRIS_16_TPREL,
4981: BFD_RELOC_CRIS_DTPMOD,
4982: BFD_RELOC_CRIS_32_IE,
4983:
1.3 christos 4984: /* OpenRISC 1000 Relocations. */
4985: BFD_RELOC_OR1K_REL_26,
1.7 ! christos 4986: BFD_RELOC_OR1K_SLO16,
! 4987: BFD_RELOC_OR1K_PCREL_PG21,
! 4988: BFD_RELOC_OR1K_LO13,
! 4989: BFD_RELOC_OR1K_SLO13,
1.3 christos 4990: BFD_RELOC_OR1K_GOTPC_HI16,
4991: BFD_RELOC_OR1K_GOTPC_LO16,
4992: BFD_RELOC_OR1K_GOT16,
1.7 ! christos 4993: BFD_RELOC_OR1K_GOT_PG21,
! 4994: BFD_RELOC_OR1K_GOT_LO13,
1.3 christos 4995: BFD_RELOC_OR1K_PLT26,
1.7 ! christos 4996: BFD_RELOC_OR1K_PLTA26,
! 4997: BFD_RELOC_OR1K_GOTOFF_SLO16,
1.3 christos 4998: BFD_RELOC_OR1K_COPY,
4999: BFD_RELOC_OR1K_GLOB_DAT,
5000: BFD_RELOC_OR1K_JMP_SLOT,
5001: BFD_RELOC_OR1K_RELATIVE,
5002: BFD_RELOC_OR1K_TLS_GD_HI16,
5003: BFD_RELOC_OR1K_TLS_GD_LO16,
1.7 ! christos 5004: BFD_RELOC_OR1K_TLS_GD_PG21,
! 5005: BFD_RELOC_OR1K_TLS_GD_LO13,
1.3 christos 5006: BFD_RELOC_OR1K_TLS_LDM_HI16,
5007: BFD_RELOC_OR1K_TLS_LDM_LO16,
1.7 ! christos 5008: BFD_RELOC_OR1K_TLS_LDM_PG21,
! 5009: BFD_RELOC_OR1K_TLS_LDM_LO13,
1.3 christos 5010: BFD_RELOC_OR1K_TLS_LDO_HI16,
5011: BFD_RELOC_OR1K_TLS_LDO_LO16,
5012: BFD_RELOC_OR1K_TLS_IE_HI16,
1.7 ! christos 5013: BFD_RELOC_OR1K_TLS_IE_AHI16,
1.3 christos 5014: BFD_RELOC_OR1K_TLS_IE_LO16,
1.7 ! christos 5015: BFD_RELOC_OR1K_TLS_IE_PG21,
! 5016: BFD_RELOC_OR1K_TLS_IE_LO13,
1.3 christos 5017: BFD_RELOC_OR1K_TLS_LE_HI16,
1.7 ! christos 5018: BFD_RELOC_OR1K_TLS_LE_AHI16,
1.3 christos 5019: BFD_RELOC_OR1K_TLS_LE_LO16,
1.7 ! christos 5020: BFD_RELOC_OR1K_TLS_LE_SLO16,
1.3 christos 5021: BFD_RELOC_OR1K_TLS_TPOFF,
5022: BFD_RELOC_OR1K_TLS_DTPOFF,
5023: BFD_RELOC_OR1K_TLS_DTPMOD,
5024:
1.1 christos 5025: /* H8 elf Relocations. */
5026: BFD_RELOC_H8_DIR16A8,
5027: BFD_RELOC_H8_DIR16R8,
5028: BFD_RELOC_H8_DIR24A8,
5029: BFD_RELOC_H8_DIR24R8,
5030: BFD_RELOC_H8_DIR32A16,
1.3 christos 5031: BFD_RELOC_H8_DISP32A16,
1.1 christos 5032:
5033: /* Sony Xstormy16 Relocations. */
5034: BFD_RELOC_XSTORMY16_REL_12,
5035: BFD_RELOC_XSTORMY16_12,
5036: BFD_RELOC_XSTORMY16_24,
5037: BFD_RELOC_XSTORMY16_FPTR16,
5038:
5039: /* Self-describing complex relocations. */
5040: BFD_RELOC_RELC,
5041:
5042:
5043: /* Infineon Relocations. */
5044: BFD_RELOC_XC16X_PAG,
5045: BFD_RELOC_XC16X_POF,
5046: BFD_RELOC_XC16X_SEG,
5047: BFD_RELOC_XC16X_SOF,
5048:
5049: /* Relocations used by VAX ELF. */
5050: BFD_RELOC_VAX_GLOB_DAT,
5051: BFD_RELOC_VAX_JMP_SLOT,
5052: BFD_RELOC_VAX_RELATIVE,
5053:
5054: /* Morpho MT - 16 bit immediate relocation. */
5055: BFD_RELOC_MT_PC16,
5056:
5057: /* Morpho MT - Hi 16 bits of an address. */
5058: BFD_RELOC_MT_HI16,
5059:
5060: /* Morpho MT - Low 16 bits of an address. */
5061: BFD_RELOC_MT_LO16,
5062:
5063: /* Morpho MT - Used to tell the linker which vtable entries are used. */
5064: BFD_RELOC_MT_GNU_VTINHERIT,
5065:
5066: /* Morpho MT - Used to tell the linker which vtable entries are used. */
5067: BFD_RELOC_MT_GNU_VTENTRY,
5068:
5069: /* Morpho MT - 8 bit immediate relocation. */
5070: BFD_RELOC_MT_PCINSN8,
5071:
5072: /* msp430 specific relocation codes */
5073: BFD_RELOC_MSP430_10_PCREL,
5074: BFD_RELOC_MSP430_16_PCREL,
5075: BFD_RELOC_MSP430_16,
5076: BFD_RELOC_MSP430_16_PCREL_BYTE,
5077: BFD_RELOC_MSP430_16_BYTE,
5078: BFD_RELOC_MSP430_2X_PCREL,
5079: BFD_RELOC_MSP430_RL_PCREL,
1.3 christos 5080: BFD_RELOC_MSP430_ABS8,
5081: BFD_RELOC_MSP430X_PCR20_EXT_SRC,
5082: BFD_RELOC_MSP430X_PCR20_EXT_DST,
5083: BFD_RELOC_MSP430X_PCR20_EXT_ODST,
5084: BFD_RELOC_MSP430X_ABS20_EXT_SRC,
5085: BFD_RELOC_MSP430X_ABS20_EXT_DST,
5086: BFD_RELOC_MSP430X_ABS20_EXT_ODST,
5087: BFD_RELOC_MSP430X_ABS20_ADR_SRC,
5088: BFD_RELOC_MSP430X_ABS20_ADR_DST,
5089: BFD_RELOC_MSP430X_PCR16,
5090: BFD_RELOC_MSP430X_PCR20_CALL,
5091: BFD_RELOC_MSP430X_ABS16,
5092: BFD_RELOC_MSP430_ABS_HI16,
5093: BFD_RELOC_MSP430_PREL31,
5094: BFD_RELOC_MSP430_SYM_DIFF,
5095:
5096: /* Relocations used by the Altera Nios II core. */
5097: BFD_RELOC_NIOS2_S16,
5098: BFD_RELOC_NIOS2_U16,
5099: BFD_RELOC_NIOS2_CALL26,
5100: BFD_RELOC_NIOS2_IMM5,
5101: BFD_RELOC_NIOS2_CACHE_OPX,
5102: BFD_RELOC_NIOS2_IMM6,
5103: BFD_RELOC_NIOS2_IMM8,
5104: BFD_RELOC_NIOS2_HI16,
5105: BFD_RELOC_NIOS2_LO16,
5106: BFD_RELOC_NIOS2_HIADJ16,
5107: BFD_RELOC_NIOS2_GPREL,
5108: BFD_RELOC_NIOS2_UJMP,
5109: BFD_RELOC_NIOS2_CJMP,
5110: BFD_RELOC_NIOS2_CALLR,
5111: BFD_RELOC_NIOS2_ALIGN,
5112: BFD_RELOC_NIOS2_GOT16,
5113: BFD_RELOC_NIOS2_CALL16,
5114: BFD_RELOC_NIOS2_GOTOFF_LO,
5115: BFD_RELOC_NIOS2_GOTOFF_HA,
5116: BFD_RELOC_NIOS2_PCREL_LO,
5117: BFD_RELOC_NIOS2_PCREL_HA,
5118: BFD_RELOC_NIOS2_TLS_GD16,
5119: BFD_RELOC_NIOS2_TLS_LDM16,
5120: BFD_RELOC_NIOS2_TLS_LDO16,
5121: BFD_RELOC_NIOS2_TLS_IE16,
5122: BFD_RELOC_NIOS2_TLS_LE16,
5123: BFD_RELOC_NIOS2_TLS_DTPMOD,
5124: BFD_RELOC_NIOS2_TLS_DTPREL,
5125: BFD_RELOC_NIOS2_TLS_TPREL,
5126: BFD_RELOC_NIOS2_COPY,
5127: BFD_RELOC_NIOS2_GLOB_DAT,
5128: BFD_RELOC_NIOS2_JUMP_SLOT,
5129: BFD_RELOC_NIOS2_RELATIVE,
5130: BFD_RELOC_NIOS2_GOTOFF,
5131: BFD_RELOC_NIOS2_CALL26_NOAT,
5132: BFD_RELOC_NIOS2_GOT_LO,
5133: BFD_RELOC_NIOS2_GOT_HA,
5134: BFD_RELOC_NIOS2_CALL_LO,
5135: BFD_RELOC_NIOS2_CALL_HA,
5136: BFD_RELOC_NIOS2_R2_S12,
5137: BFD_RELOC_NIOS2_R2_I10_1_PCREL,
5138: BFD_RELOC_NIOS2_R2_T1I7_1_PCREL,
5139: BFD_RELOC_NIOS2_R2_T1I7_2,
5140: BFD_RELOC_NIOS2_R2_T2I4,
5141: BFD_RELOC_NIOS2_R2_T2I4_1,
5142: BFD_RELOC_NIOS2_R2_T2I4_2,
5143: BFD_RELOC_NIOS2_R2_X1I7_2,
5144: BFD_RELOC_NIOS2_R2_X2L5,
5145: BFD_RELOC_NIOS2_R2_F1I5_2,
5146: BFD_RELOC_NIOS2_R2_L5I4X1,
5147: BFD_RELOC_NIOS2_R2_T1X1I6,
5148: BFD_RELOC_NIOS2_R2_T1X1I6_2,
1.1 christos 5149:
1.6 christos 5150: /* PRU LDI 16-bit unsigned data-memory relocation. */
5151: BFD_RELOC_PRU_U16,
5152:
5153: /* PRU LDI 16-bit unsigned instruction-memory relocation. */
5154: BFD_RELOC_PRU_U16_PMEMIMM,
5155:
5156: /* PRU relocation for two consecutive LDI load instructions that load a
5157: 32 bit value into a register. If the higher bits are all zero, then
5158: the second instruction may be relaxed. */
5159: BFD_RELOC_PRU_LDI32,
5160:
5161: /* PRU QBBx 10-bit signed PC-relative relocation. */
5162: BFD_RELOC_PRU_S10_PCREL,
5163:
5164: /* PRU 8-bit unsigned relocation used for the LOOP instruction. */
5165: BFD_RELOC_PRU_U8_PCREL,
5166:
5167: /* PRU Program Memory relocations. Used to convert from byte addressing to
5168: 32-bit word addressing. */
5169: BFD_RELOC_PRU_32_PMEM,
5170: BFD_RELOC_PRU_16_PMEM,
5171:
5172: /* PRU relocations to mark the difference of two local symbols.
5173: These are only needed to support linker relaxation and can be ignored
5174: when not relaxing. The field is set to the value of the difference
5175: assuming no relaxation. The relocation encodes the position of the
5176: second symbol so the linker can determine whether to adjust the field
5177: value. The PMEM variants encode the word difference, instead of byte
5178: difference between symbols. */
5179: BFD_RELOC_PRU_GNU_DIFF8,
5180: BFD_RELOC_PRU_GNU_DIFF16,
5181: BFD_RELOC_PRU_GNU_DIFF32,
5182: BFD_RELOC_PRU_GNU_DIFF16_PMEM,
5183: BFD_RELOC_PRU_GNU_DIFF32_PMEM,
5184:
1.1 christos 5185: /* IQ2000 Relocations. */
5186: BFD_RELOC_IQ2000_OFFSET_16,
5187: BFD_RELOC_IQ2000_OFFSET_21,
5188: BFD_RELOC_IQ2000_UHI16,
5189:
5190: /* Special Xtensa relocation used only by PLT entries in ELF shared
5191: objects to indicate that the runtime linker should set the value
5192: to one of its own internal functions or data structures. */
5193: BFD_RELOC_XTENSA_RTLD,
5194:
5195: /* Xtensa relocations for ELF shared objects. */
5196: BFD_RELOC_XTENSA_GLOB_DAT,
5197: BFD_RELOC_XTENSA_JMP_SLOT,
5198: BFD_RELOC_XTENSA_RELATIVE,
5199:
5200: /* Xtensa relocation used in ELF object files for symbols that may require
5201: PLT entries. Otherwise, this is just a generic 32-bit relocation. */
5202: BFD_RELOC_XTENSA_PLT,
5203:
5204: /* Xtensa relocations to mark the difference of two local symbols.
5205: These are only needed to support linker relaxation and can be ignored
5206: when not relaxing. The field is set to the value of the difference
5207: assuming no relaxation. The relocation encodes the position of the
5208: first symbol so the linker can determine whether to adjust the field
5209: value. */
5210: BFD_RELOC_XTENSA_DIFF8,
5211: BFD_RELOC_XTENSA_DIFF16,
5212: BFD_RELOC_XTENSA_DIFF32,
5213:
5214: /* Generic Xtensa relocations for instruction operands. Only the slot
5215: number is encoded in the relocation. The relocation applies to the
5216: last PC-relative immediate operand, or if there are no PC-relative
5217: immediates, to the last immediate operand. */
5218: BFD_RELOC_XTENSA_SLOT0_OP,
5219: BFD_RELOC_XTENSA_SLOT1_OP,
5220: BFD_RELOC_XTENSA_SLOT2_OP,
5221: BFD_RELOC_XTENSA_SLOT3_OP,
5222: BFD_RELOC_XTENSA_SLOT4_OP,
5223: BFD_RELOC_XTENSA_SLOT5_OP,
5224: BFD_RELOC_XTENSA_SLOT6_OP,
5225: BFD_RELOC_XTENSA_SLOT7_OP,
5226: BFD_RELOC_XTENSA_SLOT8_OP,
5227: BFD_RELOC_XTENSA_SLOT9_OP,
5228: BFD_RELOC_XTENSA_SLOT10_OP,
5229: BFD_RELOC_XTENSA_SLOT11_OP,
5230: BFD_RELOC_XTENSA_SLOT12_OP,
5231: BFD_RELOC_XTENSA_SLOT13_OP,
5232: BFD_RELOC_XTENSA_SLOT14_OP,
5233:
5234: /* Alternate Xtensa relocations. Only the slot is encoded in the
5235: relocation. The meaning of these relocations is opcode-specific. */
5236: BFD_RELOC_XTENSA_SLOT0_ALT,
5237: BFD_RELOC_XTENSA_SLOT1_ALT,
5238: BFD_RELOC_XTENSA_SLOT2_ALT,
5239: BFD_RELOC_XTENSA_SLOT3_ALT,
5240: BFD_RELOC_XTENSA_SLOT4_ALT,
5241: BFD_RELOC_XTENSA_SLOT5_ALT,
5242: BFD_RELOC_XTENSA_SLOT6_ALT,
5243: BFD_RELOC_XTENSA_SLOT7_ALT,
5244: BFD_RELOC_XTENSA_SLOT8_ALT,
5245: BFD_RELOC_XTENSA_SLOT9_ALT,
5246: BFD_RELOC_XTENSA_SLOT10_ALT,
5247: BFD_RELOC_XTENSA_SLOT11_ALT,
5248: BFD_RELOC_XTENSA_SLOT12_ALT,
5249: BFD_RELOC_XTENSA_SLOT13_ALT,
5250: BFD_RELOC_XTENSA_SLOT14_ALT,
5251:
5252: /* Xtensa relocations for backward compatibility. These have all been
5253: replaced by BFD_RELOC_XTENSA_SLOT0_OP. */
5254: BFD_RELOC_XTENSA_OP0,
5255: BFD_RELOC_XTENSA_OP1,
5256: BFD_RELOC_XTENSA_OP2,
5257:
5258: /* Xtensa relocation to mark that the assembler expanded the
5259: instructions from an original target. The expansion size is
5260: encoded in the reloc size. */
5261: BFD_RELOC_XTENSA_ASM_EXPAND,
5262:
5263: /* Xtensa relocation to mark that the linker should simplify
5264: assembler-expanded instructions. This is commonly used
5265: internally by the linker after analysis of a
5266: BFD_RELOC_XTENSA_ASM_EXPAND. */
5267: BFD_RELOC_XTENSA_ASM_SIMPLIFY,
5268:
5269: /* Xtensa TLS relocations. */
5270: BFD_RELOC_XTENSA_TLSDESC_FN,
5271: BFD_RELOC_XTENSA_TLSDESC_ARG,
5272: BFD_RELOC_XTENSA_TLS_DTPOFF,
5273: BFD_RELOC_XTENSA_TLS_TPOFF,
5274: BFD_RELOC_XTENSA_TLS_FUNC,
5275: BFD_RELOC_XTENSA_TLS_ARG,
5276: BFD_RELOC_XTENSA_TLS_CALL,
5277:
5278: /* 8 bit signed offset in (ix+d) or (iy+d). */
5279: BFD_RELOC_Z80_DISP8,
5280:
1.7 ! christos 5281: /* First 8 bits of multibyte (32, 24 or 16 bit) value. */
! 5282: BFD_RELOC_Z80_BYTE0,
! 5283:
! 5284: /* Second 8 bits of multibyte (32, 24 or 16 bit) value. */
! 5285: BFD_RELOC_Z80_BYTE1,
! 5286:
! 5287: /* Third 8 bits of multibyte (32 or 24 bit) value. */
! 5288: BFD_RELOC_Z80_BYTE2,
! 5289:
! 5290: /* Fourth 8 bits of multibyte (32 bit) value. */
! 5291: BFD_RELOC_Z80_BYTE3,
! 5292:
! 5293: /* Lowest 16 bits of multibyte (32 or 24 bit) value. */
! 5294: BFD_RELOC_Z80_WORD0,
! 5295:
! 5296: /* Highest 16 bits of multibyte (32 or 24 bit) value. */
! 5297: BFD_RELOC_Z80_WORD1,
! 5298:
1.1 christos 5299: /* DJNZ offset. */
5300: BFD_RELOC_Z8K_DISP7,
5301:
5302: /* CALR offset. */
5303: BFD_RELOC_Z8K_CALLR,
5304:
5305: /* 4 bit value. */
5306: BFD_RELOC_Z8K_IMM4L,
5307:
5308: /* Lattice Mico32 relocations. */
5309: BFD_RELOC_LM32_CALL,
5310: BFD_RELOC_LM32_BRANCH,
5311: BFD_RELOC_LM32_16_GOT,
5312: BFD_RELOC_LM32_GOTOFF_HI16,
5313: BFD_RELOC_LM32_GOTOFF_LO16,
5314: BFD_RELOC_LM32_COPY,
5315: BFD_RELOC_LM32_GLOB_DAT,
5316: BFD_RELOC_LM32_JMP_SLOT,
5317: BFD_RELOC_LM32_RELATIVE,
5318:
5319: /* Difference between two section addreses. Must be followed by a
5320: BFD_RELOC_MACH_O_PAIR. */
5321: BFD_RELOC_MACH_O_SECTDIFF,
5322:
5323: /* Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol. */
5324: BFD_RELOC_MACH_O_LOCAL_SECTDIFF,
5325:
5326: /* Pair of relocation. Contains the first symbol. */
5327: BFD_RELOC_MACH_O_PAIR,
5328:
1.5 christos 5329: /* Symbol will be substracted. Must be followed by a BFD_RELOC_32. */
5330: BFD_RELOC_MACH_O_SUBTRACTOR32,
5331:
5332: /* Symbol will be substracted. Must be followed by a BFD_RELOC_64. */
5333: BFD_RELOC_MACH_O_SUBTRACTOR64,
5334:
1.1 christos 5335: /* PCREL relocations. They are marked as branch to create PLT entry if
5336: required. */
5337: BFD_RELOC_MACH_O_X86_64_BRANCH32,
5338: BFD_RELOC_MACH_O_X86_64_BRANCH8,
5339:
5340: /* Used when referencing a GOT entry. */
5341: BFD_RELOC_MACH_O_X86_64_GOT,
5342:
5343: /* Used when loading a GOT entry with movq. It is specially marked so that
5344: the linker could optimize the movq to a leaq if possible. */
5345: BFD_RELOC_MACH_O_X86_64_GOT_LOAD,
5346:
5347: /* Same as BFD_RELOC_32_PCREL but with an implicit -1 addend. */
5348: BFD_RELOC_MACH_O_X86_64_PCREL32_1,
5349:
5350: /* Same as BFD_RELOC_32_PCREL but with an implicit -2 addend. */
5351: BFD_RELOC_MACH_O_X86_64_PCREL32_2,
5352:
5353: /* Same as BFD_RELOC_32_PCREL but with an implicit -4 addend. */
5354: BFD_RELOC_MACH_O_X86_64_PCREL32_4,
5355:
1.6 christos 5356: /* Used when referencing a TLV entry. */
5357: BFD_RELOC_MACH_O_X86_64_TLV,
5358:
1.5 christos 5359: /* Addend for PAGE or PAGEOFF. */
5360: BFD_RELOC_MACH_O_ARM64_ADDEND,
5361:
5362: /* Relative offset to page of GOT slot. */
5363: BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21,
5364:
5365: /* Relative offset within page of GOT slot. */
5366: BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12,
5367:
5368: /* Address of a GOT entry. */
5369: BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT,
5370:
1.3 christos 5371: /* This is a 32 bit reloc for the microblaze that stores the
1.1 christos 5372: low 16 bits of a value */
5373: BFD_RELOC_MICROBLAZE_32_LO,
5374:
1.3 christos 5375: /* This is a 32 bit pc-relative reloc for the microblaze that
1.1 christos 5376: stores the low 16 bits of a value */
5377: BFD_RELOC_MICROBLAZE_32_LO_PCREL,
5378:
1.3 christos 5379: /* This is a 32 bit reloc for the microblaze that stores a
1.1 christos 5380: value relative to the read-only small data area anchor */
5381: BFD_RELOC_MICROBLAZE_32_ROSDA,
5382:
1.3 christos 5383: /* This is a 32 bit reloc for the microblaze that stores a
1.1 christos 5384: value relative to the read-write small data area anchor */
5385: BFD_RELOC_MICROBLAZE_32_RWSDA,
5386:
1.3 christos 5387: /* This is a 32 bit reloc for the microblaze to handle
1.1 christos 5388: expressions of the form "Symbol Op Symbol" */
5389: BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM,
5390:
1.3 christos 5391: /* This is a 64 bit reloc that stores the 32 bit pc relative
5392: value in two words (with an imm instruction). No relocation is
1.1 christos 5393: done here - only used for relaxing */
5394: BFD_RELOC_MICROBLAZE_64_NONE,
5395:
1.3 christos 5396: /* This is a 64 bit reloc that stores the 32 bit pc relative
1.1 christos 5397: value in two words (with an imm instruction). The relocation is
5398: PC-relative GOT offset */
5399: BFD_RELOC_MICROBLAZE_64_GOTPC,
5400:
1.3 christos 5401: /* This is a 64 bit reloc that stores the 32 bit pc relative
1.1 christos 5402: value in two words (with an imm instruction). The relocation is
5403: GOT offset */
5404: BFD_RELOC_MICROBLAZE_64_GOT,
5405:
1.3 christos 5406: /* This is a 64 bit reloc that stores the 32 bit pc relative
1.1 christos 5407: value in two words (with an imm instruction). The relocation is
5408: PC-relative offset into PLT */
5409: BFD_RELOC_MICROBLAZE_64_PLT,
5410:
1.3 christos 5411: /* This is a 64 bit reloc that stores the 32 bit GOT relative
1.1 christos 5412: value in two words (with an imm instruction). The relocation is
5413: relative offset from _GLOBAL_OFFSET_TABLE_ */
5414: BFD_RELOC_MICROBLAZE_64_GOTOFF,
5415:
1.3 christos 5416: /* This is a 32 bit reloc that stores the 32 bit GOT relative
1.1 christos 5417: value in a word. The relocation is relative offset from */
5418: BFD_RELOC_MICROBLAZE_32_GOTOFF,
5419:
5420: /* This is used to tell the dynamic linker to copy the value out of
5421: the dynamic object into the runtime process image. */
5422: BFD_RELOC_MICROBLAZE_COPY,
5423:
1.3 christos 5424: /* Unused Reloc */
5425: BFD_RELOC_MICROBLAZE_64_TLS,
5426:
5427: /* This is a 64 bit reloc that stores the 32 bit GOT relative value
5428: of the GOT TLS GD info entry in two words (with an imm instruction). The
5429: relocation is GOT offset. */
5430: BFD_RELOC_MICROBLAZE_64_TLSGD,
5431:
5432: /* This is a 64 bit reloc that stores the 32 bit GOT relative value
5433: of the GOT TLS LD info entry in two words (with an imm instruction). The
5434: relocation is GOT offset. */
5435: BFD_RELOC_MICROBLAZE_64_TLSLD,
5436:
5437: /* This is a 32 bit reloc that stores the Module ID to GOT(n). */
5438: BFD_RELOC_MICROBLAZE_32_TLSDTPMOD,
5439:
5440: /* This is a 32 bit reloc that stores TLS offset to GOT(n+1). */
5441: BFD_RELOC_MICROBLAZE_32_TLSDTPREL,
5442:
5443: /* This is a 32 bit reloc for storing TLS offset to two words (uses imm
5444: instruction) */
5445: BFD_RELOC_MICROBLAZE_64_TLSDTPREL,
5446:
5447: /* This is a 64 bit reloc that stores 32-bit thread pointer relative offset
5448: to two words (uses imm instruction). */
5449: BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL,
5450:
5451: /* This is a 64 bit reloc that stores 32-bit thread pointer relative offset
5452: to two words (uses imm instruction). */
5453: BFD_RELOC_MICROBLAZE_64_TLSTPREL,
5454:
1.6 christos 5455: /* This is a 64 bit reloc that stores the 32 bit pc relative
5456: value in two words (with an imm instruction). The relocation is
5457: PC-relative offset from start of TEXT. */
5458: BFD_RELOC_MICROBLAZE_64_TEXTPCREL,
5459:
5460: /* This is a 64 bit reloc that stores the 32 bit offset
5461: value in two words (with an imm instruction). The relocation is
5462: relative offset from start of TEXT. */
5463: BFD_RELOC_MICROBLAZE_64_TEXTREL,
5464:
1.3 christos 5465: /* AArch64 pseudo relocation code to mark the start of the AArch64
5466: relocation enumerators. N.B. the order of the enumerators is
5467: important as several tables in the AArch64 bfd backend are indexed
5468: by these enumerators; make sure they are all synced. */
5469: BFD_RELOC_AARCH64_RELOC_START,
5470:
1.5 christos 5471: /* Deprecated AArch64 null relocation code. */
5472: BFD_RELOC_AARCH64_NULL,
5473:
1.3 christos 5474: /* AArch64 null relocation code. */
5475: BFD_RELOC_AARCH64_NONE,
5476:
5477: /* Basic absolute relocations of N bits. These are equivalent to
5478: BFD_RELOC_N and they were added to assist the indexing of the howto
5479: table. */
5480: BFD_RELOC_AARCH64_64,
5481: BFD_RELOC_AARCH64_32,
5482: BFD_RELOC_AARCH64_16,
5483:
5484: /* PC-relative relocations. These are equivalent to BFD_RELOC_N_PCREL
5485: and they were added to assist the indexing of the howto table. */
5486: BFD_RELOC_AARCH64_64_PCREL,
5487: BFD_RELOC_AARCH64_32_PCREL,
5488: BFD_RELOC_AARCH64_16_PCREL,
5489:
5490: /* AArch64 MOV[NZK] instruction with most significant bits 0 to 15
5491: of an unsigned address/value. */
5492: BFD_RELOC_AARCH64_MOVW_G0,
5493:
5494: /* AArch64 MOV[NZK] instruction with less significant bits 0 to 15 of
5495: an address/value. No overflow checking. */
5496: BFD_RELOC_AARCH64_MOVW_G0_NC,
5497:
5498: /* AArch64 MOV[NZK] instruction with most significant bits 16 to 31
5499: of an unsigned address/value. */
5500: BFD_RELOC_AARCH64_MOVW_G1,
5501:
5502: /* AArch64 MOV[NZK] instruction with less significant bits 16 to 31
5503: of an address/value. No overflow checking. */
5504: BFD_RELOC_AARCH64_MOVW_G1_NC,
5505:
5506: /* AArch64 MOV[NZK] instruction with most significant bits 32 to 47
5507: of an unsigned address/value. */
5508: BFD_RELOC_AARCH64_MOVW_G2,
5509:
5510: /* AArch64 MOV[NZK] instruction with less significant bits 32 to 47
5511: of an address/value. No overflow checking. */
5512: BFD_RELOC_AARCH64_MOVW_G2_NC,
5513:
5514: /* AArch64 MOV[NZK] instruction with most signficant bits 48 to 64
5515: of a signed or unsigned address/value. */
5516: BFD_RELOC_AARCH64_MOVW_G3,
5517:
5518: /* AArch64 MOV[NZ] instruction with most significant bits 0 to 15
5519: of a signed value. Changes instruction to MOVZ or MOVN depending on the
5520: value's sign. */
5521: BFD_RELOC_AARCH64_MOVW_G0_S,
5522:
5523: /* AArch64 MOV[NZ] instruction with most significant bits 16 to 31
5524: of a signed value. Changes instruction to MOVZ or MOVN depending on the
5525: value's sign. */
5526: BFD_RELOC_AARCH64_MOVW_G1_S,
5527:
5528: /* AArch64 MOV[NZ] instruction with most significant bits 32 to 47
5529: of a signed value. Changes instruction to MOVZ or MOVN depending on the
5530: value's sign. */
5531: BFD_RELOC_AARCH64_MOVW_G2_S,
5532:
1.6 christos 5533: /* AArch64 MOV[NZ] instruction with most significant bits 0 to 15
5534: of a signed value. Changes instruction to MOVZ or MOVN depending on the
5535: value's sign. */
5536: BFD_RELOC_AARCH64_MOVW_PREL_G0,
5537:
5538: /* AArch64 MOV[NZ] instruction with most significant bits 0 to 15
5539: of a signed value. Changes instruction to MOVZ or MOVN depending on the
5540: value's sign. */
5541: BFD_RELOC_AARCH64_MOVW_PREL_G0_NC,
5542:
5543: /* AArch64 MOVK instruction with most significant bits 16 to 31
5544: of a signed value. */
5545: BFD_RELOC_AARCH64_MOVW_PREL_G1,
5546:
5547: /* AArch64 MOVK instruction with most significant bits 16 to 31
5548: of a signed value. */
5549: BFD_RELOC_AARCH64_MOVW_PREL_G1_NC,
5550:
5551: /* AArch64 MOVK instruction with most significant bits 32 to 47
5552: of a signed value. */
5553: BFD_RELOC_AARCH64_MOVW_PREL_G2,
5554:
5555: /* AArch64 MOVK instruction with most significant bits 32 to 47
5556: of a signed value. */
5557: BFD_RELOC_AARCH64_MOVW_PREL_G2_NC,
5558:
5559: /* AArch64 MOVK instruction with most significant bits 47 to 63
5560: of a signed value. */
5561: BFD_RELOC_AARCH64_MOVW_PREL_G3,
5562:
1.3 christos 5563: /* AArch64 Load Literal instruction, holding a 19 bit pc-relative word
5564: offset. The lowest two bits must be zero and are not stored in the
5565: instruction, giving a 21 bit signed byte offset. */
5566: BFD_RELOC_AARCH64_LD_LO19_PCREL,
1.1 christos 5567:
1.3 christos 5568: /* AArch64 ADR instruction, holding a simple 21 bit pc-relative byte offset. */
5569: BFD_RELOC_AARCH64_ADR_LO21_PCREL,
1.1 christos 5570:
5571: /* AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
5572: offset, giving a 4KB aligned page base address. */
5573: BFD_RELOC_AARCH64_ADR_HI21_PCREL,
5574:
5575: /* AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
5576: offset, giving a 4KB aligned page base address, but with no overflow
5577: checking. */
5578: BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL,
5579:
1.3 christos 5580: /* AArch64 ADD immediate instruction, holding bits 0 to 11 of the address.
5581: Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL. */
5582: BFD_RELOC_AARCH64_ADD_LO12,
5583:
5584: /* AArch64 8-bit load/store instruction, holding bits 0 to 11 of the
5585: address. Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL. */
5586: BFD_RELOC_AARCH64_LDST8_LO12,
5587:
5588: /* AArch64 14 bit pc-relative test bit and branch.
5589: The lowest two bits must be zero and are not stored in the instruction,
5590: giving a 16 bit signed byte offset. */
5591: BFD_RELOC_AARCH64_TSTBR14,
1.1 christos 5592:
5593: /* AArch64 19 bit pc-relative conditional branch and compare & branch.
5594: The lowest two bits must be zero and are not stored in the instruction,
5595: giving a 21 bit signed byte offset. */
5596: BFD_RELOC_AARCH64_BRANCH19,
5597:
1.3 christos 5598: /* AArch64 26 bit pc-relative unconditional branch.
1.1 christos 5599: The lowest two bits must be zero and are not stored in the instruction,
5600: giving a 28 bit signed byte offset. */
1.3 christos 5601: BFD_RELOC_AARCH64_JUMP26,
1.1 christos 5602:
1.3 christos 5603: /* AArch64 26 bit pc-relative unconditional branch and link.
1.1 christos 5604: The lowest two bits must be zero and are not stored in the instruction,
5605: giving a 28 bit signed byte offset. */
1.3 christos 5606: BFD_RELOC_AARCH64_CALL26,
1.1 christos 5607:
5608: /* AArch64 16-bit load/store instruction, holding bits 0 to 11 of the
5609: address. Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL. */
5610: BFD_RELOC_AARCH64_LDST16_LO12,
5611:
5612: /* AArch64 32-bit load/store instruction, holding bits 0 to 11 of the
5613: address. Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL. */
5614: BFD_RELOC_AARCH64_LDST32_LO12,
5615:
5616: /* AArch64 64-bit load/store instruction, holding bits 0 to 11 of the
5617: address. Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL. */
5618: BFD_RELOC_AARCH64_LDST64_LO12,
5619:
5620: /* AArch64 128-bit load/store instruction, holding bits 0 to 11 of the
5621: address. Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL. */
5622: BFD_RELOC_AARCH64_LDST128_LO12,
5623:
1.3 christos 5624: /* AArch64 Load Literal instruction, holding a 19 bit PC relative word
5625: offset of the global offset table entry for a symbol. The lowest two
5626: bits must be zero and are not stored in the instruction, giving a 21
5627: bit signed byte offset. This relocation type requires signed overflow
5628: checking. */
5629: BFD_RELOC_AARCH64_GOT_LD_PREL19,
1.1 christos 5630:
1.3 christos 5631: /* Get to the page base of the global offset table entry for a symbol as
5632: part of an ADRP instruction using a 21 bit PC relative value.Used in
5633: conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC. */
5634: BFD_RELOC_AARCH64_ADR_GOT_PAGE,
1.1 christos 5635:
1.3 christos 5636: /* Unsigned 12 bit byte offset for 64 bit load/store from the page of
5637: the GOT entry for this symbol. Used in conjunction with
1.6 christos 5638: BFD_RELOC_AARCH64_ADR_GOT_PAGE. Valid in LP64 ABI only. */
1.3 christos 5639: BFD_RELOC_AARCH64_LD64_GOT_LO12_NC,
1.1 christos 5640:
1.3 christos 5641: /* Unsigned 12 bit byte offset for 32 bit load/store from the page of
5642: the GOT entry for this symbol. Used in conjunction with
1.6 christos 5643: BFD_RELOC_AARCH64_ADR_GOT_PAGE. Valid in ILP32 ABI only. */
1.3 christos 5644: BFD_RELOC_AARCH64_LD32_GOT_LO12_NC,
1.1 christos 5645:
1.3 christos 5646: /* Unsigned 16 bit byte offset for 64 bit load/store from the GOT entry
5647: for this symbol. Valid in LP64 ABI only. */
5648: BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC,
5649:
5650: /* Unsigned 16 bit byte higher offset for 64 bit load/store from the GOT entry
5651: for this symbol. Valid in LP64 ABI only. */
5652: BFD_RELOC_AARCH64_MOVW_GOTOFF_G1,
5653:
5654: /* Unsigned 15 bit byte offset for 64 bit load/store from the page of
5655: the GOT entry for this symbol. Valid in LP64 ABI only. */
5656: BFD_RELOC_AARCH64_LD64_GOTOFF_LO15,
1.1 christos 5657:
1.3 christos 5658: /* Scaled 14 bit byte offset to the page base of the global offset table. */
5659: BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14,
1.1 christos 5660:
1.3 christos 5661: /* Scaled 15 bit byte offset to the page base of the global offset table. */
5662: BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15,
1.1 christos 5663:
1.3 christos 5664: /* Get to the page base of the global offset table entry for a symbols
5665: tls_index structure as part of an adrp instruction using a 21 bit PC
5666: relative value. Used in conjunction with
5667: BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC. */
5668: BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21,
1.1 christos 5669:
1.3 christos 5670: /* AArch64 TLS General Dynamic */
5671: BFD_RELOC_AARCH64_TLSGD_ADR_PREL21,
1.1 christos 5672:
1.3 christos 5673: /* Unsigned 12 bit byte offset to global offset table entry for a symbols
5674: tls_index structure. Used in conjunction with
5675: BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21. */
5676: BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC,
1.1 christos 5677:
1.3 christos 5678: /* AArch64 TLS General Dynamic relocation. */
5679: BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC,
1.1 christos 5680:
1.3 christos 5681: /* AArch64 TLS General Dynamic relocation. */
5682: BFD_RELOC_AARCH64_TLSGD_MOVW_G1,
1.1 christos 5683:
1.3 christos 5684: /* AArch64 TLS INITIAL EXEC relocation. */
5685: BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21,
1.1 christos 5686:
1.3 christos 5687: /* AArch64 TLS INITIAL EXEC relocation. */
5688: BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC,
1.1 christos 5689:
1.3 christos 5690: /* AArch64 TLS INITIAL EXEC relocation. */
5691: BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC,
1.1 christos 5692:
1.3 christos 5693: /* AArch64 TLS INITIAL EXEC relocation. */
5694: BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19,
1.1 christos 5695:
1.3 christos 5696: /* AArch64 TLS INITIAL EXEC relocation. */
5697: BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC,
1.1 christos 5698:
1.3 christos 5699: /* AArch64 TLS INITIAL EXEC relocation. */
5700: BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1,
1.1 christos 5701:
1.3 christos 5702: /* bit[23:12] of byte offset to module TLS base address. */
5703: BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12,
1.1 christos 5704:
1.3 christos 5705: /* Unsigned 12 bit byte offset to module TLS base address. */
5706: BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12,
1.1 christos 5707:
1.3 christos 5708: /* No overflow check version of BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12. */
5709: BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC,
1.1 christos 5710:
5711: /* Unsigned 12 bit byte offset to global offset table entry for a symbols
5712: tls_index structure. Used in conjunction with
1.3 christos 5713: BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21. */
5714: BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC,
5715:
5716: /* GOT entry page address for AArch64 TLS Local Dynamic, used with ADRP
5717: instruction. */
5718: BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21,
5719:
5720: /* GOT entry address for AArch64 TLS Local Dynamic, used with ADR instruction. */
5721: BFD_RELOC_AARCH64_TLSLD_ADR_PREL21,
5722:
5723: /* bit[11:1] of byte offset to module TLS base address, encoded in ldst
5724: instructions. */
5725: BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12,
5726:
5727: /* Similar as BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no overflow check. */
5728: BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC,
5729:
5730: /* bit[11:2] of byte offset to module TLS base address, encoded in ldst
5731: instructions. */
5732: BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12,
5733:
5734: /* Similar as BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no overflow check. */
5735: BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC,
5736:
5737: /* bit[11:3] of byte offset to module TLS base address, encoded in ldst
5738: instructions. */
5739: BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12,
5740:
5741: /* Similar as BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no overflow check. */
5742: BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC,
5743:
5744: /* bit[11:0] of byte offset to module TLS base address, encoded in ldst
5745: instructions. */
5746: BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12,
1.1 christos 5747:
1.3 christos 5748: /* Similar as BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no overflow check. */
5749: BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC,
1.1 christos 5750:
1.3 christos 5751: /* bit[15:0] of byte offset to module TLS base address. */
5752: BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0,
1.1 christos 5753:
1.3 christos 5754: /* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0 */
5755: BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC,
1.1 christos 5756:
1.3 christos 5757: /* bit[31:16] of byte offset to module TLS base address. */
5758: BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1,
1.1 christos 5759:
1.3 christos 5760: /* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1 */
5761: BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC,
1.1 christos 5762:
1.3 christos 5763: /* bit[47:32] of byte offset to module TLS base address. */
5764: BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2,
1.1 christos 5765:
5766: /* AArch64 TLS LOCAL EXEC relocation. */
1.3 christos 5767: BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2,
1.1 christos 5768:
5769: /* AArch64 TLS LOCAL EXEC relocation. */
1.3 christos 5770: BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1,
1.1 christos 5771:
5772: /* AArch64 TLS LOCAL EXEC relocation. */
1.3 christos 5773: BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC,
1.1 christos 5774:
5775: /* AArch64 TLS LOCAL EXEC relocation. */
5776: BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0,
5777:
5778: /* AArch64 TLS LOCAL EXEC relocation. */
5779: BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC,
5780:
5781: /* AArch64 TLS LOCAL EXEC relocation. */
1.3 christos 5782: BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12,
1.1 christos 5783:
5784: /* AArch64 TLS LOCAL EXEC relocation. */
1.3 christos 5785: BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12,
1.1 christos 5786:
5787: /* AArch64 TLS LOCAL EXEC relocation. */
1.3 christos 5788: BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC,
5789:
1.6 christos 5790: /* bit[11:1] of byte offset to module TLS base address, encoded in ldst
5791: instructions. */
5792: BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12,
5793:
5794: /* Similar as BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12, but no overflow check. */
5795: BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC,
5796:
5797: /* bit[11:2] of byte offset to module TLS base address, encoded in ldst
5798: instructions. */
5799: BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12,
5800:
5801: /* Similar as BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12, but no overflow check. */
5802: BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC,
5803:
5804: /* bit[11:3] of byte offset to module TLS base address, encoded in ldst
5805: instructions. */
5806: BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12,
5807:
5808: /* Similar as BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12, but no overflow check. */
5809: BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC,
5810:
5811: /* bit[11:0] of byte offset to module TLS base address, encoded in ldst
5812: instructions. */
5813: BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12,
5814:
5815: /* Similar as BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12, but no overflow check. */
5816: BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC,
5817:
1.3 christos 5818: /* AArch64 TLS DESC relocation. */
5819: BFD_RELOC_AARCH64_TLSDESC_LD_PREL19,
5820:
5821: /* AArch64 TLS DESC relocation. */
5822: BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21,
5823:
5824: /* AArch64 TLS DESC relocation. */
5825: BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21,
5826:
5827: /* AArch64 TLS DESC relocation. */
1.6 christos 5828: BFD_RELOC_AARCH64_TLSDESC_LD64_LO12,
1.3 christos 5829:
5830: /* AArch64 TLS DESC relocation. */
5831: BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC,
5832:
5833: /* AArch64 TLS DESC relocation. */
1.6 christos 5834: BFD_RELOC_AARCH64_TLSDESC_ADD_LO12,
1.3 christos 5835:
5836: /* AArch64 TLS DESC relocation. */
5837: BFD_RELOC_AARCH64_TLSDESC_OFF_G1,
5838:
5839: /* AArch64 TLS DESC relocation. */
5840: BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC,
5841:
5842: /* AArch64 TLS DESC relocation. */
5843: BFD_RELOC_AARCH64_TLSDESC_LDR,
5844:
5845: /* AArch64 TLS DESC relocation. */
5846: BFD_RELOC_AARCH64_TLSDESC_ADD,
5847:
5848: /* AArch64 TLS DESC relocation. */
5849: BFD_RELOC_AARCH64_TLSDESC_CALL,
5850:
5851: /* AArch64 TLS relocation. */
5852: BFD_RELOC_AARCH64_COPY,
5853:
5854: /* AArch64 TLS relocation. */
5855: BFD_RELOC_AARCH64_GLOB_DAT,
5856:
5857: /* AArch64 TLS relocation. */
5858: BFD_RELOC_AARCH64_JUMP_SLOT,
5859:
5860: /* AArch64 TLS relocation. */
5861: BFD_RELOC_AARCH64_RELATIVE,
5862:
5863: /* AArch64 TLS relocation. */
5864: BFD_RELOC_AARCH64_TLS_DTPMOD,
1.1 christos 5865:
5866: /* AArch64 TLS relocation. */
1.3 christos 5867: BFD_RELOC_AARCH64_TLS_DTPREL,
1.1 christos 5868:
5869: /* AArch64 TLS relocation. */
1.3 christos 5870: BFD_RELOC_AARCH64_TLS_TPREL,
1.1 christos 5871:
5872: /* AArch64 TLS relocation. */
1.3 christos 5873: BFD_RELOC_AARCH64_TLSDESC,
5874:
5875: /* AArch64 support for STT_GNU_IFUNC. */
5876: BFD_RELOC_AARCH64_IRELATIVE,
5877:
5878: /* AArch64 pseudo relocation code to mark the end of the AArch64
5879: relocation enumerators that have direct mapping to ELF reloc codes.
5880: There are a few more enumerators after this one; those are mainly
5881: used by the AArch64 assembler for the internal fixup or to select
5882: one of the above enumerators. */
5883: BFD_RELOC_AARCH64_RELOC_END,
1.1 christos 5884:
1.3 christos 5885: /* AArch64 pseudo relocation code to be used internally by the AArch64
5886: assembler and not (currently) written to any object files. */
5887: BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP,
5888:
5889: /* AArch64 unspecified load/store instruction, holding bits 0 to 11 of the
5890: address. Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL. */
5891: BFD_RELOC_AARCH64_LDST_LO12,
5892:
5893: /* AArch64 pseudo relocation code for TLS local dynamic mode. It's to be
5894: used internally by the AArch64 assembler and not (currently) written to
5895: any object files. */
5896: BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12,
5897:
5898: /* Similar as BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no overflow check. */
5899: BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC,
5900:
1.6 christos 5901: /* AArch64 pseudo relocation code for TLS local exec mode. It's to be
5902: used internally by the AArch64 assembler and not (currently) written to
5903: any object files. */
5904: BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12,
5905:
5906: /* Similar as BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12, but no overflow check. */
5907: BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC,
5908:
1.3 christos 5909: /* AArch64 pseudo relocation code to be used internally by the AArch64
5910: assembler and not (currently) written to any object files. */
5911: BFD_RELOC_AARCH64_LD_GOT_LO12_NC,
5912:
5913: /* AArch64 pseudo relocation code to be used internally by the AArch64
5914: assembler and not (currently) written to any object files. */
5915: BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC,
5916:
5917: /* AArch64 pseudo relocation code to be used internally by the AArch64
5918: assembler and not (currently) written to any object files. */
5919: BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC,
1.1 christos 5920:
5921: /* Tilera TILEPro Relocations. */
5922: BFD_RELOC_TILEPRO_COPY,
5923: BFD_RELOC_TILEPRO_GLOB_DAT,
5924: BFD_RELOC_TILEPRO_JMP_SLOT,
5925: BFD_RELOC_TILEPRO_RELATIVE,
5926: BFD_RELOC_TILEPRO_BROFF_X1,
5927: BFD_RELOC_TILEPRO_JOFFLONG_X1,
5928: BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT,
5929: BFD_RELOC_TILEPRO_IMM8_X0,
5930: BFD_RELOC_TILEPRO_IMM8_Y0,
5931: BFD_RELOC_TILEPRO_IMM8_X1,
5932: BFD_RELOC_TILEPRO_IMM8_Y1,
5933: BFD_RELOC_TILEPRO_DEST_IMM8_X1,
5934: BFD_RELOC_TILEPRO_MT_IMM15_X1,
5935: BFD_RELOC_TILEPRO_MF_IMM15_X1,
5936: BFD_RELOC_TILEPRO_IMM16_X0,
5937: BFD_RELOC_TILEPRO_IMM16_X1,
5938: BFD_RELOC_TILEPRO_IMM16_X0_LO,
5939: BFD_RELOC_TILEPRO_IMM16_X1_LO,
5940: BFD_RELOC_TILEPRO_IMM16_X0_HI,
5941: BFD_RELOC_TILEPRO_IMM16_X1_HI,
5942: BFD_RELOC_TILEPRO_IMM16_X0_HA,
5943: BFD_RELOC_TILEPRO_IMM16_X1_HA,
5944: BFD_RELOC_TILEPRO_IMM16_X0_PCREL,
5945: BFD_RELOC_TILEPRO_IMM16_X1_PCREL,
5946: BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL,
5947: BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL,
5948: BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL,
5949: BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL,
5950: BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL,
5951: BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL,
5952: BFD_RELOC_TILEPRO_IMM16_X0_GOT,
5953: BFD_RELOC_TILEPRO_IMM16_X1_GOT,
5954: BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO,
5955: BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO,
5956: BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI,
5957: BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI,
5958: BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA,
5959: BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA,
5960: BFD_RELOC_TILEPRO_MMSTART_X0,
5961: BFD_RELOC_TILEPRO_MMEND_X0,
5962: BFD_RELOC_TILEPRO_MMSTART_X1,
5963: BFD_RELOC_TILEPRO_MMEND_X1,
5964: BFD_RELOC_TILEPRO_SHAMT_X0,
5965: BFD_RELOC_TILEPRO_SHAMT_X1,
5966: BFD_RELOC_TILEPRO_SHAMT_Y0,
5967: BFD_RELOC_TILEPRO_SHAMT_Y1,
5968: BFD_RELOC_TILEPRO_TLS_GD_CALL,
5969: BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
5970: BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
5971: BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
5972: BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
5973: BFD_RELOC_TILEPRO_TLS_IE_LOAD,
5974: BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD,
5975: BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD,
5976: BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO,
5977: BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO,
5978: BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI,
5979: BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI,
5980: BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA,
5981: BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA,
5982: BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE,
5983: BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE,
5984: BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO,
5985: BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO,
5986: BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI,
5987: BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI,
5988: BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA,
5989: BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA,
5990: BFD_RELOC_TILEPRO_TLS_DTPMOD32,
5991: BFD_RELOC_TILEPRO_TLS_DTPOFF32,
5992: BFD_RELOC_TILEPRO_TLS_TPOFF32,
5993: BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
5994: BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
5995: BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
5996: BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
5997: BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
5998: BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
5999: BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
6000: BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
6001:
6002: /* Tilera TILE-Gx Relocations. */
6003: BFD_RELOC_TILEGX_HW0,
6004: BFD_RELOC_TILEGX_HW1,
6005: BFD_RELOC_TILEGX_HW2,
6006: BFD_RELOC_TILEGX_HW3,
6007: BFD_RELOC_TILEGX_HW0_LAST,
6008: BFD_RELOC_TILEGX_HW1_LAST,
6009: BFD_RELOC_TILEGX_HW2_LAST,
6010: BFD_RELOC_TILEGX_COPY,
6011: BFD_RELOC_TILEGX_GLOB_DAT,
6012: BFD_RELOC_TILEGX_JMP_SLOT,
6013: BFD_RELOC_TILEGX_RELATIVE,
6014: BFD_RELOC_TILEGX_BROFF_X1,
6015: BFD_RELOC_TILEGX_JUMPOFF_X1,
6016: BFD_RELOC_TILEGX_JUMPOFF_X1_PLT,
6017: BFD_RELOC_TILEGX_IMM8_X0,
6018: BFD_RELOC_TILEGX_IMM8_Y0,
6019: BFD_RELOC_TILEGX_IMM8_X1,
6020: BFD_RELOC_TILEGX_IMM8_Y1,
6021: BFD_RELOC_TILEGX_DEST_IMM8_X1,
6022: BFD_RELOC_TILEGX_MT_IMM14_X1,
6023: BFD_RELOC_TILEGX_MF_IMM14_X1,
6024: BFD_RELOC_TILEGX_MMSTART_X0,
6025: BFD_RELOC_TILEGX_MMEND_X0,
6026: BFD_RELOC_TILEGX_SHAMT_X0,
6027: BFD_RELOC_TILEGX_SHAMT_X1,
6028: BFD_RELOC_TILEGX_SHAMT_Y0,
6029: BFD_RELOC_TILEGX_SHAMT_Y1,
6030: BFD_RELOC_TILEGX_IMM16_X0_HW0,
6031: BFD_RELOC_TILEGX_IMM16_X1_HW0,
6032: BFD_RELOC_TILEGX_IMM16_X0_HW1,
6033: BFD_RELOC_TILEGX_IMM16_X1_HW1,
6034: BFD_RELOC_TILEGX_IMM16_X0_HW2,
6035: BFD_RELOC_TILEGX_IMM16_X1_HW2,
6036: BFD_RELOC_TILEGX_IMM16_X0_HW3,
6037: BFD_RELOC_TILEGX_IMM16_X1_HW3,
6038: BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST,
6039: BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST,
6040: BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST,
6041: BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST,
6042: BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST,
6043: BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST,
6044: BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL,
6045: BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL,
6046: BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL,
6047: BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL,
6048: BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL,
6049: BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL,
6050: BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL,
6051: BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL,
6052: BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL,
6053: BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL,
6054: BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL,
6055: BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL,
6056: BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL,
6057: BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL,
6058: BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT,
6059: BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT,
1.3 christos 6060: BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL,
6061: BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL,
6062: BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL,
6063: BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL,
6064: BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL,
6065: BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL,
1.1 christos 6066: BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT,
6067: BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT,
6068: BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT,
6069: BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT,
1.3 christos 6070: BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL,
6071: BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL,
1.1 christos 6072: BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD,
6073: BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD,
6074: BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
6075: BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
6076: BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
6077: BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
6078: BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
6079: BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
6080: BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,
6081: BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,
6082: BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,
6083: BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,
6084: BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE,
6085: BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE,
1.3 christos 6086: BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL,
6087: BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL,
6088: BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL,
6089: BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL,
6090: BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL,
6091: BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL,
1.1 christos 6092: BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE,
6093: BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE,
6094: BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE,
6095: BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE,
6096: BFD_RELOC_TILEGX_TLS_DTPMOD64,
6097: BFD_RELOC_TILEGX_TLS_DTPOFF64,
6098: BFD_RELOC_TILEGX_TLS_TPOFF64,
6099: BFD_RELOC_TILEGX_TLS_DTPMOD32,
6100: BFD_RELOC_TILEGX_TLS_DTPOFF32,
6101: BFD_RELOC_TILEGX_TLS_TPOFF32,
6102: BFD_RELOC_TILEGX_TLS_GD_CALL,
6103: BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
6104: BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
6105: BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
6106: BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD,
6107: BFD_RELOC_TILEGX_TLS_IE_LOAD,
6108: BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
6109: BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
6110: BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD,
6111: BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD,
6112:
1.7 ! christos 6113: /* Linux eBPF relocations. */
! 6114: BFD_RELOC_BPF_64,
! 6115: BFD_RELOC_BPF_32,
! 6116: BFD_RELOC_BPF_16,
! 6117: BFD_RELOC_BPF_DISP16,
! 6118: BFD_RELOC_BPF_DISP32,
! 6119:
1.1 christos 6120: /* Adapteva EPIPHANY - 8 bit signed pc-relative displacement */
6121: BFD_RELOC_EPIPHANY_SIMM8,
6122:
6123: /* Adapteva EPIPHANY - 24 bit signed pc-relative displacement */
6124: BFD_RELOC_EPIPHANY_SIMM24,
6125:
6126: /* Adapteva EPIPHANY - 16 most-significant bits of absolute address */
6127: BFD_RELOC_EPIPHANY_HIGH,
6128:
6129: /* Adapteva EPIPHANY - 16 least-significant bits of absolute address */
6130: BFD_RELOC_EPIPHANY_LOW,
6131:
6132: /* Adapteva EPIPHANY - 11 bit signed number - add/sub immediate */
6133: BFD_RELOC_EPIPHANY_SIMM11,
6134:
6135: /* Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st displacement) */
6136: BFD_RELOC_EPIPHANY_IMM11,
6137:
6138: /* Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction. */
6139: BFD_RELOC_EPIPHANY_IMM8,
1.3 christos 6140:
6141: /* Visium Relocations. */
6142: BFD_RELOC_VISIUM_HI16,
6143: BFD_RELOC_VISIUM_LO16,
6144: BFD_RELOC_VISIUM_IM16,
6145: BFD_RELOC_VISIUM_REL16,
6146: BFD_RELOC_VISIUM_HI16_PCREL,
6147: BFD_RELOC_VISIUM_LO16_PCREL,
6148: BFD_RELOC_VISIUM_IM16_PCREL,
1.6 christos 6149:
6150: /* WebAssembly relocations. */
6151: BFD_RELOC_WASM32_LEB128,
6152: BFD_RELOC_WASM32_LEB128_GOT,
6153: BFD_RELOC_WASM32_LEB128_GOT_CODE,
6154: BFD_RELOC_WASM32_LEB128_PLT,
6155: BFD_RELOC_WASM32_PLT_INDEX,
6156: BFD_RELOC_WASM32_ABS32_CODE,
6157: BFD_RELOC_WASM32_COPY,
6158: BFD_RELOC_WASM32_CODE_POINTER,
6159: BFD_RELOC_WASM32_INDEX,
6160: BFD_RELOC_WASM32_PLT_SIG,
1.7 ! christos 6161:
! 6162: /* C-SKY relocations. */
! 6163: BFD_RELOC_CKCORE_NONE,
! 6164: BFD_RELOC_CKCORE_ADDR32,
! 6165: BFD_RELOC_CKCORE_PCREL_IMM8BY4,
! 6166: BFD_RELOC_CKCORE_PCREL_IMM11BY2,
! 6167: BFD_RELOC_CKCORE_PCREL_IMM4BY2,
! 6168: BFD_RELOC_CKCORE_PCREL32,
! 6169: BFD_RELOC_CKCORE_PCREL_JSR_IMM11BY2,
! 6170: BFD_RELOC_CKCORE_GNU_VTINHERIT,
! 6171: BFD_RELOC_CKCORE_GNU_VTENTRY,
! 6172: BFD_RELOC_CKCORE_RELATIVE,
! 6173: BFD_RELOC_CKCORE_COPY,
! 6174: BFD_RELOC_CKCORE_GLOB_DAT,
! 6175: BFD_RELOC_CKCORE_JUMP_SLOT,
! 6176: BFD_RELOC_CKCORE_GOTOFF,
! 6177: BFD_RELOC_CKCORE_GOTPC,
! 6178: BFD_RELOC_CKCORE_GOT32,
! 6179: BFD_RELOC_CKCORE_PLT32,
! 6180: BFD_RELOC_CKCORE_ADDRGOT,
! 6181: BFD_RELOC_CKCORE_ADDRPLT,
! 6182: BFD_RELOC_CKCORE_PCREL_IMM26BY2,
! 6183: BFD_RELOC_CKCORE_PCREL_IMM16BY2,
! 6184: BFD_RELOC_CKCORE_PCREL_IMM16BY4,
! 6185: BFD_RELOC_CKCORE_PCREL_IMM10BY2,
! 6186: BFD_RELOC_CKCORE_PCREL_IMM10BY4,
! 6187: BFD_RELOC_CKCORE_ADDR_HI16,
! 6188: BFD_RELOC_CKCORE_ADDR_LO16,
! 6189: BFD_RELOC_CKCORE_GOTPC_HI16,
! 6190: BFD_RELOC_CKCORE_GOTPC_LO16,
! 6191: BFD_RELOC_CKCORE_GOTOFF_HI16,
! 6192: BFD_RELOC_CKCORE_GOTOFF_LO16,
! 6193: BFD_RELOC_CKCORE_GOT12,
! 6194: BFD_RELOC_CKCORE_GOT_HI16,
! 6195: BFD_RELOC_CKCORE_GOT_LO16,
! 6196: BFD_RELOC_CKCORE_PLT12,
! 6197: BFD_RELOC_CKCORE_PLT_HI16,
! 6198: BFD_RELOC_CKCORE_PLT_LO16,
! 6199: BFD_RELOC_CKCORE_ADDRGOT_HI16,
! 6200: BFD_RELOC_CKCORE_ADDRGOT_LO16,
! 6201: BFD_RELOC_CKCORE_ADDRPLT_HI16,
! 6202: BFD_RELOC_CKCORE_ADDRPLT_LO16,
! 6203: BFD_RELOC_CKCORE_PCREL_JSR_IMM26BY2,
! 6204: BFD_RELOC_CKCORE_TOFFSET_LO16,
! 6205: BFD_RELOC_CKCORE_DOFFSET_LO16,
! 6206: BFD_RELOC_CKCORE_PCREL_IMM18BY2,
! 6207: BFD_RELOC_CKCORE_DOFFSET_IMM18,
! 6208: BFD_RELOC_CKCORE_DOFFSET_IMM18BY2,
! 6209: BFD_RELOC_CKCORE_DOFFSET_IMM18BY4,
! 6210: BFD_RELOC_CKCORE_GOTOFF_IMM18,
! 6211: BFD_RELOC_CKCORE_GOT_IMM18BY4,
! 6212: BFD_RELOC_CKCORE_PLT_IMM18BY4,
! 6213: BFD_RELOC_CKCORE_PCREL_IMM7BY4,
! 6214: BFD_RELOC_CKCORE_TLS_LE32,
! 6215: BFD_RELOC_CKCORE_TLS_IE32,
! 6216: BFD_RELOC_CKCORE_TLS_GD32,
! 6217: BFD_RELOC_CKCORE_TLS_LDM32,
! 6218: BFD_RELOC_CKCORE_TLS_LDO32,
! 6219: BFD_RELOC_CKCORE_TLS_DTPMOD32,
! 6220: BFD_RELOC_CKCORE_TLS_DTPOFF32,
! 6221: BFD_RELOC_CKCORE_TLS_TPOFF32,
! 6222: BFD_RELOC_CKCORE_PCREL_FLRW_IMM8BY4,
! 6223: BFD_RELOC_CKCORE_NOJSRI,
! 6224: BFD_RELOC_CKCORE_CALLGRAPH,
! 6225: BFD_RELOC_CKCORE_IRELATIVE,
! 6226: BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4,
! 6227: BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4,
! 6228:
! 6229: /* S12Z relocations. */
! 6230: BFD_RELOC_S12Z_OPR,
1.1 christos 6231: BFD_RELOC_UNUSED };
1.3 christos 6232:
1.1 christos 6233: typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
6234: reloc_howto_type *bfd_reloc_type_lookup
6235: (bfd *abfd, bfd_reloc_code_real_type code);
6236: reloc_howto_type *bfd_reloc_name_lookup
6237: (bfd *abfd, const char *reloc_name);
6238:
6239: const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
6240:
6241: /* Extracted from syms.c. */
6242:
6243: typedef struct bfd_symbol
6244: {
6245: /* A pointer to the BFD which owns the symbol. This information
6246: is necessary so that a back end can work out what additional
6247: information (invisible to the application writer) is carried
6248: with the symbol.
6249:
6250: This field is *almost* redundant, since you can use section->owner
6251: instead, except that some symbols point to the global sections
6252: bfd_{abs,com,und}_section. This could be fixed by making
6253: these globals be per-bfd (or per-target-flavor). FIXME. */
6254: struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */
6255:
6256: /* The text of the symbol. The name is left alone, and not copied; the
6257: application may not alter it. */
6258: const char *name;
6259:
6260: /* The value of the symbol. This really should be a union of a
6261: numeric value with a pointer, since some flags indicate that
6262: a pointer to another symbol is stored here. */
6263: symvalue value;
6264:
6265: /* Attributes of a symbol. */
1.6 christos 6266: #define BSF_NO_FLAGS 0
1.1 christos 6267:
6268: /* The symbol has local scope; <<static>> in <<C>>. The value
6269: is the offset into the section of the data. */
1.6 christos 6270: #define BSF_LOCAL (1 << 0)
1.1 christos 6271:
6272: /* The symbol has global scope; initialized data in <<C>>. The
6273: value is the offset into the section of the data. */
1.6 christos 6274: #define BSF_GLOBAL (1 << 1)
1.1 christos 6275:
6276: /* The symbol has global scope and is exported. The value is
6277: the offset into the section of the data. */
1.6 christos 6278: #define BSF_EXPORT BSF_GLOBAL /* No real difference. */
1.1 christos 6279:
6280: /* A normal C symbol would be one of:
1.5 christos 6281: <<BSF_LOCAL>>, <<BSF_UNDEFINED>> or <<BSF_GLOBAL>>. */
1.1 christos 6282:
6283: /* The symbol is a debugging record. The value has an arbitrary
6284: meaning, unless BSF_DEBUGGING_RELOC is also set. */
1.6 christos 6285: #define BSF_DEBUGGING (1 << 2)
1.1 christos 6286:
6287: /* The symbol denotes a function entry point. Used in ELF,
6288: perhaps others someday. */
1.6 christos 6289: #define BSF_FUNCTION (1 << 3)
1.1 christos 6290:
6291: /* Used by the linker. */
1.6 christos 6292: #define BSF_KEEP (1 << 5)
1.5 christos 6293:
6294: /* An ELF common symbol. */
1.6 christos 6295: #define BSF_ELF_COMMON (1 << 6)
1.1 christos 6296:
6297: /* A weak global symbol, overridable without warnings by
6298: a regular global symbol of the same name. */
1.6 christos 6299: #define BSF_WEAK (1 << 7)
1.1 christos 6300:
6301: /* This symbol was created to point to a section, e.g. ELF's
6302: STT_SECTION symbols. */
1.6 christos 6303: #define BSF_SECTION_SYM (1 << 8)
1.1 christos 6304:
6305: /* The symbol used to be a common symbol, but now it is
6306: allocated. */
1.6 christos 6307: #define BSF_OLD_COMMON (1 << 9)
1.1 christos 6308:
6309: /* In some files the type of a symbol sometimes alters its
6310: location in an output file - ie in coff a <<ISFCN>> symbol
6311: which is also <<C_EXT>> symbol appears where it was
6312: declared and not at the end of a section. This bit is set
6313: by the target BFD part to convey this information. */
1.6 christos 6314: #define BSF_NOT_AT_END (1 << 10)
1.1 christos 6315:
6316: /* Signal that the symbol is the label of constructor section. */
1.6 christos 6317: #define BSF_CONSTRUCTOR (1 << 11)
1.1 christos 6318:
6319: /* Signal that the symbol is a warning symbol. The name is a
6320: warning. The name of the next symbol is the one to warn about;
6321: if a reference is made to a symbol with the same name as the next
6322: symbol, a warning is issued by the linker. */
1.6 christos 6323: #define BSF_WARNING (1 << 12)
1.1 christos 6324:
6325: /* Signal that the symbol is indirect. This symbol is an indirect
6326: pointer to the symbol with the same name as the next symbol. */
1.6 christos 6327: #define BSF_INDIRECT (1 << 13)
1.1 christos 6328:
6329: /* BSF_FILE marks symbols that contain a file name. This is used
6330: for ELF STT_FILE symbols. */
1.6 christos 6331: #define BSF_FILE (1 << 14)
1.1 christos 6332:
6333: /* Symbol is from dynamic linking information. */
1.6 christos 6334: #define BSF_DYNAMIC (1 << 15)
1.1 christos 6335:
6336: /* The symbol denotes a data object. Used in ELF, and perhaps
6337: others someday. */
1.6 christos 6338: #define BSF_OBJECT (1 << 16)
1.1 christos 6339:
6340: /* This symbol is a debugging symbol. The value is the offset
6341: into the section of the data. BSF_DEBUGGING should be set
6342: as well. */
1.6 christos 6343: #define BSF_DEBUGGING_RELOC (1 << 17)
1.1 christos 6344:
6345: /* This symbol is thread local. Used in ELF. */
1.6 christos 6346: #define BSF_THREAD_LOCAL (1 << 18)
1.1 christos 6347:
6348: /* This symbol represents a complex relocation expression,
6349: with the expression tree serialized in the symbol name. */
1.6 christos 6350: #define BSF_RELC (1 << 19)
1.1 christos 6351:
6352: /* This symbol represents a signed complex relocation expression,
6353: with the expression tree serialized in the symbol name. */
1.6 christos 6354: #define BSF_SRELC (1 << 20)
1.1 christos 6355:
6356: /* This symbol was created by bfd_get_synthetic_symtab. */
1.6 christos 6357: #define BSF_SYNTHETIC (1 << 21)
1.1 christos 6358:
6359: /* This symbol is an indirect code object. Unrelated to BSF_INDIRECT.
6360: The dynamic linker will compute the value of this symbol by
6361: calling the function that it points to. BSF_FUNCTION must
6362: also be also set. */
6363: #define BSF_GNU_INDIRECT_FUNCTION (1 << 22)
6364: /* This symbol is a globally unique data object. The dynamic linker
6365: will make sure that in the entire process there is just one symbol
6366: with this name and type in use. BSF_OBJECT must also be set. */
1.6 christos 6367: #define BSF_GNU_UNIQUE (1 << 23)
1.1 christos 6368:
6369: flagword flags;
6370:
6371: /* A pointer to the section to which this symbol is
6372: relative. This will always be non NULL, there are special
6373: sections for undefined and absolute symbols. */
6374: struct bfd_section *section;
6375:
6376: /* Back end special data. */
6377: union
6378: {
6379: void *p;
6380: bfd_vma i;
6381: }
6382: udata;
6383: }
6384: asymbol;
6385:
6386: #define bfd_get_symtab_upper_bound(abfd) \
1.6 christos 6387: BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
1.1 christos 6388:
6389: bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
6390:
6391: bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
6392:
6393: #define bfd_is_local_label_name(abfd, name) \
1.6 christos 6394: BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
1.1 christos 6395:
6396: bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
6397:
6398: #define bfd_is_target_special_symbol(abfd, sym) \
1.6 christos 6399: BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
1.1 christos 6400:
6401: #define bfd_canonicalize_symtab(abfd, location) \
1.6 christos 6402: BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
1.1 christos 6403:
6404: bfd_boolean bfd_set_symtab
6405: (bfd *abfd, asymbol **location, unsigned int count);
6406:
6407: void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
6408:
6409: #define bfd_make_empty_symbol(abfd) \
1.6 christos 6410: BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
1.1 christos 6411:
6412: asymbol *_bfd_generic_make_empty_symbol (bfd *);
6413:
6414: #define bfd_make_debug_symbol(abfd,ptr,size) \
1.6 christos 6415: BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
1.1 christos 6416:
6417: int bfd_decode_symclass (asymbol *symbol);
6418:
6419: bfd_boolean bfd_is_undefined_symclass (int symclass);
6420:
6421: void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
6422:
6423: bfd_boolean bfd_copy_private_symbol_data
6424: (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
6425:
6426: #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
1.6 christos 6427: BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
6428: (ibfd, isymbol, obfd, osymbol))
1.1 christos 6429:
6430: /* Extracted from bfd.c. */
1.3 christos 6431:
1.1 christos 6432: enum bfd_direction
6433: {
6434: no_direction = 0,
6435: read_direction = 1,
6436: write_direction = 2,
6437: both_direction = 3
6438: };
6439:
1.3 christos 6440: enum bfd_plugin_format
6441: {
1.5 christos 6442: bfd_plugin_unknown = 0,
1.3 christos 6443: bfd_plugin_yes = 1,
6444: bfd_plugin_no = 2
6445: };
6446:
6447: struct bfd_build_id
6448: {
6449: bfd_size_type size;
6450: bfd_byte data[1];
6451: };
6452:
1.1 christos 6453: struct bfd
6454: {
6455: /* The filename the application opened the BFD with. */
6456: const char *filename;
6457:
6458: /* A pointer to the target jump table. */
6459: const struct bfd_target *xvec;
6460:
6461: /* The IOSTREAM, and corresponding IO vector that provide access
6462: to the file backing the BFD. */
6463: void *iostream;
6464: const struct bfd_iovec *iovec;
6465:
6466: /* The caching routines use these to maintain a
6467: least-recently-used list of BFDs. */
6468: struct bfd *lru_prev, *lru_next;
6469:
1.6 christos 6470: /* Track current file position (or current buffer offset for
6471: in-memory BFDs). When a file is closed by the caching routines,
6472: BFD retains state information on the file here. */
1.1 christos 6473: ufile_ptr where;
6474:
6475: /* File modified time, if mtime_set is TRUE. */
6476: long mtime;
6477:
1.3 christos 6478: /* A unique identifier of the BFD */
6479: unsigned int id;
1.1 christos 6480:
6481: /* The format which belongs to the BFD. (object, core, etc.) */
1.3 christos 6482: ENUM_BITFIELD (bfd_format) format : 3;
1.1 christos 6483:
6484: /* The direction with which the BFD was opened. */
1.3 christos 6485: ENUM_BITFIELD (bfd_direction) direction : 2;
1.1 christos 6486:
6487: /* Format_specific flags. */
1.7 ! christos 6488: flagword flags;
1.1 christos 6489:
6490: /* Values that may appear in the flags field of a BFD. These also
6491: appear in the object_flags field of the bfd_target structure, where
6492: they indicate the set of flags used by that backend (not all flags
6493: are meaningful for all object file formats) (FIXME: at the moment,
6494: the object_flags values have mostly just been copied from backend
6495: to another, and are not necessarily correct). */
6496:
1.6 christos 6497: #define BFD_NO_FLAGS 0x0
1.1 christos 6498:
6499: /* BFD contains relocation entries. */
1.6 christos 6500: #define HAS_RELOC 0x1
1.1 christos 6501:
6502: /* BFD is directly executable. */
1.6 christos 6503: #define EXEC_P 0x2
1.1 christos 6504:
6505: /* BFD has line number information (basically used for F_LNNO in a
6506: COFF header). */
1.6 christos 6507: #define HAS_LINENO 0x4
1.1 christos 6508:
6509: /* BFD has debugging information. */
1.6 christos 6510: #define HAS_DEBUG 0x08
1.1 christos 6511:
6512: /* BFD has symbols. */
1.6 christos 6513: #define HAS_SYMS 0x10
1.1 christos 6514:
6515: /* BFD has local symbols (basically used for F_LSYMS in a COFF
6516: header). */
1.6 christos 6517: #define HAS_LOCALS 0x20
1.1 christos 6518:
6519: /* BFD is a dynamic object. */
1.6 christos 6520: #define DYNAMIC 0x40
1.1 christos 6521:
6522: /* Text section is write protected (if D_PAGED is not set, this is
6523: like an a.out NMAGIC file) (the linker sets this by default, but
6524: clears it for -r or -N). */
1.6 christos 6525: #define WP_TEXT 0x80
1.1 christos 6526:
6527: /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
6528: linker sets this by default, but clears it for -r or -n or -N). */
1.6 christos 6529: #define D_PAGED 0x100
1.1 christos 6530:
6531: /* BFD is relaxable (this means that bfd_relax_section may be able to
6532: do something) (sometimes bfd_relax_section can do something even if
6533: this is not set). */
1.6 christos 6534: #define BFD_IS_RELAXABLE 0x200
1.1 christos 6535:
6536: /* This may be set before writing out a BFD to request using a
6537: traditional format. For example, this is used to request that when
6538: writing out an a.out object the symbols not be hashed to eliminate
6539: duplicates. */
1.6 christos 6540: #define BFD_TRADITIONAL_FORMAT 0x400
1.1 christos 6541:
6542: /* This flag indicates that the BFD contents are actually cached
6543: in memory. If this is set, iostream points to a bfd_in_memory
6544: struct. */
1.6 christos 6545: #define BFD_IN_MEMORY 0x800
1.1 christos 6546:
6547: /* This BFD has been created by the linker and doesn't correspond
6548: to any input file. */
1.6 christos 6549: #define BFD_LINKER_CREATED 0x1000
1.1 christos 6550:
6551: /* This may be set before writing out a BFD to request that it
6552: be written using values for UIDs, GIDs, timestamps, etc. that
6553: will be consistent from run to run. */
1.3 christos 6554: #define BFD_DETERMINISTIC_OUTPUT 0x2000
1.1 christos 6555:
6556: /* Compress sections in this BFD. */
1.6 christos 6557: #define BFD_COMPRESS 0x4000
1.1 christos 6558:
6559: /* Decompress sections in this BFD. */
1.6 christos 6560: #define BFD_DECOMPRESS 0x8000
1.1 christos 6561:
6562: /* BFD is a dummy, for plugins. */
1.6 christos 6563: #define BFD_PLUGIN 0x10000
1.3 christos 6564:
6565: /* Compress sections in this BFD with SHF_COMPRESSED from gABI. */
1.6 christos 6566: #define BFD_COMPRESS_GABI 0x20000
1.1 christos 6567:
1.5 christos 6568: /* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this
6569: BFD. */
1.6 christos 6570: #define BFD_CONVERT_ELF_COMMON 0x40000
1.5 christos 6571:
6572: /* Use the ELF STT_COMMON type in this BFD. */
1.6 christos 6573: #define BFD_USE_ELF_STT_COMMON 0x80000
1.5 christos 6574:
1.7 ! christos 6575: /* Put pathnames into archives (non-POSIX). */
! 6576: #define BFD_ARCHIVE_FULL_PATH 0x100000
! 6577:
1.1 christos 6578: /* Flags bits to be saved in bfd_preserve_save. */
6579: #define BFD_FLAGS_SAVED \
1.6 christos 6580: (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
6581: | BFD_PLUGIN | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON \
6582: | BFD_USE_ELF_STT_COMMON)
1.1 christos 6583:
6584: /* Flags bits which are for BFD use only. */
6585: #define BFD_FLAGS_FOR_BFD_USE_MASK \
6586: (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
1.3 christos 6587: | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
1.5 christos 6588: | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
1.3 christos 6589:
6590: /* Is the file descriptor being cached? That is, can it be closed as
6591: needed, and re-opened when accessed later? */
6592: unsigned int cacheable : 1;
6593:
6594: /* Marks whether there was a default target specified when the
6595: BFD was opened. This is used to select which matching algorithm
6596: to use to choose the back end. */
6597: unsigned int target_defaulted : 1;
6598:
6599: /* ... and here: (``once'' means at least once). */
6600: unsigned int opened_once : 1;
6601:
6602: /* Set if we have a locally maintained mtime value, rather than
6603: getting it from the file each time. */
6604: unsigned int mtime_set : 1;
6605:
6606: /* Flag set if symbols from this BFD should not be exported. */
6607: unsigned int no_export : 1;
6608:
6609: /* Remember when output has begun, to stop strange things
6610: from happening. */
6611: unsigned int output_has_begun : 1;
6612:
6613: /* Have archive map. */
6614: unsigned int has_armap : 1;
6615:
6616: /* Set if this is a thin archive. */
6617: unsigned int is_thin_archive : 1;
6618:
1.7 ! christos 6619: /* Set if this archive should not cache element positions. */
! 6620: unsigned int no_element_cache : 1;
! 6621:
1.3 christos 6622: /* Set if only required symbols should be added in the link hash table for
6623: this object. Used by VMS linkers. */
6624: unsigned int selective_search : 1;
6625:
6626: /* Set if this is the linker output BFD. */
6627: unsigned int is_linker_output : 1;
6628:
6629: /* Set if this is the linker input BFD. */
6630: unsigned int is_linker_input : 1;
6631:
6632: /* If this is an input for a compiler plug-in library. */
6633: ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
6634:
6635: /* Set if this is a plugin output file. */
6636: unsigned int lto_output : 1;
6637:
1.7 ! christos 6638: /* Set if this is a slim LTO object not loaded with a compiler plugin. */
! 6639: unsigned int lto_slim_object : 1;
! 6640:
1.3 christos 6641: /* Set to dummy BFD created when claimed by a compiler plug-in
6642: library. */
6643: bfd *plugin_dummy_bfd;
1.1 christos 6644:
6645: /* Currently my_archive is tested before adding origin to
6646: anything. I believe that this can become always an add of
6647: origin, with origin set to 0 for non archive files. */
6648: ufile_ptr origin;
6649:
6650: /* The origin in the archive of the proxy entry. This will
6651: normally be the same as origin, except for thin archives,
6652: when it will contain the current offset of the proxy in the
6653: thin archive rather than the offset of the bfd in its actual
6654: container. */
6655: ufile_ptr proxy_origin;
6656:
6657: /* A hash table for section names. */
6658: struct bfd_hash_table section_htab;
6659:
6660: /* Pointer to linked list of sections. */
6661: struct bfd_section *sections;
6662:
6663: /* The last section on the section list. */
6664: struct bfd_section *section_last;
6665:
6666: /* The number of sections. */
6667: unsigned int section_count;
6668:
1.3 christos 6669: /* A field used by _bfd_generic_link_add_archive_symbols. This will
6670: be used only for archive elements. */
6671: int archive_pass;
6672:
1.1 christos 6673: /* Stuff only useful for object files:
6674: The start address. */
6675: bfd_vma start_address;
6676:
6677: /* Symbol table for output BFD (with symcount entries).
6678: Also used by the linker to cache input BFD symbols. */
6679: struct bfd_symbol **outsymbols;
6680:
1.3 christos 6681: /* Used for input and output. */
6682: unsigned int symcount;
6683:
1.1 christos 6684: /* Used for slurped dynamic symbol tables. */
6685: unsigned int dynsymcount;
6686:
6687: /* Pointer to structure which contains architecture information. */
6688: const struct bfd_arch_info *arch_info;
6689:
6690: /* Stuff only useful for archives. */
6691: void *arelt_data;
6692: struct bfd *my_archive; /* The containing archive BFD. */
6693: struct bfd *archive_next; /* The next BFD in the archive. */
6694: struct bfd *archive_head; /* The first BFD in the archive. */
6695: struct bfd *nested_archives; /* List of nested archive in a flattened
6696: thin archive. */
6697:
1.3 christos 6698: union {
6699: /* For input BFDs, a chain of BFDs involved in a link. */
6700: struct bfd *next;
6701: /* For output BFD, the linker hash table. */
6702: struct bfd_link_hash_table *hash;
6703: } link;
1.1 christos 6704:
6705: /* Used by the back end to hold private data. */
6706: union
6707: {
6708: struct aout_data_struct *aout_data;
6709: struct artdata *aout_ar_data;
6710: struct coff_tdata *coff_obj_data;
6711: struct pe_tdata *pe_obj_data;
6712: struct xcoff_tdata *xcoff_obj_data;
6713: struct ecoff_tdata *ecoff_obj_data;
6714: struct srec_data_struct *srec_data;
6715: struct verilog_data_struct *verilog_data;
6716: struct ihex_data_struct *ihex_data;
6717: struct tekhex_data_struct *tekhex_data;
6718: struct elf_obj_tdata *elf_obj_data;
6719: struct mmo_data_struct *mmo_data;
6720: struct sun_core_struct *sun_core_data;
6721: struct sco5_core_struct *sco5_core_data;
6722: struct trad_core_struct *trad_core_data;
6723: struct som_data_struct *som_data;
6724: struct hpux_core_struct *hpux_core_data;
6725: struct hppabsd_core_struct *hppabsd_core_data;
6726: struct sgi_core_struct *sgi_core_data;
6727: struct lynx_core_struct *lynx_core_data;
6728: struct osf_core_struct *osf_core_data;
6729: struct cisco_core_struct *cisco_core_data;
6730: struct versados_data_struct *versados_data;
6731: struct netbsd_core_struct *netbsd_core_data;
6732: struct mach_o_data_struct *mach_o_data;
6733: struct mach_o_fat_data_struct *mach_o_fat_data;
6734: struct plugin_data_struct *plugin_data;
6735: struct bfd_pef_data_struct *pef_data;
6736: struct bfd_pef_xlib_data_struct *pef_xlib_data;
6737: struct bfd_sym_data_struct *sym_data;
6738: void *any;
6739: }
6740: tdata;
6741:
6742: /* Used by the application to hold private data. */
6743: void *usrdata;
6744:
6745: /* Where all the allocated stuff under this BFD goes. This is a
6746: struct objalloc *, but we use void * to avoid requiring the inclusion
6747: of objalloc.h. */
6748: void *memory;
6749:
1.3 christos 6750: /* For input BFDs, the build ID, if the object has one. */
6751: const struct bfd_build_id *build_id;
6752: };
1.1 christos 6753:
1.7 ! christos 6754: static inline const char *
! 6755: bfd_get_filename (const bfd *abfd)
! 6756: {
! 6757: return abfd->filename;
! 6758: }
! 6759:
! 6760: static inline bfd_boolean
! 6761: bfd_get_cacheable (const bfd *abfd)
! 6762: {
! 6763: return abfd->cacheable;
! 6764: }
! 6765:
! 6766: static inline enum bfd_format
! 6767: bfd_get_format (const bfd *abfd)
! 6768: {
! 6769: return abfd->format;
! 6770: }
! 6771:
! 6772: static inline flagword
! 6773: bfd_get_file_flags (const bfd *abfd)
! 6774: {
! 6775: return abfd->flags;
! 6776: }
! 6777:
! 6778: static inline bfd_vma
! 6779: bfd_get_start_address (const bfd *abfd)
! 6780: {
! 6781: return abfd->start_address;
! 6782: }
! 6783:
! 6784: static inline unsigned int
! 6785: bfd_get_symcount (const bfd *abfd)
! 6786: {
! 6787: return abfd->symcount;
! 6788: }
! 6789:
! 6790: static inline unsigned int
! 6791: bfd_get_dynamic_symcount (const bfd *abfd)
! 6792: {
! 6793: return abfd->dynsymcount;
! 6794: }
! 6795:
! 6796: static inline struct bfd_symbol **
! 6797: bfd_get_outsymbols (const bfd *abfd)
! 6798: {
! 6799: return abfd->outsymbols;
! 6800: }
! 6801:
! 6802: static inline unsigned int
! 6803: bfd_count_sections (const bfd *abfd)
! 6804: {
! 6805: return abfd->section_count;
! 6806: }
! 6807:
! 6808: static inline bfd_boolean
! 6809: bfd_has_map (const bfd *abfd)
! 6810: {
! 6811: return abfd->has_armap;
! 6812: }
! 6813:
! 6814: static inline bfd_boolean
! 6815: bfd_is_thin_archive (const bfd *abfd)
! 6816: {
! 6817: return abfd->is_thin_archive;
! 6818: }
! 6819:
! 6820: static inline void *
! 6821: bfd_usrdata (const bfd *abfd)
! 6822: {
! 6823: return abfd->usrdata;
! 6824: }
! 6825:
1.3 christos 6826: /* See note beside bfd_set_section_userdata. */
6827: static inline bfd_boolean
6828: bfd_set_cacheable (bfd * abfd, bfd_boolean val)
6829: {
6830: abfd->cacheable = val;
6831: return TRUE;
6832: }
1.1 christos 6833:
1.7 ! christos 6834: static inline void
! 6835: bfd_set_thin_archive (bfd *abfd, bfd_boolean val)
! 6836: {
! 6837: abfd->is_thin_archive = val;
! 6838: }
! 6839:
! 6840: static inline void
! 6841: bfd_set_usrdata (bfd *abfd, void *val)
! 6842: {
! 6843: abfd->usrdata = val;
! 6844: }
! 6845:
! 6846: static inline asection *
! 6847: bfd_asymbol_section (const asymbol *sy)
! 6848: {
! 6849: return sy->section;
! 6850: }
! 6851:
! 6852: static inline bfd_vma
! 6853: bfd_asymbol_value (const asymbol *sy)
! 6854: {
! 6855: return sy->section->vma + sy->value;
! 6856: }
! 6857:
! 6858: static inline const char *
! 6859: bfd_asymbol_name (const asymbol *sy)
! 6860: {
! 6861: return sy->name;
! 6862: }
! 6863:
! 6864: static inline struct bfd *
! 6865: bfd_asymbol_bfd (const asymbol *sy)
! 6866: {
! 6867: return sy->the_bfd;
! 6868: }
! 6869:
! 6870: static inline void
! 6871: bfd_set_asymbol_name (asymbol *sy, const char *name)
! 6872: {
! 6873: sy->name = name;
! 6874: }
! 6875:
! 6876: static inline bfd_size_type
! 6877: bfd_get_section_limit_octets (const bfd *abfd, const asection *sec)
! 6878: {
! 6879: if (abfd->direction != write_direction && sec->rawsize != 0)
! 6880: return sec->rawsize;
! 6881: return sec->size;
! 6882: }
! 6883:
! 6884: /* Find the address one past the end of SEC. */
! 6885: static inline bfd_size_type
! 6886: bfd_get_section_limit (const bfd *abfd, const asection *sec)
! 6887: {
! 6888: return (bfd_get_section_limit_octets (abfd, sec)
! 6889: / bfd_octets_per_byte (abfd, sec));
! 6890: }
! 6891:
! 6892: /* Functions to handle insertion and deletion of a bfd's sections. These
! 6893: only handle the list pointers, ie. do not adjust section_count,
! 6894: target_index etc. */
! 6895: static inline void
! 6896: bfd_section_list_remove (bfd *abfd, asection *s)
! 6897: {
! 6898: asection *next = s->next;
! 6899: asection *prev = s->prev;
! 6900: if (prev)
! 6901: prev->next = next;
! 6902: else
! 6903: abfd->sections = next;
! 6904: if (next)
! 6905: next->prev = prev;
! 6906: else
! 6907: abfd->section_last = prev;
! 6908: }
! 6909:
! 6910: static inline void
! 6911: bfd_section_list_append (bfd *abfd, asection *s)
! 6912: {
! 6913: s->next = 0;
! 6914: if (abfd->section_last)
! 6915: {
! 6916: s->prev = abfd->section_last;
! 6917: abfd->section_last->next = s;
! 6918: }
! 6919: else
! 6920: {
! 6921: s->prev = 0;
! 6922: abfd->sections = s;
! 6923: }
! 6924: abfd->section_last = s;
! 6925: }
! 6926:
! 6927: static inline void
! 6928: bfd_section_list_prepend (bfd *abfd, asection *s)
! 6929: {
! 6930: s->prev = 0;
! 6931: if (abfd->sections)
! 6932: {
! 6933: s->next = abfd->sections;
! 6934: abfd->sections->prev = s;
! 6935: }
! 6936: else
! 6937: {
! 6938: s->next = 0;
! 6939: abfd->section_last = s;
! 6940: }
! 6941: abfd->sections = s;
! 6942: }
! 6943:
! 6944: static inline void
! 6945: bfd_section_list_insert_after (bfd *abfd, asection *a, asection *s)
! 6946: {
! 6947: asection *next = a->next;
! 6948: s->next = next;
! 6949: s->prev = a;
! 6950: a->next = s;
! 6951: if (next)
! 6952: next->prev = s;
! 6953: else
! 6954: abfd->section_last = s;
! 6955: }
! 6956:
! 6957: static inline void
! 6958: bfd_section_list_insert_before (bfd *abfd, asection *b, asection *s)
! 6959: {
! 6960: asection *prev = b->prev;
! 6961: s->prev = prev;
! 6962: s->next = b;
! 6963: b->prev = s;
! 6964: if (prev)
! 6965: prev->next = s;
! 6966: else
! 6967: abfd->sections = s;
! 6968: }
! 6969:
! 6970: static inline bfd_boolean
! 6971: bfd_section_removed_from_list (const bfd *abfd, const asection *s)
! 6972: {
! 6973: return s->next ? s->next->prev != s : abfd->section_last != s;
! 6974: }
! 6975:
1.1 christos 6976:
6977: typedef enum bfd_error
6978: {
6979: bfd_error_no_error = 0,
6980: bfd_error_system_call,
6981: bfd_error_invalid_target,
6982: bfd_error_wrong_format,
6983: bfd_error_wrong_object_format,
6984: bfd_error_invalid_operation,
6985: bfd_error_no_memory,
6986: bfd_error_no_symbols,
6987: bfd_error_no_armap,
6988: bfd_error_no_more_archived_files,
6989: bfd_error_malformed_archive,
1.3 christos 6990: bfd_error_missing_dso,
1.1 christos 6991: bfd_error_file_not_recognized,
6992: bfd_error_file_ambiguously_recognized,
6993: bfd_error_no_contents,
6994: bfd_error_nonrepresentable_section,
6995: bfd_error_no_debug_section,
6996: bfd_error_bad_value,
6997: bfd_error_file_truncated,
6998: bfd_error_file_too_big,
1.7 ! christos 6999: bfd_error_sorry,
1.1 christos 7000: bfd_error_on_input,
7001: bfd_error_invalid_error_code
7002: }
7003: bfd_error_type;
7004:
7005: bfd_error_type bfd_get_error (void);
7006:
1.6 christos 7007: void bfd_set_error (bfd_error_type error_tag);
7008:
7009: void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
1.1 christos 7010:
7011: const char *bfd_errmsg (bfd_error_type error_tag);
7012:
7013: void bfd_perror (const char *message);
7014:
1.3 christos 7015:
1.6 christos 7016: typedef void (*bfd_error_handler_type) (const char *, va_list);
7017:
7018: void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
1.1 christos 7019:
7020: bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
7021:
7022: void bfd_set_error_program_name (const char *);
7023:
1.3 christos 7024:
1.1 christos 7025: typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
7026: const char *bfd_version,
7027: const char *bfd_file,
7028: int bfd_line);
7029:
7030: bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
7031:
7032: long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
7033:
7034: long bfd_canonicalize_reloc
7035: (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
7036:
7037: void bfd_set_reloc
7038: (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
7039:
1.6 christos 7040: #define bfd_set_reloc(abfd, asect, location, count) \
7041: BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count))
1.1 christos 7042: bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
7043:
7044: int bfd_get_arch_size (bfd *abfd);
7045:
7046: int bfd_get_sign_extend_vma (bfd *abfd);
7047:
7048: bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
7049:
7050: unsigned int bfd_get_gp_size (bfd *abfd);
7051:
7052: void bfd_set_gp_size (bfd *abfd, unsigned int i);
7053:
7054: bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
7055:
7056: bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
7057:
7058: #define bfd_copy_private_header_data(ibfd, obfd) \
1.6 christos 7059: BFD_SEND (obfd, _bfd_copy_private_header_data, \
7060: (ibfd, obfd))
1.1 christos 7061: bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
7062:
7063: #define bfd_copy_private_bfd_data(ibfd, obfd) \
1.6 christos 7064: BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
7065: (ibfd, obfd))
1.1 christos 7066: bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
7067:
7068: #define bfd_set_private_flags(abfd, flags) \
1.6 christos 7069: BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
1.1 christos 7070: #define bfd_sizeof_headers(abfd, info) \
7071: BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
7072:
7073: #define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
7074: BFD_SEND (abfd, _bfd_find_nearest_line, \
1.3 christos 7075: (abfd, syms, sec, off, file, func, line, NULL))
1.1 christos 7076:
7077: #define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
1.6 christos 7078: line, disc) \
1.3 christos 7079: BFD_SEND (abfd, _bfd_find_nearest_line, \
7080: (abfd, syms, sec, off, file, func, line, disc))
1.1 christos 7081:
7082: #define bfd_find_line(abfd, syms, sym, file, line) \
7083: BFD_SEND (abfd, _bfd_find_line, \
7084: (abfd, syms, sym, file, line))
7085:
7086: #define bfd_find_inliner_info(abfd, file, func, line) \
7087: BFD_SEND (abfd, _bfd_find_inliner_info, \
7088: (abfd, file, func, line))
7089:
7090: #define bfd_debug_info_start(abfd) \
7091: BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
7092:
7093: #define bfd_debug_info_end(abfd) \
7094: BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
7095:
7096: #define bfd_debug_info_accumulate(abfd, section) \
7097: BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
7098:
7099: #define bfd_stat_arch_elt(abfd, stat) \
7100: BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
7101:
7102: #define bfd_update_armap_timestamp(abfd) \
7103: BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
7104:
7105: #define bfd_set_arch_mach(abfd, arch, mach)\
7106: BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
7107:
7108: #define bfd_relax_section(abfd, section, link_info, again) \
7109: BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
7110:
7111: #define bfd_gc_sections(abfd, link_info) \
7112: BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
7113:
7114: #define bfd_lookup_section_flags(link_info, flag_info, section) \
7115: BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
7116:
7117: #define bfd_merge_sections(abfd, link_info) \
7118: BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
7119:
7120: #define bfd_is_group_section(abfd, sec) \
7121: BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
7122:
1.7 ! christos 7123: #define bfd_group_name(abfd, sec) \
! 7124: BFD_SEND (abfd, _bfd_group_name, (abfd, sec))
! 7125:
1.1 christos 7126: #define bfd_discard_group(abfd, sec) \
7127: BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
7128:
7129: #define bfd_link_hash_table_create(abfd) \
7130: BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
7131:
7132: #define bfd_link_add_symbols(abfd, info) \
7133: BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
7134:
7135: #define bfd_link_just_syms(abfd, sec, info) \
7136: BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
7137:
7138: #define bfd_final_link(abfd, info) \
7139: BFD_SEND (abfd, _bfd_final_link, (abfd, info))
7140:
7141: #define bfd_free_cached_info(abfd) \
7142: BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
7143:
7144: #define bfd_get_dynamic_symtab_upper_bound(abfd) \
7145: BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
7146:
7147: #define bfd_print_private_bfd_data(abfd, file)\
7148: BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
7149:
7150: #define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
7151: BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
7152:
7153: #define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
7154: BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
7155: dyncount, dynsyms, ret))
7156:
7157: #define bfd_get_dynamic_reloc_upper_bound(abfd) \
7158: BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
7159:
7160: #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
7161: BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
7162:
7163: extern bfd_byte *bfd_get_relocated_section_contents
7164: (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
7165: bfd_boolean, asymbol **);
7166:
7167: bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
7168:
7169: bfd_vma bfd_emul_get_maxpagesize (const char *);
7170:
7171: void bfd_emul_set_maxpagesize (const char *, bfd_vma);
7172:
1.6 christos 7173: bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean);
1.1 christos 7174:
7175: void bfd_emul_set_commonpagesize (const char *, bfd_vma);
7176:
7177: char *bfd_demangle (bfd *, const char *, int);
7178:
1.3 christos 7179: void bfd_update_compression_header
7180: (bfd *abfd, bfd_byte *contents, asection *sec);
7181:
7182: bfd_boolean bfd_check_compression_header
7183: (bfd *abfd, bfd_byte *contents, asection *sec,
1.7 ! christos 7184: bfd_size_type *uncompressed_size,
! 7185: unsigned int *uncompressed_alignment_power);
1.3 christos 7186:
7187: int bfd_get_compression_header_size (bfd *abfd, asection *sec);
7188:
7189: bfd_size_type bfd_convert_section_size
7190: (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
7191:
7192: bfd_boolean bfd_convert_section_contents
7193: (bfd *ibfd, asection *isec, bfd *obfd,
7194: bfd_byte **ptr, bfd_size_type *ptr_size);
7195:
1.1 christos 7196: /* Extracted from archive.c. */
7197: symindex bfd_get_next_mapent
7198: (bfd *abfd, symindex previous, carsym **sym);
7199:
7200: bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
7201:
7202: bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
7203:
7204: /* Extracted from corefile.c. */
7205: const char *bfd_core_file_failing_command (bfd *abfd);
7206:
7207: int bfd_core_file_failing_signal (bfd *abfd);
7208:
7209: int bfd_core_file_pid (bfd *abfd);
7210:
7211: bfd_boolean core_file_matches_executable_p
7212: (bfd *core_bfd, bfd *exec_bfd);
7213:
7214: bfd_boolean generic_core_file_matches_executable_p
7215: (bfd *core_bfd, bfd *exec_bfd);
7216:
7217: /* Extracted from targets.c. */
7218: #define BFD_SEND(bfd, message, arglist) \
7219: ((*((bfd)->xvec->message)) arglist)
7220:
7221: #ifdef DEBUG_BFD_SEND
7222: #undef BFD_SEND
7223: #define BFD_SEND(bfd, message, arglist) \
7224: (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
7225: ((*((bfd)->xvec->message)) arglist) : \
7226: (bfd_assert (__FILE__,__LINE__), NULL))
7227: #endif
7228: #define BFD_SEND_FMT(bfd, message, arglist) \
7229: (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
7230:
7231: #ifdef DEBUG_BFD_SEND
7232: #undef BFD_SEND_FMT
7233: #define BFD_SEND_FMT(bfd, message, arglist) \
7234: (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
7235: (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
7236: (bfd_assert (__FILE__,__LINE__), NULL))
7237: #endif
7238:
7239: enum bfd_flavour
7240: {
1.3 christos 7241: /* N.B. Update bfd_flavour_name if you change this. */
1.1 christos 7242: bfd_target_unknown_flavour,
7243: bfd_target_aout_flavour,
7244: bfd_target_coff_flavour,
7245: bfd_target_ecoff_flavour,
7246: bfd_target_xcoff_flavour,
7247: bfd_target_elf_flavour,
7248: bfd_target_tekhex_flavour,
7249: bfd_target_srec_flavour,
7250: bfd_target_verilog_flavour,
7251: bfd_target_ihex_flavour,
7252: bfd_target_som_flavour,
7253: bfd_target_os9k_flavour,
7254: bfd_target_versados_flavour,
7255: bfd_target_msdos_flavour,
7256: bfd_target_ovax_flavour,
7257: bfd_target_evax_flavour,
7258: bfd_target_mmo_flavour,
7259: bfd_target_mach_o_flavour,
7260: bfd_target_pef_flavour,
7261: bfd_target_pef_xlib_flavour,
7262: bfd_target_sym_flavour
7263: };
7264:
7265: enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
7266:
7267: /* Forward declaration. */
7268: typedef struct bfd_link_info _bfd_link_info;
7269:
7270: /* Forward declaration. */
7271: typedef struct flag_info flag_info;
7272:
7273: typedef struct bfd_target
7274: {
7275: /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */
1.7 ! christos 7276: const char *name;
1.1 christos 7277:
7278: /* The "flavour" of a back end is a general indication about
7279: the contents of a file. */
7280: enum bfd_flavour flavour;
7281:
7282: /* The order of bytes within the data area of a file. */
7283: enum bfd_endian byteorder;
7284:
7285: /* The order of bytes within the header parts of a file. */
7286: enum bfd_endian header_byteorder;
7287:
7288: /* A mask of all the flags which an executable may have set -
7289: from the set <<BFD_NO_FLAGS>>, <<HAS_RELOC>>, ...<<D_PAGED>>. */
7290: flagword object_flags;
7291:
7292: /* A mask of all the flags which a section may have set - from
7293: the set <<SEC_NO_FLAGS>>, <<SEC_ALLOC>>, ...<<SET_NEVER_LOAD>>. */
7294: flagword section_flags;
7295:
7296: /* The character normally found at the front of a symbol.
7297: (if any), perhaps `_'. */
7298: char symbol_leading_char;
7299:
7300: /* The pad character for file names within an archive header. */
7301: char ar_pad_char;
7302:
7303: /* The maximum number of characters in an archive header. */
7304: unsigned char ar_max_namelen;
7305:
7306: /* How well this target matches, used to select between various
7307: possible targets when more than one target matches. */
7308: unsigned char match_priority;
7309:
7310: /* Entries for byte swapping for data. These are different from the
7311: other entry points, since they don't take a BFD as the first argument.
7312: Certain other handlers could do the same. */
7313: bfd_uint64_t (*bfd_getx64) (const void *);
7314: bfd_int64_t (*bfd_getx_signed_64) (const void *);
7315: void (*bfd_putx64) (bfd_uint64_t, void *);
7316: bfd_vma (*bfd_getx32) (const void *);
7317: bfd_signed_vma (*bfd_getx_signed_32) (const void *);
7318: void (*bfd_putx32) (bfd_vma, void *);
7319: bfd_vma (*bfd_getx16) (const void *);
7320: bfd_signed_vma (*bfd_getx_signed_16) (const void *);
7321: void (*bfd_putx16) (bfd_vma, void *);
7322:
7323: /* Byte swapping for the headers. */
7324: bfd_uint64_t (*bfd_h_getx64) (const void *);
7325: bfd_int64_t (*bfd_h_getx_signed_64) (const void *);
7326: void (*bfd_h_putx64) (bfd_uint64_t, void *);
7327: bfd_vma (*bfd_h_getx32) (const void *);
7328: bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
7329: void (*bfd_h_putx32) (bfd_vma, void *);
7330: bfd_vma (*bfd_h_getx16) (const void *);
7331: bfd_signed_vma (*bfd_h_getx_signed_16) (const void *);
7332: void (*bfd_h_putx16) (bfd_vma, void *);
7333:
7334: /* Format dependent routines: these are vectors of entry points
7335: within the target vector structure, one for each format to check. */
7336:
7337: /* Check the format of a file being read. Return a <<bfd_target *>> or zero. */
1.6 christos 7338: const struct bfd_target *
7339: (*_bfd_check_format[bfd_type_end]) (bfd *);
1.1 christos 7340:
7341: /* Set the format of a file being written. */
7342: bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
7343:
7344: /* Write cached information into a file being written, at <<bfd_close>>. */
7345: bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
7346:
7347:
7348: /* Generic entry points. */
7349: #define BFD_JUMP_TABLE_GENERIC(NAME) \
7350: NAME##_close_and_cleanup, \
7351: NAME##_bfd_free_cached_info, \
7352: NAME##_new_section_hook, \
7353: NAME##_get_section_contents, \
7354: NAME##_get_section_contents_in_window
7355:
7356: /* Called when the BFD is being closed to do any necessary cleanup. */
7357: bfd_boolean (*_close_and_cleanup) (bfd *);
7358: /* Ask the BFD to free all cached information. */
7359: bfd_boolean (*_bfd_free_cached_info) (bfd *);
7360: /* Called when a new section is created. */
7361: bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
7362: /* Read the contents of a section. */
1.6 christos 7363: bfd_boolean (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr,
7364: bfd_size_type);
7365: bfd_boolean (*_bfd_get_section_contents_in_window) (bfd *, sec_ptr,
7366: bfd_window *, file_ptr,
7367: bfd_size_type);
1.1 christos 7368:
7369: /* Entry points to copy private data. */
7370: #define BFD_JUMP_TABLE_COPY(NAME) \
7371: NAME##_bfd_copy_private_bfd_data, \
7372: NAME##_bfd_merge_private_bfd_data, \
7373: _bfd_generic_init_private_section_data, \
7374: NAME##_bfd_copy_private_section_data, \
7375: NAME##_bfd_copy_private_symbol_data, \
7376: NAME##_bfd_copy_private_header_data, \
7377: NAME##_bfd_set_private_flags, \
7378: NAME##_bfd_print_private_bfd_data
7379:
7380: /* Called to copy BFD general private data from one object file
7381: to another. */
7382: bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
7383: /* Called to merge BFD general private data from one object file
7384: to a common output file when linking. */
1.6 christos 7385: bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
1.1 christos 7386: /* Called to initialize BFD private section data from one object file
7387: to another. */
7388: #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
1.6 christos 7389: BFD_SEND (obfd, _bfd_init_private_section_data, \
7390: (ibfd, isec, obfd, osec, link_info))
7391: bfd_boolean (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *,
7392: sec_ptr,
7393: struct bfd_link_info *);
1.1 christos 7394: /* Called to copy BFD private section data from one object file
7395: to another. */
1.6 christos 7396: bfd_boolean (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *,
7397: sec_ptr);
1.1 christos 7398: /* Called to copy BFD private symbol data from one symbol
7399: to another. */
1.6 christos 7400: bfd_boolean (*_bfd_copy_private_symbol_data) (bfd *, asymbol *, bfd *,
7401: asymbol *);
1.1 christos 7402: /* Called to copy BFD private header data from one object file
7403: to another. */
1.6 christos 7404: bfd_boolean (*_bfd_copy_private_header_data) (bfd *, bfd *);
1.1 christos 7405: /* Called to set private backend flags. */
7406: bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
7407:
7408: /* Called to print private BFD data. */
7409: bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
7410:
7411: /* Core file entry points. */
7412: #define BFD_JUMP_TABLE_CORE(NAME) \
7413: NAME##_core_file_failing_command, \
7414: NAME##_core_file_failing_signal, \
7415: NAME##_core_file_matches_executable_p, \
7416: NAME##_core_file_pid
7417:
7418: char * (*_core_file_failing_command) (bfd *);
7419: int (*_core_file_failing_signal) (bfd *);
7420: bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
7421: int (*_core_file_pid) (bfd *);
7422:
7423: /* Archive entry points. */
7424: #define BFD_JUMP_TABLE_ARCHIVE(NAME) \
7425: NAME##_slurp_armap, \
7426: NAME##_slurp_extended_name_table, \
7427: NAME##_construct_extended_name_table, \
7428: NAME##_truncate_arname, \
7429: NAME##_write_armap, \
7430: NAME##_read_ar_hdr, \
7431: NAME##_write_ar_hdr, \
7432: NAME##_openr_next_archived_file, \
7433: NAME##_get_elt_at_index, \
7434: NAME##_generic_stat_arch_elt, \
7435: NAME##_update_armap_timestamp
7436:
7437: bfd_boolean (*_bfd_slurp_armap) (bfd *);
7438: bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
1.6 christos 7439: bfd_boolean (*_bfd_construct_extended_name_table) (bfd *, char **,
7440: bfd_size_type *,
7441: const char **);
1.1 christos 7442: void (*_bfd_truncate_arname) (bfd *, const char *, char *);
1.6 christos 7443: bfd_boolean (*write_armap) (bfd *, unsigned int, struct orl *,
7444: unsigned int, int);
1.1 christos 7445: void * (*_bfd_read_ar_hdr_fn) (bfd *);
7446: bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
7447: bfd * (*openr_next_archived_file) (bfd *, bfd *);
1.6 christos 7448: #define bfd_get_elt_at_index(b,i) \
7449: BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
1.1 christos 7450: bfd * (*_bfd_get_elt_at_index) (bfd *, symindex);
7451: int (*_bfd_stat_arch_elt) (bfd *, struct stat *);
7452: bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
7453:
7454: /* Entry points used for symbols. */
7455: #define BFD_JUMP_TABLE_SYMBOLS(NAME) \
7456: NAME##_get_symtab_upper_bound, \
7457: NAME##_canonicalize_symtab, \
7458: NAME##_make_empty_symbol, \
7459: NAME##_print_symbol, \
7460: NAME##_get_symbol_info, \
1.3 christos 7461: NAME##_get_symbol_version_string, \
1.1 christos 7462: NAME##_bfd_is_local_label_name, \
7463: NAME##_bfd_is_target_special_symbol, \
7464: NAME##_get_lineno, \
7465: NAME##_find_nearest_line, \
1.3 christos 7466: NAME##_find_line, \
1.1 christos 7467: NAME##_find_inliner_info, \
7468: NAME##_bfd_make_debug_symbol, \
7469: NAME##_read_minisymbols, \
7470: NAME##_minisymbol_to_symbol
7471:
7472: long (*_bfd_get_symtab_upper_bound) (bfd *);
1.6 christos 7473: long (*_bfd_canonicalize_symtab) (bfd *, struct bfd_symbol **);
1.1 christos 7474: struct bfd_symbol *
7475: (*_bfd_make_empty_symbol) (bfd *);
1.6 christos 7476: void (*_bfd_print_symbol) (bfd *, void *, struct bfd_symbol *,
7477: bfd_print_symbol_type);
7478: #define bfd_print_symbol(b,p,s,e) \
7479: BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
7480: void (*_bfd_get_symbol_info) (bfd *, struct bfd_symbol *,
7481: symbol_info *);
7482: #define bfd_get_symbol_info(b,p,e) \
7483: BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
7484: const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *,
7485: bfd_boolean *);
7486: #define bfd_get_symbol_version_string(b,s,h) \
7487: BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h))
1.1 christos 7488: bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
7489: bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
7490: alent * (*_get_lineno) (bfd *, struct bfd_symbol *);
1.6 christos 7491: bfd_boolean (*_bfd_find_nearest_line) (bfd *, struct bfd_symbol **,
7492: struct bfd_section *, bfd_vma,
7493: const char **, const char **,
7494: unsigned int *, unsigned int *);
7495: bfd_boolean (*_bfd_find_line) (bfd *, struct bfd_symbol **,
7496: struct bfd_symbol *, const char **,
7497: unsigned int *);
1.1 christos 7498: bfd_boolean (*_bfd_find_inliner_info)
7499: (bfd *, const char **, const char **, unsigned int *);
7500: /* Back-door to allow format-aware applications to create debug symbols
7501: while using BFD for everything else. Currently used by the assembler
7502: when creating COFF files. */
1.6 christos 7503: asymbol * (*_bfd_make_debug_symbol) (bfd *, void *, unsigned long size);
1.1 christos 7504: #define bfd_read_minisymbols(b, d, m, s) \
1.6 christos 7505: BFD_SEND (b, _read_minisymbols, (b, d, m, s))
7506: long (*_read_minisymbols) (bfd *, bfd_boolean, void **,
7507: unsigned int *);
1.1 christos 7508: #define bfd_minisymbol_to_symbol(b, d, m, f) \
1.6 christos 7509: BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
7510: asymbol * (*_minisymbol_to_symbol) (bfd *, bfd_boolean, const void *,
7511: asymbol *);
1.1 christos 7512:
7513: /* Routines for relocs. */
7514: #define BFD_JUMP_TABLE_RELOCS(NAME) \
7515: NAME##_get_reloc_upper_bound, \
7516: NAME##_canonicalize_reloc, \
1.6 christos 7517: NAME##_set_reloc, \
1.1 christos 7518: NAME##_bfd_reloc_type_lookup, \
7519: NAME##_bfd_reloc_name_lookup
7520:
7521: long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
1.6 christos 7522: long (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **,
7523: struct bfd_symbol **);
7524: void (*_bfd_set_reloc) (bfd *, sec_ptr, arelent **, unsigned int);
1.1 christos 7525: /* See documentation on reloc types. */
7526: reloc_howto_type *
7527: (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
7528: reloc_howto_type *
7529: (*reloc_name_lookup) (bfd *, const char *);
7530:
7531: /* Routines used when writing an object file. */
7532: #define BFD_JUMP_TABLE_WRITE(NAME) \
7533: NAME##_set_arch_mach, \
7534: NAME##_set_section_contents
7535:
1.6 christos 7536: bfd_boolean (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture,
7537: unsigned long);
7538: bfd_boolean (*_bfd_set_section_contents) (bfd *, sec_ptr, const void *,
7539: file_ptr, bfd_size_type);
1.1 christos 7540:
7541: /* Routines used by the linker. */
7542: #define BFD_JUMP_TABLE_LINK(NAME) \
7543: NAME##_sizeof_headers, \
7544: NAME##_bfd_get_relocated_section_contents, \
7545: NAME##_bfd_relax_section, \
7546: NAME##_bfd_link_hash_table_create, \
7547: NAME##_bfd_link_add_symbols, \
7548: NAME##_bfd_link_just_syms, \
7549: NAME##_bfd_copy_link_hash_symbol_type, \
7550: NAME##_bfd_final_link, \
7551: NAME##_bfd_link_split_section, \
1.5 christos 7552: NAME##_bfd_link_check_relocs, \
1.1 christos 7553: NAME##_bfd_gc_sections, \
7554: NAME##_bfd_lookup_section_flags, \
7555: NAME##_bfd_merge_sections, \
7556: NAME##_bfd_is_group_section, \
1.7 ! christos 7557: NAME##_bfd_group_name, \
1.1 christos 7558: NAME##_bfd_discard_group, \
7559: NAME##_section_already_linked, \
1.6 christos 7560: NAME##_bfd_define_common_symbol, \
7561: NAME##_bfd_link_hide_symbol, \
7562: NAME##_bfd_define_start_stop
1.1 christos 7563:
7564: int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
1.6 christos 7565: bfd_byte * (*_bfd_get_relocated_section_contents) (bfd *,
7566: struct bfd_link_info *,
7567: struct bfd_link_order *,
7568: bfd_byte *, bfd_boolean,
7569: struct bfd_symbol **);
1.1 christos 7570:
1.6 christos 7571: bfd_boolean (*_bfd_relax_section) (bfd *, struct bfd_section *,
7572: struct bfd_link_info *, bfd_boolean *);
1.1 christos 7573:
7574: /* Create a hash table for the linker. Different backends store
7575: different information in this table. */
7576: struct bfd_link_hash_table *
7577: (*_bfd_link_hash_table_create) (bfd *);
7578:
7579: /* Add symbols from this object file into the hash table. */
7580: bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
7581:
7582: /* Indicate that we are only retrieving symbol values from this section. */
7583: void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
7584:
1.3 christos 7585: /* Copy the symbol type and other attributes for a linker script
7586: assignment of one symbol to another. */
1.1 christos 7587: #define bfd_copy_link_hash_symbol_type(b, t, f) \
1.6 christos 7588: BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
7589: void (*_bfd_copy_link_hash_symbol_type) (bfd *,
7590: struct bfd_link_hash_entry *,
7591: struct bfd_link_hash_entry *);
1.1 christos 7592:
7593: /* Do a link based on the link_order structures attached to each
7594: section of the BFD. */
7595: bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
7596:
7597: /* Should this section be split up into smaller pieces during linking. */
7598: bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
7599:
1.5 christos 7600: /* Check the relocations in the bfd for validity. */
7601: bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
7602:
1.1 christos 7603: /* Remove sections that are not referenced from the output. */
7604: bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
7605:
7606: /* Sets the bitmask of allowed and disallowed section flags. */
7607: bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
1.6 christos 7608: struct flag_info *, asection *);
1.1 christos 7609:
7610: /* Attempt to merge SEC_MERGE sections. */
7611: bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
7612:
7613: /* Is this section a member of a group? */
7614: bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
7615:
1.7 ! christos 7616: /* The group name, if section is a member of a group. */
! 7617: const char *(*_bfd_group_name) (bfd *, const struct bfd_section *);
! 7618:
1.1 christos 7619: /* Discard members of a group. */
7620: bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
7621:
7622: /* Check if SEC has been already linked during a reloceatable or
7623: final link. */
7624: bfd_boolean (*_section_already_linked) (bfd *, asection *,
7625: struct bfd_link_info *);
7626:
7627: /* Define a common symbol. */
7628: bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
7629: struct bfd_link_hash_entry *);
7630:
1.6 christos 7631: /* Hide a symbol. */
7632: void (*_bfd_link_hide_symbol) (bfd *, struct bfd_link_info *,
7633: struct bfd_link_hash_entry *);
7634:
7635: /* Define a __start, __stop, .startof. or .sizeof. symbol. */
7636: struct bfd_link_hash_entry *
7637: (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
7638: asection *);
7639:
1.1 christos 7640: /* Routines to handle dynamic symbols and relocs. */
7641: #define BFD_JUMP_TABLE_DYNAMIC(NAME) \
7642: NAME##_get_dynamic_symtab_upper_bound, \
7643: NAME##_canonicalize_dynamic_symtab, \
7644: NAME##_get_synthetic_symtab, \
7645: NAME##_get_dynamic_reloc_upper_bound, \
7646: NAME##_canonicalize_dynamic_reloc
7647:
7648: /* Get the amount of memory required to hold the dynamic symbols. */
7649: long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
7650: /* Read in the dynamic symbols. */
1.6 christos 7651: long (*_bfd_canonicalize_dynamic_symtab) (bfd *, struct bfd_symbol **);
1.1 christos 7652: /* Create synthetized symbols. */
1.6 christos 7653: long (*_bfd_get_synthetic_symtab) (bfd *, long, struct bfd_symbol **,
7654: long, struct bfd_symbol **,
7655: struct bfd_symbol **);
1.1 christos 7656: /* Get the amount of memory required to hold the dynamic relocs. */
7657: long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
7658: /* Read in the dynamic relocs. */
1.6 christos 7659: long (*_bfd_canonicalize_dynamic_reloc) (bfd *, arelent **,
7660: struct bfd_symbol **);
1.1 christos 7661:
7662: /* Opposite endian version of this target. */
1.6 christos 7663: const struct bfd_target *alternative_target;
1.1 christos 7664:
7665: /* Data for use by back-end routines, which isn't
7666: generic enough to belong in this structure. */
7667: const void *backend_data;
7668:
7669: } bfd_target;
7670:
1.7 ! christos 7671: static inline const char *
! 7672: bfd_get_target (const bfd *abfd)
! 7673: {
! 7674: return abfd->xvec->name;
! 7675: }
! 7676:
! 7677: static inline enum bfd_flavour
! 7678: bfd_get_flavour (const bfd *abfd)
! 7679: {
! 7680: return abfd->xvec->flavour;
! 7681: }
! 7682:
! 7683: static inline flagword
! 7684: bfd_applicable_file_flags (const bfd *abfd)
! 7685: {
! 7686: return abfd->xvec->object_flags;
! 7687: }
! 7688:
! 7689: static inline bfd_boolean
! 7690: bfd_family_coff (const bfd *abfd)
! 7691: {
! 7692: return (bfd_get_flavour (abfd) == bfd_target_coff_flavour
! 7693: || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
! 7694: }
! 7695:
! 7696: static inline bfd_boolean
! 7697: bfd_big_endian (const bfd *abfd)
! 7698: {
! 7699: return abfd->xvec->byteorder == BFD_ENDIAN_BIG;
! 7700: }
! 7701: static inline bfd_boolean
! 7702: bfd_little_endian (const bfd *abfd)
! 7703: {
! 7704: return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE;
! 7705: }
! 7706:
! 7707: static inline bfd_boolean
! 7708: bfd_header_big_endian (const bfd *abfd)
! 7709: {
! 7710: return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG;
! 7711: }
! 7712:
! 7713: static inline bfd_boolean
! 7714: bfd_header_little_endian (const bfd *abfd)
! 7715: {
! 7716: return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE;
! 7717: }
! 7718:
! 7719: static inline flagword
! 7720: bfd_applicable_section_flags (const bfd *abfd)
! 7721: {
! 7722: return abfd->xvec->section_flags;
! 7723: }
! 7724:
! 7725: static inline char
! 7726: bfd_get_symbol_leading_char (const bfd *abfd)
! 7727: {
! 7728: return abfd->xvec->symbol_leading_char;
! 7729: }
! 7730:
! 7731: static inline enum bfd_flavour
! 7732: bfd_asymbol_flavour (const asymbol *sy)
! 7733: {
! 7734: if ((sy->flags & BSF_SYNTHETIC) != 0)
! 7735: return bfd_target_unknown_flavour;
! 7736: return sy->the_bfd->xvec->flavour;
! 7737: }
! 7738:
1.1 christos 7739: bfd_boolean bfd_set_default_target (const char *name);
7740:
7741: const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
7742:
7743: const bfd_target *bfd_get_target_info (const char *target_name,
7744: bfd *abfd,
7745: bfd_boolean *is_bigendian,
7746: int *underscoring,
7747: const char **def_target_arch);
7748: const char ** bfd_target_list (void);
7749:
1.6 christos 7750: const bfd_target *bfd_iterate_over_targets
7751: (int (*func) (const bfd_target *, void *),
7752: void *data);
1.1 christos 7753:
1.3 christos 7754: const char *bfd_flavour_name (enum bfd_flavour flavour);
7755:
1.1 christos 7756: /* Extracted from format.c. */
7757: bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
7758:
7759: bfd_boolean bfd_check_format_matches
7760: (bfd *abfd, bfd_format format, char ***matching);
7761:
7762: bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
7763:
7764: const char *bfd_format_string (bfd_format format);
7765:
7766: /* Extracted from linker.c. */
1.7 ! christos 7767: /* Return TRUE if the symbol described by a linker hash entry H
! 7768: is going to be absolute. Linker-script defined symbols can be
! 7769: converted from absolute to section-relative ones late in the
! 7770: link. Use this macro to correctly determine whether the symbol
! 7771: will actually end up absolute in output. */
! 7772: #define bfd_is_abs_symbol(H) \
! 7773: (((H)->type == bfd_link_hash_defined \
! 7774: || (H)->type == bfd_link_hash_defweak) \
! 7775: && bfd_is_abs_section ((H)->u.def.section) \
! 7776: && !(H)->rel_from_abs)
! 7777:
1.1 christos 7778: bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
7779:
7780: #define bfd_link_split_section(abfd, sec) \
7781: BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
7782:
7783: bfd_boolean bfd_section_already_linked (bfd *abfd,
7784: asection *sec,
7785: struct bfd_link_info *info);
7786:
7787: #define bfd_section_already_linked(abfd, sec, info) \
7788: BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
7789:
7790: bfd_boolean bfd_generic_define_common_symbol
7791: (bfd *output_bfd, struct bfd_link_info *info,
7792: struct bfd_link_hash_entry *h);
7793:
7794: #define bfd_define_common_symbol(output_bfd, info, h) \
7795: BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
7796:
1.6 christos 7797: void _bfd_generic_link_hide_symbol
7798: (bfd *output_bfd, struct bfd_link_info *info,
7799: struct bfd_link_hash_entry *h);
7800:
7801: #define bfd_link_hide_symbol(output_bfd, info, h) \
7802: BFD_SEND (output_bfd, _bfd_link_hide_symbol, (output_bfd, info, h))
7803:
7804: struct bfd_link_hash_entry *bfd_generic_define_start_stop
7805: (struct bfd_link_info *info,
7806: const char *symbol, asection *sec);
7807:
7808: #define bfd_define_start_stop(output_bfd, info, symbol, sec) \
7809: BFD_SEND (output_bfd, _bfd_define_start_stop, (info, symbol, sec))
7810:
1.1 christos 7811: struct bfd_elf_version_tree * bfd_find_version_for_sym
7812: (struct bfd_elf_version_tree *verdefs,
7813: const char *sym_name, bfd_boolean *hide);
7814:
7815: bfd_boolean bfd_hide_sym_by_version
7816: (struct bfd_elf_version_tree *verdefs, const char *sym_name);
7817:
1.5 christos 7818: bfd_boolean bfd_link_check_relocs
7819: (bfd *abfd, struct bfd_link_info *info);
7820:
7821: bfd_boolean _bfd_generic_link_check_relocs
7822: (bfd *abfd, struct bfd_link_info *info);
7823:
1.6 christos 7824: bfd_boolean bfd_merge_private_bfd_data
7825: (bfd *ibfd, struct bfd_link_info *info);
7826:
7827: #define bfd_merge_private_bfd_data(ibfd, info) \
7828: BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
7829: (ibfd, info))
1.1 christos 7830: /* Extracted from simple.c. */
7831: bfd_byte *bfd_simple_get_relocated_section_contents
7832: (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table);
7833:
7834: /* Extracted from compress.c. */
7835: bfd_boolean bfd_get_full_section_contents
7836: (bfd *abfd, asection *section, bfd_byte **ptr);
7837:
1.3 christos 7838: void bfd_cache_section_contents
7839: (asection *sec, void *contents);
7840:
7841: bfd_boolean bfd_is_section_compressed_with_header
7842: (bfd *abfd, asection *section,
7843: int *compression_header_size_p,
1.7 ! christos 7844: bfd_size_type *uncompressed_size_p,
! 7845: unsigned int *uncompressed_alignment_power_p);
1.3 christos 7846:
1.1 christos 7847: bfd_boolean bfd_is_section_compressed
7848: (bfd *abfd, asection *section);
7849:
7850: bfd_boolean bfd_init_section_decompress_status
7851: (bfd *abfd, asection *section);
7852:
7853: bfd_boolean bfd_init_section_compress_status
7854: (bfd *abfd, asection *section);
7855:
1.3 christos 7856: bfd_boolean bfd_compress_section
7857: (bfd *abfd, asection *section, bfd_byte *uncompressed_buffer);
7858:
1.1 christos 7859: #ifdef __cplusplus
7860: }
7861: #endif
7862: #endif
CVSweb <webmaster@jp.NetBSD.org>