aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1997-01-27 22:41:43 +0000
committerIan Lance Taylor <ian@airs.com>1997-01-27 22:41:43 +0000
commit0192b099bde982f3d5ef9a74cb8a5b0dae816f2a (patch)
tree1172f93664fb75af68cd0ff0714ea8ca8f6ec864 /gas
parent5c04f4f7fced8f90816be87e9efde53441447d7a (diff)
downloadgdb-0192b099bde982f3d5ef9a74cb8a5b0dae816f2a.zip
gdb-0192b099bde982f3d5ef9a74cb8a5b0dae816f2a.tar.gz
gdb-0192b099bde982f3d5ef9a74cb8a5b0dae816f2a.tar.bz2
* ecoff.c (ecoff_build_symbols): Don't generate a local ECOFF
symbol for a common symbol.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/ecoff.c14
2 files changed, 17 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index e2aece6..c29e5e2 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+Mon Jan 27 17:41:20 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ecoff.c (ecoff_build_symbols): Don't generate a local ECOFF
+ symbol for a common symbol.
+
Wed Jan 22 10:39:39 1997 Doug Evans <dje@canuck.cygnus.com>
Patch presumed to have been checked in awhile ago but wasn't.
diff --git a/gas/ecoff.c b/gas/ecoff.c
index 960032e..e8d66c3 100644
--- a/gas/ecoff.c
+++ b/gas/ecoff.c
@@ -3612,8 +3612,7 @@ ecoff_stab (sec, what, string, type, other, desc)
}
else
{
- as_bad (".stabs expression too complex");
- sym = NULL;
+ sym = make_expr_symbol (&exp);
value = 0;
addend = 0;
}
@@ -4165,6 +4164,11 @@ ecoff_build_symbols (backend, buf, bufend, offset)
&& ! ECOFF_IS_STAB (&sym_ptr->ecoff_sym.asym))
local = 0;
+ /* This is just an external symbol if it is a
+ common symbol. */
+ if (S_IS_COMMON (as_sym))
+ local = 0;
+
/* If an st_end symbol has an associated gas
symbol, then it is a local label created for
a .bend or .end directive. Stabs line
@@ -4231,6 +4235,12 @@ ecoff_build_symbols (backend, buf, bufend, offset)
sym_ptr->ecoff_sym.asym.value =
(S_GET_VALUE (as_sym)
- S_GET_VALUE (begin_ptr->as_sym));
+
+ /* If the size is odd, this is probably a
+ mips16 function; force it to be even. */
+ if ((sym_ptr->ecoff_sym.asym.value & 1) != 0)
+ ++sym_ptr->ecoff_sym.asym.value;
+
#ifdef S_SET_SIZE
S_SET_SIZE (begin_ptr->as_sym,
sym_ptr->ecoff_sym.asym.value);