summary refs log tree commit diff
path: root/sysdeps/sparc
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-03-20 05:17:15 +0000
committerUlrich Drepper <drepper@redhat.com>1997-03-20 05:17:15 +0000
commitf752bfe37962db44ac8db553d840f8215966911e (patch)
tree59f831373e01717405dcbbc4ea3b94d82490fa4d /sysdeps/sparc
parentc57abfa73560ac665e126a66081e1549bcd4645b (diff)
downloadglibc-f752bfe37962db44ac8db553d840f8215966911e.tar.gz
glibc-f752bfe37962db44ac8db553d840f8215966911e.tar.xz
glibc-f752bfe37962db44ac8db553d840f8215966911e.zip
1997-03-20 06:07  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/powerpc/dl-machine.h: Fix typo in last change.

	* sysdeps/unix/sparc/sysdep.h: Update copyright.

1997-03-19 15:13  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* linuxthreads/sysdeps/sparc/pt-machine (RELEASE): Fix.

	* stdlib/tst-strtol.c: Save the value of errno, printf may modify
	it.

	* sysdeps/sparc/DEFS.h [HAVE_ELF]: Use type @function in the FUNC
	macro on ELF systems.

	* sysdeps/sparc/configure.in: Fix.

	* sysdeps/sparc/dl-machine.h: Fix OPCODE_CALL.
	* sysdeps/sparc/setjmp.S: Fix my bugs.

	* sysdeps/unix/sysv/linux/sparc/Dist: Add start.c, fork.S, and pipe.S.
	* sysdeps/unix/sysv/linux/sparc/Makefile: Define asm-CPPFLAGS and
	as-FLAGS-.so.
	* sysdeps/unix/sysv/linux/sparc/syscalls.list: Add fork, pipe, and
	syscall.
	* sysdeps/unix/sysv/linux/sparc/fork.S: New file.
	* sysdeps/unix/sysv/linux/sparc/pipe.S: New file.
	* sysdeps/unix/sysv/linux/sparc/socket.S: Fix.
	* sysdeps/unix/sysv/linux/sparc/sysdep.h: Fix.

	* elf/dl-lookup.c (do_lookup): Return true if we found a weak
	symbol.
	(_dl_lookup_symbol): Test against the symbol being global not
	against the symbol being not weak (fixes important problem with
	the SPARC linker)

	* sysdeps/unix/sysv/linux/sparc/brk.c: Fix.

	* sysdeps/unix/sysv/linux/sparc/start.c: Startup code for
	Linux/SPARC (while I get my asmCPPFLAGS-so variable).

1997-03-20 01:49  Ulrich Drepper  <drepper@cygnus.com>
	* sysdeps/libm-ieee754/s_tanhl.c (__tanhl): Correct handling of -inf.
	* elf/dl-reloc.c (RESOLVE): Don't try to resolve local symbols.
Diffstat (limited to 'sysdeps/sparc')
-rw-r--r--sysdeps/sparc/DEFS.h10
-rwxr-xr-xsysdeps/sparc/configure2
-rw-r--r--sysdeps/sparc/configure.in2
-rw-r--r--sysdeps/sparc/dl-machine.h3
-rw-r--r--sysdeps/sparc/setjmp.S9
5 files changed, 19 insertions, 7 deletions
diff --git a/sysdeps/sparc/DEFS.h b/sysdeps/sparc/DEFS.h
index ef6966319f..ab70f5550e 100644
--- a/sysdeps/sparc/DEFS.h
+++ b/sysdeps/sparc/DEFS.h
@@ -1,4 +1,12 @@
-#define	FUNC(name)	\
+#ifdef HAVE_ELF
+# define FUNC(name)		\
+	.global name;		\
+	.type name,@function;	\
+	.align 4;		\
+	name:
+#else
+# define FUNC(name)	\
 	.global name;	\
 	.align 4;	\
 	name:
+#endif
diff --git a/sysdeps/sparc/configure b/sysdeps/sparc/configure
index 56168677a2..a8f815a577 100755
--- a/sysdeps/sparc/configure
+++ b/sysdeps/sparc/configure
@@ -1,4 +1,4 @@
  # Local configure fragment for sysdeps/sparc.
 
 # The assembler on SPARC needs the -fPIC flag even when it's assembler code.
-ASFLAGS_SO = -fPIC
+ASFLAGS_SO=-fPIC
diff --git a/sysdeps/sparc/configure.in b/sysdeps/sparc/configure.in
index 3e2b2f04f9..e71a7e30fa 100644
--- a/sysdeps/sparc/configure.in
+++ b/sysdeps/sparc/configure.in
@@ -3,4 +3,4 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
 # Local configure fragment for sysdeps/sparc.
 
 # The assembler on SPARC needs the -fPIC flag even when it's assembler code.
-ASFLAGS_SO = -fPIC
+ASFLAGS_SO=-fPIC
diff --git a/sysdeps/sparc/dl-machine.h b/sysdeps/sparc/dl-machine.h
index 6f1d7eb02e..e87f1970e7 100644
--- a/sysdeps/sparc/dl-machine.h
+++ b/sysdeps/sparc/dl-machine.h
@@ -26,7 +26,7 @@
 
 /* Some SPARC opcodes we need to use for self-modifying code.  */
 #define OPCODE_NOP	0x01000000 /* nop */
-#define OPCODE_CALL	0x04000000 /* call ?; add PC-rel word address */
+#define OPCODE_CALL	0x40000000 /* call ?; add PC-rel word address */
 #define OPCODE_SETHI_G1	0x03000000 /* sethi ?, %g1; add value>>10 */
 #define OPCODE_JMP_G1	0x81c06000 /* jmp %g1+?; add lo 10 bits of value */
 #define OPCODE_SAVE_SP64 0x9de3bfc0 /* save %sp, -64, %sp */
@@ -262,6 +262,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
 	.globl _dl_runtime_resolve
 	.type _dl_runtime_resolve, @function
 _dl_runtime_resolve:
+	t 1
 	#call  %g0
 	# Pass two args to fixup: the PLT address computed from the PC saved
 	# in the PLT's call insn, and the reloc offset passed in %g1.
diff --git a/sysdeps/sparc/setjmp.S b/sysdeps/sparc/setjmp.S
index d9599079c2..f07a348fe3 100644
--- a/sysdeps/sparc/setjmp.S
+++ b/sysdeps/sparc/setjmp.S
@@ -26,16 +26,19 @@ ENTRY (__sigsetjmp)
 	   return PC.  Save the signal mask if requested with a tail-call
 	   for simplicity; it always returns zero.  */
 #ifdef PIC
+	mov  %o7,%g1
 2:
-	jmpl 1f,%g2
+	call 1f
 	nop
 1:
 	sethi %hi(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l7
-	sethi %hi(C_SYMBOL_NAME (__sigjmp_save)), %g3
-	st    %sp, [%o0 + (JB_SP * 4)]
 	or    %l7,%lo(_GLOBAL_OFFSET_TABLE_-(2b-.)),%l7
+	add   %l7,%o7,%l7
+	sethi %hi(C_SYMBOL_NAME (__sigjmp_save)), %g3
 	or    %g3,%lo(C_SYMBOL_NAME (__sigjmp_save)), %g3
+	st    %sp, [%o0 + (JB_SP * 4)]
 	st    %fp, [%o0 + (JB_FP * 4)]
+	mov   %g1,%o7
 	ld    [%l7+%g3],%g1
 	jmp   %g1
 	st   %o7, [%o0+(JB_PC*4)]