Commit f2cc2a3e authored by Waldemar Brodkorb's avatar Waldemar Brodkorb Committed by Peter Korsgaard
Browse files
parent 0120c71d
Loading
Loading
Loading
Loading
+424 −0
Original line number Diff line number Diff line
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>

From 5e756d4d8df2949cb3b6e51532d3016cbb276fd7 Mon Sep 17 00:00:00 2001
From: Ivan Maidanski <ivmai@mail.ru>
Date: Fri, 27 Feb 2015 21:32:22 +0300
Subject: [PATCH 004/135] Revert "Move asm machine-dependent files to 'src'
 folder" (partly)

Asm files moved back to base folder to avoid build issues (reported
for NetBSD and Solaris on Sparc).  Alternative way is to adjust
configure.ac and Makefile.am properly but it requires more efforts
(including testing).

* Makefile.am (EXTRA_libgc_la_SOURCES): Remove "src/" prefix.
* Makefile.direct (SRCS, mach_dep.o): Likewise.
* src/ia64_save_regs_in_stack.s: Move to base folder.
* src/sparc_mach_dep.S: Likewise.
* src/sparc_netbsd_mach_dep.s: Likewise.
* src/sparc_sunos4_mach_dep.s: Likewise.

---
 Makefile.am                   |    4 +--
 Makefile.direct               |   20 +++++++-------
 ia64_save_regs_in_stack.s     |   11 ++++++++
 sparc_mach_dep.S              |   61 +++++++++++++++++++++++++++++++++++++++++
 sparc_netbsd_mach_dep.s       |   34 +++++++++++++++++++++++
 sparc_sunos4_mach_dep.s       |   32 +++++++++++++++++++++
 src/ia64_save_regs_in_stack.s |   11 --------
 src/sparc_mach_dep.S          |   61 -----------------------------------------
 src/sparc_netbsd_mach_dep.s   |   34 -----------------------
 src/sparc_sunos4_mach_dep.s   |   32 ---------------------
 11 files changed, 151 insertions(+), 151 deletions(-)
 create mode 100644 ia64_save_regs_in_stack.s
 create mode 100644 sparc_mach_dep.S
 create mode 100644 sparc_netbsd_mach_dep.s
 create mode 100644 sparc_sunos4_mach_dep.s
 delete mode 100644 src/ia64_save_regs_in_stack.s
 delete mode 100644 src/sparc_mach_dep.S
 delete mode 100644 src/sparc_netbsd_mach_dep.s
 delete mode 100644 src/sparc_sunos4_mach_dep.s

diff --git a/Makefile.am b/Makefile.am
index f8057db..1688be2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -100,8 +100,8 @@ libgc_la_LIBADD = @addobjs@ $(THREADDLLIBS) $(UNWINDLIBS) $(ATOMIC_OPS_LIBS)
 libgc_la_DEPENDENCIES = @addobjs@
 libgc_la_LDFLAGS = $(extra_ldflags_libgc) -version-info 1:3:0 -no-undefined
 
-EXTRA_libgc_la_SOURCES = src/ia64_save_regs_in_stack.s src/sparc_mach_dep.S \
-    src/sparc_netbsd_mach_dep.s src/sparc_sunos4_mach_dep.s
+EXTRA_libgc_la_SOURCES = ia64_save_regs_in_stack.s sparc_mach_dep.S \
+    sparc_netbsd_mach_dep.s sparc_sunos4_mach_dep.s
 
 
 # C++ Interface
diff --git a/Makefile.direct b/Makefile.direct
index d64598b..8ab80e8 100644
--- a/Makefile.direct
+++ b/Makefile.direct
@@ -108,8 +108,8 @@ SRCS= $(CSRCS) \
   include/gc_config_macros.h include/private/pthread_support.h \
   include/private/pthread_stop_world.h include/private/darwin_semaphore.h \
   include/private/darwin_stop_world.h include/private/thread_local_alloc.h \
-  src/ia64_save_regs_in_stack.s src/sparc_mach_dep.S \
-  src/sparc_netbsd_mach_dep.s src/sparc_sunos4_mach_dep.s $(CORD_SRCS)
+  ia64_save_regs_in_stack.s sparc_mach_dep.S \
+  sparc_netbsd_mach_dep.s sparc_sunos4_mach_dep.s $(CORD_SRCS)
 
 DOC_FILES= README.QUICK TODO doc/README.Mac doc/README.OS2 \
   doc/README.amiga doc/README.cords doc/debugging.html \
