aboutsummaryrefslogtreecommitdiff
path: root/gas/write.c
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1996-12-05 16:06:14 +0000
committerIan Lance Taylor <ian@airs.com>1996-12-05 16:06:14 +0000
commit00a69b895a5ff0836c14a1d7c799963e9f0e10a6 (patch)
treeb5c9a13df166c4034e6cf8fa6848f64ec7edbf41 /gas/write.c
parentc6571f118d392784e35d70fbf0341f150417d92f (diff)
downloadgdb-00a69b895a5ff0836c14a1d7c799963e9f0e10a6.zip
gdb-00a69b895a5ff0836c14a1d7c799963e9f0e10a6.tar.gz
gdb-00a69b895a5ff0836c14a1d7c799963e9f0e10a6.tar.bz2
* write.c (fixup_segment): Don't discard the symbol for a PC
relative fixup to an absolute symbol. PR 11204.
Diffstat (limited to 'gas/write.c')
-rw-r--r--gas/write.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gas/write.c b/gas/write.c
index 736e150..b85ffa7 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -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
}