Wed Jun 28 18:04:42 1995 Steve Chamberlain <sac@slash.cygnus.com>

* Makefile.in: versados.o is now conditionally built.
	* coffcode.h (add_data_entry): New function.
	(coff_write_object_contents): Clean up. Calculate
	data entries.
	* cofflink.c (_bfd_coff_generic_relocate_section):
	.reloc and .edata sections are IMAGE_BASED too.
	If there's a base_file then write out base information.
	* configure.host (i386-*-pe): New.
	* syms.c (coff_section_type): Only scan prefixes.
	* targets.c (bfd_target_vector): Versados is now conditionally
	built.
	* config/m68k-coff.mt: Build versados.o
	* hosts/i386pe.h: New file.
This commit is contained in:
Steve Chamberlain 1995-06-29 01:17:58 +00:00
parent 6f2d32120e
commit 89665c8562
10 changed files with 573 additions and 91 deletions

View File

@ -1,3 +1,19 @@
Wed Jun 28 18:04:42 1995 Steve Chamberlain <sac@slash.cygnus.com>
* Makefile.in: versados.o is now conditionally built.
* coffcode.h (add_data_entry): New function.
(coff_write_object_contents): Clean up. Calculate
data entries.
* cofflink.c (_bfd_coff_generic_relocate_section):
.reloc and .edata sections are IMAGE_BASED too.
If there's a base_file then write out base information.
* configure.host (i386-*-pe): New.
* syms.c (coff_section_type): Only scan prefixes.
* targets.c (bfd_target_vector): Versados is now conditionally
built.
* config/m68k-coff.mt: Build versados.o
* hosts/i386pe.h: New file.
Mon Jun 26 13:53:49 1995 Jeff Law (law@snake.cs.utah.edu)
* elf32-hpa.c (elf32_hppa_relocate_section): Close comment before

View File

