diff options
author | Kazu Hirata <kazu@codesourcery.com> | 2000-08-01 19:02:49 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@codesourcery.com> | 2000-08-01 19:02:49 +0000 |
commit | 28e4f854cf9fb3d74282d12fa2d8277552cbe2fb (patch) | |
tree | a0cf68870da58766ffc3beb38afc1b12213286cd /gas/config/obj-ieee.c | |
parent | a570e63968b081ef84382de1f98bf5db3689499c (diff) | |
download | gdb-28e4f854cf9fb3d74282d12fa2d8277552cbe2fb.zip gdb-28e4f854cf9fb3d74282d12fa2d8277552cbe2fb.tar.gz gdb-28e4f854cf9fb3d74282d12fa2d8277552cbe2fb.tar.bz2 |
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.
Diffstat (limited to 'gas/config/obj-ieee.c')
-rw-r--r-- | gas/config/obj-ieee.c | 174 |
1 files changed, 77 insertions, 97 deletions
diff --git a/gas/config/obj-ieee.c b/gas/config/obj-ieee.c index fbabb64..35b49da 100644 --- a/gas/config/obj-ieee.c +++ b/gas/config/obj-ieee.c @@ -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 */ |