2000-08-01 Kazu Hirata <kazu@hxi.com>

* config/obj-som.c: Fix formatting.
	* config/obj-ieee.c: Likewise.
	* config/tc-arm.c: Likewise.
	* config/tc-v850.c: Likewise.
This commit is contained in:
Kazu Hirata 2000-08-01 19:02:49 +00:00
parent a570e63968
commit 28e4f854cf
5 changed files with 1957 additions and 1815 deletions

View File

@ -1,3 +1,10 @@
2000-08-01 Kazu Hirata <kazu@hxi.com>
* config/obj-som.c: Fix formatting.
* config/obj-ieee.c: Likewise.
* config/tc-arm.c: Likewise.
* config/tc-v850.c: Likewise.
2000-08-01 Nick Clifton <nickc@redhat.com>
* doc/c-m68k.texi (section M680x0 Options): Turn into a table

View File

@ -1,5 +1,6 @@
/* obj-format for ieee-695 records.
Copyright (C) 1991, 92, 93, 94, 95, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1991, 92, 93, 94, 95, 97, 98, 2000
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@ -16,19 +17,12 @@
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, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
02111-1307, USA. */
/* Created by Steve Chamberlain <steve@cygnus.com>. */
/*
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.
*/
/* 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"
@ -38,11 +32,15 @@
bfd *abfd;
/* How many addresses does the .align take? */
/* How many addresses does the .align take? */
static relax_addressT
relax_align (address, alignment)
register relax_addressT address; /* Address now. */
register long alignment; /* Alignment (binary). */
/* Address now. */
register relax_addressT address;
/* Alignment (binary). */
register long alignment;
{
relax_addressT mask;
relax_addressT new_address;
@ -50,18 +48,20 @@ relax_align (address, alignment)
mask = ~((~0) << alignment);
new_address = (address + mask) & (~mask);
return (new_address - address);
} /* relax_align() */
}
/* Calculate the size of the frag chain
and create a bfd section to contain all of it. */
/* 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;
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)
@ -92,25 +92,28 @@ size_section (abfd, idx)
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 */
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 */
/* Run through a frag chain and write out the data to go with it. */
static void
fill_section (abfd, idx)
bfd * abfd;
bfd *abfd;
unsigned int idx;
{
asection *sec = segment_info[idx].user_stuff;
if (sec)
{
fragS *frag = segment_info[idx].frag_root;
@ -156,7 +159,7 @@ fill_section (abfd, idx)
}
}
/* Count the relocations in a chain */
/* Count the relocations in a chain. */
static unsigned int
count_entries_in_chain (idx)
@ -165,7 +168,7 @@ count_entries_in_chain (idx)
unsigned int nrelocs;
fixS *fixup_ptr;
/* Count the relocations */
/* Count the relocations. */
fixup_ptr = segment_info[idx].fix_root;
nrelocs = 0;
while (fixup_ptr != (fixS *) NULL)
@ -176,7 +179,8 @@ count_entries_in_chain (idx)
return nrelocs;
}
/* output all the relocations for a section */
/* Output all the relocations for a section. */
void
do_relocs_for (idx)
unsigned int idx;
@ -188,11 +192,13 @@ do_relocs_for (idx)
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_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;
@ -203,8 +209,10 @@ do_relocs_for (idx)
reloc_ptr_vector[i] = to;
to->howto = (reloc_howto_type *) (from->fx_r_type);
#if 0 /* We can't represent complicated things in a reloc yet */
if (from->fx_addsy == 0 || from->fx_subsy != 0) abort();
#if 0
/* We can't represent complicated things in a reloc yet. */
if (from->fx_addsy == 0 || from->fx_subsy != 0)
abort ();
#endif
s = &(from->fx_addsy->sy_symbol.sy);
@ -218,7 +226,7 @@ do_relocs_for (idx)
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. */
being pc relative and turns into an absolute relocation. */
if (s)
{
if ((s->flags & BSF_UNDEFINED) == 0)
@ -233,10 +241,9 @@ do_relocs_for (idx)
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;
}
/* This is a pcrel relocation, the addend should
be adjusted. */
to->addend -= to->address + 1;
}
else
{
@ -245,33 +252,30 @@ do_relocs_for (idx)
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;
}
/* This is a pcrel relocation, the addend should
be adjusted. */
to->addend -= to->address - 1;
}
}
else
{
to->section = 0;
}
to->section = 0;
ptrs++;
from = from->fx_next;
}
/* attatch to the section */
/* Attatch to the section. */
section->orelocation = reloc_ptr_vector;
section->reloc_count = nrelocs;
section->flags |= SEC_LOAD;
}
}
/* do the symbols.. */
/* Do the symbols. */
static void
do_symbols (abfd)
bfd * abfd;
bfd *abfd;
{
extern symbolS *symbol_rootP;
symbolS *ptr;
@ -280,7 +284,6 @@ do_symbols (abfd)
unsigned int count = 0;
unsigned int index;
for (ptr = symbol_rootP;
ptr != (symbolS *) NULL;
ptr = ptr->sy_next)
@ -291,9 +294,7 @@ do_symbols (abfd)
(asection *) (segment_info[ptr->sy_symbol.seg].user_stuff);
S_SET_VALUE (ptr, S_GET_VALUE (ptr) + ptr->sy_frag->fr_address);
if (ptr->sy_symbol.sy.flags == 0)
{
ptr->sy_symbol.sy.flags = BSF_LOCAL;
}
ptr->sy_symbol.sy.flags = BSF_LOCAL;
}
else
{
@ -330,7 +331,7 @@ do_symbols (abfd)
}
/* The generic as->bfd converter. Other backends may have special case
code */
code. */
void
bfd_as_write_hook ()
@ -338,10 +339,7 @@ bfd_as_write_hook ()
int i;
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
{
size_section (abfd, i);
}
size_section (abfd, i);
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
fill_section (abfd, i);
@ -350,7 +348,6 @@ bfd_as_write_hook ()
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
do_relocs_for (i);
}
S_SET_SEGMENT (x, y)
@ -437,7 +434,8 @@ obj_ieee_section (ignore)
char *p = input_line_pointer;
char *s = p;
int i;
/* Look up the name, if it doesn't exist, make it */
/* Look up the name, if it doesn't exist, make it. */
while (*p && *p != ' ' && *p != ',' && !is_end_of_line[*p])
{
p++;
@ -447,10 +445,7 @@ obj_ieee_section (ignore)
if (segment_info[i].hadone)
{
if (strncmp (segment_info[i].name, s, p - s) == 0)
{
goto ok;
}
goto ok;
}
else
break;
@ -470,32 +465,26 @@ ok:
while (!is_end_of_line[*p])
p++;
input_line_pointer = p;
}
void cons ();
void s_ignore ();
void s_globl ();
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},
{"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;
@ -503,10 +492,6 @@ obj_symbol_new_hook (symbolP)
symbolP->sy_symbol.sy.the_bfd = abfd;
}
#if 1
extern void
write_object_file ()
@ -531,10 +516,10 @@ write_object_file ()
frchain_ptr != (struct frchain *) NULL;
frchain_ptr = frchain_ptr->frch_next)
{
/* 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. */
/* 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. */
subseg_set (frchain_ptr->frch_seg, frchain_ptr->frch_subseg);
#ifndef SUB_SEGMENT_ALIGN
@ -547,18 +532,19 @@ write_object_file ()
}
/* Now build one big frag chain for each segment, linked through
fr_next. */
fr_next. */
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
{
fragS **prev_frag_ptr_ptr;
struct frchain *next_frchain_ptr;
/* struct frag **head_ptr = segment_info[i].frag_root;*/
#if 0
struct frag **head_ptr = segment_info[i].frag_root;
#endif
segment_info[i].frag_root = segment_info[i].frchainP->frch_root;
#if 0
/* Im not sure what this is for */
/* I'm not sure what this is for. */
for (frchain_ptr = segment_info[i].frchainP->frch_root;
frchain_ptr != (struct frchain *) NULL;
frchain_ptr = frchain_ptr->frch_next)
@ -566,17 +552,13 @@ write_object_file ()
*head_ptr = frchain_ptr;
head_ptr = &frchain_ptr->next;
}
#endif
}
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
{
relax_segment (segment_info[i].frag_root, i);
}
relax_segment (segment_info[i].frag_root, i);
/* Now the addresses of the frags are correct within the segment */
/* Now the addresses of the frags are correct within the segment. */
bfd_as_write_hook ();
bfd_close (abfd);
@ -623,5 +605,3 @@ H_GET_TEXT_RELOCATION_SIZE ()
{
abort ();
}
/* end of obj-ieee.c */

