Index: src/external/gpl3/gcc/dist/gcc/config/m68k/m68k.md =================================================================== RCS file: /home/chs/netbsd/cvs/src/external/gpl3/gcc/dist/gcc/config/m68k/m68k.md,v retrieving revision 1.3 diff -u -p -r1.3 m68k.md --- src/external/gpl3/gcc/dist/gcc/config/m68k/m68k.md 1 Mar 2014 08:58:31 -0000 1.3 +++ src/external/gpl3/gcc/dist/gcc/config/m68k/m68k.md 20 Nov 2014 20:01:05 -0000 @@ -7112,7 +7112,7 @@ } else if (MOTOROLA) { - if (TARGET_COLDFIRE) + if (TARGET_COLDFIRE || TARGET_68010) /* Load the full 32-bit PC-relative offset of _GLOBAL_OFFSET_TABLE_ into the PIC register, then use it to calculate the absolute value. The offset and "lea" Index: src/external/gpl3/gcc/dist/libgcc/config/m68k/lb1sf68.S =================================================================== RCS file: /home/chs/netbsd/cvs/src/external/gpl3/gcc/dist/libgcc/config/m68k/lb1sf68.S,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 lb1sf68.S --- src/external/gpl3/gcc/dist/libgcc/config/m68k/lb1sf68.S 1 Mar 2014 08:41:47 -0000 1.1.1.1 +++ src/external/gpl3/gcc/dist/libgcc/config/m68k/lb1sf68.S 20 Nov 2014 19:11:58 -0000 @@ -189,7 +189,20 @@ see the files COPYING3 and COPYING.RUNTI .macro PICLEA sym, reg movel #_GLOBAL_OFFSET_TABLE_@GOTPC, \reg lea (-6, pc, \reg), \reg +#ifdef __mc68010__ + /* + * The GOT offset can be bigger than 16 bits + * but mc68010 only has a 16-bit displacement addressing mode, + * so use a temp register to load the offset. + */ + movel a2, sp@- + movel #\sym@GOT, a2 + addal a2, \reg + movel sp@+, a2 + movel (\reg), \reg +#else movel \sym@GOT(\reg), \reg +#endif .endm .macro PICPEA sym, areg @@ -211,7 +224,7 @@ see the files COPYING3 and COPYING.RUNTI /* ISA C has no bra.l instruction, and since this assembly file gets assembled into multiple object files, we avoid the bra instruction entirely. */ -#if defined (__mcoldfire__) && !defined (__mcfisab__) +#if (defined (__mcoldfire__) && !defined (__mcfisab__)) || defined (__mc68010__) lea \addr-.-8,a0 jmp pc@(a0) #else