/* BFD COFF object file private structure.
- Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+ Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001
Free Software Foundation, Inc.
Written by Cygnus Support.
#define obj_coff_strings(bfd) (coff_data (bfd)->strings)
#define obj_coff_keep_strings(bfd) (coff_data (bfd)->keep_strings)
#define obj_coff_sym_hashes(bfd) (coff_data (bfd)->sym_hashes)
+#define obj_coff_strings_written(bfd) (coff_data (bfd)->strings_written)
#define obj_coff_local_toc_table(bfd) (coff_data(bfd)->local_toc_sym_map)
char *strings;
/* If this is true, the strings may not be freed. */
boolean keep_strings;
+ /* If this is true, the strings have been written out already. */
+ boolean strings_written;
/* is this a PE format coff file */
int pe;
/* Used by coff_find_nearest_line. */
PTR line_info;
+ /* A place to stash dwarf2 info for this bfd. */
+ PTR dwarf2_find_line_info;
+
/* The timestamp from the COFF file header. */
long timestamp;
int has_reloc_section;
boolean (*in_reloc_p) PARAMS((bfd *, reloc_howto_type *));
flagword real_flags;
+ int target_subsystem;
+ boolean force_minimum_alignment;
} pe_data_type;
#define pe_data(bfd) ((bfd)->tdata.pe_obj_data)
/* Basic COFF information. */
coff_data_type coff;
+ /* True if this is an XCOFF64 file. */
+ boolean xcoff64;
+
/* True if a large a.out header should be generated. */
boolean full_aouthdr;
short cputype;
/* maxdata from optional header. */
- bfd_size_type maxdata;
+ bfd_vma maxdata;
/* maxstack from optional header. */
- bfd_size_type maxstack;
+ bfd_vma maxstack;
/* Used by the XCOFF backend linker. */
asection **csects;
#define xcoff_section_data(abfd, sec) \
((struct xcoff_section_tdata *) coff_section_data ((abfd), (sec))->tdata)
-/* Tdata for sections in PEI image files. */
+/* Tdata for sections in PE files. */
struct pei_section_tdata
{
/* The virtual size of the section. */
bfd_size_type virt_size;
+ /* The PE section flags. */
+ long pe_flags;
};
/* An accessor macro for the pei_section_tdata structure. */
typedef struct coff_ptr_struct
{
- /* Remembers the offset from the first symbol in the file for
+ /* Remembers the offset from the first symbol in the file for
this symbol. Generated by coff_renumber_symbols. */
unsigned int offset;
- /* Should the value of this symbol be renumbered. Used for
+ /* Should the value of this symbol be renumbered. Used for
XCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */
unsigned int fix_value : 1;
- /* Should the tag field of this symbol be renumbered.
+ /* Should the tag field of this symbol be renumbered.
Created by coff_pointerize_aux. */
unsigned int fix_tag : 1;
- /* Should the endidx field of this symbol be renumbered.
+ /* Should the endidx field of this symbol be renumbered.
Created by coff_pointerize_aux. */
unsigned int fix_end : 1;
- /* Should the x_csect.x_scnlen field be renumbered.
+ /* Should the x_csect.x_scnlen field be renumbered.
Created by coff_pointerize_aux. */
unsigned int fix_scnlen : 1;
- /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the
+ /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the
index into the line number entries. Set by
coff_slurp_symbol_table. */
unsigned int fix_line : 1;
- /* The container for the symbol structure as read and translated
+ /* The container for the symbol structure as read and translated
from the file. */
union {
} combined_entry_type;
- /* Each canonical asymbol really looks like this: */
+/* Each canonical asymbol really looks like this: */
typedef struct coff_symbol_struct
{
- /* The actual symbol which the rest of BFD works with */
+ /* The actual symbol which the rest of BFD works with */
asymbol symbol;
- /* A pointer to the hidden information for this symbol */
+ /* A pointer to the hidden information for this symbol */
combined_entry_type *native;
- /* A pointer to the linenumber information for this symbol */
+ /* A pointer to the linenumber information for this symbol */
struct lineno_cache_entry *lineno;
- /* Have the line numbers been relocated yet ? */
+ /* Have the line numbers been relocated yet ? */
boolean done_lineno;
} coff_symbol_type;
- /* COFF symbol classifications. */
+/* COFF symbol classifications. */
enum coff_symbol_classification
{
- /* Global symbol. */
+ /* Global symbol. */
COFF_SYMBOL_GLOBAL,
- /* Common symbol. */
+ /* Common symbol. */
COFF_SYMBOL_COMMON,
- /* Undefined symbol. */
+ /* Undefined symbol. */
COFF_SYMBOL_UNDEFINED,
- /* Local symbol. */
+ /* Local symbol. */
COFF_SYMBOL_LOCAL,
- /* PE section symbol. */
+ /* PE section symbol. */
COFF_SYMBOL_PE_SECTION
};
unsigned int _bfd_auxesz;
unsigned int _bfd_relsz;
unsigned int _bfd_linesz;
+ unsigned int _bfd_filnmlen;
boolean _bfd_coff_long_filenames;
boolean _bfd_coff_long_section_names;
unsigned int _bfd_coff_default_section_alignment_power;
+ boolean _bfd_coff_force_symnames_in_strings;
+ unsigned int _bfd_coff_debug_string_prefix_length;
void (*_bfd_coff_swap_filehdr_in) PARAMS ((
bfd *abfd,
PTR ext,
flagword (*_bfd_styp_to_sec_flags_hook) PARAMS ((
bfd *abfd,
PTR internal_scnhdr,
- const char *name));
+ const char *name,
+ asection *section));
void (*_bfd_set_alignment_hook) PARAMS ((
bfd *abfd,
asection *sec,
struct bfd_link_info *info,
bfd *abfd,
const char *name,
- flagword flags,
+ flagword flags,
asection *section,
bfd_vma value,
const char *string,
boolean copy,
- boolean collect,
+ boolean collect,
struct bfd_link_hash_entry **hashp));
boolean (*_bfd_coff_link_output_has_begun) PARAMS ((
#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
#define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz)
#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
+#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
#define bfd_coff_long_filenames(abfd) (coff_backend_info (abfd)->_bfd_coff_long_filenames)
#define bfd_coff_long_section_names(abfd) \
(coff_backend_info (abfd)->_bfd_coff_long_section_names)
#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
((coff_backend_info (abfd)->_bfd_coff_mkobject_hook) (abfd, filehdr, aouthdr))
-#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name)\
- ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook) (abfd, scnhdr, name))
+#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section)\
+ ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
+ (abfd, scnhdr, name, section))
#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
#define bfd_coff_symname_in_debug(abfd, sym)\
((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
+#define bfd_coff_force_symnames_in_strings(abfd)\
+ (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
+
+#define bfd_coff_debug_string_prefix_length(abfd)\
+ (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
+
#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
((coff_backend_info (abfd)->_bfd_coff_print_aux)\
(abfd, file, base, symbol, aux, indaux))