Browse Source

or1k: Fix compiling with PIC and latest binutils use PLT for __syscall_error

This symbol was causing a build failure with the new toolchain.  It
looks like it has always been wrong.

The main issue was checking for PIC rather than __PIC__.

Remove all PSEUDO_* macros and ther SYSCALL_ERROR_NAME macro as they are
not needed by uclibc-ng, they are used in glibc for building up syscalls
there, but not here.

Fixes error:
  /opt/shorne/software/or1k-linux/bin/../lib/gcc/or1k-linux/9.0.1/../../../../or1k-linux/bin/ld: libc/libc_so.a(or1k_clone.os): pc-relative relocation against dynamic symbol __syscall_error
  /opt/shorne/software/or1k-linux/bin/../lib/gcc/or1k-linux/9.0.1/../../../../or1k-linux/bin/ld: final link failed: bad value

Signed-off-by: Stafford Horne <shorne@gmail.com>
Stafford Horne 4 years ago
parent
commit
0fcfaee3e1
2 changed files with 6 additions and 34 deletions
  1. 6 2
      libc/sysdeps/linux/or1k/or1k_clone.S
  2. 0 32
      libc/sysdeps/linux/or1k/sysdep.h

+ 6 - 2
libc/sysdeps/linux/or1k/or1k_clone.S

@@ -71,7 +71,11 @@ L(oldpid):
 	 l.ori r3, r11, 0
 
 L(error):
-	l.j SYSCALL_ERROR_NAME
+#ifdef __PIC__
+	l.j plt(__syscall_error)
+#else
+	l.j __syscall_error
+#endif
 	 l.ori r3,r11,0
 
-PSEUDO_END (__or1k_clone)
+END (__or1k_clone)

+ 0 - 32
libc/sysdeps/linux/or1k/sysdep.h

@@ -43,38 +43,6 @@ License along with the GNU C Library; if not, see
     l.sys 1; \
     l.nop
 
-#define PSEUDO(name, syscall_name, args) \
-  ENTRY (name); \
-  DO_CALL(syscall_name); \
-  /* if -4096 < ret < 0 holds, it's an error */ \
-  l.sfgeui r11, 0xf001; \
-  l.bf L(pseudo_end); \
-   l.nop
-
-#define PSEUDO_NOERRNO(name, syscall_name, args)  \
-  ENTRY (name);           \
-  DO_CALL(syscall_name)
-
-#define PSEUDO_END(name) \
-L(pseudo_end): \
-  l.j SYSCALL_ERROR_NAME; \
-  l.ori r3,r11,0; \
-  END (name)
-
-#define PSEUDO_END_NOERRNO(name) \
-  END (name)
-
-#ifndef PIC
-/* For static code, on error jump to __syscall_error directly. */
-# define SYSCALL_ERROR_NAME __syscall_error
-#elif NOT_IN_libc
-/* Use the internal name for libc/libpthread shared objects. */
-# define SYSCALL_ERROR_NAME __GI___syscall_error
-#else
-/* Otherwise, on error do a full PLT jump. */
-# define SYSCALL_ERROR_NAME plt(__syscall_error)
-#endif
-
 /* Make use of .size directive.  */
 #define ASM_SIZE_DIRECTIVE(name) .size name,.-name;