From 11676adc147c73e8034629e386f9c28066eed561 Mon Sep 17 00:00:00 2001 From: Stan Shebs Date: Tue, 5 Jul 1994 21:50:43 +0000 Subject: [PATCH] Mach 3 support. * config.bfd (m88*-*-mach3*, mips*-dec-mach3*, mips*-*-mach3*): New targets. * configure.host (i[34]86-*-mach3*, ns32k-*-mach3*): Recognize "mach3" instead of "mach". (m88*-*-mach3*, mips*-dec-mach3*, mips*-*-mach3*): New hosts. * targets.c (m88kmach3_vec): New target vector. (bfd_target_vector): Add i386mach3_vec and m88kmach3_vec, but inside #if 0. * aoutx.h (some_aout_object_p) [MACH]: Recognize executables by checking for execute permission, instead of looking at entry point. * i386mach3.c: Update, define MACH, N_TXTOFF, N_TXTADDR, N_SHARED_LIB, don't include aout/*.h files, etc. * m88kmach3.c: New file, m88k Mach 3 target. * config/m88k-mach3.mt, config/mips-mach3.mt: New files, target makefile fragments. * config/i386mach3.mh, config/m88kmach3.mh, config/mipsmach3.mh: New files, host makefile fragments. * hosts/m88kmach3.h, hosts/mipsmach3.h: New files, host definitions. --- bfd/ChangeLog | 23 +++++++++++++++++++++++ bfd/aoutx.h | 21 ++++++++++++++++----- bfd/hosts/m88kmach3.h | 19 +++++++++++++++++++ bfd/hosts/mipsmach3.h | 12 ++++++++++++ bfd/m88kmach3.c | 41 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 bfd/hosts/m88kmach3.h create mode 100644 bfd/hosts/mipsmach3.h create mode 100644 bfd/m88kmach3.c diff --git a/bfd/ChangeLog b/bfd/ChangeLog index eadf7cfdbb1..fb43979f1ff 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,26 @@ +Tue Jul 5 13:26:02 1994 Stan Shebs (shebs@andros.cygnus.com) + + Mach 3 support. + * config.bfd (m88*-*-mach3*, mips*-dec-mach3*, mips*-*-mach3*): + New targets. + * configure.host (i[34]86-*-mach3*, ns32k-*-mach3*): Recognize + "mach3" instead of "mach". + (m88*-*-mach3*, mips*-dec-mach3*, mips*-*-mach3*): New hosts. + * targets.c (m88kmach3_vec): New target vector. + (bfd_target_vector): Add i386mach3_vec and m88kmach3_vec, but + inside #if 0. + * aoutx.h (some_aout_object_p) [MACH]: Recognize executables by + checking for execute permission, instead of looking at entry + point. + * i386mach3.c: Update, define MACH, N_TXTOFF, N_TXTADDR, + N_SHARED_LIB, don't include aout/*.h files, etc. + * m88kmach3.c: New file, m88k Mach 3 target. + * config/m88k-mach3.mt, config/mips-mach3.mt: New files, target + makefile fragments. + * config/i386mach3.mh, config/m88kmach3.mh, config/mipsmach3.mh: + New files, host makefile fragments. + * hosts/m88kmach3.h, hosts/mipsmach3.h: New files, host definitions. + Tue Jul 5 13:56:52 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) * elfcode.h (swap_out_syms): Get alignment of common symbol from diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 42ec7977f0a..c53b44696f6 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -481,15 +481,12 @@ NAME(aout,some_aout_object_p) (abfd, execp, callback_to_real_object_p) obj_datasec (abfd)->_raw_size = execp->a_data; obj_bsssec (abfd)->_raw_size = execp->a_bss; - /* If this object is dynamically linked, we assume that both - sections have relocs. This does no real harm, even though it may - not be true. */ obj_textsec (abfd)->flags = - (execp->a_trsize != 0 || (abfd->flags & DYNAMIC) != 0 + (execp->a_trsize != 0 ? (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS | SEC_RELOC) : (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS)); obj_datasec (abfd)->flags = - (execp->a_drsize != 0 || (abfd->flags & DYNAMIC) != 0 + (execp->a_drsize != 0 ? (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS | SEC_RELOC) : (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS)); obj_bsssec (abfd)->flags = SEC_ALLOC; @@ -553,6 +550,19 @@ NAME(aout,some_aout_object_p) (abfd, execp, callback_to_real_object_p) result = (*callback_to_real_object_p)(abfd); +#ifdef MACH + /* Stat the file to decide whether or not it's executable. + Many Mach programs use text at very unconventional addresses, + including the emulator, so the standard heuristic is incorrect. */ + { + struct stat st; + + stat (abfd->filename, &st); + /* Are any exec 'x' bits on? */ + if (st.st_mode & 0111) + abfd->flags |= EXEC_P; + } +#else /* ! MACH */ /* Now that the segment addresses have been worked out, take a better guess at whether the file is executable. If the entry point is within the text segment, assume it is. (This makes files @@ -564,6 +574,7 @@ NAME(aout,some_aout_object_p) (abfd, execp, callback_to_real_object_p) if ((execp->a_entry >= obj_textsec(abfd)->vma) && (execp->a_entry < obj_textsec(abfd)->vma + obj_textsec(abfd)->_raw_size)) abfd->flags |= EXEC_P; +#endif /* MACH */ if (result) { #if 0 /* These should be set correctly anyways. */ diff --git a/bfd/hosts/m88kmach3.h b/bfd/hosts/m88kmach3.h new file mode 100644 index 00000000000..c970fe01da1 --- /dev/null +++ b/bfd/hosts/m88kmach3.h @@ -0,0 +1,19 @@ +#include "hosts/std-host.h" + +#include +#include + +#ifndef MACH +#define MACH +#endif + +#undef UPAGES +#define UPAGES 3 + +#define HAVE_STRERROR + +#define HOST_PAGE_SIZE NBPG +#define HOST_SEGMENT_SIZE NBPG +#define HOST_MACHINE_ARCH bfd_arch_m88k +#define HOST_TEXT_START_ADDR USRTEXT +#define HOST_STACK_END_ADDR USRSTACK diff --git a/bfd/hosts/mipsmach3.h b/bfd/hosts/mipsmach3.h new file mode 100644 index 00000000000..48bc7c9513c --- /dev/null +++ b/bfd/hosts/mipsmach3.h @@ -0,0 +1,12 @@ +#include "hosts/std-host.h" + +#include +#include +#include + +#define HOST_PAGE_SIZE NBPG +/* #define HOST_SEGMENT_SIZE NBPG */ +#define HOST_MACHINE_ARCH bfd_arch_mips +#define HOST_TEXT_START_ADDR USRTEXT +#define HOST_DATA_START_ADDR USRDATA +#define HOST_STACK_END_ADDR USRSTACK diff --git a/bfd/m88kmach3.c b/bfd/m88kmach3.c new file mode 100644 index 00000000000..a076764e261 --- /dev/null +++ b/bfd/m88kmach3.c @@ -0,0 +1,41 @@ +/* BFD back-end for Motorola m88k a.out (Mach 3) binaries. + Copyright (C) 1990, 1991, 1993, 1994 Free Software Foundation, Inc. + +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. */ + +#ifndef MACH +#define MACH +#endif + +#define PAGE_SIZE (4096*2) +#define SEGMENT_SIZE 0x20000 +#define TEXT_START_ADDR 0 +#define BYTES_IN_WORD 4 +#define N_HEADER_IN_TEXT(x) 1 /* (N_MAGIG(x) == ZMAGIC) */ + +#define N_TXTSIZE(x) ((x).a_text) + +#include "bfd.h" +#include "sysdep.h" +#include "libbfd.h" +#include "libaout.h" + +#define DEFAULT_ARCH bfd_arch_m88k +#define MY(OP) CAT(m88kmach3_,OP) +#define TARGETNAME "a.out-m88k-mach3" + +#include "aout-target.h" -- 2.30.2