View File

@ -1,5 +1,5 @@
/* SOM object file format.
Copyright (C) 1993, 1998 Free Software Foundation, Inc.
Copyright (C) 1993, 1998, 2000 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@ -39,12 +39,16 @@ static int copyright_seen = 0;
static int compiler_seen = 0;
/* Unused by SOM. */
void obj_read_begin_hook () {}
void
obj_read_begin_hook ()
{
}
/* Handle a .compiler directive. This is intended to create the
compilation unit auxiliary header for MPE such that the linkeditor
can handle SOM extraction from archives. The format of the quoted
string is "sourcefile language version" and is delimited by blanks.*/
string is "sourcefile language version" and is delimited by blanks. */
void
obj_som_compiler (unused)
@ -94,8 +98,9 @@ obj_som_compiler (unused)
}
*p = '\000';
language_name = ++p;
while (*p != ' ' && *p != '\000') p++;
language_name = ++p;
while (*p != ' ' && *p != '\000')
p++;
if (*p == '\000')
{
as_bad (".compiler directive missing version");
@ -103,8 +108,9 @@ obj_som_compiler (unused)
}
*p = '\000';
version_id = ++p;
while (*p != '\000') p++;
version_id = ++p;
while (*p != '\000')
p++;
/* Remove the trailing quote. */
*(--p) = '\000';
@ -155,7 +161,8 @@ obj_som_version (unused)
if (bfd_som_attach_aux_hdr (stdoutput, VERSION_AUX_ID, version) == false)
{
bfd_perror (stdoutput->filename);
as_perror (_("FATAL: Attaching version header %s"), stdoutput->filename);
as_perror (_("FATAL: Attaching version header %s"),
stdoutput->filename);
exit (EXIT_FAILURE);
}
*input_line_pointer = c;
@ -200,7 +207,8 @@ obj_som_copyright (unused)
if (bfd_som_attach_aux_hdr (stdoutput, COPYRIGHT_AUX_ID, copyright) == false)
{
bfd_perror (stdoutput->filename);
as_perror (_("FATAL: Attaching copyright header %s"), stdoutput->filename);
as_perror (_("FATAL: Attaching copyright header %s"),
stdoutput->filename);
exit (EXIT_FAILURE);
}
*input_line_pointer = c;
@ -228,7 +236,7 @@ obj_som_init_stab_section (seg)
space = bfd_make_section_old_way (stdoutput, "$GDB_DEBUG$");
/* Set SOM specific attributes for the space. In particular we set
the space "defined", "private", "sort_key", and "spnum" values.
the space "defined", "private", "sort_key", and "spnum" values.
Due to a bug in pxdb (called by hpux linker), the sort keys
of the various stabs spaces/subspaces need to be "small". We
@ -245,7 +253,7 @@ obj_som_init_stab_section (seg)
/* Make some space for the first special stab entry and zero the memory.
It contains information about the length of this file's
stab string and the like. Using it avoids the need to
stab string and the like. Using it avoids the need to
relocate the stab strings.
The $GDB_STRINGS$ space will be created as a side effect of
@ -314,7 +322,7 @@ obj_som_weak (ignore)
char *name;
int c;
symbolS *symbolP;
do
{
name = input_line_pointer;
@ -327,14 +335,13 @@ obj_som_weak (ignore)
symbol_get_obj (symbolP)->local = 1;
#endif
if (c == ',')
{
input_line_pointer++;
SKIP_WHITESPACE ();
if (*input_line_pointer == '\n')
c = '\n';
}
{
input_line_pointer++;
SKIP_WHITESPACE ();
if (*input_line_pointer == '\n')
c = '\n';
}
}
while (c == ',');
demand_empty_rest_of_line ();
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff