* expr.c (clean_up_expression): Don't cancel the subtraction of
authorIan Lance Taylor <ian@airs.com>
Mon, 19 Jul 1993 18:46:39 +0000 (18:46 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 19 Jul 1993 18:46:39 +0000 (18:46 +0000)
undefined symbols.

Fixes PR 2997.

* read.c (s_data), config/obj-coffbfd.c (obj_coff_data): If -R,
switch to text section rather than data section.

Fixes PR 2971.

gas/ChangeLog
gas/config/obj-coffbfd.c
gas/expr.c
gas/read.c

index fb772ad7426d441245d2760b0babd584e9525ce7..0ec3e13e0c512828a39bf200f5fd3635925d59a7 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jul 19 14:30:00 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * expr.c (clean_up_expression): Don't cancel the subtraction of
+       undefined symbols.
+
+       * read.c (s_data), config/obj-coffbfd.c (obj_coff_data): If -R,
+       switch to text section rather than data section.
+
 Mon Jul 19 12:35:39 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)
 
        * config/tc-m68k.c (m68k_ip, case AINDX): Add 6 to operand
index a54ed989314a9e30491c664b55ee176d640f9d78..88f815d1a3cd62e59565d318db47285f5f3dd0a9 100644 (file)
@@ -2047,7 +2047,10 @@ obj_coff_text ()
 static void
 obj_coff_data ()
 {
-  change_to_section (".data", 5, get_absolute_expression ());
+  if (flagseen['R'])
+    change_to_section (".text", 5, get_absolute_expression () + 1000);
+  else
+    change_to_section (".data", 5, get_absolute_expression ());
 }
 
 static void
index a7e32df20e5458e254788429c0fc72d9cc3b423c..aa1b66da14e511b001522652b4cfe50e77e5d953 100644 (file)
@@ -681,6 +681,7 @@ clean_up_expression (expressionP)
              && expressionP->X_add_symbol
              && (expressionP->X_subtract_symbol->sy_frag
                  == expressionP->X_add_symbol->sy_frag)
+             && SEG_NORMAL (S_GET_SEGMENT (expressionP->X_add_symbol))
              && (S_GET_VALUE (expressionP->X_subtract_symbol)
                  == S_GET_VALUE (expressionP->X_add_symbol))))
        {
index be3ea77f1aa85d32fbb228fd5f9908c92bf10228..3785a7795c8f32d6887f34830b183c49dbf56b13 100644 (file)
@@ -832,13 +832,22 @@ s_comm ()
 void
 s_data ()
 {
+  segT section;
   register int temp;
 
   temp = get_absolute_expression ();
+  if (flagseen['R'])
+    {
+      section = text_section;
+      temp += 1000;
+    }
+  else
+    section = data_section;
+
 #ifdef BFD_ASSEMBLER
-  subseg_set (data_section, (subsegT) temp);
+  subseg_set (section, (subsegT) temp);
 #else
-  subseg_new (data_section, (subsegT) temp);
+  subseg_new (section, (subsegT) temp);
 #endif
 
 #ifdef OBJ_VMS