@ -86,7 +86,7 @@ BFD_LIBS = \
archive.o archures.o bfd.o cache.o coffgen.o core.o \
format.o init.o libbfd.o opncls.o reloc.o \
section.o syms.o targets.o hash.o linker.o \
elf.o srec.o binary.o
elf.o srec.o binary.o tekhex.o
# This list is alphabetized to make it easier to keep in sync
# with the decls and initializer in archures.c.
@ -171,6 +171,7 @@ BFD32_BACKENDS = \
i386bsd.o \
i386linux.o \
i386lynx.o \
i386msdos.o \
i386netbsd.o \
i386mach3.o \
i386os9k.o \
@ -188,6 +189,10 @@ BFD32_BACKENDS = \
ns32knetbsd.o \
oasys.o \
pc532-mach.o \
pe-arm.o \
pei-arm.o \
pe-i386.o \
pei-i386.o \
reloc16.o \
sparclynx.o \
sparcnetbsd.o \
@ -447,11 +452,13 @@ install:
# if configured as $(oldincludedir) -- which it usually isnt.
$(INSTALL_DATA) $(BFD_H) $(includedir)/bfd.h
$(INSTALL_DATA) $(INCDIR)/ansidecl.h $(includedir)/ansidecl.h
$(INSTALL_DATA) $(INCDIR)/bfdlink.h $(includedir)/bfdlink.h
$(INSTALL_DATA) $(INCDIR)/obstack.h $(includedir)/obstack.h
-if test -z "$(oldincludedir)"; then true; else \
test -d $(oldincludedir) || mkdir $(oldincludedir); \
$(INSTALL_DATA) $(BFD_H) $(oldincludedir)/bfd.h; \
$(INSTALL_DATA) $(INCDIR)/ansidecl.h $(oldincludedir)/ansidecl.h; \
$(INSTALL_DATA) $(INCDIR)/bfdlink.h $(oldincludedir)/bfdlink.h; \
$(INSTALL_DATA) $(INCDIR)/obstack.h $(oldincludedir)/obstack.h; \
$(MAKE) subdir_do DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS); \
fi
@ -559,6 +566,8 @@ cache.o: cache.c
archures.o: archures.c
coff-i386.o: coff-i386.c $(INCDIR)/coff/i386.h $(INCDIR)/coff/internal.h \
libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h
pe-i386.o: pe-i386.c coff-i386.c $(INCDIR)/coff/i386.h $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h
pei-i386.o: pei-i386.c coff-i386.c $(INCDIR)/coff/i386.h $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h
coff-go32.o: coff-go32.c coff-i386.c $(INCDIR)/coff/i386.h \
$(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \
coffcode.h coffswap.h
@ -577,6 +586,7 @@ demo64.o: demo64.c aoutf1.h $(INCDIR)/aout/sun4.h libaout.h \
coff-i960.o: coff-i960.c $(INCDIR)/coff/i960.h $(INCDIR)/coff/internal.h \
libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h
srec.o: srec.c $(INCDIR)/libiberty.h
versados.o: versados.c $(INCDIR)/libiberty.h
binary.o: binary.c
tekhex.o: tekhex.c $(INCDIR)/libiberty.h
oasys.o: oasys.c $(INCDIR)/oasys.h liboasys.h
@ -589,8 +599,9 @@ ecoff.o: ecoff.c $(INCDIR)/bfdlink.h $(INCDIR)/aout/ar.h \
libaout.h $(INCDIR)/aout/aout64.h $(INCDIR)/coff/internal.h \
$(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h \
libcoff.h libecoff.h
ecofflink.o: ecofflink.c $(INCDIR)/bfdlink.h $(INCDIR)/coff/internal.h \
$(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h
ecofflink.o: ecofflink.c $(INCDIR)/bfdlink.h $(INCDIR)/aout/stab_gnu.h \
$(INCDIR)/aout/stab.def $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \
$(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h
coff-m68k.o: coff-m68k.c $(INCDIR)/coff/m68k.h $(INCDIR)/coff/internal.h \
libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h
coff-u68k.o: coff-u68k.c coff-m68k.c $(INCDIR)/coff/m68k.h \

View File

@ -1,5 +1,5 @@
/* BFD back-end for Intel 386 COFF files.
Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@ -22,19 +22,26 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "sysdep.h"
#include "libbfd.h"
#include "obstack.h"
#include "coff/i386.h"
#include "coff/internal.h"
#ifdef COFF_WITH_PE
#include "coff/pe.h"
#endif
#include "libcoff.h"
static bfd_reloc_status_type coff_i386_reloc
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
static const struct reloc_howto_struct *coff_i386_rtype_to_howto
static reloc_howto_type *coff_i386_rtype_to_howto
PARAMS ((bfd *, asection *, struct internal_reloc *,
struct coff_link_hash_entry *, struct internal_syment *,
bfd_vma *));
#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
/* The page size is a guess based on ELF. */
#define COFF_PAGE_SIZE 0x1000
@ -130,6 +137,12 @@ coff_i386_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
return bfd_reloc_continue;
}
#ifndef PCRELOFFSET
#define PCRELOFFSET false
#endif
static reloc_howto_type howto_table[] =
{
{0},
@ -139,6 +152,20 @@ static reloc_howto_type howto_table[] =
{4},
{5},
HOWTO (R_DIR32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
coff_i386_reloc, /* special_function */
"dir32", /* name */
true, /* partial_inplace */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
true), /* pcrel_offset */
/* {7}, */
HOWTO (7, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
@ -151,7 +178,6 @@ static reloc_howto_type howto_table[] =
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
false), /* pcrel_offset */
{7},
{010},
{011},
{012},
@ -171,7 +197,7 @@ static reloc_howto_type howto_table[] =
true, /* partial_inplace */
0x000000ff, /* src_mask */
0x000000ff, /* dst_mask */
false), /* pcrel_offset */
PCRELOFFSET), /* pcrel_offset */
HOWTO (R_RELWORD, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@ -184,7 +210,7 @@ static reloc_howto_type howto_table[] =
true, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
false), /* pcrel_offset */
PCRELOFFSET), /* pcrel_offset */
HOWTO (R_RELLONG, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -197,7 +223,7 @@ static reloc_howto_type howto_table[] =
true, /* partial_inplace */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
false), /* pcrel_offset */
PCRELOFFSET), /* pcrel_offset */
HOWTO (R_PCRBYTE, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
@ -210,7 +236,7 @@ static reloc_howto_type howto_table[] =
true, /* partial_inplace */
0x000000ff, /* src_mask */
0x000000ff, /* dst_mask */
false), /* pcrel_offset */
PCRELOFFSET), /* pcrel_offset */
HOWTO (R_PCRWORD, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@ -223,7 +249,7 @@ static reloc_howto_type howto_table[] =
true, /* partial_inplace */
0x0000ffff, /* src_mask */
0x0000ffff, /* dst_mask */
false), /* pcrel_offset */
PCRELOFFSET), /* pcrel_offset */
HOWTO (R_PCRLONG, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -236,7 +262,7 @@ static reloc_howto_type howto_table[] =
true, /* partial_inplace */
0xffffffff, /* src_mask */
0xffffffff, /* dst_mask */
false) /* pcrel_offset */
PCRELOFFSET) /* pcrel_offset */
};
/* Turn a howto into a reloc nunmber */
@ -294,7 +320,7 @@ static reloc_howto_type howto_table[] =
/* We use the special COFF backend linker. */
#define coff_relocate_section _bfd_coff_generic_relocate_section
static const struct reloc_howto_struct *
static reloc_howto_type *
coff_i386_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
bfd *abfd;
asection *sec;
@ -303,10 +329,15 @@ coff_i386_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
struct internal_syment *sym;
bfd_vma *addendp;
{
const struct reloc_howto_struct *howto;
reloc_howto_type *howto;
howto = howto_table + rel->r_type;
#ifdef COFF_WITH_PE
*addendp = 0;
#endif
if (howto->pc_relative)
*addendp += sec->vma;
@ -317,16 +348,33 @@ coff_i386_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
function will be adding in the final value of the symbol. We
need to subtract out the current size in order to get the
correct result. */
BFD_ASSERT (h != NULL);
#ifndef COFF_WITH_PE
/* I think we *do* want to bypass this. If we don't, I have seen some data
parameters get the wrong relcation address. If I link two versions
with and without this section bypassed and then do a binary comparison,
the addresses which are different can be looked up in the map. The
case in which this section has been bypassed has addresses which correspond
to values I can find in the map */
*addendp -= sym->n_value;
#endif
}
/* If the output symbol is common (in which case this must be a
relocateable link), we need to add in the final size of the
common symbol. */
if (h != NULL && h->root.type == bfd_link_hash_common)
if (h != NULL && h->root.type == bfd_link_hash_common)
*addendp += h->root.u.c.size;
#ifdef COFF_WITH_PE
if (howto->pc_relative)
*addendp -= 4;
#endif
return howto;
}

View File

