diff --git a/gas/ChangeLog b/gas/ChangeLog
index 67ac7623966..6d4ca717f5c 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,8 @@
 Wed Feb  4 13:17:19 1998  Ian Lance Taylor  <ian@cygnus.com>
 
+	* config/tc-sparc.h (tc_fix_adjustable) [OBJ_ELF]: A reloc against
+	a gas internal symbol is adjustable.
+
 	* as.h: If gcc version greater than 2.6, use `__format__' and
 	`__printf__' in function attributes, rather than `format' and
 	`printf'.
diff --git a/gas/config/tc-sparc.h b/gas/config/tc-sparc.h
index cea036d1b5e..5b731a01ed2 100644
--- a/gas/config/tc-sparc.h
+++ b/gas/config/tc-sparc.h
@@ -114,14 +114,16 @@ extern void sparc_handle_align PARAMS ((struct frag *));
    relocations against sections.  This is required for the dynamic
    linker to operate properly.  When generating PIC, we need to keep
    any non PC relative reloc.  */
-#define tc_fix_adjustable(FIX)				\
-  (! S_IS_EXTERNAL ((FIX)->fx_addsy)			\
-   && ! S_IS_WEAK ((FIX)->fx_addsy)			\
-   && (! sparc_pic_code					\
-       || (FIX)->fx_pcrel				\
-       || ((FIX)->fx_subsy != NULL			\
-	   && (S_GET_SEGMENT ((FIX)->fx_subsy)		\
-	       == S_GET_SEGMENT ((FIX)->fx_addsy)))))
+#define tc_fix_adjustable(FIX)						\
+  (! S_IS_EXTERNAL ((FIX)->fx_addsy)					\
+   && ! S_IS_WEAK ((FIX)->fx_addsy)					\
+   && (! sparc_pic_code							\
+       || (FIX)->fx_pcrel						\
+       || ((FIX)->fx_subsy != NULL					\
+	   && (S_GET_SEGMENT ((FIX)->fx_subsy)				\
+	       == S_GET_SEGMENT ((FIX)->fx_addsy)))			\
+       || strchr (S_GET_NAME ((FIX)->fx_addsy), '\001') != NULL		\
+       || strchr (S_GET_NAME ((FIX)->fx_addsy), '\002') != NULL))
 #endif
 
 #ifdef OBJ_AOUT
@@ -134,6 +136,9 @@ extern void sparc_handle_align PARAMS ((struct frag *));
    || (FIX)->fx_r_type == BFD_RELOC_32)
 #endif
 
+#define elf_tc_final_processing sparc_elf_final_processing
+extern void sparc_elf_final_processing PARAMS ((void));
+
 #define md_operand(x)
 
 extern void sparc_md_end PARAMS ((void));