aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/Makefile.in8
-rw-r--r--bfd/coff-i960.c28
-rw-r--r--bfd/coff-m68k.c6
-rw-r--r--bfd/coff-m88k.c8
-rw-r--r--bfd/coff-mips.c11
-rwxr-xr-xbfd/coffswap.c4
-rw-r--r--bfd/hosts/sparc.h47
-rwxr-xr-xinclude/a.out.sun4.h2
-rw-r--r--include/bfd.h194
-rwxr-xr-xinclude/sysdep.h12
-rw-r--r--ld/Makefile.in25
-rwxr-xr-xld/config/hmake-sun42
-rwxr-xr-xld/ldgld960.c6
-rwxr-xr-xld/ldlnk960.c2
-rw-r--r--ld/ldsym.c62
15 files changed, 254 insertions, 163 deletions
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index 22bcb45..462e394 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -37,16 +37,16 @@ CFLAGS = -g $(HDEFINES) $(TDEFINES) $(CSEARCH) $(CSWITCHES) # -DINTEL960VERSION
BFD_LIBS = libbfd.o opncls.o bfd.o archive.o targets.o cache.o \
archures.o
-BFD_BACKENDS = oasys.o ieee.o srec.o aout.o sunos.o icoff.o b.out.o \
- m68kcoff.o m88k-bcs.o coffswap.o ecoff.o newsos3.o # trad-core.o
+BFD_BACKENDS = oasys.o ieee.o srec.o aout64.o aout32.o sunos.o icoff.o demo64.o \
+ m68kcoff.o m88k-bcs.o coffswap.o ecoff.o newsos3.o # trad-core.o bout.o
BFD_H=$(INCDIR)/bfd.h
SYSDEP_H=$(INCDIR)/sysdep.h
# C source files that correspond to .o's.
CFILES = libbfd.c opncls.c bfd.c archive.c targets.c cache.c archures.c \
- aout.c sunos.c icoff.c b.out.c srec.c oasys.c ieee.c m68kcoff.c \
- m88k-bcs.c coffswap.c ecoff.c trad-core.c newsos3.c
+ aout64.c aout32.c sunos.c demo64.c icoff.c srec.c oasys.c ieee.c m68kcoff.c \
+ m88k-bcs.c coffswap.c ecoff.c trad-core.c newsos3.c #bout.c
STAGESTUFF = $(TARGETLIB) $(OFILES)
diff --git a/bfd/coff-i960.c b/bfd/coff-i960.c
index cbbd49e..a0b04be 100644
--- a/bfd/coff-i960.c
+++ b/bfd/coff-i960.c
@@ -24,7 +24,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define BADMAG(x) I960BADMAG(x)
#include <ansidecl.h>
-#include "sysdep.h"
+
#include "bfd.h"
#include "libbfd.h"
#include "obstack.h"
@@ -70,7 +70,7 @@ asection *ignore_input_section;
to the correct location */
{
union internal_auxent *aux = (union internal_auxent *)(cs->native+2);
- int word = bfd_getlong(abfd, data + reloc_entry->address);
+ int word = bfd_get_32(abfd, data + reloc_entry->address);
int olf = (aux->x_bal.x_balntry - cs->native->n_value);
BFD_ASSERT(cs->native->n_numaux==2);
/* We replace the original call instruction with a bal to */
@@ -80,7 +80,7 @@ asection *ignore_input_section;
/* offset of the bal entry point */
word = ((word + olf) & BAL_MASK) | BAL;
- bfd_putlong(abfd, word, data+reloc_entry->address);
+ bfd_put_32(abfd, word, data+reloc_entry->address);
}
result = bfd_reloc_ok;
break;
@@ -158,17 +158,17 @@ bfd_target icoff_little_vec =
'/', /* ar_pad_char */
15, /* ar_max_namelen */
- _do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* data */
- _do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* hdrs */
+ _do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* data */
+ _do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* hdrs */
- {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
- bfd_generic_archive_p, _bfd_dummy_target},
- {bfd_false, coff_mkobject, /* bfd_set_format */
- _bfd_generic_mkarchive, bfd_false},
- {bfd_false, coff_write_object_contents, /* bfd_write_contents */
- _bfd_write_archive_contents, bfd_false},
+ {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
+ bfd_generic_archive_p, _bfd_dummy_target},
+ {bfd_false, coff_mkobject, /* bfd_set_format */
+ _bfd_generic_mkarchive, bfd_false},
+ {bfd_false, coff_write_object_contents, /* bfd_write_contents */
+ _bfd_write_archive_contents, bfd_false},
JUMP_TABLE(coff)
-};
+ };
bfd_target icoff_big_vec =
@@ -186,8 +186,8 @@ bfd_target icoff_big_vec =
'/', /* ar_pad_char */
15, /* ar_max_namelen */
- _do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* data */
- _do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* hdrs */
+_do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* data */
+_do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs */
{_bfd_dummy_target, coff_object_p, /* bfd_check_format */
bfd_generic_archive_p, _bfd_dummy_target},
diff --git a/bfd/coff-m68k.c b/bfd/coff-m68k.c
index 19bf029..c3ae26e 100644
--- a/bfd/coff-m68k.c
+++ b/bfd/coff-m68k.c
@@ -41,8 +41,8 @@ static reloc_howto_type howto_table[] =
/* Turn a howto into a reloc nunmber */
-#define SELECT_RELOC(x,howto) { x = howto_table[howto->size +howto->pc_relative*3].type; }
+#define SELECT_RELOC(x,howto) { x = howto_table[howto->size +(int)howto->pc_relative*3].type; }
#define BADMAG(x) M68KBADMAG(x)
#include "coff-code.h"
@@ -65,8 +65,8 @@ bfd_target m68kcoff_vec =
'/', /* ar_pad_char */
15, /* ar_max_namelen */
- _do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* data */
- _do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* hdrs */
+_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 */
{_bfd_dummy_target, coff_object_p, /* bfd_check_format */
bfd_generic_archive_p, _bfd_dummy_target},
diff --git a/bfd/coff-m88k.c b/bfd/coff-m88k.c
index cdb79088..71a4497 100644
--- a/bfd/coff-m88k.c
+++ b/bfd/coff-m88k.c
@@ -57,13 +57,13 @@ asection *ignore_input_section)
{
long relocation;
bfd_vma addr = reloc_entry->address;
- long x = bfd_getshort(abfd, (bfd_byte *)data + addr);
+ long x = bfd_get_16(abfd, (bfd_byte *)data + addr);
HOWTO_PREPARE(relocation, symbol_in);
x = (x + relocation + reloc_entry->addend) >> 16;
- bfd_putshort(abfd, x, (bfd_byte *)data + addr);
+ bfd_put_16(abfd, x, (bfd_byte *)data + addr);
return bfd_reloc_ok;
}
@@ -105,8 +105,8 @@ bfd_target m88k_bcs_vec =
'/', /* ar_pad_char */
15, /* ar_max_namelen */
- _do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* data */
- _do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* hdrs */
+_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 */
{_bfd_dummy_target, coff_object_p, /* bfd_check_format */
bfd_generic_archive_p, _bfd_dummy_target},
diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c
index effbac4..362be56 100644
--- a/bfd/coff-mips.c
+++ b/bfd/coff-mips.c
@@ -29,7 +29,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "bfd.h"
#include "libbfd.h"
-#include "sysdep.h"
+
#include "intel-coff.h"
#include "libcoff.h" /* to allow easier abstraction-breaking */
@@ -50,8 +50,8 @@ bfd_target ecoff_little_vec =
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* sect flags */
'/', /* ar_pad_char */
15, /* ar_max_namelen */
- _do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* data */
- _do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* hdrs */
+_do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* data */
+_do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* hdrs */
{_bfd_dummy_target, coff_object_p, /* bfd_check_format */
bfd_generic_archive_p, _bfd_dummy_target},
@@ -74,9 +74,8 @@ bfd_target ecoff_big_vec =
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* sect flags */
' ', /* ar_pad_char */
16, /* ar_max_namelen */
- _do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* data */
- _do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* hdrs */
-
+_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 */
{_bfd_dummy_target, coff_object_p, /* bfd_check_format */
bfd_generic_archive_p, _bfd_dummy_target},
{bfd_false, coff_mkobject, bfd_false, /* bfd_set_format */
diff --git a/bfd/coffswap.c b/bfd/coffswap.c
index 78aea53..b1f7451 100755
--- a/bfd/coffswap.c
+++ b/bfd/coffswap.c
@@ -19,14 +19,14 @@ You should have received a copy of the GNU General Public License along with
*/
/* Most of this hacked by Steve Chamberlain, steve@cygnus.com */
-
+#if 0
#include <ansidecl.h>
#include "intel-coff.h"
#include "bfd.h"
#include "libcoff.h" /* to allow easier abstraction-breaking */
#define sp(x) bfd_h_put_x(abfd, x, &x)
-#if 0
+
/* All the generic swapping routines:
FIXME
diff --git a/bfd/hosts/sparc.h b/bfd/hosts/sparc.h
index 376aad6..a4652a2 100644
--- a/bfd/hosts/sparc.h
+++ b/bfd/hosts/sparc.h
@@ -17,14 +17,14 @@ extern PROTO(int, close,(int));
extern PROTO(int, fcntl,(int des, int cmd));
extern PROTO(int, fprintf,(FILE *,char *,...));
extern PROTO(int, printf,(char *,...));
-extern PROTO(int, oqsort,(void *data,int els, int siz, int func()));
+extern PROTO(int, qsort,(void *data,int els, int siz, int func()));
extern PROTO(void, exit,(int));
extern PROTO(int, fseek,(FILE*, int, int));
extern PROTO(int, fclose,(FILE*));
extern PROTO(void, bcopy,(char*,char*,int));
extern PROTO(int, bcmp,(char *, char *, int));
extern PROTO(void, bzero,(char *, int));
-extern PROTO(char *,memset,(char*, int, int));
+extern PROTO(PTR,memset,(PTR, int,unsigned int));
PROTO(PTR, memcpy,(PTR,CONST PTR,unsigned int));
extern char * strchr();
extern PROTO(void, perror,(char *));
@@ -38,9 +38,13 @@ extern int fwrite();
extern int sscanf();
extern int stat();
extern int strtol();
-void free();
-char *malloc();
-char *realloc();
+#ifndef DONTDECLARE_MALLOC
+extern PROTO(PTR,malloc,(unsigned));
+extern PROTO(PTR ,realloc, (PTR, unsigned));
+#endif
+
+extern PROTO(int, free,(PTR));
+
PROTO (void, perror, (char *s));
extern char *strrchr();
extern char *ctime();
@@ -63,6 +67,16 @@ typedef unsigned short uint16e_type;
typedef int int32e_type;
typedef unsigned int uint32e_type;
+
+#ifdef __GNUC__
+typedef unsigned long long uint64e_type;
+
+#else
+typedef struct {
+ uint32e_type low, high;
+} uint64e_type;
+
+#endif
/* CORRECT SIZE OR GREATER */
typedef char int8_type;
typedef unsigned char uint8_type;
@@ -71,3 +85,26 @@ typedef unsigned short uint16_type;
typedef int int32_type;
typedef unsigned int uint32_type;
+#ifdef __GNUC__
+typedef unsigned long long uint64_type;
+typedef long long int64_type;
+#else
+typedef struct {
+ uint32e_type low, high;
+} uint64_type;
+
+typedef struct {
+ uint32e_type low, high;
+} int64_type;
+
+#endif
+
+
+#define BYTES_IN_PRINTF_INT 4
+#ifndef __GNUC__
+#define uint64_typeLOW(x) (uint32_type)(((x).low))
+#define uint64_typeHIGH(x) (uint32_type)(((x).high))
+#else
+#define uint64_typeLOW(x) (uint32_type)(((x) & 0xffffffff))
+#define uint64_typeHIGH(x) (uint32_type)(((x) >> 32) & 0xffffffff)
+#endif
diff --git a/include/a.out.sun4.h b/include/a.out.sun4.h
index 3ba363d..4ce569d 100755
--- a/include/a.out.sun4.h
+++ b/include/a.out.sun4.h
@@ -10,7 +10,7 @@
/* Offset in a.out file of the text section. For ZMAGIC, the text section
actually includes the a.out header. */
-#define N_TXTOFF(x) ( (N_MAGIC((x)) == ZMAGIC) ? 0 : sizeof(struct exec) )
+#define N_TXTOFF(x) ( (N_MAGIC((x)) == ZMAGIC) ? 0 : EXEC_BYTES_SIZE)
/* Virtual Address of text segment from the a.out file. For OMAGIC,
(almost always "unlinked .o's" these days), should be zero.
diff --git a/include/bfd.h b/include/bfd.h
index 0a3d710..8d50c43 100644
--- a/include/bfd.h
+++ b/include/bfd.h
@@ -1,5 +1,7 @@
+
/* A -*- C -*- header file for the bfd library */
+
/*** bfd.h -- The only header file required by users of the bfd library */
/* Copyright (C) 1990, 1991 Free Software Foundation, Inc.
@@ -27,6 +29,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define __BFD_H_SEEN__
#include "ansidecl.h"
+#include "sysdep.h"
#include "obstack.h"
/* Make it easier to declare prototypes (puts conditional here) */
@@ -38,7 +41,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
# endif
#endif
-#define BFD_VERSION "1.9"
+#define BFD_VERSION "1.10"
/* forward declaration */
typedef struct _bfd bfd;
@@ -52,11 +55,29 @@ typedef enum boolean {false, true} boolean;
/* Try to avoid breaking stuff */
typedef long int file_ptr;
-/* This is used to refer to locations inside a section's rawdata */
+/* Support for different sizes of target format ints */
+
+#ifdef TARGET_64_BIT
+/* 64 bit machines use these items */
+typedef uint64_type rawdata_offset;
+typedef uint64_type bfd_vma;
+typedef uint64_type bfd_word;
+typedef uint64_type bfd_offset;
+typedef uint64_type bfd_size_type;
+typedef uint64_type symvalue;
+#define printf_vma(x) printf("%08x%08x",uint64_typeHIGH(x), uint64_typeLOW(x))
+#define fprintf_vma(s,x) fprintf(s,"%08x%08x",uint64_typeHIGH(x), uint64_typeLOW(x))
+#else
typedef unsigned long int rawdata_offset;
-
typedef unsigned long bfd_vma;
typedef unsigned long bfd_offset;
+typedef unsigned long bfd_word;
+typedef unsigned long bfd_size;
+typedef unsigned long symvalue;
+typedef unsigned long bfd_size_type;
+#define printf_vma(x) printf("%08x",x)
+#define fprintf_vma(s,x) fprintf(s,"%08x",x)
+#endif
typedef unsigned int flagword; /* 32 bits of flags */
@@ -91,12 +112,24 @@ enum bfd_architecture {
bfd_arch_m68k, /* Motorola 68xxx */
bfd_arch_vax, /* DEC Vax */
bfd_arch_i960, /* Intel 960 */
-#define bfd_mach_i960_core 0
-#define bfd_mach_i960_kb_sb 1
-#define bfd_mach_i960_mc 2
-#define bfd_mach_i960_xa 3
-#define bfd_mach_i960_ca 4
-#define bfd_mach_i960_ka_sa 5
+
+ /* The order of the following is important.
+ * A lower number indicates a machine type
+ * that only accepts a subset of the
+ * instructions available to machines with
+ * higher numbers.
+ *
+ * The exception is the "ca", which is
+ * incompatible with all other machines except
+ * "core".
+ */
+#define bfd_mach_i960_core 1
+#define bfd_mach_i960_ka_sa 2
+#define bfd_mach_i960_kb_sb 3
+#define bfd_mach_i960_mc 4
+#define bfd_mach_i960_xa 5
+#define bfd_mach_i960_ca 6
+
bfd_arch_a29k, /* AMD 29000 */
bfd_arch_sparc, /* Sun (SPARC International) SPARC */
@@ -111,7 +144,7 @@ enum bfd_architecture {
bfd_arch_m88k, /* Motorola 88xxx */
bfd_arch_pyramid, /* Pyramid Technology */
bfd_arch_h8_300, /* Hitachi H8/300 */
- bfd_arch_last,
+ bfd_arch_last
};
/* symbols and relocation */
@@ -127,9 +160,9 @@ typedef enum {bfd_symclass_unknown = 0,
bfd_symclass_undefined /* none known */
} symclass;
-typedef unsigned long symvalue; /* someday they may be 64-bit qtys */
+
typedef int symtype; /* Who knows, yet? */
-typedef int bfd_size_type;
+
/* Symbol cache classifications: (Bfd-Symbol-Flag_FOOBAR) */
#define BSF_NO_FLAGS 0x00
#define BSF_LOCAL 0x01 /* bfd_symclass_unknown */
@@ -206,7 +239,8 @@ typedef enum bfd_reloc_status {
bfd_reloc_dangerous}
bfd_reloc_status_enum_type;
-typedef CONST struct rint {
+typedef CONST struct rint
+{
unsigned int type;
unsigned int rightshift;
unsigned int size;
@@ -219,21 +253,21 @@ typedef CONST struct rint {
bfd_reloc_status_enum_type (*special_function)();
char *name;
boolean partial_inplace;
-/* Two mask fields,
- the src_mask is used to select what parts of the read in data are to
- be used in the relocation sum. Eg, if this was an 8 bit bit of data
- which we read and relocated, this would be 0x000000ff. When we have
- relocs which have an addend, such as sun4 extended relocs, the value
- in the offset part of a relocating field is garbage so we never use
- it. In this case the mask would be 0x00000000.
-
- The dst_mask is what parts of the instruction are replaced into the
- instruction. In most cases src_mask == dst_mask, except in the above
- special case, where dst_mask would be 0x000000ff, and src_mask would
- be 0x00000000.
-*/
- unsigned int src_mask; /* What things to take from the source */
- unsigned int dst_mask; /* What things to put into the dest */
+ /* Two mask fields,
+ the src_mask is used to select what parts of the read in data are to
+ be used in the relocation sum. Eg, if this was an 8 bit bit of data
+ which we read and relocated, this would be 0x000000ff. When we have
+ relocs which have an addend, such as sun4 extended relocs, the value
+ in the offset part of a relocating field is garbage so we never use
+ it. In this case the mask would be 0x00000000.
+
+ The dst_mask is what parts of the instruction are replaced into the
+ instruction. In most cases src_mask == dst_mask, except in the above
+ special case, where dst_mask would be 0x000000ff, and src_mask would
+ be 0x00000000.
+ */
+ bfd_word src_mask; /* What things to take from the source */
+ bfd_word dst_mask; /* What things to put into the dest */
/* Does a pc rel offset already have the offset of the jump from the
beginnining of the module in place - eg on the sun3, a pcrel
@@ -387,7 +421,7 @@ typedef enum
{
bfd_print_symbol_name_enum,
bfd_print_symbol_type_enum,
- bfd_print_symbol_all_enum,
+ bfd_print_symbol_all_enum
} bfd_print_symbol_enum_type;
@@ -450,16 +484,20 @@ typedef struct bfd_target
/* Byte swapping for data */
/* Note that these don't take bfd as first arg. Certain other handlers
could do the same. */
- SDEF (long, bfd_getxlong, (bfd_byte *));
- SDEF (void, bfd_putxlong, (unsigned long, bfd_byte *));
- SDEF (short, bfd_getxshort, (bfd_byte *));
- SDEF (void, bfd_putxshort, (int, bfd_byte *));
+ SDEF (uint64_type,bfd_getx64, (bfd_byte *));
+ SDEF (void, bfd_putx64, (uint64_type, bfd_byte *));
+ SDEF (uint32_type, bfd_getx32, (bfd_byte *));
+ SDEF (void, bfd_putx32, (unsigned long, bfd_byte *));
+ SDEF (uint16_type, bfd_getx16, (bfd_byte *));
+ SDEF (void, bfd_putx16, (int, bfd_byte *));
/* Byte swapping for headers */
- SDEF (long, bfd_h_getxlong, (bfd_byte *));
- SDEF (void, bfd_h_putxlong, (unsigned long, bfd_byte *));
- SDEF (short, bfd_h_getxshort, (bfd_byte *));
- SDEF (void, bfd_h_putxshort, (int, bfd_byte *));
+ SDEF (uint64_type, bfd_h_getx64, (bfd_byte *));
+ SDEF (void, bfd_h_putx64, (uint64_type, bfd_byte *));
+ SDEF (uint32_type, bfd_h_getx32, (bfd_byte *));
+ SDEF (void, bfd_h_putx32, (unsigned long, bfd_byte *));
+ SDEF (uint16_type, bfd_h_getx16, (bfd_byte *));
+ SDEF (void, bfd_h_putx16, (int, bfd_byte *));
/* Format-dependent */
SDEF_FMT (struct bfd_target *, _bfd_check_format, (bfd *));/* file fmt or 0 */
@@ -483,9 +521,9 @@ typedef struct bfd_target
/* All the standard stuff */
SDEF (boolean, _close_and_cleanup, (bfd *)); /* free any allocated data */
SDEF (boolean, _bfd_set_section_contents, (bfd *, sec_ptr, PTR,
- file_ptr, int));
+ file_ptr, bfd_size_type));
SDEF (boolean, _bfd_get_section_contents, (bfd *, sec_ptr, PTR,
- file_ptr, int));
+ file_ptr, bfd_size_type));
SDEF (boolean, _new_section_hook, (bfd *, sec_ptr));
/* Symbols and relocation */
@@ -495,7 +533,7 @@ typedef struct bfd_target
SDEF (unsigned int, _bfd_canonicalize_reloc, (bfd *, sec_ptr, arelent **,
asymbol**));
- /* FIXME: For steve -- clean up later */
+
SDEF (asymbol *, _bfd_make_empty_symbol, (bfd *));
SDEF (void, _bfd_print_symbol, (bfd *, PTR, asymbol *,
bfd_print_symbol_enum_type));
@@ -599,8 +637,8 @@ struct _bfd
char *iostream; /* stdio FILE *, unless an archive element */
boolean cacheable; /* iostream can be closed if desired */
- struct _bfd *lru_prev; /* Used for file caching */
- struct _bfd *lru_next; /* Used for file caching */
+ struct _bfd *lru_prev; /* Used for file caching */
+ struct _bfd *lru_next; /* Used for file caching */
file_ptr where; /* Where the file was when closed */
boolean opened_once;
boolean mtime_set; /* Flag indicating mtime is available */
@@ -613,11 +651,11 @@ struct _bfd
both_direction = 3} direction;
flagword flags; /* format_specific */
-/*
-Currently my_archive is tested before adding origin to anything. I
-believe that this can become always an add of origin, with origin set
-to 0 for non archive files
-*/
+ /*
+ Currently my_archive is tested before adding origin to anything. I
+ believe that this can become always an add of origin, with origin set
+ to 0 for non archive files
+ */
file_ptr origin; /* for archive contents */
boolean output_has_begun; /* cf bfd_set_section_size */
@@ -634,13 +672,13 @@ to 0 for non archive files
/* Archive stuff. strictly speaking we don't need all three bfd* vars,
but doing so would allow recursive archives! */
PTR arelt_data; /* needed if this came from an archive */
- struct _bfd *my_archive; /* if this is an archive element */
- struct _bfd *next; /* output chain pointer */
- struct _bfd *archive_head; /* for output archive */
+ struct _bfd *my_archive; /* if this is an archive element */
+ struct _bfd *next; /* output chain pointer */
+ struct _bfd *archive_head; /* for output archive */
boolean has_armap; /* if an arch; has it an armap? */
PTR tdata; /* target-specific storage */
- PTR usrdata; /* application-specific storage */
+ PTR usrdata; /* application-specific storage */
/* Should probably be enabled here always, so that library may be changed
to switch this on and off, while user code may remain unchanged */
@@ -687,10 +725,10 @@ PROTO (boolean, bfd_set_section_size, (bfd *abfd, sec_ptr ptr,
unsigned long val));
PROTO (boolean, bfd_get_section_contents, (bfd *abfd, sec_ptr section,
PTR location,
- file_ptr offset, int count));
+ file_ptr offset, bfd_size_type count));
PROTO (boolean, bfd_set_section_contents, (bfd *abfd, sec_ptr section,
PTR location,
- file_ptr offset, int count));
+ file_ptr offset, bfd_size_type count));
PROTO (unsigned long, bfd_get_next_mapent, (bfd *abfd, symindex prev, carsym **entry));
PROTO (bfd *, bfd_get_elt_at_index, (bfd *abfd, int index));
@@ -773,26 +811,33 @@ BFD_SEND (abfd, _bfd_find_nearest_line, (abfd, section,symbols, offset, filename
/* Some byte-swapping i/o operations */
+#define LONGLONG_SIZE 8
#define LONG_SIZE 4
#define SHORT_SIZE 2
#define BYTE_SIZE 1
-#define bfd_putchar(abfd, val, ptr) (*((char *)ptr) = (char)val)
-#define bfd_getchar(abfd, ptr) (*((char *)ptr))
+#define bfd_put_8(abfd, val, ptr) (*((char *)ptr) = (char)val)
+#define bfd_get_8(abfd, ptr) (*((char *)ptr))
+
+#define bfd_put_32(abfd, val, ptr) BFD_SEND(abfd, bfd_putx32, (val,ptr))
+#define bfd_get_32(abfd, ptr) BFD_SEND(abfd, bfd_getx32, (ptr))
-#define bfd_putlong(abfd, val, ptr) BFD_SEND(abfd, bfd_putxlong, (val,ptr))
-#define bfd_getlong(abfd, ptr) BFD_SEND(abfd, bfd_getxlong, (ptr))
+#define bfd_put_64(abfd, val, ptr) BFD_SEND(abfd, bfd_putx64, (val,ptr))
+#define bfd_get_64(abfd, ptr) BFD_SEND(abfd, bfd_getx64, (ptr))
-#define bfd_putshort(abfd, val, ptr) BFD_SEND(abfd, bfd_putxshort, (val,ptr))
-#define bfd_getshort(abfd, ptr) BFD_SEND(abfd, bfd_getxshort, (ptr))
+#define bfd_put_16(abfd, val, ptr) BFD_SEND(abfd, bfd_putx16, (val,ptr))
+#define bfd_get_16(abfd, ptr) BFD_SEND(abfd, bfd_getx16, (ptr))
-#define bfd_h_putchar(abfd, val, ptr) bfd_putchar (abfd, val, ptr)
-#define bfd_h_getchar(abfd, ptr) bfd_getchar (abfd, ptr)
+#define bfd_h_put_8(abfd, val, ptr) bfd_put_8 (abfd, val, ptr)
+#define bfd_h_get_8(abfd, ptr) bfd_get_8 (abfd, ptr)
-#define bfd_h_putlong(abfd, val, ptr) BFD_SEND(abfd, bfd_h_putxlong, (val, (bfd_byte *) ptr))
-#define bfd_h_getlong(abfd, ptr) BFD_SEND(abfd, bfd_h_getxlong, ((bfd_byte *) ptr))
+#define bfd_h_put_32(abfd, val, ptr) BFD_SEND(abfd, bfd_h_putx32, (val, (bfd_byte *) ptr))
+#define bfd_h_get_32(abfd, ptr) BFD_SEND(abfd, bfd_h_getx32, ((bfd_byte *) ptr))
-#define bfd_h_putshort(abfd, val, ptr) BFD_SEND(abfd, bfd_h_putxshort,(val,ptr))
-#define bfd_h_getshort(abfd, ptr) BFD_SEND(abfd, bfd_h_getxshort,(ptr))
+#define bfd_h_put_64(abfd, val, ptr) BFD_SEND(abfd, bfd_h_putx64, (val, (bfd_byte *) ptr))
+#define bfd_h_get_64(abfd, ptr) BFD_SEND(abfd, bfd_h_getx64, ((bfd_byte *) ptr))
+
+#define bfd_h_put_16(abfd, val, ptr) BFD_SEND(abfd, bfd_h_putx16,(val,ptr))
+#define bfd_h_get_16(abfd, ptr) BFD_SEND(abfd, bfd_h_getx16,(ptr))
/* General purpose one fits all. The do { } while (0) makes a single
statement out of it, for use in things like nested if-statements.
@@ -808,20 +853,21 @@ BFD_SEND (abfd, _bfd_find_nearest_line, (abfd, section,symbols, offset, filename
#define bfd_h_put_x(abfd, val, ptr) \
do { \
+ if (sizeof((ptr)) == LONGLONG_SIZE) \
+ bfd_h_put_64 (abfd, val, (ptr));\
if (sizeof((ptr)) == LONG_SIZE) \
- bfd_h_putlong (abfd, val, (ptr));\
+ bfd_h_put_32 (abfd, val, (ptr));\
else if (sizeof((ptr)) == SHORT_SIZE) \
- bfd_h_putshort (abfd, val, (ptr));\
+ bfd_h_put_16 (abfd, val, (ptr));\
else if (sizeof((ptr)) == BYTE_SIZE) \
- bfd_h_putchar (abfd, val, (ptr));\
+ bfd_h_put_8 (abfd, val, (ptr));\
else abort(); } while (0)
#define bfd_h_get_x(abfd, ptr) \
- ((sizeof((ptr))==LONG_SIZE) ? bfd_h_getlong (abfd, &(ptr[0])):\
- (sizeof((ptr))==SHORT_SIZE) ? bfd_h_getshort(abfd, &(ptr[0])):\
- (sizeof((ptr))==BYTE_SIZE) ? bfd_h_getchar (abfd, &(ptr[0])):\
- (abort(),1) )
-
+ ((sizeof((ptr))==LONGLONG_SIZE) ? bfd_h_get_64 (abfd, &(ptr[0])):\
+ (sizeof((ptr))==LONG_SIZE) ? bfd_h_get_32 (abfd, &(ptr[0])):\
+ (sizeof((ptr))==SHORT_SIZE) ? bfd_h_get_16(abfd, &(ptr[0])):\
+ bfd_h_get_8 (abfd, &(ptr[0])))
#ifdef GNU960
#define BFD_COFF_FORMAT bfd_target_coff_flavour_enum
@@ -850,4 +896,6 @@ extern PROTO (char *, bfd_make_targ_name,( enum target_flavour_enum format, int
#endif /* GNU960 */
+
+
#endif /* __BFD_H_SEEN__ */
diff --git a/include/sysdep.h b/include/sysdep.h
index ccaf13d..9f39a5d 100755
--- a/include/sysdep.h
+++ b/include/sysdep.h
@@ -42,7 +42,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define DGUX_SYS 9
#define DEC3100_SYS 10
#define HP9000_SYS 11
-
+#define APOLLO400_SYS 12
+#define DOS_SYS 13
#include <ansidecl.h>
#if __STDC__
@@ -100,5 +101,14 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define USG
#include <sys/h-hp9000.h>
#endif
+#if HOST_SYS==APOLLO400_SYS
+#define HOST_IS_APOLLO400 1
+#include <sys/h-ap400.h>
+#endif
+
+#if HOST_SYS==DOS_SYS
+#define HOST_IS_DOS 1
+#include <sys/h_dos.h>
+#endif
#endif
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 1e93cfa..37136c1 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -40,11 +40,6 @@ LINTFLAGS = $(INCLUDES) $(EXTRA_DEF)
.SUFFIXES: .y .x .script $(SUFFIXES)
-.y.o:
- $(YACC) $<
- mv y.tab.c ldgram.tab.c
- $(CC) -c $(CFLAGS) ldgram.tab.c
- mv ldgram.tab.o ldgram.o
# go directly to ld.new in case this ld isn't capable of
# linking native object on this host. It can be renamed on
@@ -73,10 +68,10 @@ LDCSOURCES=ldlang.c ldmain.c ldwrite.c ldlnk960.c ldgld.c ldgld68k.c \
ldgldm88kbcs.c \
ldgld960.c ldemul.c ldver.c ldmisc.c ldexp.c ldsym.c ldfile.c ldvanilla.c
-GENERATED_SOURCES=ldgram.tab.c ldlex.c ldgram.tab.h y.tab.h
-GENERATED_HEADERS=ldgram.tab.h
+GENERATED_SOURCES=ldgramtb.c ldlex.c ldgramtb.h
+GENERATED_HEADERS=ldgramtb.h
-LDSOURCES=$(LDCSOURCES) ldgram.y ldlex.l
+LDSOURCES=$(LDCSOURCES) ldgram.y ldlex.l ldgramtb.h
BFDSOURCES=../../bfd/common/*.c
@@ -89,6 +84,13 @@ all: Makefile $(PROCESSED_SCRIPTS) $(LD_PROG)
$(PROCESSED_SCRIPTS): mkscript $(SCRIPTS)
+ldgramtb.o ldgramtb.h:ldgram.y
+ $(YACC) $<
+ mv y.tab.c ldgramtb.c
+ mv y.tab.h ldgramtb.h
+ $(CC) -c $(CFLAGS) ldgramtb.c
+ mv ldgramtb.o ldgram.o
+
#$(BFDLIB): $(BFDSOURCES)
# (cd ../bfd; make)
@@ -116,9 +118,6 @@ ld.dvi:ld.tex
mkscript: mkscript.c
-ldgram.o: ldgram.y
-ldgram.tab.h:ldgram.y
- cp y.tab.h ldgram.tab.h
ldgld.o: $(PROCESSED_SCRIPTS) ldgld.c
@@ -186,7 +185,7 @@ lintlog:$(SOURCES) Makefile
tags TAGS:$(SOURCES) $(HEADERS)
- etags -t $(SOURCES) $(HEADERS)
+ etags -t $?
release:
(cd /4/steve/ld; tar cf - $(LDSOURCES) $(HEADERS) $(MANSOURCES)) | tar xf -
@@ -220,7 +219,7 @@ roll:
echo Version $$V
-dep: $(LDSOURCES) $(PROCESSED_SCRIPTS)
+dep: $(LDSOURCES) $(PROCESSED_SCRIPTS)
mkdep $(CFLAGS) $?
# Dummy target to force execution of dependent targets.
diff --git a/ld/config/hmake-sun4 b/ld/config/hmake-sun4
index 9c7fb77..b53bfde 100755
--- a/ld/config/hmake-sun4
+++ b/ld/config/hmake-sun4
@@ -3,6 +3,6 @@ YACC=yacc -tvd
#CC=gcc -Wall -ansi
#stuff for self hosting
HOSTING_CRT0=/lib/crt0.o
-HOSTING_LIBS=/limbo/latest/=sun4/lib/gcc/sparc/1.92/gnulib -lc
+HOSTING_LIBS=/limbo/latest/=sun4/lib/gcc/sparc/1.93/gnulib -lc
HOSTING_EMU=LDEMULATION=gld; export LDEMULATION
diff --git a/ld/ldgld960.c b/ld/ldgld960.c
index 7e7e6e0..bdb1c7b 100755
--- a/ld/ldgld960.c
+++ b/ld/ldgld960.c
@@ -108,9 +108,7 @@ gld960_before_allocation()
static void
gld960_set_output_arch()
{
- /* Set the output architecture and machine if possible */
- unsigned long machine = 0;
- bfd_set_arch_mach(output_bfd, ldfile_output_architecture, machine);
+ bfd_set_arch_mach(output_bfd, ldfile_output_architecture, bfd_mach_i960_core);
}
static char *
@@ -119,7 +117,7 @@ gld960_choose_target()
#ifdef GNU960
output_filename = "b.out";
- return bfd_make_targ_name(BFD_BOUT_FORMAT,HOST_BYTE_ORDER_BIG_P);
+ return bfd_make_targ_name(BFD_BOUT_FORMAT, 0);
#else
diff --git a/ld/ldlnk960.c b/ld/ldlnk960.c
index f7f7259..ea4df26 100755
--- a/ld/ldlnk960.c
+++ b/ld/ldlnk960.c
@@ -244,7 +244,7 @@ lnk960_choose_target()
{
#ifdef GNU960
- return bfd_make_targ_name(BFD_COFF_FORMAT,HOST_BYTE_ORDER_BIG_P);
+ return bfd_make_targ_name(BFD_COFF_FORMAT, 0);
#else
diff --git a/ld/ldsym.c b/ld/ldsym.c
index 7fcff3a..4e6bec5 100644
--- a/ld/ldsym.c
+++ b/ld/ldsym.c
@@ -98,7 +98,7 @@ DEFUN(ldsym_get,(key),
/* Nothing was found; create a new symbol table entry. */
- bp = (ldsym_type *) ldmalloc (sizeof (ldsym_type));
+ bp = (ldsym_type *) ldmalloc ((bfd_size_type)(sizeof (ldsym_type)));
bp->srefs_chain = (asymbol **)NULL;
bp->sdefs_chain = (asymbol **)NULL;
bp->scoms_chain = (asymbol **)NULL;
@@ -149,9 +149,9 @@ list_file_locals (entry)
lang_input_statement_type *entry;
{
asymbol **q;
- fprintf (stderr, "\nLocal symbols of ");
+ printf ( "\nLocal symbols of ");
info("%I", entry);
- fprintf (stderr, ":\n\n");
+ printf (":\n\n");
if (entry->asymbols) {
for (q = entry->asymbols; *q; q++)
{
@@ -169,21 +169,21 @@ static void
print_file_stuff(f)
lang_input_statement_type *f;
{
- fprintf (stderr, " %s", f->filename);
- fprintf (stderr, " ");
+ fprintf (stdout, " %s", f->filename);
+ fprintf (stdout, " ");
if (f->just_syms_flag)
{
- fprintf (stderr, " symbols only\n");
+ fprintf (stdout, " symbols only\n");
}
else
{
asection *s;
- if (option_longmap) {
+ if (true || option_longmap) {
for (s = f->the_bfd->sections;
s != (asection *)NULL;
s = s->next) {
- fprintf (stderr, "%08lx %08x 2**%2ud %s\n",
- s->output_offset,
+ print_address(s->output_offset);
+ printf ( "%08x 2**%2ud %s\n",
(unsigned)s->size, s->alignment_power, s->name);
}
}
@@ -191,12 +191,11 @@ lang_input_statement_type *f;
for (s = f->the_bfd->sections;
s != (asection *)NULL;
s = s->next) {
- fprintf (stderr, "%s %lx(%x) ",
- s->name,
- s->output_offset,
- (unsigned) s->size);
+ printf("%s ", s->name);
+ print_address(s->output_offset);
+ printf("(%x)", (unsigned)s->size);
}
- fprintf (stderr, "hex \n");
+ printf("hex \n");
}
}
}
@@ -204,11 +203,11 @@ lang_input_statement_type *f;
void
ldsym_print_symbol_table ()
{
- fprintf (stderr, "\nFiles:\n\n");
+ fprintf (stdout, "\nFiles:\n\n");
lang_for_each_file(print_file_stuff);
- fprintf (stderr, "\nGlobal symbols:\n\n");
+ fprintf (stdout, "\nGlobal symbols:\n\n");
{
register ldsym_type *sp;
@@ -218,41 +217,42 @@ ldsym_print_symbol_table ()
{
asymbol *defsym = *(sp->sdefs_chain);
asection *defsec = bfd_get_section(defsym);
- fprintf(stderr,"%08lx ",defsym->value);
+ print_address(defsym->value);
if (defsec)
{
- fprintf(stderr,"%08lx ",defsym->value+defsec->vma);
- fprintf(stderr,
- "%7s",
+ print_space();
+ print_address(defsym->value+defsec->vma);
+ printf("%7s",
bfd_section_name(output_bfd,
defsec));
}
else
{
- fprintf(stderr," .......");
+ printf(" .......");
}
}
else {
- fprintf(stderr,"undefined");
+ printf("undefined");
}
if (sp->scoms_chain) {
- fprintf(stderr, " common size %5lu %s",
- (*(sp->scoms_chain))->value, sp->name);
+ printf(" common size ");
+ print_address((*(sp->scoms_chain))->value);
+ printf("%s ",sp->name);
}
if (sp->sdefs_chain) {
- fprintf(stderr, " symbol def %08lx %s",
- (*(sp->sdefs_chain))->value,
- sp->name);
+ printf(" symbol def ");
+ print_address((*(sp->sdefs_chain))->value);
+ printf("%s ",sp->name);
}
else {
- fprintf(stderr, " undefined %s",
- sp->name);
+ printf(" undefined ");
+ printf("%s ",sp->name);
}
- fprintf(stderr, "\n");
+ print_nl();
}
}
@@ -414,7 +414,7 @@ ldsym_write()
extern unsigned int total_symbols_seen;
asymbol ** symbol_table = (asymbol **)
- ldmalloc ((size_t)(global_symbol_count +
+ ldmalloc ((bfd_size_type)(global_symbol_count +
total_files_seen +
total_symbols_seen + 1) * sizeof (asymbol *));
asymbol ** tablep = write_file_locals(symbol_table);