@ -298,6 +298,10 @@ CODE_FRAGMENT
*/
#ifndef IMAGE_BASE
#define IMAGE_BASE 0
#endif
#include "coffswap.h"
/* void warning(); */
@ -359,8 +363,7 @@ sec_to_styp_flags (sec_name, sec_flags)
styp_flags = STYP_INFO;
#endif
}
else if (!strcmp (sec_name, ".stab")
|| !strncmp (sec_name, ".stabstr", 8))
else if (!strncmp (sec_name, ".stab", 5))
{
styp_flags = STYP_INFO;
}
@ -489,8 +492,7 @@ styp_to_sec_flags (abfd, hdr, name)
#ifdef _COMMENT
|| strcmp (name, _COMMENT) == 0
#endif
|| strcmp (name, ".stab") == 0
|| strcmp (name, ".stabstr") == 0)
|| strncmp (name, ".stab", 5) == 0)
{
#ifdef COFF_PAGE_SIZE
sec_flags |= SEC_DEBUGGING;
@ -873,8 +875,7 @@ coff_new_section_hook (abfd, section)
.stabstr section this way for backward compatibility, although I
believe it would work anyhow. */
if (COFF_DEFAULT_SECTION_ALIGNMENT_POWER > 2
&& (strcmp (section->name, ".stab") == 0
|| strcmp (section->name, ".stabstr") == 0))
&& (strncmp (section->name, ".stab", 5) == 0))
section->alignment_power = 2;
return true;
@ -924,6 +925,10 @@ coff_mkobject (abfd)
coff->raw_syments = (struct coff_ptr_struct *) NULL;
coff->relocbase = 0;
/* make_abs_section(abfd);*/
#ifdef COFF_WITH_PE
obj_pe (abfd) = 1;
#endif
return true;
}
@ -991,7 +996,6 @@ coff_set_arch_mach_hook (abfd, filehdr)
machine = 0;
break;
#endif
#ifdef A29K_MAGIC_BIG
case A29K_MAGIC_BIG:
case A29K_MAGIC_LITTLE:
@ -999,7 +1003,12 @@ coff_set_arch_mach_hook (abfd, filehdr)
machine = 0;
break;
#endif
#ifdef ARMMAGIC
case ARMMAGIC:
arch = bfd_arch_arm;
machine =0;
break;
#endif
#ifdef MC68MAGIC
case MC68MAGIC:
case M68MAGIC:
@ -1178,8 +1187,9 @@ SUBSUBSECTION
*/
static boolean
coff_write_relocs (abfd)
coff_write_relocs (abfd, first_undef)
bfd * abfd;
int first_undef;
{
asection *s;
for (s = abfd->sections; s != (asection *) NULL; s = s->next)
@ -1196,31 +1206,57 @@ coff_write_relocs (abfd)
arelent *q = p[i];
memset ((PTR) & n, 0, sizeof (n));
/* Now we've renumbered the symbols we know where the
undefined symbols live in the table. Check the reloc
entries for symbols who's output bfd isn't the right one.
This is because the symbol was undefined (which means
that all the pointers are never made to point to the same
place). This is a bad thing,'cause the symbols attached
to the output bfd are indexed, so that the relocation
entries know which symbol index they point to. So we
have to look up the output symbol here. */
if (q->sym_ptr_ptr[0]->the_bfd != abfd)
{
int i;
const char *sname = q->sym_ptr_ptr[0]->name;
asymbol **outsyms = abfd->outsymbols;
for (i = first_undef; outsyms[i]; i++)
{
const char *intable = outsyms[i]->name;
if (strcmp (intable, sname) == 0) {
/* got a hit, so repoint the reloc */
q->sym_ptr_ptr = outsyms + i;
break;
}
}
}
n.r_vaddr = q->address + s->vma;
#ifdef R_IHCONST
/* The 29k const/consth reloc pair is a real kludge. The consth
part doesn't have a symbol; it has an offset. So rebuilt
that here. */
part doesn't have a symbol; it has an offset. So rebuilt
that here. */
if (q->howto->type == R_IHCONST)
n.r_symndx = q->addend;
else
#endif
if (q->sym_ptr_ptr)
{
if (q->sym_ptr_ptr == bfd_abs_section_ptr->symbol_ptr_ptr)
/* This is a relocation relative to the absolute symbol. */
n.r_symndx = -1;
else
{
n.r_symndx = get_index ((*(q->sym_ptr_ptr)));
/* Take notice if the symbol reloc points to a symbol
we don't have in our symbol table. What should we
do for this?? */
if (n.r_symndx > obj_conv_table_size (abfd))
abort ();
}
}
if (q->sym_ptr_ptr)
{
if (q->sym_ptr_ptr == bfd_abs_section_ptr->symbol_ptr_ptr)
/* This is a relocation relative to the absolute symbol. */
n.r_symndx = -1;
else
{
n.r_symndx = get_index ((*(q->sym_ptr_ptr)));
/* Take notice if the symbol reloc points to a symbol
we don't have in our symbol table. What should we
do for this?? */
if (n.r_symndx > obj_conv_table_size (abfd))
abort ();
}
}
#ifdef SWAP_OUT_RELOC_OFFSET
n.r_offset = q->addend;
@ -1312,6 +1348,11 @@ coff_set_flags (abfd, magicp, flagsp)
}
break;
#endif
#ifdef ARMMAGIC
case bfd_arch_arm:
*magicp = ARMMAGIC;
return true;
#endif
#ifdef I386MAGIC
case bfd_arch_i386:
*magicp = I386MAGIC;
@ -1474,6 +1515,16 @@ coff_compute_section_file_positions (abfd)
if (!(current->flags & SEC_HAS_CONTENTS))
continue;
#ifdef COFF_WITH_PE
/* Do not include the .junk section. This is where we collect section
data which we don't need. This is mainly the MS .debug$ data which
stores codeview debug data. */
if (strcmp (current->name, ".junk") == 0)
{
continue;
}
#endif
/* Align the sections in the file to the same boundary on
which they are aligned in virtual memory. I960 doesn't
do this (FIXME) so we can stay in sync with Intel. 960
@ -1521,8 +1572,17 @@ coff_compute_section_file_positions (abfd)
previous = current;
}
#ifdef COFF_WITH_PE
/* Normally, the starting location for the symbol table will be at the end
of the last section. However, when dealing with NT, the last section
must be as long as its size rounded up to the next page (0x1000). */
sofar = ((sofar + NT_FILE_ALIGNMENT - 1) /
NT_FILE_ALIGNMENT) * NT_FILE_ALIGNMENT;
#endif
obj_relocbase (abfd) = sofar;
abfd->output_has_begun = true;
}
#ifndef RS6000COFF_C
@ -1600,6 +1660,24 @@ coff_add_missing_symbols (abfd)
#endif /* ! defined (RS6000COFF_C) */
#ifdef COFF_WITH_PE
static void add_data_entry (abfd, aout, idx, name)
bfd *abfd;
struct internal_aouthdr *aout;
int idx;
char *name;
{
asection *sec = bfd_get_section_by_name (abfd, name);
/* add import directory information if it exists */
if (sec != NULL)
{
aout->DataDirectory[idx].VirtualAddress = sec->lma - NT_IMAGE_BASE;
aout->DataDirectory[idx].Size = sec->_raw_size;
}
}
#endif
/* SUPPRESS 558 */
/* SUPPRESS 529 */
static boolean
@ -1617,11 +1695,11 @@ coff_write_object_contents (abfd)
asection *text_sec = NULL;
asection *data_sec = NULL;
asection *bss_sec = NULL;
bfd_vma end_of_image = 0;
struct internal_filehdr internal_f;
struct internal_aouthdr internal_a;
bfd_set_error (bfd_error_system_call);
if (abfd->output_has_begun == false)
@ -1670,12 +1748,22 @@ coff_write_object_contents (abfd)
/* Write section headers to the file. */
internal_f.f_nscns = 0;
#if 0
if (bfd_seek (abfd,
(file_ptr) ((abfd->flags & EXEC_P) ?
(FILHSZ + AOUTSZ) : FILHSZ),
(EXTRA_NT_HDRSZ + FILHSZ + AOUTSZ) :
(EXTRA_NT_HDRSZ + FILHSZ)),
SEEK_SET)
!= 0)
return false;
#else
if (bfd_seek (abfd,
(file_ptr) ((abfd->flags & EXEC_P) ?
(FILHSZ + AOUTSZ) : FILHSZ),
SEEK_SET)
!= 0)
#endif
return false;
{
for (current = abfd->sections;
@ -1684,6 +1772,15 @@ coff_write_object_contents (abfd)
{
struct internal_scnhdr section;
#ifdef COFF_WITH_PE
/* Do not include the .junk section. This is where we collect section
data which we don't need. This is mainly the MS .debug$ data which
stores codeview debug data. */
if (strcmp (current->name, ".junk") == 0)
{
continue;
}
#endif
internal_f.f_nscns++;
strncpy (&(section.s_name[0]), current->name, 8);
#ifdef _LIB
@ -1696,6 +1793,12 @@ coff_write_object_contents (abfd)
section.s_vaddr = current->lma;
section.s_paddr = current->lma;
section.s_size = current->_raw_size;
/* Remember the address of the end of the last section */
if (current->lma + current->_raw_size > end_of_image)
end_of_image = current->lma + current->_raw_size ;
/*
If this section has no size or is unloadable then the scnptr
will be 0 too
@ -1748,9 +1851,24 @@ coff_write_object_contents (abfd)
{
SCNHDR buff;
coff_swap_scnhdr_out (abfd, &section, &buff);
if (bfd_write ((PTR) (&buff), 1, SCNHSZ, abfd) != SCNHSZ)
#ifdef WINDOWS_NT
/* suppress output of the sections if they are null. ld includes
the bss and data sections even if there is no size assigned
to them. NT loader doesn't like it if these section headers are
included if the sections themselves are not needed */
if (section.s_size == 0)
internal_f.f_nscns--;
else
{
coff_swap_scnhdr_out (abfd, &section, &buff);
if (bfd_write ((PTR) (&buff), 1, SCNHSZ, abfd) != SCNHSZ)
return false;
}
#else
if (coff_swap_scnhdr_out (abfd, &section, &buff) == 0
|| bfd_write ((PTR) (&buff), 1, SCNHSZ, abfd) != SCNHSZ)
return false;
#endif
}
}
@ -1762,11 +1880,11 @@ coff_write_object_contents (abfd)
/* Don't include the internal abs section in the section count */
/*
We will NOT put a fucking timestamp in the header here. Every time you
put it back, I will come in and take it out again. I'm sorry. This
field does not belong here. We fill it with a 0 so it compares the
same but is not a reasonable time. -- gnu@cygnus.com
*/
We will NOT put a fucking timestamp in the header here. Every time you
put it back, I will come in and take it out again. I'm sorry. This
field does not belong here. We fill it with a 0 so it compares the
same but is not a reasonable time. -- gnu@cygnus.com
*/
internal_f.f_timdat = 0;
internal_f.f_flags = 0;
@ -1788,10 +1906,62 @@ coff_write_object_contents (abfd)
else
internal_f.f_flags |= F_AR32W;
#ifdef COFF_WITH_PE
/* assign other filehdr fields for DOS header and NT signature */
internal_f.e_magic = DOSMAGIC;
internal_f.e_cblp = 0x90;
internal_f.e_cp = 0x3;
internal_f.e_crlc = 0x0;
internal_f.e_cparhdr = 0x4;
internal_f.e_minalloc = 0x0;
internal_f.e_maxalloc = 0xffff;
internal_f.e_ss = 0x0;
internal_f.e_sp = 0xb8;
internal_f.e_csum = 0x0;
internal_f.e_ip = 0x0;
internal_f.e_cs = 0x0;
internal_f.e_lfarlc = 0x40;
internal_f.e_ovno = 0x0;
{
int idx;
for (idx=0; idx < 4; idx++)
internal_f.e_res[idx] = 0x0;
}
internal_f.e_oemid = 0x0;
internal_f.e_oeminfo = 0x0;
{
int idx;
for (idx=0; idx < 10; idx++)
internal_f.e_res2[idx] = 0x0;
}
internal_f.e_lfanew = 0x80;
/* this next collection of data are mostly just characters. It appears
to be constant within the headers put on NT exes */
internal_f.dos_message[0] = 0x0eba1f0e;
internal_f.dos_message[1] = 0xcd09b400;
internal_f.dos_message[2] = 0x4c01b821;
internal_f.dos_message[3] = 0x685421cd;
internal_f.dos_message[4] = 0x70207369;
internal_f.dos_message[5] = 0x72676f72;
internal_f.dos_message[6] = 0x63206d61;
internal_f.dos_message[7] = 0x6f6e6e61;
internal_f.dos_message[8] = 0x65622074;
internal_f.dos_message[9] = 0x6e757220;
internal_f.dos_message[10] = 0x206e6920;
internal_f.dos_message[11] = 0x20534f44;
internal_f.dos_message[12] = 0x65646f6d;
internal_f.dos_message[13] = 0x0a0d0d2e;
internal_f.dos_message[14] = 0x24;
internal_f.dos_message[15] = 0x0;
internal_f.nt_signature = NT_SIGNATURE;
#endif
/*
FIXME, should do something about the other byte orders and
architectures.
*/
FIXME, should do something about the other byte orders and
architectures.
*/
memset (&internal_a, 0, sizeof internal_a);
@ -1808,14 +1978,14 @@ coff_write_object_contents (abfd)
#ifdef A29K
#ifdef ULTRA3 /* NYU's machine */
/* FIXME: This is a bogus check. I really want to see if there
* is a .shbss or a .shdata section, if so then set the magic
* number to indicate a shared data executable.
*/
* is a .shbss or a .shdata section, if so then set the magic
* number to indicate a shared data executable.
*/
if (internal_f.f_nscns >= 7)
internal_a.magic = SHMAGIC; /* Shared magic */
internal_a.magic = SHMAGIC; /* Shared magic */
else
#endif /* ULTRA3 */
internal_a.magic = NMAGIC;/* Assume separate i/d */
internal_a.magic = NMAGIC; /* Assume separate i/d */
#define __A_MAGIC_SET__
#endif /* A29K */
#ifdef I960
@ -1836,14 +2006,18 @@ coff_write_object_contents (abfd)
#define __A_MAGIC_SET__
#if defined(LYNXOS)
internal_a.magic = LYNXCOFFMAGIC;
#endif /* LYNXOS */
#endif /* M68 || WE32K || M68K */
#endif /* LYNXOS */
#endif /* M68 || WE32K || M68K */
#if defined(ARM)
#define __A_MAGIC_SET__
internal_a.magic = ZMAGIC;
#endif
#if defined(I386)
#define __A_MAGIC_SET__
#if defined(LYNXOS)
internal_a.magic = LYNXCOFFMAGIC;
#else /* LYNXOS */
#else /* LYNXOS */
internal_a.magic = ZMAGIC;
#endif /* LYNXOS */
#endif /* I386 */
@ -1851,15 +2025,15 @@ coff_write_object_contents (abfd)
#if defined(SPARC)
#define __A_MAGIC_SET__
#if defined(LYNXOS)
internal_a.magic = LYNXCOFFMAGIC;
#endif /* LYNXOS */
#endif /* SPARC */
internal_a.magic = LYNXCOFFMAGIC;
#endif /* LYNXOS */
#endif /* SPARC */
#if RS6000COFF_C
#define __A_MAGIC_SET__
internal_a.magic = (abfd->flags & D_PAGED) ? RS6K_AOUTHDR_ZMAGIC :
(abfd->flags & WP_TEXT) ? RS6K_AOUTHDR_NMAGIC :
RS6K_AOUTHDR_OMAGIC;
(abfd->flags & WP_TEXT) ? RS6K_AOUTHDR_NMAGIC :
RS6K_AOUTHDR_OMAGIC;
#endif
#ifndef __A_MAGIC_SET__
@ -1873,18 +2047,19 @@ coff_write_object_contents (abfd)
if (bfd_get_symcount (abfd) != 0)
{
int firstundef;
#ifndef RS6000COFF_C
if (!coff_add_missing_symbols (abfd))
return false;
#endif
if (!coff_renumber_symbols (abfd))
if (!coff_renumber_symbols (abfd, &firstundef))
return false;
coff_mangle_symbols (abfd);
if (! coff_write_symbols (abfd))
return false;
if (! coff_write_linenumbers (abfd))
return false;
if (! coff_write_relocs (abfd))
if (! coff_write_relocs (abfd, firstundef))
return false;
}
@ -1902,21 +2077,128 @@ coff_write_object_contents (abfd)
if (text_sec)
{
internal_a.tsize = bfd_get_section_size_before_reloc (text_sec);
internal_a.text_start = internal_a.tsize ? text_sec->vma : 0;
internal_a.text_start = internal_a.tsize ?
(text_sec->vma - IMAGE_BASE) : 0;
}
if (data_sec)
{
internal_a.dsize = bfd_get_section_size_before_reloc (data_sec);
internal_a.data_start = internal_a.dsize ? data_sec->vma : 0;
internal_a.data_start = internal_a.dsize ?
(data_sec->vma - IMAGE_BASE) : 0;
}
if (bss_sec)
{
internal_a.bsize = bfd_get_section_size_before_reloc (bss_sec);
}
internal_a.entry = bfd_get_start_address (abfd);
internal_a.entry = bfd_get_start_address (abfd) - IMAGE_BASE;
internal_f.f_nsyms = obj_raw_syment_count (abfd);
#ifdef COFF_WITH_PE /* write all of the other optional header data */
/* Note; the entries for subsystem, stack reserve, stack commit, heap reserve
and heap commit may be supplied on the command line via the -subsystem,
-stack and/or -heap switches. This data is initially stored in variable
link_info. This is eventually passed to the bfd (from ld) in (cofflink.c)
_bfd_coff_final_link. Once this function gets it, we copy it into variables
NT_subsystem and NT_stack_heap which are defined in internal.h. With
respect to the stack/heap reserve/commit parameters, if nothing has been
defined for these, the input values will be '0' (i.e. the values stored
in NT_stack_heap) will be 0. */
internal_a.ImageBase = NT_IMAGE_BASE; /* 0x400000 */
internal_a.SectionAlignment = NT_SECTION_ALIGNMENT; /* 0x1000 */
internal_a.FileAlignment = NT_FILE_ALIGNMENT; /* 0x200 */
internal_a.MajorOperatingSystemVersion = 1;
internal_a.MinorOperatingSystemVersion = 0;
internal_a.MajorImageVersion = 0;
internal_a.MinorImageVersion = 0;
internal_a.MajorSubsystemVersion = 3;
internal_a.MinorSubsystemVersion = 0xA;
internal_a.Reserved1 = 0;
/* Virtual start address, take virtual start address of last section,
add its physical size and round up the next page (NT_SECTION_ALIGNMENT).
An assumption has been made that the sections stored in the abfd
structure are in order and that I have successfully saved the last
section's address and size. */
internal_a.SizeOfImage =
(end_of_image - NT_IMAGE_BASE + NT_SECTION_ALIGNMENT - 1)
& ~ (NT_SECTION_ALIGNMENT-1);
/* Start of .text section will do here since it is the first section after
the headers. Note that NT_IMAGE_BASE has already been removed above */
internal_a.SizeOfHeaders = internal_a.text_start;
internal_a.CheckSum = 0;
switch (NT_subsystem)
{
/* The possible values are:
1 - NATIVE Doesn't require a subsystem
2 - WINDOWS_GUI runs in Windows GUI subsystem
3 - WINDOWS_CUI runs in Windows char sub. (console app)
5 - OS2_CUI runs in OS/2 character subsystem
7 - POSIX_CUI runs in Posix character subsystem */
case native:
internal_a.Subsystem = 1;
break;
case windows:
internal_a.Subsystem = 2;
break;
case console:
internal_a.Subsystem = 3;
break;
case os2:
internal_a.Subsystem = 5;
break;
case posix:
internal_a.Subsystem = 7;
break;
default:
internal_a.Subsystem = 3;
}
internal_a.DllCharacteristics = 0;
if (NT_stack_heap.stack_defined)
{
internal_a.SizeOfStackReserve = NT_stack_heap.stack_reserve;
/* since commit is an optional parameter, verify that it is non-zero */
if (NT_stack_heap.stack_commit > 0)
internal_a.SizeOfStackCommit = NT_stack_heap.stack_commit;
else
internal_a.SizeOfStackCommit = NT_DEF_COMMIT;
}
else
{
internal_a.SizeOfStackReserve = NT_DEF_RESERVE; /* 0x100000 */
internal_a.SizeOfStackCommit = NT_DEF_COMMIT; /* 0x1000 */
}
if (NT_stack_heap.heap_defined)
{
internal_a.SizeOfHeapReserve = NT_stack_heap.heap_reserve;
/* since commit is an optional parameter, verify that it is non-zero */
if (NT_stack_heap.heap_commit > 0)
internal_a.SizeOfHeapCommit = NT_stack_heap.heap_commit;
else
internal_a.SizeOfHeapCommit = NT_DEF_COMMIT;
}
else
{
internal_a.SizeOfHeapReserve = NT_DEF_RESERVE; /* 0x100000 */
internal_a.SizeOfHeapCommit = NT_DEF_COMMIT; /* 0x1000 */
}
internal_a.LoaderFlags = 0;
internal_a.NumberOfRvaAndSizes = IMAGE_NUMBEROF_DIRECTORY_ENTRIES; /* 0x10 */
/* first null out all data directory entries .. */
memset (internal_a.DataDirectory, sizeof (internal_a.DataDirectory), 0);
add_data_entry (abfd, &internal_a, 0, ".edata");
add_data_entry (abfd, &internal_a, 1, ".idata");
add_data_entry (abfd, &internal_a, 2, ".rsrc");
add_data_entry (abfd, &internal_a, 5, ".reloc");
#endif
/* now write them */
if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
return false;
@ -1933,6 +2215,7 @@ coff_write_object_contents (abfd)
if (bfd_write ((PTR) & buff, 1, AOUTSZ, abfd) != AOUTSZ)
return false;
}
return true;
}
@ -2107,6 +2390,7 @@ coff_slurp_symbol_table (abfd)
unsigned int *table_ptr;
unsigned int number_of_symbols = 0;
if (obj_symbols (abfd))
return true;
if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0)
@ -2174,6 +2458,10 @@ coff_slurp_symbol_table (abfd)
case C_EXT:
#ifdef RS6000COFF_C
case C_HIDEXT:
#endif
#ifdef COFF_WITH_PE
/* PE uses storage class 0x68 to denote a section symbol */
case C_SECTION:
#endif
if ((src->u.syment.n_scnum) == 0)
{
@ -2319,7 +2607,11 @@ coff_slurp_symbol_table (abfd)
case C_EXTDEF: /* external definition */
case C_ULABEL: /* undefined label */
case C_USTATIC: /* undefined static */
#ifndef COFF_WITH_PE
/* C_LINE in regular coff is 0x68. NT has taken over this storage
class to represent a section symbol */
case C_LINE: /* line # reformatted as symbol table entry */
#endif
case C_ALIAS: /* duplicate tag */
case C_HIDDEN: /* ext symbol in dmert public lib */
default:
@ -2378,6 +2670,10 @@ coff_slurp_symbol_table (abfd)
#define OTHER_GLOBAL_CLASS C_HIDEXT
#endif
#ifdef COFF_WITH_PE
#define OTHER_GLOBAL_CLASS C_SECTION
#endif
#ifdef OTHER_GLOBAL_CLASS
static boolean
@ -2686,6 +2982,7 @@ dummy_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
#define coff_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define coff_bfd_final_link _bfd_generic_final_link
#endif /* ! defined (coff_relocate_section) */
#define coff_bfd_link_split_section _bfd_generic_link_split_section
#ifndef coff_adjust_symndx
#define coff_adjust_symndx NULL
@ -2717,9 +3014,13 @@ static CONST bfd_coff_backend_data bfd_coff_std_swap_table =
#define coff_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
#define coff_get_section_contents _bfd_generic_get_section_contents
#define coff_bfd_copy_private_symbol_data \
_bfd_generic_bfd_copy_private_symbol_data
#define coff_bfd_copy_private_section_data \
_bfd_generic_bfd_copy_private_section_data
#define coff_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
#define coff_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data
#define coff_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
#ifndef coff_bfd_is_local_label
#define coff_bfd_is_local_label bfd_generic_is_local_label

View File

@ -674,9 +674,9 @@ process_embedded_commands (abfd)
char *s;
char *e;
char *copy;
if (!s)
if (!sec)
return 1;
copy = malloc (sec->_raw_size);
if (!copy)
{
@ -2312,6 +2312,10 @@ _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,
{
if (strncmp (sec->name, ".idata$", 7) == 0)
val -= NT_IMAGE_BASE;
if (strncmp (sec->name, ".reloc", 6) == 0)
val -= NT_IMAGE_BASE;
else if (strncmp (sec->name, ".edata", 5) == 0)
val -= NT_IMAGE_BASE;
else if (strncmp (sec->name, ".rsrc$", 6) == 0)
{
val -= NT_IMAGE_BASE;
@ -2339,6 +2343,10 @@ _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,
{
if (strncmp (sec->name, ".idata$", 7) == 0)
val -= NT_IMAGE_BASE;
else if (strncmp (sec->name, ".reloc", 5) == 0)
val -= NT_IMAGE_BASE;
else if (strncmp (sec->name, ".edata", 5) == 0)
val -= NT_IMAGE_BASE;
else if (strncmp (sec->name, ".rsrc$", 6) == 0)
{
val -= NT_IMAGE_BASE;
@ -2451,6 +2459,24 @@ _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,
val = val + add_to_val;
}
if (info->base_file)
{
/* So if this is non pcrelative, and is referenced
to a section or a common symbol, then it needs a reloc */
if (!howto->pc_relative
&& (sym->n_scnum
|| sym->n_value))
{
/* relocation to a symbol in a section which
isn't absolute - we output the address here
to a file */
bfd_vma addr = rel->r_vaddr +
+ input_section->output_offset
+ input_section->output_section->vma;
fwrite (&addr, 1,4, info->base_file);
}
}
rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
contents,

View File

@ -30,9 +30,11 @@ i[345]86-sequent-bsd*) my_host=symmetry ;;
i[345]86-sequent-sysv4*) my_host=sysv4 ;;
i[345]86-sequent-sysv*) my_host=symmetry ;;
i[345]86-*-bsd*) my_host=i386bsd ;;
i[345]86-*-freebsd*) my_host=i386bsd ;;
i[345]86-*-netbsd*) my_host=i386bsd ;;
i[345]86-ncr*-sysv4*) my_host=ncr3000 ;;
i[345]86-*-go32*) my_host=go32 ;;
i[345]86-*-pe*) my_host=i386pe ;;
i[345]86-esix-sysv3*) my_host=esix ;;
i[345]86-*-sysv4*) my_host=i386v4 ;;
i[345]86-*-sysv*) my_host=i386v ;;
@ -88,6 +90,7 @@ romp-*-*) my_host=rtbsd ;;
rs6000-*-lynx*) my_host=rs6000lynx ;;
rs6000-*-*) my_host=rs6000 ;;
powerpc-*-aix*) my_host=rs6000 ;;
sparc-*-lynxos*) my_host=sparclynx ;;
sparc-*-netbsd*) my_host=sparcnbsd;;

