aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorStan Shebs <shebs@codesourcery.com>1994-04-13 02:02:48 +0000
committerStan Shebs <shebs@codesourcery.com>1994-04-13 02:02:48 +0000
commitcc886e3d1eadbf443363b270caf57b9de273bb5a (patch)
tree09a3160c13fa5825a76aa3d8ee17592e9aac3849 /gas
parent41194a4a597de558c9bdd663722e87ab2ac5763e (diff)
downloadgdb-cc886e3d1eadbf443363b270caf57b9de273bb5a.zip
gdb-cc886e3d1eadbf443363b270caf57b9de273bb5a.tar.gz
gdb-cc886e3d1eadbf443363b270caf57b9de273bb5a.tar.bz2
Tue Apr 12 18:25:13 1994 Stan Shebs (shebs@andros.cygnus.com)
* subsegs.c (subsegs_begin): Call memset with args in the correct order. (subseg_get): Clear newly allocated seginfo, set its pointer slots to NULL instead of 0. Fixes a problem observed in sparc-lynx progressive.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/subsegs.c47
2 files changed, 36 insertions, 18 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index bc5ba80..ea332a9 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+Tue Apr 12 18:25:13 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * subsegs.c (subsegs_begin): Call memset with args in the correct
+ order.
+ (subseg_get): Clear newly allocated seginfo, set its pointer slots
+ to NULL instead of 0.
+
Mon Apr 11 09:00:57 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
* config/tc-hppa.c (pa_procend): Handle case where label was
diff --git a/gas/subsegs.c b/gas/subsegs.c
index 0566d0a..3b4581c 100644
--- a/gas/subsegs.c
+++ b/gas/subsegs.c
@@ -1,5 +1,6 @@
/* subsegs.c - subsegments -
- Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1990, 1991, 1992, 1993, 1994
+ Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -85,7 +86,7 @@ subsegs_begin ()
/* Fake up 1st frag. It won't be used=> is ok if obstack...
pads the end of it for alignment. */
frag_now = (fragS *) obstack_alloc (&frags, SIZEOF_STRUCT_FRAG);
- memset (frag_now, SIZEOF_STRUCT_FRAG, 0);
+ memset (frag_now, 0, SIZEOF_STRUCT_FRAG);
#ifndef BFD_ASSEMBLER
/* This 1st frag will not be in any frchain.
@@ -140,7 +141,6 @@ subseg_change (seg, subseg)
if (! seginfo)
abort ();
seginfo->fix_root = 0;
- seginfo->fix_tail = 0;
seginfo->bfd_section = seg;
seginfo->sym = 0;
bfd_set_section_userdata (stdoutput, seg, (char *) seginfo);
@@ -249,7 +249,7 @@ subseg_set_rest (seg, subseg)
* This should be the only code that creates a frchainS.
*/
newP = (frchainS *) obstack_alloc (&frags, sizeof (frchainS));
- memset (newP, sizeof (frchainS), 0);
+ memset (newP, 0, sizeof (frchainS));
/* This begines on a good boundary because a obstack_done()
preceeded it. It implies an obstack_done(), so we expect
the next object allocated to begin on a correct boundary. */
@@ -258,6 +258,10 @@ subseg_set_rest (seg, subseg)
(frcP = newP)->frch_subseg = subseg;
newP->frch_seg = seg;
newP->frch_last = NULL;
+#ifdef BFD_ASSEMBLER
+ newP->fix_root = NULL;
+ newP->fix_tail = NULL;
+#endif
}
/*
* Here with frcP ->ing to the frchainS for subseg.
@@ -400,17 +404,14 @@ subseg_get (segname, force_new)
{
secptr->output_section = secptr;
seginfo = (segment_info_type *) xmalloc (sizeof (*seginfo));
- seginfo->fix_root = 0;
- seginfo->fix_tail = 0;
+ memset ((char *) seginfo, 0, sizeof(seginfo));
+ seginfo->fix_root = NULL;
seginfo->bfd_section = secptr;
bfd_set_section_userdata (stdoutput, secptr, (char *) seginfo);
- seginfo->frchainP = 0;
- seginfo->lineno_list_head = seginfo->lineno_list_tail = 0;
- seginfo->sym = 0;
- seginfo->dot = 0;
- seginfo->hadone = 0;
- seginfo->user_stuff = 0;
- seginfo->stabu.stab_string_size = 0;
+ seginfo->frchainP = NULL;
+ seginfo->lineno_list_head = seginfo->lineno_list_tail = NULL;
+ seginfo->sym = NULL;
+ seginfo->dot = NULL;
}
return secptr;
}
@@ -458,23 +459,33 @@ subseg_set (secptr, subseg)
subseg_set_rest (secptr, subseg);
}
+#ifndef obj_sec_sym_ok_for_reloc
+#define obj_sec_sym_ok_for_reloc(SEC) 0
+#endif
+
symbolS *
section_symbol (sec)
segT sec;
{
segment_info_type *seginfo = seg_info (sec);
+ symbolS *s;
if (seginfo == 0)
abort ();
if (seginfo->sym)
return seginfo->sym;
- seginfo->sym = symbol_find (sec->name);
- if (!seginfo->sym)
+ s = symbol_find (sec->name);
+ if (!s)
{
- seginfo->sym = symbol_make (sec->name);
- seginfo->sym->bsym = sec->symbol;
+ s = symbol_new (sec->name, sec, 0, &zero_address_frag);
+ S_CLEAR_EXTERNAL (s);
+
+ /* Use the BFD section symbol, if possible. */
+ if (obj_sec_sym_ok_for_reloc (sec))
+ s->bsym = sec->symbol;
}
- return seginfo->sym;
+ seginfo->sym = s;
+ return s;
}
#endif /* BFD_ASSEMBLER */