mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 10:03:47 +08:00
* config/obj-ieee.c: Delete.
* config/obj-ieee.h: Delete. * Makefile.am (OBJ_FORMATS): Remove ieee. (OBJ_FORMAT_CFILES, OBJ_FORMAT_HFILES): Similarly. (obj-ieee.o): Remove rule. * Makefile.in: Regenerate. * configure.in (atof): Remove tahoe. (OBJ_MAYBE_IEEE): Don't define. * configure: Regenerate. * config.in: Regenerate. * doc/Makefile.in: Regenerate. * po/POTFILES.in: Regenerate.
This commit is contained in:
parent
1224efb888
commit
12e64c2c29
@ -1,3 +1,18 @@
|
||||
2006-06-01 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* config/obj-ieee.c: Delete.
|
||||
* config/obj-ieee.h: Delete.
|
||||
* Makefile.am (OBJ_FORMATS): Remove ieee.
|
||||
(OBJ_FORMAT_CFILES, OBJ_FORMAT_HFILES): Similarly.
|
||||
(obj-ieee.o): Remove rule.
|
||||
* Makefile.in: Regenerate.
|
||||
* configure.in (atof): Remove tahoe.
|
||||
(OBJ_MAYBE_IEEE): Don't define.
|
||||
* configure: Regenerate.
|
||||
* config.in: Regenerate.
|
||||
* doc/Makefile.in: Regenerate.
|
||||
* po/POTFILES.in: Regenerate.
|
||||
|
||||
2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* Makefile.am: Replace INTLLIBS and INTLDEPS with LIBINTL
|
||||
|
@ -30,7 +30,7 @@ ATOF_TARG_C = $(srcdir)/config/atof-@atof@.c
|
||||
ATOF_TARG_O = atof-@atof@.o
|
||||
|
||||
# use @target_cpu_type@ for refering to configured target name
|
||||
IT_HDRS=itbl-parse.h $(srcdir)/itbl-ops.h
|
||||
IT_HDRS=itbl-parse.h $(srcdir)/itbl-ops.h
|
||||
IT_SRCS=itbl-parse.c itbl-lex.c $(srcdir)/itbl-ops.c
|
||||
IT_DEPS=$(srcdir)/itbl-parse.y $(srcdir)/itbl-lex.l $(srcdir)/config/itbl-@target_cpu_type@.h
|
||||
IT_OBJS=itbl-parse.o itbl-lex.o itbl-ops.o
|
||||
@ -99,8 +99,7 @@ OBJ_FORMATS = \
|
||||
coff \
|
||||
ecoff \
|
||||
elf \
|
||||
evax \
|
||||
ieee
|
||||
evax
|
||||
|
||||
# This is an sh case which sets valid according to whether the CPU
|
||||
# type in the shell variable c and the OS type in the shell variable o
|
||||
@ -337,7 +336,6 @@ OBJ_FORMAT_CFILES = \
|
||||
config/obj-ecoff.c \
|
||||
config/obj-elf.c \
|
||||
config/obj-evax.c \
|
||||
config/obj-ieee.c \
|
||||
config/obj-som.c
|
||||
|
||||
OBJ_FORMAT_HFILES = \
|
||||
@ -346,7 +344,6 @@ OBJ_FORMAT_HFILES = \
|
||||
config/obj-ecoff.h \
|
||||
config/obj-elf.h \
|
||||
config/obj-evax.h \
|
||||
config/obj-ieee.h \
|
||||
config/obj-som.h
|
||||
|
||||
# Emulation header files in config
|
||||
@ -553,8 +550,6 @@ obj-elf.o : $(srcdir)/config/obj-elf.c
|
||||
$(COMPILE) -c $(srcdir)/config/obj-elf.c
|
||||
obj-evax.o : $(srcdir)/config/obj-evax.c
|
||||
$(COMPILE) -c $(srcdir)/config/obj-evax.c
|
||||
obj-ieee.o : $(srcdir)/config/obj-ieee.c
|
||||
$(COMPILE) -c $(srcdir)/config/obj-ieee.c
|
||||
obj-multi.o : $(srcdir)/config/obj-multi.c
|
||||
$(COMPILE) -c $(srcdir)/config/obj-multi.c
|
||||
obj-som.o : $(srcdir)/config/obj-som.c
|
||||
@ -605,7 +600,7 @@ m68k-parse.c: $(srcdir)/config/m68k-parse.y
|
||||
rm -f m68k-parse.y; \
|
||||
else true; fi
|
||||
# Disable -Werror, if it has been enabled, since old versions of bison/
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h
|
||||
$(COMPILE) -c $< $(NO_WERROR)
|
||||
|
||||
@ -632,12 +627,12 @@ bfin-lex.o: bfin-lex.c bfin-parse.h $(srcdir)/config/bfin-defs.h
|
||||
itbl-lex.c: $(srcdir)/itbl-lex.l
|
||||
|
||||
# Disable -Werror, if it has been enabled, since old versions of bison/
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
itbl-lex.o: itbl-lex.c itbl-parse.h $(srcdir)/itbl-lex.h
|
||||
$(COMPILE) -c $< $(NO_WERROR)
|
||||
|
||||
# Disable -Werror, if it has been enabled, since old versions of bison/
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
itbl-parse.o: itbl-parse.c itbl-parse.h $(srcdir)/itbl-ops.h $(srcdir)/itbl-lex.h
|
||||
$(COMPILE) -c $< $(NO_WERROR)
|
||||
|
||||
|
@ -263,7 +263,7 @@ ATOF_TARG_C = $(srcdir)/config/atof-@atof@.c
|
||||
ATOF_TARG_O = atof-@atof@.o
|
||||
|
||||
# use @target_cpu_type@ for refering to configured target name
|
||||
IT_HDRS = itbl-parse.h $(srcdir)/itbl-ops.h
|
||||
IT_HDRS = itbl-parse.h $(srcdir)/itbl-ops.h
|
||||
IT_SRCS = itbl-parse.c itbl-lex.c $(srcdir)/itbl-ops.c
|
||||
IT_DEPS = $(srcdir)/itbl-parse.y $(srcdir)/itbl-lex.l $(srcdir)/config/itbl-@target_cpu_type@.h
|
||||
IT_OBJS = itbl-parse.o itbl-lex.o itbl-ops.o
|
||||
@ -331,8 +331,7 @@ OBJ_FORMATS = \
|
||||
coff \
|
||||
ecoff \
|
||||
elf \
|
||||
evax \
|
||||
ieee
|
||||
evax
|
||||
|
||||
|
||||
# This is an sh case which sets valid according to whether the CPU
|
||||
@ -567,7 +566,6 @@ OBJ_FORMAT_CFILES = \
|
||||
config/obj-ecoff.c \
|
||||
config/obj-elf.c \
|
||||
config/obj-evax.c \
|
||||
config/obj-ieee.c \
|
||||
config/obj-som.c
|
||||
|
||||
OBJ_FORMAT_HFILES = \
|
||||
@ -576,7 +574,6 @@ OBJ_FORMAT_HFILES = \
|
||||
config/obj-ecoff.h \
|
||||
config/obj-elf.h \
|
||||
config/obj-evax.h \
|
||||
config/obj-ieee.h \
|
||||
config/obj-som.h
|
||||
|
||||
|
||||
@ -2454,8 +2451,6 @@ obj-elf.o : $(srcdir)/config/obj-elf.c
|
||||
$(COMPILE) -c $(srcdir)/config/obj-elf.c
|
||||
obj-evax.o : $(srcdir)/config/obj-evax.c
|
||||
$(COMPILE) -c $(srcdir)/config/obj-evax.c
|
||||
obj-ieee.o : $(srcdir)/config/obj-ieee.c
|
||||
$(COMPILE) -c $(srcdir)/config/obj-ieee.c
|
||||
obj-multi.o : $(srcdir)/config/obj-multi.c
|
||||
$(COMPILE) -c $(srcdir)/config/obj-multi.c
|
||||
obj-som.o : $(srcdir)/config/obj-som.c
|
||||
@ -2502,7 +2497,7 @@ m68k-parse.c: $(srcdir)/config/m68k-parse.y
|
||||
rm -f m68k-parse.y; \
|
||||
else true; fi
|
||||
# Disable -Werror, if it has been enabled, since old versions of bison/
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h
|
||||
$(COMPILE) -c $< $(NO_WERROR)
|
||||
|
||||
@ -2529,12 +2524,12 @@ bfin-lex.o: bfin-lex.c bfin-parse.h $(srcdir)/config/bfin-defs.h
|
||||
itbl-lex.c: $(srcdir)/itbl-lex.l
|
||||
|
||||
# Disable -Werror, if it has been enabled, since old versions of bison/
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
itbl-lex.o: itbl-lex.c itbl-parse.h $(srcdir)/itbl-lex.h
|
||||
$(COMPILE) -c $< $(NO_WERROR)
|
||||
|
||||
# Disable -Werror, if it has been enabled, since old versions of bison/
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
# yacc will produce working code which contain compile time warnings.
|
||||
itbl-parse.o: itbl-parse.c itbl-parse.h $(srcdir)/itbl-ops.h $(srcdir)/itbl-lex.h
|
||||
$(COMPILE) -c $< $(NO_WERROR)
|
||||
|
||||
|
@ -29,7 +29,8 @@
|
||||
/* Supported emulations. */
|
||||
#undef EMULATIONS
|
||||
|
||||
/* Define to 1 if NLS is requested */
|
||||
/* Define to 1 if translation of program messages to the user's native
|
||||
language is requested. */
|
||||
#undef ENABLE_NLS
|
||||
|
||||
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||
@ -39,12 +40,6 @@
|
||||
*/
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define to 1 if you have the <argz.h> header file. */
|
||||
#undef HAVE_ARGZ_H
|
||||
|
||||
/* Define to 1 if you have the `dcgettext' function. */
|
||||
#undef HAVE_DCGETTEXT
|
||||
|
||||
/* Is the prototype for getopt in <unistd.h> in the expected format? */
|
||||
#undef HAVE_DECL_GETOPT
|
||||
|
||||
@ -55,57 +50,18 @@
|
||||
/* Define to 1 if you have the <errno.h> header file. */
|
||||
#undef HAVE_ERRNO_H
|
||||
|
||||
/* Define to 1 if you have the `getcwd' function. */
|
||||
#undef HAVE_GETCWD
|
||||
|
||||
/* Define to 1 if you have the `getpagesize' function. */
|
||||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define as 1 if you have gettext and don't want to use GNU gettext. */
|
||||
#undef HAVE_GETTEXT
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if your locale.h file contains LC_MESSAGES. */
|
||||
#undef HAVE_LC_MESSAGES
|
||||
|
||||
/* Define to 1 if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* Define to 1 if you have the <locale.h> header file. */
|
||||
#undef HAVE_LOCALE_H
|
||||
|
||||
/* Define to 1 if you have the <malloc.h> header file. */
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have a working `mmap' system call. */
|
||||
#undef HAVE_MMAP
|
||||
|
||||
/* Define to 1 if you have the `munmap' function. */
|
||||
#undef HAVE_MUNMAP
|
||||
|
||||
/* Define to 1 if you have the <nl_types.h> header file. */
|
||||
#undef HAVE_NL_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the `putenv' function. */
|
||||
#undef HAVE_PUTENV
|
||||
|
||||
/* Define to 1 if you have the `remove' function. */
|
||||
#undef HAVE_REMOVE
|
||||
|
||||
/* Define to 1 if you have the `sbrk' function. */
|
||||
#undef HAVE_SBRK
|
||||
|
||||
/* Define to 1 if you have the `setenv' function. */
|
||||
#undef HAVE_SETENV
|
||||
|
||||
/* Define to 1 if you have the `setlocale' function. */
|
||||
#undef HAVE_SETLOCALE
|
||||
|
||||
/* Define to 1 if you have the <stdarg.h> header file. */
|
||||
#undef HAVE_STDARG_H
|
||||
|
||||
@ -115,24 +71,12 @@
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define if you have the stpcpy function */
|
||||
#undef HAVE_STPCPY
|
||||
|
||||
/* Define to 1 if you have the `strcasecmp' function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define to 1 if you have the `strchr' function. */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||
#undef HAVE_SYS_PARAM_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
@ -145,21 +89,9 @@
|
||||
/* Define to 1 if you have the `unlink' function. */
|
||||
#undef HAVE_UNLINK
|
||||
|
||||
/* Define to 1 if you have the <values.h> header file. */
|
||||
#undef HAVE_VALUES_H
|
||||
|
||||
/* Define to 1 if you have the <varargs.h> header file. */
|
||||
#undef HAVE_VARARGS_H
|
||||
|
||||
/* Define to 1 if you have the `__argz_count' function. */
|
||||
#undef HAVE___ARGZ_COUNT
|
||||
|
||||
/* Define to 1 if you have the `__argz_next' function. */
|
||||
#undef HAVE___ARGZ_NEXT
|
||||
|
||||
/* Define to 1 if you have the `__argz_stringify' function. */
|
||||
#undef HAVE___ARGZ_STRINGIFY
|
||||
|
||||
/* Using i386 COFF? */
|
||||
#undef I386COFF
|
||||
|
||||
@ -217,9 +149,6 @@
|
||||
/* generic support? */
|
||||
#undef OBJ_MAYBE_GENERIC
|
||||
|
||||
/* IEEE support? */
|
||||
#undef OBJ_MAYBE_IEEE
|
||||
|
||||
/* SOM support? */
|
||||
#undef OBJ_MAYBE_SOM
|
||||
|
||||
@ -302,17 +231,8 @@
|
||||
`char[]'. */
|
||||
#undef YYTEXT_POINTER
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
/* Define to `long' if <sys/types.h> does not define. */
|
||||
#undef off_t
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
@ -1,613 +0,0 @@
|
||||
/* obj-format for ieee-695 records.
|
||||
Copyright 1991, 1992, 1993, 1994, 1997, 2000, 2001, 2002, 2003, 2005
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
||||
GAS 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, or (at your option)
|
||||
any later version.
|
||||
|
||||
GAS 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 GAS; see the file COPYING. If not, write to the Free
|
||||
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
/* Created by Steve Chamberlain <steve@cygnus.com>. */
|
||||
|
||||
/* This will hopefully become the port through which bfd and gas talk,
|
||||
for the moment, only ieee is known to work well. */
|
||||
|
||||
#include "bfd.h"
|
||||
#include "as.h"
|
||||
#include "subsegs.h"
|
||||
#include "output-file.h"
|
||||
#include "frags.h"
|
||||
|
||||
bfd *abfd;
|
||||
|
||||
/* How many addresses does the .align take? */
|
||||
|
||||
static relax_addressT
|
||||
relax_align (address, alignment)
|
||||
/* Address now. */
|
||||
register relax_addressT address;
|
||||
|
||||
/* Alignment (binary). */
|
||||
register long alignment;
|
||||
{
|
||||
relax_addressT mask;
|
||||
relax_addressT new_address;
|
||||
|
||||
mask = ~((~0) << alignment);
|
||||
new_address = (address + mask) & (~mask);
|
||||
return (new_address - address);
|
||||
}
|
||||
|
||||
/* Calculate the size of the frag chain
|
||||
and create a bfd section to contain all of it. */
|
||||
|
||||
static void
|
||||
size_section (abfd, idx)
|
||||
bfd *abfd;
|
||||
unsigned int idx;
|
||||
{
|
||||
asection *sec;
|
||||
unsigned int size = 0;
|
||||
fragS *frag = segment_info[idx].frag_root;
|
||||
|
||||
while (frag)
|
||||
{
|
||||
if (frag->fr_address != size)
|
||||
{
|
||||
printf (_("Out of step\n"));
|
||||
size = frag->fr_address;
|
||||
}
|
||||
size += frag->fr_fix;
|
||||
switch (frag->fr_type)
|
||||
{
|
||||
case rs_fill:
|
||||
case rs_org:
|
||||
size += frag->fr_offset * frag->fr_var;
|
||||
break;
|
||||
case rs_align:
|
||||
case rs_align_code:
|
||||
{
|
||||
addressT off;
|
||||
|
||||
off = relax_align (size, frag->fr_offset);
|
||||
if (frag->fr_subtype != 0 && off > frag->fr_subtype)
|
||||
off = 0;
|
||||
size += off;
|
||||
}
|
||||
}
|
||||
frag = frag->fr_next;
|
||||
}
|
||||
if (size)
|
||||
{
|
||||
char *name = segment_info[idx].name;
|
||||
|
||||
if (name == (char *) NULL)
|
||||
name = ".data";
|
||||
|
||||
segment_info[idx].user_stuff =
|
||||
(char *) (sec = bfd_make_section (abfd, name));
|
||||
/* Make it output through itself. */
|
||||
sec->output_section = sec;
|
||||
sec->flags |= SEC_HAS_CONTENTS;
|
||||
bfd_set_section_size (abfd, sec, size);
|
||||
}
|
||||
}
|
||||
|
||||
/* Run through a frag chain and write out the data to go with it. */
|
||||
|
||||
static void
|
||||
fill_section (abfd, idx)
|
||||
bfd *abfd;
|
||||
unsigned int idx;
|
||||
{
|
||||
asection *sec = segment_info[idx].user_stuff;
|
||||
|
||||
if (sec)
|
||||
{
|
||||
fragS *frag = segment_info[idx].frag_root;
|
||||
unsigned int offset = 0;
|
||||
while (frag)
|
||||
{
|
||||
unsigned int fill_size;
|
||||
unsigned int count;
|
||||
switch (frag->fr_type)
|
||||
{
|
||||
case rs_fill:
|
||||
case rs_align:
|
||||
case rs_org:
|
||||
if (frag->fr_fix)
|
||||
{
|
||||
bfd_set_section_contents (abfd,
|
||||
sec,
|
||||
frag->fr_literal,
|
||||
frag->fr_address,
|
||||
frag->fr_fix);
|
||||
}
|
||||
offset += frag->fr_fix;
|
||||
fill_size = frag->fr_var;
|
||||
if (fill_size)
|
||||
{
|
||||
unsigned int off = frag->fr_fix;
|
||||
for (count = frag->fr_offset; count; count--)
|
||||
{
|
||||
bfd_set_section_contents (abfd, sec,
|
||||
frag->fr_literal +
|
||||
frag->fr_fix,
|
||||
frag->fr_address + off,
|
||||
fill_size);
|
||||
off += fill_size;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
frag = frag->fr_next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Count the relocations in a chain. */
|
||||
|
||||
static unsigned int
|
||||
count_entries_in_chain (idx)
|
||||
unsigned int idx;
|
||||
{
|
||||
unsigned int nrelocs;
|
||||
fixS *fixup_ptr;
|
||||
|
||||
/* Count the relocations. */
|
||||
fixup_ptr = segment_info[idx].fix_root;
|
||||
nrelocs = 0;
|
||||
while (fixup_ptr != (fixS *) NULL)
|
||||
{
|
||||
fixup_ptr = fixup_ptr->fx_next;
|
||||
nrelocs++;
|
||||
}
|
||||
return nrelocs;
|
||||
}
|
||||
|
||||
/* Output all the relocations for a section. */
|
||||
|
||||
void
|
||||
do_relocs_for (idx)
|
||||
unsigned int idx;
|
||||
{
|
||||
unsigned int nrelocs;
|
||||
arelent **reloc_ptr_vector;
|
||||
arelent *reloc_vector;
|
||||
asymbol **ptrs;
|
||||
asection *section = (asection *) (segment_info[idx].user_stuff);
|
||||
unsigned int i;
|
||||
fixS *from;
|
||||
|
||||
if (section)
|
||||
{
|
||||
nrelocs = count_entries_in_chain (idx);
|
||||
|
||||
reloc_ptr_vector =
|
||||
(arelent **) malloc ((nrelocs + 1) * sizeof (arelent *));
|
||||
reloc_vector = (arelent *) malloc (nrelocs * sizeof (arelent));
|
||||
ptrs = (asymbol **) malloc (nrelocs * sizeof (asymbol *));
|
||||
from = segment_info[idx].fix_root;
|
||||
for (i = 0; i < nrelocs; i++)
|
||||
{
|
||||
arelent *to = reloc_vector + i;
|
||||
asymbol *s;
|
||||
reloc_ptr_vector[i] = to;
|
||||
to->howto = (reloc_howto_type *) (from->fx_r_type);
|
||||
|
||||
s = &(from->fx_addsy->sy_symbol.sy);
|
||||
to->address = ((char *) (from->fx_frag->fr_address +
|
||||
from->fx_where))
|
||||
- ((char *) (&(from->fx_frag->fr_literal)));
|
||||
to->addend = from->fx_offset;
|
||||
/* If we know the symbol which we want to relocate to, turn
|
||||
this reloaction into a section relative.
|
||||
|
||||
If this relocation is pcrelative, and we know the
|
||||
destination, we still want to keep the relocation - since
|
||||
the linker might relax some of the bytes, but it stops
|
||||
being pc relative and turns into an absolute relocation. */
|
||||
if (s)
|
||||
{
|
||||
if ((s->flags & BSF_UNDEFINED) == 0)
|
||||
{
|
||||
to->section = s->section;
|
||||
|
||||
/* We can refer directly to the value field here,
|
||||
rather than using S_GET_VALUE, because this is
|
||||
only called after do_symbols, which sets up the
|
||||
value field. */
|
||||
to->addend += s->value;
|
||||
|
||||
to->sym_ptr_ptr = 0;
|
||||
if (to->howto->pcrel_offset)
|
||||
/* This is a pcrel relocation, the addend should
|
||||
be adjusted. */
|
||||
to->addend -= to->address + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
to->section = 0;
|
||||
*ptrs = &(from->fx_addsy->sy_symbol.sy);
|
||||
to->sym_ptr_ptr = ptrs;
|
||||
|
||||
if (to->howto->pcrel_offset)
|
||||
/* This is a pcrel relocation, the addend should
|
||||
be adjusted. */
|
||||
to->addend -= to->address - 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
to->section = 0;
|
||||
|
||||
ptrs++;
|
||||
from = from->fx_next;
|
||||
}
|
||||
|
||||
/* Attach to the section. */
|
||||
section->orelocation = reloc_ptr_vector;
|
||||
section->reloc_count = nrelocs;
|
||||
section->flags |= SEC_LOAD;
|
||||
}
|
||||
}
|
||||
|
||||
/* Do the symbols. */
|
||||
|
||||
static void
|
||||
do_symbols (abfd)
|
||||
bfd *abfd;
|
||||
{
|
||||
extern symbolS *symbol_rootP;
|
||||
symbolS *ptr;
|
||||
asymbol **symbol_ptr_vec;
|
||||
asymbol *symbol_vec;
|
||||
unsigned int count = 0;
|
||||
unsigned int index;
|
||||
|
||||
for (ptr = symbol_rootP;
|
||||
ptr != (symbolS *) NULL;
|
||||
ptr = ptr->sy_next)
|
||||
{
|
||||
if (SEG_NORMAL (ptr->sy_symbol.seg))
|
||||
{
|
||||
ptr->sy_symbol.sy.section =
|
||||
(asection *) (segment_info[ptr->sy_symbol.seg].user_stuff);
|
||||
S_SET_VALUE (ptr, S_GET_VALUE (ptr));
|
||||
if (ptr->sy_symbol.sy.flags == 0)
|
||||
ptr->sy_symbol.sy.flags = BSF_LOCAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (ptr->sy_symbol.seg)
|
||||
{
|
||||
case SEG_ABSOLUTE:
|
||||
ptr->sy_symbol.sy.flags |= BSF_ABSOLUTE;
|
||||
ptr->sy_symbol.sy.section = 0;
|
||||
break;
|
||||
case SEG_UNKNOWN:
|
||||
ptr->sy_symbol.sy.flags = BSF_UNDEFINED;
|
||||
ptr->sy_symbol.sy.section = 0;
|
||||
break;
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
ptr->sy_symbol.sy.value = S_GET_VALUE (ptr);
|
||||
count++;
|
||||
}
|
||||
symbol_ptr_vec = (asymbol **) malloc ((count + 1) * sizeof (asymbol *));
|
||||
|
||||
index = 0;
|
||||
for (ptr = symbol_rootP;
|
||||
ptr != (symbolS *) NULL;
|
||||
ptr = ptr->sy_next)
|
||||
{
|
||||
symbol_ptr_vec[index] = &(ptr->sy_symbol.sy);
|
||||
index++;
|
||||
}
|
||||
symbol_ptr_vec[index] = 0;
|
||||
abfd->outsymbols = symbol_ptr_vec;
|
||||
abfd->symcount = count;
|
||||
}
|
||||
|
||||
/* The generic as->bfd converter. Other backends may have special case
|
||||
code. */
|
||||
|
||||
void
|
||||
bfd_as_write_hook ()
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
|
||||
size_section (abfd, i);
|
||||
|
||||
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
|
||||
fill_section (abfd, i);
|
||||
|
||||
do_symbols (abfd);
|
||||
|
||||
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
|
||||
do_relocs_for (i);
|
||||
}
|
||||
|
||||
S_SET_SEGMENT (x, y)
|
||||
symbolS *x;
|
||||
int y;
|
||||
{
|
||||
x->sy_symbol.seg = y;
|
||||
}
|
||||
|
||||
S_IS_DEFINED (x)
|
||||
symbolS *x;
|
||||
{
|
||||
if (SEG_NORMAL (x->sy_symbol.seg))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
switch (x->sy_symbol.seg)
|
||||
{
|
||||
case SEG_UNKNOWN:
|
||||
return 0;
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
|
||||
S_IS_EXTERNAL (x)
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
S_GET_DESC (x)
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
S_GET_SEGMENT (x)
|
||||
symbolS *x;
|
||||
{
|
||||
return x->sy_symbol.seg;
|
||||
}
|
||||
|
||||
S_SET_EXTERNAL (x)
|
||||
symbolS *x;
|
||||
{
|
||||
x->sy_symbol.sy.flags |= BSF_GLOBAL | BSF_EXPORT;
|
||||
}
|
||||
|
||||
S_SET_NAME (x, y)
|
||||
symbolS *x;
|
||||
char *y;
|
||||
{
|
||||
x->sy_symbol.sy.name = y;
|
||||
}
|
||||
|
||||
S_GET_OTHER (x)
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
S_IS_DEBUG (x)
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
#ifndef segment_name
|
||||
char *
|
||||
segment_name ()
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
obj_read_begin_hook ()
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
obj_ieee_section (ignore)
|
||||
int ignore;
|
||||
{
|
||||
extern char *input_line_pointer;
|
||||
extern char is_end_of_line[];
|
||||
char *p = input_line_pointer;
|
||||
char *s = p;
|
||||
int i;
|
||||
|
||||
/* Look up the name, if it doesn't exist, make it. */
|
||||
while (*p && *p != ' ' && *p != ',' && !is_end_of_line[*p])
|
||||
{
|
||||
p++;
|
||||
}
|
||||
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
|
||||
{
|
||||
if (segment_info[i].hadone)
|
||||
{
|
||||
if (strncmp (segment_info[i].name, s, p - s) == 0)
|
||||
goto ok;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (i == SEG_UNKNOWN)
|
||||
{
|
||||
as_bad (_("too many sections"));
|
||||
return;
|
||||
}
|
||||
|
||||
segment_info[i].hadone = 1;
|
||||
segment_info[i].name = malloc (p - s + 1);
|
||||
memcpy (segment_info[i].name, s, p - s);
|
||||
segment_info[i].name[p - s] = 0;
|
||||
ok:
|
||||
subseg_set (i, 0);
|
||||
while (!is_end_of_line[*p])
|
||||
p++;
|
||||
input_line_pointer = p;
|
||||
}
|
||||
|
||||
const pseudo_typeS obj_pseudo_table[] =
|
||||
{
|
||||
{"section", obj_ieee_section, 0},
|
||||
{"data.b" , cons , 1},
|
||||
{"data.w" , cons , 2},
|
||||
{"data.l" , cons , 4},
|
||||
{"export" , s_globl , 0},
|
||||
{"option" , s_ignore , 0},
|
||||
{"end" , s_ignore , 0},
|
||||
{"import" , s_ignore , 0},
|
||||
{"sdata" , stringer , 0},
|
||||
0,
|
||||
};
|
||||
|
||||
void
|
||||
obj_symbol_new_hook (symbolP)
|
||||
symbolS *symbolP;
|
||||
{
|
||||
symbolP->sy_symbol.sy.the_bfd = abfd;
|
||||
}
|
||||
|
||||
#if 1
|
||||
|
||||
#ifndef SUB_SEGMENT_ALIGN
|
||||
#ifdef HANDLE_ALIGN
|
||||
/* The last subsegment gets an alignment corresponding to the alignment
|
||||
of the section. This allows proper nop-filling at the end of
|
||||
code-bearing sections. */
|
||||
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \
|
||||
(!(FRCHAIN)->frch_next || (FRCHAIN)->frch_next->frch_seg != (SEG) \
|
||||
? get_recorded_alignment (SEG) : 0)
|
||||
#else
|
||||
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 2
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern void
|
||||
write_object_file ()
|
||||
{
|
||||
int i;
|
||||
struct frchain *frchain_ptr;
|
||||
struct frag *frag_ptr;
|
||||
|
||||
abfd = bfd_openw (out_file_name, "ieee");
|
||||
|
||||
if (abfd == 0)
|
||||
{
|
||||
as_perror (_("FATAL: Can't create %s"), out_file_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
bfd_set_format (abfd, bfd_object);
|
||||
bfd_set_arch_mach (abfd, bfd_arch_h8300, 0);
|
||||
subseg_set (1, 0);
|
||||
subseg_set (2, 0);
|
||||
subseg_set (3, 0);
|
||||
|
||||
/* Run through all the sub-segments and align them up. Also
|
||||
close any open frags. We tack a .fill onto the end of the
|
||||
frag chain so that any .align's size can be worked by looking
|
||||
at the next frag. */
|
||||
for (frchain_ptr = frchain_root;
|
||||
frchain_ptr != (struct frchain *) NULL;
|
||||
frchain_ptr = frchain_ptr->frch_next)
|
||||
{
|
||||
int alignment;
|
||||
|
||||
subseg_set (frchain_ptr->frch_seg, frchain_ptr->frch_subseg);
|
||||
|
||||
alignment = SUB_SEGMENT_ALIGN (now_seg, frchain_ptr)
|
||||
|
||||
#ifdef md_do_align
|
||||
md_do_align (alignment, (char *) NULL, 0, 0, alignment_done);
|
||||
#endif
|
||||
if (subseg_text_p (now_seg))
|
||||
frag_align_code (alignment, 0);
|
||||
else
|
||||
frag_align (alignment, 0, 0);
|
||||
|
||||
#ifdef md_do_align
|
||||
alignment_done:
|
||||
#endif
|
||||
|
||||
frag_wane (frag_now);
|
||||
frag_now->fr_fix = 0;
|
||||
know (frag_now->fr_next == NULL);
|
||||
}
|
||||
|
||||
/* Now build one big frag chain for each segment, linked through
|
||||
fr_next. */
|
||||
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
|
||||
{
|
||||
fragS **prev_frag_ptr_ptr;
|
||||
struct frchain *next_frchain_ptr;
|
||||
|
||||
segment_info[i].frag_root = segment_info[i].frchainP->frch_root;
|
||||
}
|
||||
|
||||
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
|
||||
relax_segment (segment_info[i].frag_root, i);
|
||||
|
||||
/* Relaxation has completed. Freeze all syms. */
|
||||
finalize_syms = 1;
|
||||
|
||||
/* Now the addresses of the frags are correct within the segment. */
|
||||
|
||||
bfd_as_write_hook ();
|
||||
bfd_close (abfd);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
H_SET_TEXT_SIZE (a, b)
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
H_GET_TEXT_SIZE ()
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
H_SET_BSS_SIZE ()
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
H_SET_STRING_SIZE ()
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
H_SET_RELOCATION_SIZE ()
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
H_SET_MAGIC_NUMBER ()
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
H_GET_FILE_SIZE ()
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
||||
H_GET_TEXT_RELOCATION_SIZE ()
|
||||
{
|
||||
abort ();
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
/* This file is obj-ieee.h
|
||||
Copyright 1987, 1988, 1989, 1990, 1991, 1992, 2000, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
||||
GAS 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, or (at your option)
|
||||
any later version.
|
||||
|
||||
GAS 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 GAS; see the file COPYING. If not, write to the Free
|
||||
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
#include "bfd.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
asymbol sy;
|
||||
int seg;
|
||||
}
|
||||
obj_symbol_type;
|
||||
|
||||
#define S_GET_NAME(s) (((s)->sy_symbol.sy.name))
|
||||
|
||||
/* Return true for symbols that should not be reduced to section
|
||||
symbols or eliminated from expressions, because they may be
|
||||
overridden by the linker. */
|
||||
#define S_FORCE_RELOC(s, strict) (!SEG_NORMAL (x->sy_symbol.seg))
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int x;
|
||||
}
|
||||
object_headers;
|
||||
|
||||
int lineno_rootP;
|
||||
|
||||
#define IEEE_STYLE
|
8
gas/configure
vendored
8
gas/configure
vendored
@ -4902,8 +4902,7 @@ fi
|
||||
# IEEE FP. On those that don't support FP at all, usually IEEE
|
||||
# is emulated.
|
||||
case ${target_cpu} in
|
||||
vax | tahoe ) atof=${target_cpu} ;;
|
||||
pdp11) atof=vax ;;
|
||||
vax | pdp11 ) atof=vax ;;
|
||||
*) atof=ieee ;;
|
||||
esac
|
||||
|
||||
@ -5068,11 +5067,6 @@ cat >>confdefs.h <<\_ACEOF
|
||||
#define OBJ_MAYBE_GENERIC 1
|
||||
_ACEOF
|
||||
;;
|
||||
ieee)
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define OBJ_MAYBE_IEEE 1
|
||||
_ACEOF
|
||||
;;
|
||||
som)
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define OBJ_MAYBE_SOM 1
|
||||
|
@ -305,17 +305,17 @@ changequote([,])dnl
|
||||
;;
|
||||
|
||||
mips)
|
||||
echo ${extra_objects} | grep -s "itbl-parse.o"
|
||||
echo ${extra_objects} | grep -s "itbl-parse.o"
|
||||
if test $? -ne 0 ; then
|
||||
extra_objects="$extra_objects itbl-parse.o"
|
||||
fi
|
||||
|
||||
echo ${extra_objects} | grep -s "itbl-lex.o"
|
||||
echo ${extra_objects} | grep -s "itbl-lex.o"
|
||||
if test $? -ne 0 ; then
|
||||
extra_objects="$extra_objects itbl-lex.o"
|
||||
fi
|
||||
|
||||
echo ${extra_objects} | grep -s "itbl-ops.o"
|
||||
echo ${extra_objects} | grep -s "itbl-ops.o"
|
||||
if test $? -ne 0 ; then
|
||||
extra_objects="$extra_objects itbl-ops.o"
|
||||
fi
|
||||
@ -424,8 +424,7 @@ fi
|
||||
# IEEE FP. On those that don't support FP at all, usually IEEE
|
||||
# is emulated.
|
||||
case ${target_cpu} in
|
||||
vax | tahoe ) atof=${target_cpu} ;;
|
||||
pdp11) atof=vax ;;
|
||||
vax | pdp11 ) atof=vax ;;
|
||||
*) atof=ieee ;;
|
||||
esac
|
||||
|
||||
@ -511,7 +510,6 @@ if test `set . $formats ; shift ; echo $#` -gt 1 ; then
|
||||
ecoff) AC_DEFINE(OBJ_MAYBE_ECOFF, 1, [ECOFF support?]) ;;
|
||||
elf) AC_DEFINE(OBJ_MAYBE_ELF, 1, [ELF support?]) ;;
|
||||
generic) AC_DEFINE(OBJ_MAYBE_GENERIC, 1, [generic support?]) ;;
|
||||
ieee) AC_DEFINE(OBJ_MAYBE_IEEE, 1, [IEEE support?]) ;;
|
||||
som) AC_DEFINE(OBJ_MAYBE_SOM, 1, [SOM support?]) ;;
|
||||
esac
|
||||
extra_objects="$extra_objects obj-$fmt.o"
|
||||
@ -610,7 +608,7 @@ AC_CHECK_FUNCS(sbrk)
|
||||
|
||||
# do we need the math library?
|
||||
case "${need_libm}" in
|
||||
yes)
|
||||
yes)
|
||||
AC_CHECK_LIBM
|
||||
AC_SUBST(LIBM)
|
||||
;;
|
||||
|
@ -386,13 +386,10 @@ dist-info: $(INFO_DEPS)
|
||||
$(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
esac; \
|
||||
if test -f $$base; then d=.; else d=$(srcdir); fi; \
|
||||
base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||
for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
|
||||
if test -f $$file; then \
|
||||
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
|
||||
test -f $(distdir)/$$relfile || \
|
||||
cp -p $$file $(distdir)/$$relfile; \
|
||||
else :; fi; \
|
||||
for file in $$d/$$base*; do \
|
||||
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
|
||||
test -f $(distdir)/$$relfile || \
|
||||
cp -p $$file $(distdir)/$$relfile; \
|
||||
done; \
|
||||
done
|
||||
|
||||
|
@ -24,8 +24,6 @@ config/obj-elf.c
|
||||
config/obj-elf.h
|
||||
config/obj-evax.c
|
||||
config/obj-evax.h
|
||||
config/obj-ieee.c
|
||||
config/obj-ieee.h
|
||||
config/obj-som.c
|
||||
config/obj-som.h
|
||||
config/tc-alpha.c
|
||||
|
Loading…
Reference in New Issue
Block a user