/* A unique sequence number. */
unsigned int id;
+ /* A unique section number which can be used by assembler to
+ distinguish different sections with the same section name. */
+ unsigned int section_id;
+
/* Which section in the bfd; 0..n-1 as sections are created in a bfd. */
unsigned int index;
else up the line will take care of it later. */
#define SEC_LINKER_CREATED 0x100000
+ /* This section contains a section ID to distinguish different
+ sections with the same section name. */
+#define SEC_ASSEMBLER_SECTION_ID 0x100000
+
/* This section should not be subject to garbage collection.
Also set to inform the linker that this section should not be
listed in the link map as discarded. */
/* Early in the link process, map_head and map_tail are used to build
a list of input sections attached to an output section. Later,
output sections use these fields for a list of bfd_link_order
- structs. */
+ structs. The linked_to_symbol_name field is for ELF assembler
+ internal use. */
union {
struct bfd_link_order *link_order;
struct bfd_section *s;
+ const char *linked_to_symbol_name;
} map_head, map_tail;
+ /* Points to the output section this section is already assigned to, if any.
+ This is used when support for non-contiguous memory regions is enabled. */
+ struct bfd_section *already_assigned;
+
} asection;
/* Relax table contains information about instructions which can
}
#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \
- /* name, id, index, next, prev, flags, user_set_vma, */ \
- { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
+ /* name, id, section_id, index, next, prev, flags, user_set_vma, */ \
+ { NAME, IDX, 0, 0, NULL, NULL, FLAGS, 0, \
\
- /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \
+ /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \
0, 0, 1, 0, \
\
- /* segment_mark, sec_info_type, use_rela_p, */ \
+ /* segment_mark, sec_info_type, use_rela_p, */ \
0, 0, 0, \
\
- /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \
+ /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \
0, 0, 0, 0, 0, 0, \
\
- /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \
+ /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \
0, 0, 0, 0, 0, 0, 0, \
\
- /* output_offset, output_section, alignment_power, */ \
+ /* output_offset, output_section, alignment_power, */ \
0, &SEC, 0, \
\
- /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
+ /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
NULL, NULL, 0, 0, 0, \
\
- /* line_filepos, userdata, contents, lineno, lineno_count, */ \
+ /* line_filepos, userdata, contents, lineno, lineno_count, */ \
0, NULL, NULL, NULL, 0, \
\
/* entsize, kept_section, moving_line_filepos, */ \
- 0, NULL, 0, \
+ 0, NULL, 0, \
\
- /* target_index, used_by_bfd, constructor_chain, owner, */ \
+ /* target_index, used_by_bfd, constructor_chain, owner, */ \
0, NULL, NULL, NULL, \
\
- /* symbol, symbol_ptr_ptr, */ \
+ /* symbol, symbol_ptr_ptr, */ \
(struct bfd_symbol *) SYM, &SEC.symbol, \
\
- /* map_head, map_tail */ \
- { NULL }, { NULL } \
+ /* map_head, map_tail, already_assigned */ \
+ { NULL }, { NULL }, NULL \
+ \
}
/* We use a macro to initialize the static asymbol structures because
bfd_arch_xtensa, /* Tensilica's Xtensa cores. */
#define bfd_mach_xtensa 1
bfd_arch_z80,
-#define bfd_mach_gbz80 0 /* GameBoy Z80 (reduced instruction set) */
-#define bfd_mach_z80strict 1 /* Z80 without undocumented opcodes. */
-#define bfd_mach_z180 2 /* Z180: successor with additional instructions, but without halves of ix and iy */
-#define bfd_mach_z80 3 /* Z80 with ixl, ixh, iyl, and iyh. */
-#define bfd_mach_ez80_z80 4 /* eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode */
-#define bfd_mach_ez80_adl 5 /* eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode */
-#define bfd_mach_z80full 7 /* Z80 with all undocumented instructions. */
-#define bfd_mach_r800 11 /* R800: successor with multiplication. */
+/* Zilog Z80 without undocumented opcodes. */
+#define bfd_mach_z80strict 1
+/* Zilog Z180: successor with additional instructions, but without
+ halves of ix and iy. */
+#define bfd_mach_z180 2
+/* Zilog Z80 with ixl, ixh, iyl, and iyh. */
+#define bfd_mach_z80 3
+/* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode. */
+#define bfd_mach_ez80_z80 4
+/* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode. */
+#define bfd_mach_ez80_adl 5
+/* Z80N */
+#define bfd_mach_z80n 6
+/* Zilog Z80 with all undocumented instructions. */
+#define bfd_mach_z80full 7
+/* GameBoy Z80 (reduced instruction set). */
+#define bfd_mach_gbz80 8
+/* ASCII R800: successor with multiplication. */
+#define bfd_mach_r800 11
bfd_arch_lm32, /* Lattice Mico32. */
#define bfd_mach_lm32 1
bfd_arch_microblaze,/* Xilinx MicroBlaze. */
/* Highest 16 bits of multibyte (32 or 24 bit) value. */
BFD_RELOC_Z80_WORD1,
+/* Like BFD_RELOC_16 but big-endian. */
+ BFD_RELOC_Z80_16_BE,
+
/* DJNZ offset. */
BFD_RELOC_Z8K_DISP7,
/* A unique identifier of the BFD */
unsigned int id;
- /* The format which belongs to the BFD. (object, core, etc.) */
- ENUM_BITFIELD (bfd_format) format : 3;
-
- /* The direction with which the BFD was opened. */
- ENUM_BITFIELD (bfd_direction) direction : 2;
-
/* Format_specific flags. */
flagword flags;
| BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
| BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
+ /* The format which belongs to the BFD. (object, core, etc.) */
+ ENUM_BITFIELD (bfd_format) format : 3;
+
+ /* The direction with which the BFD was opened. */
+ ENUM_BITFIELD (bfd_direction) direction : 2;
+
/* Is the file descriptor being cached? That is, can it be closed as
needed, and re-opened when accessed later? */
unsigned int cacheable : 1;
/* Symbol table for output BFD (with symcount entries).
Also used by the linker to cache input BFD symbols. */
- struct bfd_symbol **outsymbols;
+ struct bfd_symbol **outsymbols;
/* Used for input and output. */
unsigned int symcount;
/* Pointer to structure which contains architecture information. */
const struct bfd_arch_info *arch_info;
+ /* Cached length of file for bfd_get_size. 0 until bfd_get_size is
+ called, 1 if stat returns an error or the file size is too large to
+ return in ufile_ptr. Both 0 and 1 should be treated as "unknown". */
+ ufile_ptr size;
+
/* Stuff only useful for archives. */
void *arelt_data;
struct bfd *my_archive; /* The containing archive BFD. */
BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
#define bfd_stat_arch_elt(abfd, stat) \
- BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
+ BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \
+ _bfd_stat_arch_elt, (abfd, stat))
#define bfd_update_armap_timestamp(abfd) \
BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
/* Forward declaration. */
typedef struct flag_info flag_info;
+typedef void (*bfd_cleanup) (bfd *);
+
typedef struct bfd_target
{
/* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */
/* Format dependent routines: these are vectors of entry points
within the target vector structure, one for each format to check. */
- /* Check the format of a file being read. Return a <<bfd_target *>> or zero. */
- const struct bfd_target *
- (*_bfd_check_format[bfd_type_end]) (bfd *);
+ /* Check the format of a file being read. Return a <<bfd_cleanup>> on
+ success or zero on failure. */
+ bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *);
/* Set the format of a file being written. */
bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);