* trad-core.c: Don't include <sys/file.h>.
* i386linux.h: Include <sys/file.h>.
* coff-m68k-un.c: new file to handle names with underscores on
svr3 machines.
* coff-m68k.c (m68k_rtype2howto): added #ifdef ONLY_DECLARE_RELOCS
to not duplicate the function in the executable.
(TARGET_SYM, TARGET_NAME, NAMES_HAVE_UNDERSCORE): new macros needed
by coff-m68k-un.c.
* coffcode.h (MC68KBCSMAGIC): case added.
* targets.c: Add m68kcoffun_vec.
* configure.host: added support for Bull dpx/2.
* config/dpx2.mh, hosts/dpx2.h: new files.
* Makefile.in: added target coff-m68k-un.
+Thu Jul 1 14:52:47 1993 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)
+ and Jim Kingdon (kingdon@cygnus.com)
+
+ * elfcode.h: Use memset not bzero.
+ * trad-core.c: Don't include <sys/file.h>.
+ * i386linux.h: Include <sys/file.h>.
+ * coff-m68k-un.c: new file to handle names with underscores on
+ svr3 machines.
+ * coff-m68k.c (m68k_rtype2howto): added #ifdef ONLY_DECLARE_RELOCS
+ to not duplicate the function in the executable.
+ (TARGET_SYM, TARGET_NAME, NAMES_HAVE_UNDERSCORE): new macros needed
+ by coff-m68k-un.c.
+ * coffcode.h (MC68KBCSMAGIC): case added.
+ * targets.c: Add m68kcoffun_vec.
+ * configure.host: added support for Bull dpx/2.
+ * config/dpx2.mh, hosts/dpx2.h: new files.
+ * Makefile.in: added target coff-m68k-un.
+
Fri Jul 9 00:43:06 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
* aoutf1.h: Add definition of MACHTYPE_OK.
aout32.o sunos.o newsos3.o mipsbsd.o aout-adobe.o \
i386aout.o i386bsd.o i386linux.o i386lynx.o \
hp300hpux.o bout.o \
- coff-i960.o coff-a29k.o coff-m68k.o coff-i386.o coff-m88k.o \
+ coff-i960.o coff-a29k.o coff-m68k.o coff-m68k-un.o \
+ coff-i386.o coff-m88k.o \
coff-rs6000.o coff-h8300.o coff-h8500.o coff-z8k.o coff-we32k.o \
coff-mips.o coff-msym.o coff-alpha.o coff-sh.o \
hppa.o oasys.o ieee.o srec.o \
# C source files that correspond to .o's.
CFILES = libbfd.c opncls.c bfd.c archive.c targets.c cache.c \
archures.c coff-i386.c aout64.c aout32.c sunos.c demo64.c \
- coff-i960.c srec.c tekhex.c oasys.c ieee.c coff-m68k.c \
+ coff-i960.c srec.c tekhex.c oasys.c ieee.c \
+ coff-m68k.c coff-m68k-un.c \
coff-a29k.c coff-rs6000.c coff-msym.c coffgen.c format.c \
section.c core.c syms.c stab-syms.c reloc.c init.c ctor.c \
seclet.c coff-m88k.c coff-mips.c coff-sh.c trad-core.c newsos3.c \
+/* BFD back-end for Motorola 68000 COFF binaries having underscore with name.
+ Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
+ Written by Cygnus Support.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#define TARGET_SYM m68kcoffun_vec
+#define TARGET_NAME "coff-m68k-un"
+
+#define NAMES_HAVE_UNDERSCORE
+
+/* define this to not have multiple copy of m68k_rtype2howto
+ in the executable file */
+#define ONLY_DECLARE_RELOCS
+
+/* This magic number indicates that the names have underscores.
+ Other 68k magic numbers indicate that the names do not have
+ underscores. */
+#define BADMAG(x) ((x).f_magic != MC68KBCSMAGIC)
+
+#include "coff-m68k.c"
-/* Motorola 68000 COFF back-end for BFD.
- Copyright (C) 1990-1991 Free Software Foundation, Inc.
+/* BFD back-end for Motorola 68000 COFF binaries.
+ Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
#include "coff/internal.h"
#include "libcoff.h"
- reloc_howto_type m68kcoff_howto_table[] =
+#ifdef ONLY_DECLARE_RELOCS
+extern reloc_howto_type m68kcoff_howto_table[];
+#else
+reloc_howto_type m68kcoff_howto_table[] =
{
HOWTO(R_RELBYTE, 0, 0, 8, false, 0, true, true,0,"8", true, 0x000000ff,0x000000ff, false),
HOWTO(R_RELWORD, 0, 1, 16, false, 0, true, true,0,"16", true, 0x0000ffff,0x0000ffff, false),
HOWTO(R_PCRLONG, 0, 2, 32, true, 0, false, true,0,"DISP32", true, 0xffffffff,0xffffffff, false),
HOWTO(R_RELLONG_NEG, 0, -2, 32, false, 0, true, true,0,"-32", true, 0xffffffff,0xffffffff, false),
};
+#endif /* not ONLY_DECLARE_RELOCS */
-
-/* Turn a howto into a reloc number */
-
-
+#ifndef BADMAG
#define BADMAG(x) M68KBADMAG(x)
+#endif
#define M68 1 /* Customize coffcode.h */
+/* Turn a howto into a reloc number */
+
+#ifdef ONLY_DECLARE_RELOCS
+extern void m68k_rtype2howto PARAMS ((arelent *internal, int relocentry));
+extern int m68k_howto2rtype PARAMS ((struct reloc_howto_struct *));
+#else
void
m68k_rtype2howto(internal, relocentry)
arelent *internal;
}
}
-#define RTYPE2HOWTO(internal, relocentry) m68k_rtype2howto(internal, (relocentry)->r_type)
+int
+m68k_howto2rtype (internal)
+ struct reloc_howto_struct *internal;
+{
+ if (internal->pc_relative)
+ {
+ switch (internal->bitsize)
+ {
+ case 32: return R_PCRLONG;
+ case 16: return R_PCRWORD;
+ case 8: return R_PCRBYTE;
+ }
+ }
+ else
+ {
+ switch (internal->bitsize)
+ {
+ case 32: return R_RELLONG;
+ case 16: return R_RELWORD;
+ case 8: return R_RELBYTE;
+ }
+ }
+ return R_RELLONG;
+}
+#endif /* not ONLY_DECLARE_RELOCS */
-#include "coffcode.h"
+#define RTYPE2HOWTO(internal, relocentry) \
+ m68k_rtype2howto(internal, (relocentry)->r_type)
+
+#define SELECT_RELOC(external, internal) \
+ external = m68k_howto2rtype(internal);
+#include "coffcode.h"
-bfd_target m68kcoff_vec =
+bfd_target
+#ifdef TARGET_SYM
+ TARGET_SYM =
+#else
+ m68kcoff_vec =
+#endif
{
+#ifdef TARGET_NAME
+ TARGET_NAME,
+#else
"coff-m68k", /* name */
+#endif
bfd_target_coff_flavour,
true, /* data byte order is big */
true, /* header byte order is big */
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT),
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
+#ifdef NAMES_HAVE_UNDERSCORE
+ '_',
+#else
0, /* leading underscore */
+#endif
'/', /* ar_pad_char */
15, /* ar_max_namelen */
- 3, /* minimum section alignment */
- _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* data */
- _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs */
+ 1, /* minimum section alignment */
+ _do_getb64, _do_getb_signed_64, _do_putb64,
+ _do_getb32, _do_getb_signed_32, _do_putb32,
+ _do_getb16, _do_getb_signed_16, _do_putb16, /* data */
+ _do_getb64, _do_getb_signed_64, _do_putb64,
+ _do_getb32, _do_getb_signed_32, _do_putb32,
+ _do_getb16, _do_getb_signed_16, _do_putb16, /* hdrs */
{_bfd_dummy_target, coff_object_p, /* bfd_check_format */
bfd_generic_archive_p, _bfd_dummy_target},
return(sec_flags);
}
-#define get_index(symbol) ((int) (symbol)->udata)
+#define get_index(symbol) ((long) (symbol)->udata)
/*
INTERNAL_DEFINITION
at linking together COFF files for different architectures. */
static boolean
-DEFUN (coff_set_arch_mach_hook, (abfd, filehdr),
- bfd *abfd AND
- PTR filehdr)
+coff_set_arch_mach_hook(abfd, filehdr)
+ bfd *abfd;
+ PTR filehdr;
{
long machine;
enum bfd_architecture arch;
#ifdef MC68MAGIC
case MC68MAGIC:
case M68MAGIC:
+ case MC68KBCSMAGIC:
arch = bfd_arch_m68k;
machine = 68020;
break;
#ifdef H8300MAGIC
case H8300MAGIC:
arch = bfd_arch_h8300;
- machine = 0;
+ machine = bfd_mach_h8300;
+ /* !! FIXME this probably isn't the right place for this */
+ abfd->flags |= BFD_IS_RELAXABLE;
+ break;
+#endif
+
+#ifdef H8300HMAGIC
+ case H8300HMAGIC:
+ arch = bfd_arch_h8300;
+ machine = bfd_mach_h8300h;
/* !! FIXME this probably isn't the right place for this */
abfd->flags |= BFD_IS_RELAXABLE;
break;
#endif
#ifdef H8300MAGIC
case bfd_arch_h8300:
- *magicp = H8300MAGIC;
- return true;
+ switch (bfd_get_mach (abfd))
+ {
+ case bfd_mach_h8300:
+ *magicp = H8300MAGIC;
+ return true;
+ case bfd_mach_h8300h:
+ *magicp = H8300HMAGIC;
+ return true;
+ }
break;
#endif
/*
We use the native name field to point to the cached field
*/
- src->u.syment._n._n_n._n_zeroes = (int) dst;
+ src->u.syment._n._n_n._n_zeroes = (long) dst;
dst->symbol.section = coff_section_from_bfd_index(abfd,
src->u.syment.n_scnum);
dst->symbol.flags = 0;
#ifndef coff_reloc16_extra_cases
#define coff_reloc16_extra_cases dummy_reloc16_extra_cases
/* This works even if abort is not declared in any header file. */
-void
+static void
dummy_reloc16_extra_cases (abfd, seclet, reloc, data, src_ptr, dst_ptr)
bfd *abfd;
struct bfd_seclet *seclet;
unsigned int *src_ptr;
unsigned int *dst_ptr;
{
+ printf("%s\n", reloc->howto->name);
abort ();
}
#endif
mips-sgi-irix3*) my_host=irix3 ;;
mips-sgi-irix4*) my_host=irix4 ;;
mips-*-sysv*) my_host=riscos ;;
+mips-*-riscos*) my_host=riscos ;;
m68*-apollo*-sysv*) my_host=apollov68 ;;
m68*-apollo*-bsd*) my_host=apollo68 ;;
+m68*-bull*-sysv*) my_host=dpx2 ;;
m68*-convergent-sysv*) my_host=miniframe ;;
m68*-cbm-amigados) my_host=amigados ;;
m68*-cbm-sysv4*) my_host=amix ;;
/* F. Set up the "end of program header table" sentinel. */
- bzero ((char *) (phdr_buf + idx), sizeof (Elf_Internal_Phdr));
+ memset ((char *) (phdr_buf + idx), 0, sizeof (Elf_Internal_Phdr));
idx++;
BFD_ASSERT (idx - 1 == *phdr_cnt);
delta68.h
delta88.h
dose.h
+dpx2.h
go32.h
harris.h
hp300bsd.h
extern bfd_target oasys_vec;
extern bfd_target m88kbcs_vec;
extern bfd_target m68kcoff_vec;
+extern bfd_target m68kcoffun_vec;
extern bfd_target i386coff_vec;
extern bfd_target i386aout_vec;
extern bfd_target i386linux_vec;
&b_out_vec_little_host,
&b_out_vec_big_host,
&m68kcoff_vec,
+ &m68kcoffun_vec,
&a29kcoff_big_vec,
&rs6000coff_vec,
#if defined (HOST_HPPAHPUX) || defined (HOST_HPPABSD)
#include <signal.h>
#include <sys/user.h> /* After a.out.h */
+#if 0
+/* file.h is included by std-host.h. So we better not try to include it
+ twice; on some systems (dpx2) it is not protected against multiple
+ inclusion. I have checked that all the hosts which use this file
+ include sys/file.h in the hosts file. */
#include <sys/file.h>
+#endif
#include <errno.h>
bfd_error = file_truncated;
return 0;
}
- if (NBPG * (UPAGES + u.u_dsize + u.u_ssize) < statbuf.st_size)
+ if (NBPG * (UPAGES + u.u_dsize + u.u_ssize)
+#ifdef TRAD_CORE_EXTRA_SIZE_ALLOWED
+ /* Some systems write the file too big. */
+ + TRAD_CORE_EXTRA_SIZE_ALLOWED
+#endif
+ < statbuf.st_size)
{
/* The file is too big. Maybe it's not a core file
or we otherwise have bad values for u_dsize and u_ssize). */
#define trad_unix_print_symbol (void (*) PARAMS \
((bfd *, PTR, struct symbol_cache_entry *, \
bfd_print_symbol_type))) bfd_false
+#define trad_unix_get_symbol_info (void (*) PARAMS \
+ ((bfd *, struct symbol_cache_entry *, \
+ symbol_info *))) bfd_false
#define trad_unix_get_lineno (alent * (*) PARAMS \
((bfd *, struct symbol_cache_entry *))) bfd_nullvoidptr
#define trad_unix_set_arch_mach (boolean (*) PARAMS \
}
#define NO_GET ((bfd_vma (*) PARAMS (( bfd_byte *))) swap_abort )
#define NO_PUT ((void (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort )
+#define NO_SIGNED_GET ((bfd_signed_vma (*) PARAMS ((bfd_byte *))) swap_abort )
bfd_target trad_core_vec =
{
' ', /* ar_pad_char */
16, /* ar_max_namelen */
3, /* minimum alignment power */
- NO_GET, NO_GET, NO_PUT, /* 64 bit data */
- NO_GET, NO_GET, NO_PUT, /* 32 bit data */
- NO_GET, NO_GET, NO_PUT, /* 16 bit data */
- NO_GET, NO_GET, NO_PUT, /* 64 bit hdrs */
- NO_GET, NO_GET, NO_PUT, /* 32 bit hdrs */
- NO_GET, NO_GET, NO_PUT, /* 16 bit hdrs */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 64 bit data */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 32 bit data */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 16 bit data */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 64 bit hdrs */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 32 bit hdrs */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 16 bit hdrs */
{ /* bfd_check_format */
_bfd_dummy_target, /* unknown format */