about summary refs log tree commit diff
path: root/sysdeps/unix/sparc/sysdep.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sparc/sysdep.h')
-rw-r--r--sysdeps/unix/sparc/sysdep.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/sysdeps/unix/sparc/sysdep.h b/sysdeps/unix/sparc/sysdep.h
index fe8b75a0e7..10d561e789 100644
--- a/sysdeps/unix/sparc/sysdep.h
+++ b/sysdeps/unix/sparc/sysdep.h
@@ -26,8 +26,7 @@
    C name space.  Make sure we use an innocuous name.  */
 #define	syscall_error	C_SYMBOL_NAME(__syscall_error)
 
-#ifdef PIC
-#define SETUP_PIC_REG(reg, tmp)						\
+#define SPARC_PIC_THUNK(reg)						\
 	.ifndef __sparc_get_pc_thunk.reg;				\
 	.section .text.__sparc_get_pc_thunk.reg,"axG",@progbits,__sparc_get_pc_thunk.reg,comdat; \
 	.align	 32;							\
@@ -38,13 +37,21 @@ __sparc_get_pc_thunk.reg:		   				\
 	jmp	%o7 + 8;						\
 	 add	%o7, %reg, %##reg;					\
 	.previous;							\
-	.endif;								\
+	.endif;
+
+#define SETUP_PIC_REG(reg)						\
+	SPARC_PIC_THUNK(reg)						\
+	sethi	%hi(_GLOBAL_OFFSET_TABLE_-4), %##reg;			\
+	call	__sparc_get_pc_thunk.reg;				\
+	 or	%##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg;
+
+#define SETUP_PIC_REG_LEAF(reg, tmp)					\
+	SPARC_PIC_THUNK(reg)						\
 	sethi	%hi(_GLOBAL_OFFSET_TABLE_-4), %##reg;			\
 	mov	%o7, %##tmp;		      				\
 	call	__sparc_get_pc_thunk.reg;				\
 	 or	%##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg;		\
 	mov	%##tmp, %o7;
-#endif
 
 #define	ENTRY(name)		\
   .global C_SYMBOL_NAME(name);	\