* write.c (fixup_segment): Don't discard the symbol for a PC
authorIan Lance Taylor <ian@airs.com>
Thu, 5 Dec 1996 16:06:14 +0000 (16:06 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 5 Dec 1996 16:06:14 +0000 (16:06 +0000)
relative fixup to an absolute symbol.
PR 11204.

gas/ChangeLog
gas/write.c

index 03d606f48b48ef6ae27cdda674d708ea4d99ca35..5733d0ed41f7962d76dc086d4f0a4ab901b393af 100644 (file)
@@ -1,3 +1,8 @@
+Thu Dec  5 11:03:31 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * write.c (fixup_segment): Don't discard the symbol for a PC
+       relative fixup to an absolute symbol.
+
 start-sanitize-d10v
 Wed Dec  4 15:42:41 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>
 
index 736e1509ad80fe5c8017f0fafc3257683073bdc0..b85ffa7e4b3b9fd39af6bf8b71a43f497f93b384 100644 (file)
@@ -297,7 +297,8 @@ fix_new_exp (frag, where, size, exp, pcrel, r_type)
       break;
 
     default:
-      as_bad ("expression too complex for fixup");
+      add = make_expr_symbol (exp);
+      break;
     }
 
   return fix_new_internal (frag, where, size, add, sub, off,
@@ -2429,7 +2430,8 @@ fixup_segment (fixP, this_segment_type)
            }
          else
            {
-             if (add_symbol_segment == absolute_section)
+             if (add_symbol_segment == absolute_section
+                 && ! pcrel)
                {
 #ifdef TC_I960
                  /* See comment about reloc_callj() above.  */
@@ -2480,9 +2482,15 @@ fixup_segment (fixP, this_segment_type)
              else
                {
                  seg_reloc_count++;
+/* start-sanitize-v850 */
+#if !(defined (TC_V850) && defined (OBJ_ELF))
+/* end-sanitize-v850 */
 #if !(defined (TC_M68K) && defined (OBJ_ELF))
 #if !defined (TC_I386) || !(defined (OBJ_ELF) || defined (OBJ_COFF))
                  add_number += S_GET_VALUE (add_symbolP);
+/* start-sanitize-v850 */
+#endif
+/* end-sanitize-v850 */
 #endif
 #endif
                }