From owner-svn-src-head@freebsd.org Thu Jun 29 14:00:06 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B98BFD9E0C3; Thu, 29 Jun 2017 14:00:06 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 87FB8846; Thu, 29 Jun 2017 14:00:06 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v5TE053M026247; Thu, 29 Jun 2017 14:00:05 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v5TE05GI026245; Thu, 29 Jun 2017 14:00:05 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201706291400.v5TE05GI026245@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Thu, 29 Jun 2017 14:00:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r320470 - head/lib/libc/arm/gen X-SVN-Group: head X-SVN-Commit-Author: andrew X-SVN-Commit-Paths: head/lib/libc/arm/gen X-SVN-Commit-Revision: 320470 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 29 Jun 2017 14:00:06 -0000 Author: andrew Date: Thu Jun 29 14:00:05 2017 New Revision: 320470 URL: https://svnweb.freebsd.org/changeset/base/320470 Log: Start to remove _libc_arm_fpu_present checks. We don't support the VFP on ARMv4 or ARMv5, and only support it when it's present on ARMv6 and later. As such always store the VFP register in setjmp and restore them in longjmp when building for armv6. Reviewed by: mmel Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D11393 Modified: head/lib/libc/arm/gen/_setjmp.S head/lib/libc/arm/gen/setjmp.S Modified: head/lib/libc/arm/gen/_setjmp.S ============================================================================== --- head/lib/libc/arm/gen/_setjmp.S Thu Jun 29 12:49:03 2017 (r320469) +++ head/lib/libc/arm/gen/_setjmp.S Thu Jun 29 14:00:05 2017 (r320470) @@ -61,25 +61,12 @@ __FBSDID("$FreeBSD$"); ENTRY(_setjmp) ldr r1, .L_setjmp_magic -#if !defined(_STANDALONE) - ldr r2, .Lfpu_present -#ifdef PIC - GOT_INIT(r3, .L_setjmp_got, .L_setjmp_gotinit) - ldr r2, [r2, r3] -#else - ldr r2, [r2] -#endif - teq r2, #0 /* do we have a FPU? */ - beq 1f /* no, don't save VFP registers */ - - orr r1, r1, #(_JB_MAGIC__SETJMP ^ _JB_MAGIC__SETJMP_VFP) - /* change magic to VFP magic */ +#if !defined(_STANDALONE) && __ARM_ARCH >= 6 add r2, r0, #(_JB_REG_D8 * 4) vstmia r2, {d8-d15} vmrs r2, fpscr str r2, [r0, #(_JB_REG_FPSCR * 4)] -1: -#endif /* !_STANDALONE */ +#endif /* !_STANDALONE && __ARM_ARCH >= 6 */ str r1, [r0] @@ -99,30 +86,20 @@ END(_setjmp) .L_setjmp_magic: .word _JB_MAGIC__SETJMP -#if !defined(_STANDALONE) - GOT_INITSYM(.L_setjmp_got, .L_setjmp_gotinit) -.Lfpu_present: - .word PIC_SYM(_libc_arm_fpu_present, GOTOFF) -#endif /* !_STANDALONE */ WEAK_ALIAS(___longjmp, _longjmp) ENTRY(_longjmp) ldr r2, [r0] /* get magic from jmp_buf */ - bic r3, r2, #(_JB_MAGIC__SETJMP ^ _JB_MAGIC__SETJMP_VFP) - /* ignore VFP-ness of magic */ ldr ip, .L_setjmp_magic /* load magic */ - teq ip, r3 /* magic correct? */ + teq ip, r2 /* magic correct? */ bne botch /* no, botch */ -#if !defined(_STANDALONE) - teq r3, r2 /* did magic change? */ - beq 1f /* no, don't restore VFP */ +#if !defined(_STANDALONE) && __ARM_ARCH >= 6 add ip, r0, #(_JB_REG_D8 * 4) vldmia ip, {d8-d15} ldr ip, [r0, #(_JB_REG_FPSCR * 4)] vmsr fpscr, ip -1: -#endif /* !_STANDALONE */ +#endif /* !_STANDALONE && __ARM_ARCH >= 6 */ add r0, r0, #(_JB_REG_R4 * 4) /* Restore integer registers */ Modified: head/lib/libc/arm/gen/setjmp.S ============================================================================== --- head/lib/libc/arm/gen/setjmp.S Thu Jun 29 12:49:03 2017 (r320469) +++ head/lib/libc/arm/gen/setjmp.S Thu Jun 29 14:00:05 2017 (r320470) @@ -64,23 +64,12 @@ ENTRY(setjmp) ldr r1, .Lsetjmp_magic - ldr r2, .Lfpu_present -#ifdef PIC - GOT_INIT(r3, .Lsetjmp_got, .Lsetjmp_gotinit) - ldr r2, [r2, r3] -#else - ldr r2, [r2] -#endif - teq r2, #0 /* do we have a FPU? */ - beq 1f /* no, don't save VFP registers */ - - orr r1, r1, #(_JB_MAGIC_SETJMP ^ _JB_MAGIC_SETJMP_VFP) - /* change magic to VFP magic */ +#if __ARM_ARCH >= 6 add r2, r0, #(_JB_REG_D8 * 4) vstmia r2, {d8-d15} vmrs r2, fpscr str r2, [r0, #(_JB_REG_FPSCR * 4)] -1: +#endif str r1, [r0] /* store magic */ @@ -98,9 +87,6 @@ ENTRY(setjmp) .Lsetjmp_magic: .word _JB_MAGIC_SETJMP - GOT_INITSYM(.Lsetjmp_got, .Lsetjmp_gotinit) -.Lfpu_present: - .word PIC_SYM(_libc_arm_fpu_present, GOTOFF) END(setjmp) .weak _C_LABEL(longjmp) @@ -108,8 +94,7 @@ END(setjmp) ENTRY(__longjmp) ldr r2, [r0] ldr ip, .Lsetjmp_magic - bic r3, r2, #(_JB_MAGIC_SETJMP ^ _JB_MAGIC_SETJMP_VFP) - teq r3, ip + teq r2, ip bne .Lbotch /* Restore the signal mask. */ @@ -120,14 +105,12 @@ ENTRY(__longjmp) bl PIC_SYM(_C_LABEL(sigprocmask), PLT) ldmfd sp!, {r0-r2, r14} - tst r2, #(_JB_MAGIC_SETJMP ^ _JB_MAGIC_SETJMP_VFP) - /* is this a VFP magic? */ - beq 1f /* no, don't restore VFP */ +#if __ARM_ARCH >= 6 add ip, r0, #(_JB_REG_D8 * 4) vldmia ip, {d8-d15} ldr ip, [r0, #(_JB_REG_FPSCR * 4)] vmsr fpscr, ip -1: +#endif add r0, r0, #(_JB_REG_R4 * 4) /* Restore integer registers */