From f2cc2a3eef7f0b4db23805d23194c0bbea3ad96b Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Fri, 4 Dec 2015 06:33:11 +0100 Subject: [PATCH] bdwgc: fix compile for sparc We need to use a patch from master git. https://github.com/ivmai/bdwgc/commit/e2bf29b7801357c1ad28c2948a3f88c655dd722a Fixes following autobuilder failures: http://autobuild.buildroot.net/results/220b3d49b8ad891e5dd3aae759319100a1500701/ http://autobuild.buildroot.net/results/b7465d175f03c9461693a92885028723772c7814/ Signed-off-by: Waldemar Brodkorb Signed-off-by: Peter Korsgaard --- ...machine-dependent-files-to-src-folde.patch | 424 ++++++++++++++++++ package/bdwgc/bdwgc.mk | 3 + 2 files changed, 427 insertions(+) create mode 100644 package/bdwgc/0003-Revert-Move-asm-machine-dependent-files-to-src-folde.patch diff --git a/package/bdwgc/0003-Revert-Move-asm-machine-dependent-files-to-src-folde.patch b/package/bdwgc/0003-Revert-Move-asm-machine-dependent-files-to-src-folde.patch new file mode 100644 index 0000000000..03af6a3990 --- /dev/null +++ b/package/bdwgc/0003-Revert-Move-asm-machine-dependent-files-to-src-folde.patch @@ -0,0 +1,424 @@ +Signed-off-by: Waldemar Brodkorb + +From 5e756d4d8df2949cb3b6e51532d3016cbb276fd7 Mon Sep 17 00:00:00 2001 +From: Ivan Maidanski +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 + diff --git a/package/bdwgc/bdwgc.mk b/package/bdwgc/bdwgc.mk index 19a66f33cf..4603151166 100644 --- a/package/bdwgc/bdwgc.mk +++ b/package/bdwgc/bdwgc.mk @@ -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 -- 2.30.2