From: Philippe Gerum <r...@xenomai.org> The legacy x86_32 architecture is on its way out, with no support from Dovetail. Besides, it went untested with I-pipe configurations for many moons.
We still keep 32bit compat mode available for building the user-space libraries and executables though, along with IA32_EMULATION support in kernel space to cope with legacy applications. Signed-off-by: Philippe Gerum <r...@xenomai.org> --- .../x86/ipipe/include/asm/xenomai/machine.h | 4 - kernel/cobalt/arch/x86/ipipe/thread.c | 91 +------------------ 2 files changed, 1 insertion(+), 94 deletions(-) diff --git a/kernel/cobalt/arch/x86/ipipe/include/asm/xenomai/machine.h b/kernel/cobalt/arch/x86/ipipe/include/asm/xenomai/machine.h index bb5ccc1178..aad700fb67 100644 --- a/kernel/cobalt/arch/x86/ipipe/include/asm/xenomai/machine.h +++ b/kernel/cobalt/arch/x86/ipipe/include/asm/xenomai/machine.h @@ -23,11 +23,7 @@ static inline __attribute_const__ unsigned long ffnz(unsigned long ul) { -#ifdef __i386__ - __asm__("bsfl %1, %0":"=r,r" (ul) : "r,?m" (ul)); -#else __asm__("bsfq %1, %0":"=r" (ul) : "rm" (ul)); -#endif return ul; } diff --git a/kernel/cobalt/arch/x86/ipipe/thread.c b/kernel/cobalt/arch/x86/ipipe/thread.c index f1f81b7503..dd97a5d32c 100644 --- a/kernel/cobalt/arch/x86/ipipe/thread.c +++ b/kernel/cobalt/arch/x86/ipipe/thread.c @@ -82,66 +82,6 @@ static inline void x86_fpregs_activate(struct task_struct *t) * This is obsolete context switch code uselessly duplicating * mainline's. */ -#ifdef CONFIG_X86_32 - -#ifdef CONFIG_CC_STACKPROTECTOR - -#define __CANARY_OUTPUT \ - , [stack_canary] "=m" (stack_canary.canary) - -#define __CANARY_INPUT \ - , [task_canary] "i" (offsetof(struct task_struct, stack_canary)) - -#define __CANARY_SWITCH \ - "movl %P[task_canary](%%edx), %%ebx\n\t" \ - "movl %%ebx, "__percpu_arg([stack_canary])"\n\t" - -#else /* !CONFIG_CC_STACKPROTECTOR */ - -#define __CANARY_OUTPUT -#define __CANARY_INPUT -#define __CANARY_SWITCH - -#endif /* !CONFIG_CC_STACKPROTECTOR */ - -static inline void do_switch_threads(struct xnarchtcb *out_tcb, - struct xnarchtcb *in_tcb, - struct task_struct *outproc, - struct task_struct *inproc) -{ - long ebx_out, ecx_out, edi_out, esi_out; - - __asm__ __volatile__("pushfl\n\t" - "pushl %%ebp\n\t" - "movl %[spp_out_ptr],%%ecx\n\t" - "movl %%esp,(%%ecx)\n\t" - "movl %[ipp_out_ptr],%%ecx\n\t" - "movl $1f,(%%ecx)\n\t" - "movl %[spp_in_ptr],%%ecx\n\t" - "movl %[ipp_in_ptr],%%edi\n\t" - "movl (%%ecx),%%esp\n\t" - "pushl (%%edi)\n\t" - __CANARY_SWITCH - "jmp __switch_to\n\t" - "1: popl %%ebp\n\t" - "popfl\n\t" - : "=b"(ebx_out), - "=&c"(ecx_out), - "=S"(esi_out), - "=D"(edi_out), - "+a"(outproc), - "+d"(inproc) - __CANARY_OUTPUT - : [spp_out_ptr] "m"(out_tcb->spp), - [ipp_out_ptr] "m"(out_tcb->ipp), - [spp_in_ptr] "m"(in_tcb->spp), - [ipp_in_ptr] "m"(in_tcb->ipp) - __CANARY_INPUT - : "memory"); -} - -#else /* CONFIG_X86_64 */ - #define __SWITCH_CLOBBER_LIST , "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" #ifdef CONFIG_CC_STACKPROTECTOR @@ -192,8 +132,6 @@ static inline void do_switch_threads(struct xnarchtcb *out_tcb, : "memory", "cc" __SWITCH_CLOBBER_LIST); \ }) -#endif /* CONFIG_X86_64 */ - #else /* LINUX_VERSION_CODE >= 4.8 */ #include <asm/switch_to.h> @@ -260,13 +198,9 @@ void xnarch_switch_to(struct xnthread *out, struct xnthread *in) } #if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0) -#ifdef CONFIG_X86_32 - do_switch_threads(out_tcb, in_tcb, prev, next); -#else /* CONFIG_X86_64 */ do_switch_threads(prev, next, out_tcb->spp, in_tcb->spp, out_tcb->ipp, in_tcb->ipp); -#endif /* CONFIG_X86_64 */ (void)last; #else /* LINUX_VERSION_CODE >= 4.8 */ switch_to(prev, next, last); @@ -302,13 +236,8 @@ void xnarch_switch_to(struct xnthread *out, struct xnthread *in) #ifndef IPIPE_X86_FPU_EAGER -#ifdef CONFIG_X86_64 #define XSAVE_PREFIX "0x48," #define XSAVE_SUFFIX "q" -#else -#define XSAVE_PREFIX -#define XSAVE_SUFFIX -#endif static inline void __do_save_fpu_state(x86_fpustate *fpup) { @@ -327,12 +256,6 @@ static inline void __do_save_fpu_state(x86_fpustate *fpup) return; } #endif /* cpu_has_xsave */ -#ifdef CONFIG_X86_32 - if (cpu_has_fxsr) - __asm__ __volatile__("fxsave %0; fnclex":"=m"(*fpup)); - else - __asm__ __volatile__("fnsave %0; fwait":"=m"(*fpup)); -#else /* CONFIG_X86_64 */ #ifdef CONFIG_AS_FXSAVEQ __asm __volatile__("fxsaveq %0" : "=m" (fpup->fxsave)); #else /* !CONFIG_AS_FXSAVEQ */ @@ -340,7 +263,6 @@ static inline void __do_save_fpu_state(x86_fpustate *fpup) : "=m" (fpup->fxsave) : [fx] "R" (&fpup->fxsave)); #endif /* !CONFIG_AS_FXSAVEQ */ -#endif /* CONFIG_X86_64 */ } static inline void __do_restore_fpu_state(x86_fpustate *fpup) @@ -360,19 +282,12 @@ static inline void __do_restore_fpu_state(x86_fpustate *fpup) return; } #endif /* cpu_has_xsave */ -#ifdef CONFIG_X86_32 - if (cpu_has_fxsr) - __asm__ __volatile__("fxrstor %0": /* no output */ :"m"(*fpup)); - else - __asm__ __volatile__("frstor %0": /* no output */ :"m"(*fpup)); -#else /* CONFIG_X86_64 */ #ifdef CONFIG_AS_FXSAVEQ __asm__ __volatile__("fxrstorq %0" : : "m" (fpup->fxsave)); #else /* !CONFIG_AS_FXSAVEQ */ __asm__ __volatile__("rex64/fxrstor (%0)" : : "R" (&fpup->fxsave), "m" (fpup->fxsave)); #endif /* !CONFIG_AS_FXSAVEQ */ -#endif /* CONFIG_X86_64 */ } int xnarch_handle_fpu_fault(struct xnthread *from, @@ -434,7 +349,7 @@ void xnarch_leave_root(struct xnthread *root) struct task_struct *const p = current; x86_fpustate *const current_task_fpup = x86_fpustate_ptr(&p->thread); -#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0) && defined(CONFIG_X86_64) +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0) rootcb->spp = &p->thread.sp; rootcb->ipp = &p->thread.rip; #endif @@ -564,12 +479,8 @@ void xnarch_init_shadow_tcb(struct xnthread *thread) #if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0) tcb->sp = 0; tcb->spp = &p->thread.sp; -#ifdef CONFIG_X86_32 - tcb->ipp = &p->thread.ip; -#else tcb->ipp = &p->thread.rip; /* <!> raw naming intended. */ #endif -#endif #ifndef IPIPE_X86_FPU_EAGER tcb->fpup = x86_fpustate_ptr(&p->thread); tcb->kfpu_state = NULL; -- 2.26.2