View File

@ -48,6 +48,7 @@ i386lynx.h
i386mach3.h
i386nbsd.h
i386osf1mk.h
i386pe.h
i386sco.h
i386v.h
i386v4.h

20
bfd/hosts/i386pe.h Normal file
View File

@ -0,0 +1,20 @@
#include <stddef.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#define FPRINTF_ALREADY_DECLARED
#ifndef O_ACCMODE
#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
#endif
#define SEEK_SET 0
#define SEEK_CUR 1
#define NO_FCNTL
#include "fopen-bin.h"

View File

@ -262,12 +262,15 @@ CODE_FRAGMENT
.
. {* A pointer to the section to which this symbol is
. relative. This will always be non NULL, there are special
. sections for undefined and absolute symbols *}
. sections for undefined and absolute symbols. *}
. struct sec *section;
.
. {* Back end special data. This is being phased out in favour
. of making this a union. *}
. PTR udata;
. {* Back end special data. *}
. union
. {
. PTR p;
. bfd_vma i;
. } udata;
.
.} asymbol;
*/
@ -392,16 +395,17 @@ bfd_print_symbol_vandf (arg, symbol)
}
/* This presumes that a symbol can not be both BSF_DEBUGGING and
BSF_DYNAMIC. */
BSF_DYNAMIC, nor both BSF_FUNCTION and BSF_FILE. */
fprintf (file, " %c%c%c%c%c%c%c",
(type & BSF_LOCAL) ? 'l' : ' ',
(type & BSF_GLOBAL) ? 'g' : ' ',
((type & BSF_LOCAL)
? (type & BSF_GLOBAL) ? '!' : 'l'
: (type & BSF_GLOBAL) ? 'g' : ' '),
(type & BSF_WEAK) ? 'w' : ' ',
(type & BSF_CONSTRUCTOR) ? 'C' : ' ',
(type & BSF_WARNING) ? 'W' : ' ',
(type & BSF_INDIRECT) ? 'I' : ' ',
(type & BSF_DEBUGGING) ? 'd'
: (type & BSF_DYNAMIC) ? 'D' : ' ');
(type & BSF_DEBUGGING) ? 'd' : (type & BSF_DYNAMIC) ? 'D' : ' ',
(type & BSF_FUNCTION) ? 'F' : (type & BSF_FILE) ? 'f' : ' ');
}
@ -459,7 +463,10 @@ static CONST struct section_to_type stt[] =
};
/* Return the single-character symbol type corresponding to
section S, or '?' for an unknown COFF section. */
section S, or '?' for an unknown COFF section.
Check for any leading string which matches, so .text5 returns
't' as well as .text */
static char
coff_section_type (s)
@ -467,9 +474,10 @@ coff_section_type (s)
{
CONST struct section_to_type *t;
for (t = &stt[0]; t->section; t++)
if (!strcmp (s, t->section))
for (t = &stt[0]; t->section; t++)
if (!strncmp (s, t->section, strlen (t->section)))
return t->type;
return '?';
}
@ -503,6 +511,8 @@ bfd_decode_symclass (symbol)
return 'U';
if (bfd_is_ind_section (symbol->section))
return 'I';
if (symbol->flags & BSF_WEAK)
return 'W';
if (!(symbol->flags & (BSF_GLOBAL | BSF_LOCAL)))
return '?';
@ -557,3 +567,25 @@ bfd_symbol_is_absolute ()
{
abort ();
}
/*
FUNCTION
bfd_copy_private_symbol_data
SYNOPSIS
boolean bfd_copy_private_symbol_data(bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
DESCRIPTION
Copy private symbol information from @var{isym} in the BFD
@var{ibfd} to the symbol @var{osym} in the BFD @var{obfd}.
Return <<true>> on success, <<false>> on error. Possible error
returns are:
o <<bfd_error_no_memory>> -
Not enough memory exists to create private data for @var{osec}.
.#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
. BFD_SEND (ibfd, _bfd_copy_private_symbol_data, \
. (ibfd, isymbol, obfd, osymbol))
*/

