* 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.
This commit is contained in:
Jim Kingdon 1993-07-11 23:23:20 +00:00
parent 6f4d6543da
commit 4d09e8acfb
10 changed files with 179 additions and 32 deletions

View File

@ -1,3 +1,21 @@
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.

View File

@ -84,7 +84,8 @@ BFD32_BACKENDS = \
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 \
@ -130,7 +131,8 @@ FLAGS_TO_PASS = \
# 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 \

View File

@ -0,0 +1,35 @@
/* 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"

View File

@ -1,5 +1,5 @@
/* 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.
@ -26,7 +26,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#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),
@ -36,14 +39,19 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
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 */
#ifndef BADMAG
#define BADMAG(x) M68KBADMAG(x)
#endif
#define M68 1 /* Customize coffcode.h */
/* Turn a howto into a reloc number */
#define BADMAG(x) M68KBADMAG(x)
#define M68 1 /* Customize coffcode.h */
#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;
@ -61,14 +69,52 @@ m68k_rtype2howto(internal, relocentry)
}
}
#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 */
#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 */
@ -78,12 +124,20 @@ bfd_target m68kcoff_vec =
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},

View File

@ -451,7 +451,7 @@ DEFUN(styp_to_sec_flags, (abfd, hdr),
return(sec_flags);
}
#define get_index(symbol) ((int) (symbol)->udata)
#define get_index(symbol) ((long) (symbol)->udata)
/*
INTERNAL_DEFINITION
@ -806,9 +806,9 @@ DEFUN(coff_mkobject_hook,(abfd, filehdr, aouthdr),
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;
@ -837,6 +837,7 @@ DEFUN (coff_set_arch_mach_hook, (abfd, filehdr),
#ifdef MC68MAGIC
case MC68MAGIC:
case M68MAGIC:
case MC68KBCSMAGIC:
arch = bfd_arch_m68k;
machine = 68020;
break;
@ -915,7 +916,16 @@ DEFUN (coff_set_arch_mach_hook, (abfd, filehdr),
#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;
@ -1120,8 +1130,15 @@ DEFUN(coff_set_flags,(abfd, magicp, flagsp),
#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
@ -1857,7 +1874,7 @@ DEFUN(coff_slurp_symbol_table,(abfd),
/*
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;
@ -2225,7 +2242,7 @@ bfd *abfd;
#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;
@ -2234,6 +2251,7 @@ dummy_reloc16_extra_cases (abfd, seclet, reloc, data, src_ptr, dst_ptr)
unsigned int *src_ptr;
unsigned int *dst_ptr;
{
printf("%s\n", reloc->howto->name);
abort ();
}
#endif

View File

@ -44,9 +44,11 @@ mips-dec-*) my_host=decstation ;;
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 ;;

View File

@ -2264,7 +2264,7 @@ DEFUN (elf_build_phdrs, (abfd, i_ehdrp, i_shdrp, phdr_cnt),
/* 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);

View File

@ -34,6 +34,7 @@ dgux.h
delta68.h
delta88.h
dose.h
dpx2.h
go32.h
harris.h
hp300bsd.h

View File

@ -372,6 +372,7 @@ extern bfd_target ieee_vec;
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;
@ -452,6 +453,7 @@ bfd_target *target_vector[] = {
&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)

View File

@ -38,7 +38,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#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>
@ -110,7 +116,12 @@ trad_unix_core_file_p (abfd)
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). */
@ -272,6 +283,9 @@ trad_unix_core_file_matches_executable_p (core_bfd, exec_bfd)
#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 \
@ -304,6 +318,7 @@ swap_abort()
}
#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 =
{
@ -319,12 +334,12 @@ 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 */