aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/obj-coff.c26
2 files changed, 22 insertions, 10 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index c15d543..8ea090b 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2000-07-17 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * config/obj-coff.c (obj_frob_symbol): Don't merge labels. Don't
+ merge if the symbol isn't constant. Don't call S_SET_EXTERNAL if
+ the storage class is already set.
+
2000-07-17 Kazu Hirata <kazu@hxi.com>
* config/tc-w65.c: Fix formatting.
diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c
index 41fc595..6da6118 100644
--- a/gas/config/obj-coff.c
+++ b/gas/config/obj-coff.c
@@ -1139,24 +1139,30 @@ coff_frob_symbol (symp, punt)
symbolS *real;
if (!SF_GET_LOCAL (symp)
&& !SF_GET_STATICS (symp)
+ && S_GET_STORAGE_CLASS (symp) != C_LABEL
+ && symbol_constant_p(symp)
&& (real = symbol_find_base (S_GET_NAME (symp), DO_NOT_STRIP))
&& real != symp)
{
c_symbol_merge (symp, real);
*punt = 1;
}
- if (!S_IS_DEFINED (symp) && !SF_GET_LOCAL (symp))
+ if (S_GET_STORAGE_CLASS (symp) == C_NULL)
{
- assert (S_GET_VALUE (symp) == 0);
- S_SET_EXTERNAL (symp);
- }
- else if (S_GET_STORAGE_CLASS (symp) == C_NULL)
- {
- if (S_GET_SEGMENT (symp) == text_section
- && symp != seg_info (text_section)->sym)
- S_SET_STORAGE_CLASS (symp, C_LABEL);
+ if (!S_IS_DEFINED (symp) && !SF_GET_LOCAL (symp))
+ {
+ assert (S_GET_VALUE (symp) == 0);
+ S_SET_EXTERNAL (symp);
+ }
+ else if (S_GET_SEGMENT (symp) == text_section
+ && symp != seg_info (text_section)->sym)
+ {
+ S_SET_STORAGE_CLASS (symp, C_LABEL);
+ }
else
- S_SET_STORAGE_CLASS (symp, C_STAT);
+ {
+ S_SET_STORAGE_CLASS (symp, C_STAT);
+ }
}
if (SF_GET_PROCESS (symp))
{