@@ -309,17 +309,17 @@ dyn_test:
 # 	gcc -shared -Wl,-soname=libgc.so.0 -o libgc.so.0 $(LIBOBJS) dyn_load.lo
 #	touch liblinuxgc.so
 
-mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/src/sparc_mach_dep.S \
-	    $(srcdir)/src/sparc_sunos4_mach_dep.s \
-	    $(srcdir)/src/ia64_save_regs_in_stack.s \
-	    $(srcdir)/src/sparc_netbsd_mach_dep.s $(UTILS)
+mach_dep.o: $(srcdir)/mach_dep.c $(srcdir)/sparc_mach_dep.S \
+	    $(srcdir)/sparc_sunos4_mach_dep.s \
+	    $(srcdir)/ia64_save_regs_in_stack.s \
+	    $(srcdir)/sparc_netbsd_mach_dep.s $(UTILS)
 	rm -f mach_dep.o
-	./if_mach SPARC SOLARIS $(CC) -c -o mach_dep2.o $(srcdir)/src/sparc_mach_dep.S
-	./if_mach SPARC OPENBSD $(AS) -o mach_dep2.o $(srcdir)/src/sparc_sunos4_mach_dep.s
-	./if_mach SPARC NETBSD $(AS) -o mach_dep2.o $(srcdir)/src/sparc_netbsd_mach_dep.s
+	./if_mach SPARC SOLARIS $(CC) -c -o mach_dep2.o $(srcdir)/sparc_mach_dep.S
+	./if_mach SPARC OPENBSD $(AS) -o mach_dep2.o $(srcdir)/sparc_sunos4_mach_dep.s
+	./if_mach SPARC NETBSD $(AS) -o mach_dep2.o $(srcdir)/sparc_netbsd_mach_dep.s
 	./if_mach SPARC "" $(CC) -c -o mach_dep1.o $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
 	./if_mach SPARC "" ld -r -o mach_dep.o mach_dep1.o mach_dep2.o
-	./if_mach IA64 "" as $(AS_ABI_FLAG) -o ia64_save_regs_in_stack.o $(srcdir)/src/ia64_save_regs_in_stack.s
+	./if_mach IA64 "" as $(AS_ABI_FLAG) -o ia64_save_regs_in_stack.o $(srcdir)/ia64_save_regs_in_stack.s
 	./if_mach IA64 "" $(CC) -c -o mach_dep1.o $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
 	./if_mach IA64 "" ld -r -o mach_dep.o mach_dep1.o ia64_save_regs_in_stack.o
 	./if_not_there mach_dep.o $(CC) -c $(SPECIALCFLAGS) $(srcdir)/mach_dep.c