View File

@ -147,7 +147,7 @@ DESCRIPTION
. bfd_target_srec_flavour,
. bfd_target_som_flavour,
. bfd_target_os9k_flavour,
. bfd_target_msdos_flavour
. bfd_target_versados_flavour
.};
.
.{* Forward declaration. *}
@ -265,6 +265,7 @@ The general target vector.
.CAT(NAME,_bfd_copy_private_bfd_data),\
.CAT(NAME,_bfd_merge_private_bfd_data),\
.CAT(NAME,_bfd_copy_private_section_data),\
.CAT(NAME,_bfd_copy_private_symbol_data),\
.CAT(NAME,_bfd_set_private_flags)
. {* Called to copy BFD general private data from one object file
. to another. *}
@ -276,6 +277,10 @@ The general target vector.
. to another. *}
. boolean (*_bfd_copy_private_section_data) PARAMS ((bfd *, sec_ptr,
. bfd *, sec_ptr));
. {* Called to copy BFD private symbol data from one symbol
. to another. *}
. boolean (*_bfd_copy_private_symbol_data) PARAMS ((bfd *, asymbol *,
. bfd *, asymbol *));
. {* Called to set private backend flags *}
. boolean (*_bfd_set_private_flags) PARAMS ((bfd *, flagword));
.
@ -380,7 +385,8 @@ The general target vector.
.CAT(NAME,_bfd_relax_section),\
.CAT(NAME,_bfd_link_hash_table_create),\
.CAT(NAME,_bfd_link_add_symbols),\
.CAT(NAME,_bfd_final_link)
.CAT(NAME,_bfd_final_link),\
.CAT(NAME,_bfd_link_split_section)
. int (*_bfd_sizeof_headers) PARAMS ((bfd *, boolean));
. bfd_byte * (*_bfd_get_relocated_section_contents) PARAMS ((bfd *,
. struct bfd_link_info *, struct bfd_link_order *,
@ -401,6 +407,9 @@ The general target vector.
. section of the BFD. *}
. boolean (*_bfd_final_link) PARAMS ((bfd *, struct bfd_link_info *));
.
. {* Should this section be split up into smaller pieces during linking. *}
. boolean (*_bfd_link_split_section) PARAMS ((bfd *, struct sec *));
.
. {* Routines to handle dynamic symbols and relocs. *}
.#define BFD_JUMP_TABLE_DYNAMIC(NAME)\
.CAT(NAME,_get_dynamic_symtab_upper_bound),\
@ -433,10 +442,14 @@ in this structure.
we can't intermix extern's and initializers. */
extern const bfd_target a29kcoff_big_vec;
extern const bfd_target a_out_adobe_vec;
extern const bfd_target aout_arm_big_vec;
extern const bfd_target aout_arm_little_vec;
extern const bfd_target aout_mips_big_vec;
extern const bfd_target aout_mips_little_vec;
extern const bfd_target aout0_big_vec;
extern const bfd_target apollocoff_vec;
extern const bfd_target armpe_vec;
extern const bfd_target armpei_vec;
extern const bfd_target b_out_vec_big_host;
extern const bfd_target b_out_vec_little_host;
/* start-sanitize-arc */
@ -473,6 +486,8 @@ extern const bfd_target i386bsd_vec;
extern const bfd_target i386dynix_vec;
extern const bfd_target i386os9k_vec;
extern const bfd_target i386coff_vec;
extern const bfd_target i386pe_vec;
extern const bfd_target i386pei_vec;
extern const bfd_target go32coff_vec;
extern const bfd_target i386linux_vec;
extern const bfd_target i386lynx_aout_vec;
@ -511,6 +526,7 @@ extern const bfd_target sparcnetbsd_vec;
extern const bfd_target sparccoff_vec;
extern const bfd_target sunos_big_vec;
extern const bfd_target tekhex_vec;
extern const bfd_target versados_vec;
extern const bfd_target we32kcoff_vec;
extern const bfd_target w65_vec;
extern const bfd_target z8kcoff_vec;
@ -630,6 +646,10 @@ const bfd_target * const bfd_target_vector[] = {
&i386msdos_vec,
&i386netbsd_vec,
&i386os9k_vec,
&i386pe_vec,
&i386pei_vec,
&armpe_vec,
&armpei_vec,
&icoff_big_vec,
&icoff_little_vec,
&ieee_vec,
@ -657,7 +677,9 @@ const bfd_target * const bfd_target_vector[] = {
#endif
&pc532machaout_vec,
#if 0
/* We have no way of distinguishing this from other a.out variants */
/* We have no way of distinguishing these from other a.out variants */
&aout_arm_big_vec,
&aout_arm_little_vec,
&riscix_vec,
#endif
&rs6000coff_vec,
@ -673,6 +695,7 @@ const bfd_target * const bfd_target_vector[] = {
&aout0_big_vec,
&tekhex_vec,
&we32kcoff_vec,
&versados_vec,
&z8kcoff_vec,
#endif /* not SELECT_VECS */
@ -680,7 +703,8 @@ const bfd_target * const bfd_target_vector[] = {
/* Always support S-records, for convenience. */
&srec_vec,
&symbolsrec_vec,
/* And tekhex */
&tekhex_vec,
/* Likewise for binary output. */
&binary_vec,