From 7f00b62917b0ecf825b385a616a452bb52a8590d Mon Sep 17 00:00:00 2001 From: Thomas Petazzoni Date: Fri, 12 Oct 2012 06:29:27 +0000 Subject: xenomai: bump to 2.6.1 The largefile patch is no longer necessary, it has been merged upstream. However, in order to make the build work properly with Thumb2 toolchains (such as Linaro toolchains), an additional fix is needed. This fix is already upstream and will be part of upcoming Xenomai releases. Signed-off-by: Thomas Petazzoni Signed-off-by: Peter Korsgaard --- package/xenomai/xenomai-fix-lfs-issue.patch | 72 ------------- package/xenomai/xenomai-thumb-fix.patch | 157 ++++++++++++++++++++++++++++ package/xenomai/xenomai.mk | 2 +- 3 files changed, 158 insertions(+), 73 deletions(-) delete mode 100644 package/xenomai/xenomai-fix-lfs-issue.patch create mode 100644 package/xenomai/xenomai-thumb-fix.patch (limited to 'package') diff --git a/package/xenomai/xenomai-fix-lfs-issue.patch b/package/xenomai/xenomai-fix-lfs-issue.patch deleted file mode 100644 index 157c8e25c..000000000 --- a/package/xenomai/xenomai-fix-lfs-issue.patch +++ /dev/null @@ -1,72 +0,0 @@ -From: Gilles Chanteperdrix -Date: Sat, 5 Nov 2011 20:59:01 +0000 (+0100) -Subject: posix: fix compilation for LFS -X-Git-Url: http://git.xenomai.org/?p=xenomai-2.6.git;a=commitdiff_plain;h=06ae5c5e47fbfd9d8dbbe6fcf1a1db0c14bad9de;hp=8f6feff876029244dabc1257cdf13209fbd64fb5 - -posix: fix compilation for LFS ---- - -diff --git a/include/posix/sys/mman.h b/include/posix/sys/mman.h -index 455e565..a304755 100644 ---- a/include/posix/sys/mman.h -+++ b/include/posix/sys/mman.h -@@ -63,17 +63,16 @@ int __real_shm_open(const char *name, int oflag, mode_t mode); - - int __real_shm_unlink(const char *name); - --#if !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64 - void *__real_mmap(void *addr, - size_t len, - int prot, - int flags, - int fildes, - long off); --#else --#define __real_mmap __real_mmap64 --#endif --#ifdef _LARGEFILE64_SOURCE -+ -+#if __WORDSIZE == 32 -+#if defined(_LARGEFILE64_SOURCE) \ -+ || defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 - void *__real_mmap64(void *addr, - size_t len, - int prot, -@@ -82,6 +81,11 @@ void *__real_mmap64(void *addr, - long long off); - #endif - -+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 -+#define __real_mmap __real_mmap64 -+#endif -+#endif -+ - int __real_munmap(void *addr, size_t len); - - #ifdef __cplusplus -diff --git a/include/posix/unistd.h b/include/posix/unistd.h -index 49463a0..90cce86 100644 ---- a/include/posix/unistd.h -+++ b/include/posix/unistd.h -@@ -54,13 +54,17 @@ int ftruncate(int fildes, off_t length); - extern "C" { - #endif - --#if !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64 - int __real_ftruncate(int fildes, long length); --#else -+ -+#if __WORDSIZE == 32 -+#if defined(_LARGEFILE64_SOURCE) \ -+ || defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 -+int __real_ftruncate64(int fildes, long long length); -+#endif -+ -+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 - #define __real_ftruncate __real_ftruncate64 - #endif --#ifdef _LARGEFILE64_SOURCE --int __real_ftruncate64(int fildes, long long length); - #endif - - ssize_t __real_read(int fd, void *buf, size_t nbyte); diff --git a/package/xenomai/xenomai-thumb-fix.patch b/package/xenomai/xenomai-thumb-fix.patch new file mode 100644 index 000000000..7c98c2ebf --- /dev/null +++ b/package/xenomai/xenomai-thumb-fix.patch @@ -0,0 +1,157 @@ +From ad3714e925f5c6b4ae0e0d31c4bab7f8c5e659db Mon Sep 17 00:00:00 2001 +From: Gilles Chanteperdrix +Date: Fri, 10 Aug 2012 21:55:41 +0200 +Subject: [PATCH] hal/arm: fix compilation for thumb + +--- + include/asm-arm/atomic.h | 3 ++ + ksrc/arch/arm/switch.S | 84 +++++++++++++++++++++++++++------------------ + 2 files changed, 53 insertions(+), 34 deletions(-) + +diff --git a/include/asm-arm/atomic.h b/include/asm-arm/atomic.h +index 5d55ae8..ae96847 100644 +--- a/include/asm-arm/atomic.h ++++ b/include/asm-arm/atomic.h +@@ -183,6 +183,9 @@ xnarch_atomic_cmpxchg(xnarch_atomic_t *ptr, + "ldrex %1, [%3]\n" + "mov %0, #0\n" + "teq %1, %4\n" ++#ifdef __thumb__ ++ "it eq\n" ++#endif + "strexeq %0, %5, [%3]\n" + : "=&r" (res), "=&r" (curval), "+Qo" (ptr->counter) + : "r" (&ptr->counter), "Ir" (oldval), "r" (newval) +diff --git a/ksrc/arch/arm/switch.S b/ksrc/arch/arm/switch.S +index 83f4746..95c355f 100644 +--- a/ksrc/arch/arm/switch.S ++++ b/ksrc/arch/arm/switch.S +@@ -37,6 +37,11 @@ + .endm + #endif + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) ++#define ARM(x...) x ++#define THUMB(x...) ++#endif ++ + #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 37) + #ifdef CONFIG_MMU + #define USE_DOMAINS +@@ -83,18 +88,19 @@ + * r0 = pointer to union vfp_state, r1 = fpexc + */ + ENTRY(rthal_vfp_save) +- VFPFSTMIA r0, r2 @ save the working registers +- VFPFMRX r2, FPSCR @ current status +- tst r1, #FPEXC_EX @ is there additional state to save? +- beq 1f +- VFPFMRX r3, FPINST @ FPINST (only if FPEXC.EX is set) +- tst r1, #FPEXC_FP2V @ is there an FPINST2 to read? +- beq 1f +- VFPFMRX r12, FPINST2 @ FPINST2 if needed (and present) ++ VFPFSTMIA r0, r2 @ save the working registers ++ VFPFMRX r2, FPSCR @ current status ++ tst r1, #FPEXC_EX @ is there additional state to save? ++ beq 1f ++ VFPFMRX r3, FPINST @ FPINST (only if FPEXC.EX is set) ++ tst r1, #FPEXC_FP2V @ is there an FPINST2 to read? ++ beq 1f ++ VFPFMRX r12, FPINST2 @ FPINST2 if needed (and present) + 1: +- stmia r0, {r1, r2, r3, r12} @ save FPEXC, FPSCR, FPINST, FPINST2 +- mov pc, lr +- ++ stmia r0, {r1, r2, r3, r12} @ save FPEXC, FPSCR, FPINST, FPINST2 ++ mov pc, lr ++ENDPROC(rthal_vfp_save) ++ + /* Copied from no_old_VFP_process in arch/arm/vfp/vfphw.S + * r0 = pointer to union vfp_state + * r1 = current cpu +@@ -102,20 +108,21 @@ ENTRY(rthal_vfp_save) + ENTRY(rthal_vfp_load) + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) \ + || defined(CONFIG_VFP_3_2_BACKPORT)) && defined(CONFIG_SMP) +- str r1, [r0, #VFP_CPU] ++ str r1, [r0, #VFP_CPU] + #endif +- VFPFLDMIA r0, r2 @ reload the working registers while ++ VFPFLDMIA r0, r2 @ reload the working registers while + @ FPEXC is in a safe state +- ldmia r0, {r1, r2, r3, r12} @ load FPEXC, FPSCR, FPINST, FPINST2 +- tst r1, #FPEXC_EX @ is there additional state to restore? +- beq 1f +- VFPFMXR FPINST, r3 @ restore FPINST (only if FPEXC.EX is set) +- tst r1, #FPEXC_FP2V @ is there an FPINST2 to write? +- beq 1f +- VFPFMXR FPINST2, r12 @ FPINST2 if needed (and present) ++ ldmia r0, {r1, r2, r3, r12} @ load FPEXC, FPSCR, FPINST, FPINST2 ++ tst r1, #FPEXC_EX @ is there additional state to restore? ++ beq 1f ++ VFPFMXR FPINST, r3 @ restore FPINST (only if FPEXC.EX is set) ++ tst r1, #FPEXC_FP2V @ is there an FPINST2 to write? ++ beq 1f ++ VFPFMXR FPINST2, r12 @ FPINST2 if needed (and present) + 1: +- VFPFMXR FPSCR, r2 @ restore status +- mov pc, lr ++ VFPFMXR FPSCR, r2 @ restore status ++ mov pc, lr ++ENDPROC(rthal_vfp_load) + #endif + + /* +@@ -144,28 +151,37 @@ ENTRY(rthal_vfp_load) + * r0 = previous task_struct, r1 = previous thread_info, r2 = next thread_info + */ + ENTRY(rthal_thread_switch) +- add ip, r1, #TI_CPU_SAVE +- ldr r3, [r2, #TI_TP_VALUE] +- stmia ip!, {r4 - sl, fp, sp, lr} @ Store most regs on stack ++ add ip, r1, #TI_CPU_SAVE ++ ldr r3, [r2, #TI_TP_VALUE] ++ ARM( stmia ip!, {r4 - sl, fp, sp, lr} ) @ Store most regs on stack ++ THUMB( stmia ip!, {r4 - sl, fp} ) @ Store most regs on stack ++ THUMB( str sp, [ip], #4 ) ++ THUMB( str lr, [ip], #4 ) + #ifdef USE_DOMAINS +- ldr r6, [r2, #TI_CPU_DOMAIN] ++ ldr r6, [r2, #TI_CPU_DOMAIN] + #endif + +- clear_exclusive_monitor +- set_tls r3, r4, r5 ++ clear_exclusive_monitor ++ set_tls r3, r4, r5 + #ifdef USE_DOMAINS +- mcr p15, 0, r6, c3, c0, 0 @ Set domain register ++ mcr p15, 0, r6, c3, c0, 0 @ Set domain register + #endif +- fpu_switch r4 +- add r4, r2, #TI_CPU_SAVE +- ldmia r4, {r4 - sl, fp, sp, pc} @ Load all regs saved previously ++ fpu_switch r4 ++ ARM( add r4, r2, #TI_CPU_SAVE ) ++ ARM( ldmia r4, {r4 - sl, fp, sp, pc} ) @ Load all regs saved previously ++ THUMB( add ip, r2, #TI_CPU_SAVE ) ++ THUMB( ldmia ip!, {r4 - sl, fp} ) @ Load all regs saved previously ++ THUMB( ldr sp, [ip], #4 ) ++ THUMB( ldr pc, [ip] ) ++ENDPROC(rthal_thread_switch) + + /* + * r4 = xnarch_thread_trampoline + * r5 = xnarchtcb_t * + */ + ENTRY(rthal_thread_trampoline) +- mov r0, r5 +- mov pc, r4 ++ mov r0, r5 ++ mov pc, r4 ++ENDPROC(rthal_thread_trampoline) + + // vim: ts=4 et sw=4 sts=4 +-- +1.7.2.5 + diff --git a/package/xenomai/xenomai.mk b/package/xenomai/xenomai.mk index 6dbdcea65..e425b7567 100644 --- a/package/xenomai/xenomai.mk +++ b/package/xenomai/xenomai.mk @@ -7,7 +7,7 @@ XENOMAI_VERSION = $(call qstrip,$(BR2_PACKAGE_XENOMAI_VERSION)) ifeq ($(XENOMAI_VERSION),) -XENOMAI_VERSION = 2.6.0 +XENOMAI_VERSION = 2.6.1 endif XENOMAI_SITE = http://download.gna.org/xenomai/stable/ -- cgit v1.2.3