diff --git a/ia64_save_regs_in_stack.s b/ia64_save_regs_in_stack.s
new file mode 100644
index 0000000..2b81edf
--- /dev/null
+++ b/ia64_save_regs_in_stack.s
@@ -0,0 +1,11 @@
+        .text
+        .align 16
+        .global GC_save_regs_in_stack
+        .proc GC_save_regs_in_stack
+GC_save_regs_in_stack:
+        .body
+        flushrs
+        ;;
+        mov r8=ar.bsp
+        br.ret.sptk.few rp
+        .endp GC_save_regs_in_stack
diff --git a/sparc_mach_dep.S b/sparc_mach_dep.S
new file mode 100644
index 0000000..d204dc4
--- /dev/null
+++ b/sparc_mach_dep.S
@@ -0,0 +1,61 @@
+!	SPARCompiler 3.0 and later apparently no longer handles
+!	asm outside functions.  So we need a separate .s file
+!	This is only set up for SunOS 5, not SunOS 4.
+!	Assumes this is called before the stack contents are
+!	examined.
+
+	.seg 	"text"
+	.globl	GC_save_regs_in_stack
+GC_save_regs_in_stack:
+#if defined(__arch64__) || defined(__sparcv9)
+	save	%sp,-128,%sp
+	flushw
+	ret
+	  restore %sp,2047+128,%o0
+#else /* 32 bit SPARC */
+	ta	0x3   ! ST_FLUSH_WINDOWS
+	mov	%sp,%o0
+	retl
+	nop
+#endif /* 32 bit SPARC */
+.GC_save_regs_in_stack_end:
+	.size GC_save_regs_in_stack,.GC_save_regs_in_stack_end-GC_save_regs_in_stack
+
+! GC_clear_stack_inner(arg, limit) clears stack area up to limit and
+! returns arg.  Stack clearing is crucial on SPARC, so we supply
+! an assembly version that s more careful.  Assumes limit is hotter
+! than sp, and limit is 8 byte aligned.
+	.globl	GC_clear_stack_inner
+GC_clear_stack_inner:
+#if defined(__arch64__) || defined(__sparcv9)
+	mov %sp,%o2		! Save sp
+	add %sp,2047-8,%o3	! p = sp+bias-8
+	add %o1,-2047-192,%sp	! Move sp out of the way,
+  				! so that traps still work.
+  				! Includes some extra words
+  				! so we can be sloppy below.
+loop:
+	stx %g0,[%o3]		! *(long *)p = 0
+	cmp %o3,%o1
+	bgu,pt %xcc, loop	! if (p > limit) goto loop
+          add %o3,-8,%o3	! p -= 8 (delay slot)
+	retl
+    	  mov %o2,%sp		! Restore sp., delay slot
+#else  /* 32 bit SPARC */
+	mov	%sp,%o2		! Save sp
+	add	%sp,-8,%o3	! p = sp-8
+	clr	%g1		! [g0,g1] = 0
+	add	%o1,-0x60,%sp	! Move sp out of the way,
+				! so that traps still work.
+				! Includes some extra words
+				! so we can be sloppy below.
+loop:
+	std	%g0,[%o3]	! *(long long *)p = 0
+	cmp	%o3,%o1
+	bgu	loop		! if (p > limit) goto loop
+	  add	%o3,-8,%o3	! p -= 8 (delay slot)
+	retl
+	  mov	%o2,%sp		! Restore sp., delay slot
+#endif  /* 32 bit SPARC */
+.GC_clear_stack_inner_end:
+      	.size GC_clear_stack_inner,.GC_clear_stack_inner_end-GC_clear_stack_inner
diff --git a/sparc_netbsd_mach_dep.s b/sparc_netbsd_mach_dep.s
new file mode 100644
index 0000000..14feb15
--- /dev/null
+++ b/sparc_netbsd_mach_dep.s
@@ -0,0 +1,34 @@
+!	SPARCompiler 3.0 and later apparently no longer handles
+!	asm outside functions.  So we need a separate .s file
+!	This is only set up for SunOS 4.
+!	Assumes this is called before the stack contents are
+!	examined.
+
+#include "machine/asm.h"
+
+	.seg 	"text"
+	.globl	_C_LABEL(GC_save_regs_in_stack)
+	.globl 	_C_LABEL(GC_push_regs)
+_C_LABEL(GC_save_regs_in_stack):
+_C_LABEL(GC_push_regs):
+	ta	0x3   ! ST_FLUSH_WINDOWS
+	mov	%sp,%o0
+	retl
+	nop
+
+	.globl	_C_LABEL(GC_clear_stack_inner)
+_C_LABEL(GC_clear_stack_inner):
+	mov	%sp,%o2		! Save sp
+	add	%sp,-8,%o3	! p = sp-8
+	clr	%g1		! [g0,g1] = 0
+	add	%o1,-0x60,%sp	! Move sp out of the way,
+				! so that traps still work.
+				! Includes some extra words
+				! so we can be sloppy below.
+loop:
+	std	%g0,[%o3]	! *(long long *)p = 0
+	cmp	%o3,%o1
+	bgu	loop		! if (p > limit) goto loop
+	add	%o3,-8,%o3	! p -= 8 (delay slot)
+	retl
+	mov	%o2,%sp		! Restore sp., delay slot
diff --git a/sparc_sunos4_mach_dep.s b/sparc_sunos4_mach_dep.s
new file mode 100644
index 0000000..923f5ea
--- /dev/null
+++ b/sparc_sunos4_mach_dep.s
@@ -0,0 +1,32 @@
+!	SPARCompiler 3.0 and later apparently no longer handles
+!	asm outside functions.  So we need a separate .s file
+!	This is only set up for SunOS 4.
+!	Assumes this is called before the stack contents are
+!	examined.
+
+	.seg 	"text"
+	.globl	_GC_save_regs_in_stack
+	.globl 	_GC_push_regs
+_GC_save_regs_in_stack:
+_GC_push_regs:
+	ta	0x3   ! ST_FLUSH_WINDOWS
+	mov	%sp,%o0
+	retl
+	nop
+
+	.globl	_GC_clear_stack_inner
+_GC_clear_stack_inner:
+	mov	%sp,%o2		! Save sp
+	add	%sp,-8,%o3	! p = sp-8
+	clr	%g1		! [g0,g1] = 0
+	add	%o1,-0x60,%sp	! Move sp out of the way,
+				! so that traps still work.
+				! Includes some extra words
+				! so we can be sloppy below.
+loop:
+	std	%g0,[%o3]	! *(long long *)p = 0
+	cmp	%o3,%o1
+	bgu	loop		! if (p > limit) goto loop
+	  add	%o3,-8,%o3	! p -= 8 (delay slot)
+	retl
+	  mov	%o2,%sp		! Restore sp., delay slot
diff --git a/src/ia64_save_regs_in_stack.s b/src/ia64_save_regs_in_stack.s
deleted file mode 100644
index 2b81edf..0000000
--- a/src/ia64_save_regs_in_stack.s
+++ /dev/null
@@ -1,11 +0,0 @@
-        .text
-        .align 16
-        .global GC_save_regs_in_stack
-        .proc GC_save_regs_in_stack
-GC_save_regs_in_stack:
-        .body
-        flushrs
-        ;;
-        mov r8=ar.bsp
-        br.ret.sptk.few rp
-        .endp GC_save_regs_in_stack
diff --git a/src/sparc_mach_dep.S b/src/sparc_mach_dep.S
deleted file mode 100644
index d204dc4..0000000
--- a/src/sparc_mach_dep.S
+++ /dev/null
@@ -1,61 +0,0 @@
-!	SPARCompiler 3.0 and later apparently no longer handles
-!	asm outside functions.  So we need a separate .s file
-!	This is only set up for SunOS 5, not SunOS 4.
-!	Assumes this is called before the stack contents are
-!	examined.
-
-	.seg 	"text"
-	.globl	GC_save_regs_in_stack
-GC_save_regs_in_stack:
-#if defined(__arch64__) || defined(__sparcv9)
-	save	%sp,-128,%sp
-	flushw
-	ret
-	  restore %sp,2047+128,%o0
-#else /* 32 bit SPARC */
-	ta	0x3   ! ST_FLUSH_WINDOWS
-	mov	%sp,%o0
-	retl
-	nop
-#endif /* 32 bit SPARC */
-.GC_save_regs_in_stack_end:
-	.size GC_save_regs_in_stack,.GC_save_regs_in_stack_end-GC_save_regs_in_stack
-
-! GC_clear_stack_inner(arg, limit) clears stack area up to limit and
-! returns arg.  Stack clearing is crucial on SPARC, so we supply
-! an assembly version that s more careful.  Assumes limit is hotter
-! than sp, and limit is 8 byte aligned.
-	.globl	GC_clear_stack_inner
-GC_clear_stack_inner:
-#if defined(__arch64__) || defined(__sparcv9)
-	mov %sp,%o2		! Save sp
-	add %sp,2047-8,%o3	! p = sp+bias-8
-	add %o1,-2047-192,%sp	! Move sp out of the way,
-  				! so that traps still work.
-  				! Includes some extra words
-  				! so we can be sloppy below.
-loop:
-	stx %g0,[%o3]		! *(long *)p = 0
-	cmp %o3,%o1
-	bgu,pt %xcc, loop	! if (p > limit) goto loop
-          add %o3,-8,%o3	! p -= 8 (delay slot)
-	retl
-    	  mov %o2,%sp		! Restore sp., delay slot
-#else  /* 32 bit SPARC */
-	mov	%sp,%o2		! Save sp
-	add	%sp,-8,%o3	! p = sp-8
-	clr	%g1		! [g0,g1] = 0
-	add	%o1,-0x60,%sp	! Move sp out of the way,
-				! so that traps still work.
-				! Includes some extra words
-				! so we can be sloppy below.
-loop:
-	std	%g0,[%o3]	! *(long long *)p = 0
-	cmp	%o3,%o1
-	bgu	loop		! if (p > limit) goto loop
-	  add	%o3,-8,%o3	! p -= 8 (delay slot)
-	retl
-	  mov	%o2,%sp		! Restore sp., delay slot
-#endif  /* 32 bit SPARC */
-.GC_clear_stack_inner_end:
-      	.size GC_clear_stack_inner,.GC_clear_stack_inner_end-GC_clear_stack_inner
diff --git a/src/sparc_netbsd_mach_dep.s b/src/sparc_netbsd_mach_dep.s
deleted file mode 100644
index 14feb15..0000000
--- a/src/sparc_netbsd_mach_dep.s
+++ /dev/null
@@ -1,34 +0,0 @@
-!	SPARCompiler 3.0 and later apparently no longer handles
-!	asm outside functions.  So we need a separate .s file
-!	This is only set up for SunOS 4.
-!	Assumes this is called before the stack contents are
-!	examined.
-
-#include "machine/asm.h"
-
-	.seg 	"text"
-	.globl	_C_LABEL(GC_save_regs_in_stack)
-	.globl 	_C_LABEL(GC_push_regs)
-_C_LABEL(GC_save_regs_in_stack):
-_C_LABEL(GC_push_regs):
-	ta	0x3   ! ST_FLUSH_WINDOWS
-	mov	%sp,%o0
-	retl
-	nop
-
-	.globl	_C_LABEL(GC_clear_stack_inner)
-_C_LABEL(GC_clear_stack_inner):
-	mov	%sp,%o2		! Save sp
-	add	%sp,-8,%o3	! p = sp-8
-	clr	%g1		! [g0,g1] = 0
-	add	%o1,-0x60,%sp	! Move sp out of the way,
-				! so that traps still work.
-				! Includes some extra words
-				! so we can be sloppy below.
-loop:
-	std	%g0,[%o3]	! *(long long *)p = 0
-	cmp	%o3,%o1
-	bgu	loop		! if (p > limit) goto loop
-	add	%o3,-8,%o3	! p -= 8 (delay slot)
-	retl
-	mov	%o2,%sp		! Restore sp., delay slot
diff --git a/src/sparc_sunos4_mach_dep.s b/src/sparc_sunos4_mach_dep.s
deleted file mode 100644
index 923f5ea..0000000
--- a/src/sparc_sunos4_mach_dep.s
+++ /dev/null
@@ -1,32 +0,0 @@
-!	SPARCompiler 3.0 and later apparently no longer handles
-!	asm outside functions.  So we need a separate .s file
-!	This is only set up for SunOS 4.
-!	Assumes this is called before the stack contents are
-!	examined.
-
-	.seg 	"text"
-	.globl	_GC_save_regs_in_stack
-	.globl 	_GC_push_regs
-_GC_save_regs_in_stack:
-_GC_push_regs:
-	ta	0x3   ! ST_FLUSH_WINDOWS
-	mov	%sp,%o0
-	retl
-	nop
-
-	.globl	_GC_clear_stack_inner
-_GC_clear_stack_inner:
-	mov	%sp,%o2		! Save sp
-	add	%sp,-8,%o3	! p = sp-8
-	clr	%g1		! [g0,g1] = 0
-	add	%o1,-0x60,%sp	! Move sp out of the way,
-				! so that traps still work.
-				! Includes some extra words
-				! so we can be sloppy below.
-loop:
-	std	%g0,[%o3]	! *(long long *)p = 0
-	cmp	%o3,%o1
-	bgu	loop		! if (p > limit) goto loop
-	  add	%o3,-8,%o3	! p -= 8 (delay slot)
-	retl
-	  mov	%o2,%sp		! Restore sp., delay slot
-- 
1.7.10.4
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@ BDWGC_DEPENDENCIES = libatomic_ops host-pkgconf
BDWGC_AUTORECONF = YES

BDWGC_CFLAGS = $(TARGET_CFLAGS)
ifeq ($(BR2_sparc),y)
BDWGC_CFLAGS += -DAO_NO_SPARC_V9
endif
ifeq ($(BR2_STATIC_LIBS),y)
BDWGC_CFLAGS += -DGC_NO_DLOPEN
endif