diff --git a/ChangeLog.m68k b/ChangeLog.m68k index 6fdd4e13e4..284a3bf399 100644 --- a/ChangeLog.m68k +++ b/ChangeLog.m68k @@ -6,9 +6,13 @@ (PCREL_OP): Define. * sysdeps/m68k/sysdep.h (PCREL_OP): Don't define here. * sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h: New file. + (SYSCALL_ERROR_LOAD_GOT): Define. * sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h: New file. + (SYSCALL_ERROR_LOAD_GOT): Define. * sysdeps/unix/sysv/linux/m68k/sysdep.h: Don't include subordinate sysdep files. + (SYSCALL_ERROR_HANDLER) [PIC && USE___THREAD]: Use + SYSCALL_ERROR_LOAD_GOT. 2010-06-24 Joseph Myers diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h b/sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h index d7c523db40..e129dc1ec4 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h @@ -23,4 +23,8 @@ #include #include +#define SYSCALL_ERROR_LOAD_GOT(reg) \ + move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, reg; \ + lea (-6, %pc, reg), reg + #endif diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h b/sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h index 651128cd4e..371befb275 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h @@ -23,4 +23,7 @@ #include #include +#define SYSCALL_ERROR_LOAD_GOT(reg) \ + lea (_GLOBAL_OFFSET_TABLE_@GOTPC, %pc), reg + #endif diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h index 3e7b105d0d..d381189fe5 100644 --- a/sysdeps/unix/sysv/linux/m68k/sysdep.h +++ b/sysdeps/unix/sysv/linux/m68k/sysdep.h @@ -117,7 +117,7 @@ SYSCALL_ERROR_LABEL: \ neg.l %d0; \ move.l %d0, -(%sp); \ jbsr __m68k_read_tp@PLTPC; \ - lea (_GLOBAL_OFFSET_TABLE_@GOTPC, %pc), %a1; \ + SYSCALL_ERROR_LOAD_GOT (%a1); \ add.l (SYSCALL_ERROR_ERRNO@TLSIE, %a1), %a0; \ move.l (%sp)+, (%a0); \ move.l &-1, %d0; \