2004-01-16 Bernardo Innocenti * config/tc-m68k.h (EXTERN_FORCE_RELOC): Handle m68k-uclinux specially, like m68k-elf. * config/tc-m68k.c (RELAXABLE_SYMBOL): Use EXTERN_FORCE_RELOC instead of hard-coded test for TARGET_OS=elf. diff -Nru binutils-2.14.90.0.7.orig/gas/config/tc-m68k.c binutils-2.14.90.0.7/gas/config/tc-m68k.c --- binutils-2.14.90.0.7.orig/gas/config/tc-m68k.c 2003-10-29 18:37:48.000000000 +0100 +++ binutils-2.14.90.0.7/gas/config/tc-m68k.c 2003-12-22 08:26:02.361994153 +0100 @@ -732,7 +732,7 @@ libraries, and we can relax any external sym. */ #define relaxable_symbol(symbol) \ - (!((S_IS_EXTERNAL (symbol) && strcmp (TARGET_OS, "elf") != 0) \ + (!((S_IS_EXTERNAL (symbol) && EXTERN_FORCE_RELOC) \ || S_IS_WEAK (symbol))) /* Compute the relocation code for a fixup of SIZE bytes, using pc diff -Nru binutils-2.14.90.0.7.orig/gas/config/tc-m68k.h binutils-2.14.90.0.7/gas/config/tc-m68k.h --- binutils-2.14.90.0.7.orig/gas/config/tc-m68k.h 2003-08-21 17:28:48.000000000 +0200 +++ binutils-2.14.90.0.7/gas/config/tc-m68k.h 2003-12-22 08:22:53.982617970 +0100 @@ -169,8 +169,11 @@ #define tc_fix_adjustable(X) tc_m68k_fix_adjustable(X) extern int tc_m68k_fix_adjustable PARAMS ((struct fix *)); -/* Target *-*-elf implies an embedded target. No shared libs. */ -#define EXTERN_FORCE_RELOC (strcmp (TARGET_OS, "elf") != 0) +/* Target *-*-elf implies an embedded target. No shared libs. + *-*-uclinux also requires special casing to prevent GAS from + generating unsupported R_68K_PC16 relocs. */ +#define EXTERN_FORCE_RELOC \ + ((strcmp (TARGET_OS, "elf") != 0) && (strcmp (TARGET_OS, "uclinux") != 0)) /* Values passed to md_apply_fix3 don't include symbol values. */ #define MD_APPLY_SYM_VALUE(FIX) 0