hrw pushed to pcre2 (master). "Backport fix for AArch64"

notifications at fedoraproject.org notifications at fedoraproject.org
Fri May 29 15:23:26 UTC 2015


From 2b73688bdf59c236674331c01ecdf86279f8cd61 Mon Sep 17 00:00:00 2001
From: Marcin Juszkiewicz <mjuszkiewicz at redhat.com>
Date: Fri, 29 May 2015 17:11:37 +0200
Subject: Backport fix for AArch64


diff --git a/0001-Fix-ARM64-SP-alignment-issue-in-JIT.patch b/0001-Fix-ARM64-SP-alignment-issue-in-JIT.patch
new file mode 100644
index 0000000..5cc1e05
--- /dev/null
+++ b/0001-Fix-ARM64-SP-alignment-issue-in-JIT.patch
@@ -0,0 +1,95 @@
+From 004bc565415a656a8fc8a61971af7f5493cf8786 Mon Sep 17 00:00:00 2001
+From: zherczeg <zherczeg at 6239d852-aaf2-0410-a92c-79f79f948069>
+Date: Thu, 23 Apr 2015 13:53:29 +0000
+Subject: [PATCH] Fix ARM64 SP alignment issue in JIT.
+
+git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@254 6239d852-aaf2-0410-a92c-79f79f948069
+---
+ src/sljit/sljitNativeARM_64.c | 37 +++++++++++++++++++++++--------------
+ 1 file changed, 23 insertions(+), 14 deletions(-)
+
+diff --git a/src/sljit/sljitNativeARM_64.c b/src/sljit/sljitNativeARM_64.c
+index c5251be..b66455f 100644
+--- a/src/sljit/sljitNativeARM_64.c
++++ b/src/sljit/sljitNativeARM_64.c
+@@ -1081,12 +1081,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compil
+ 		FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(TMP_SP) | (0 << 10)));
+ 		offs = (local_size - saved_regs_size) << (15 - 3);
+ 	} else {
+-		compiler->local_size += 2 * sizeof(sljit_sw);
+-		local_size -= saved_regs_size;
+-		saved_regs_size += 2 * sizeof(sljit_sw);
+-		FAIL_IF(push_inst(compiler, STP_PRE | 29 | RT2(TMP_LR)
+-			| RN(TMP_SP) | ((-(saved_regs_size >> 3) & 0x7f) << 15)));
+-		offs = 2 << 15;
++		offs = 0 << 15;
++		if (saved_regs_size & 0x8) {
++			offs = 1 << 15;
++			saved_regs_size += sizeof(sljit_sw);
++		}
++		local_size -= saved_regs_size + SLJIT_LOCALS_OFFSET;
++		FAIL_IF(push_inst(compiler, SUBI | RD(TMP_SP) | RN(TMP_SP) | (saved_regs_size << 10)));
+ 	}
+ 
+ 	tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG;
+@@ -1122,6 +1123,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compil
+ 		}
+ 		if (local_size)
+ 			FAIL_IF(push_inst(compiler, SUBI | RD(TMP_SP) | RN(TMP_SP) | (local_size << 10)));
++		FAIL_IF(push_inst(compiler, STP_PRE | 29 | RT2(TMP_LR)
++			| RN(TMP_SP) | ((-(16 >> 3) & 0x7f) << 15)));
+ 		FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(TMP_SP) | (0 << 10)));
+ 	}
+ 
+@@ -1145,8 +1148,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_set_context(struct sljit_compiler *compi
+ 
+ 	local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 0) + SLJIT_LOCALS_OFFSET;
+ 	local_size = (local_size + 15) & ~0xf;
+-	if (local_size > (63 * sizeof(sljit_sw)))
+-		local_size += 2 * sizeof(sljit_sw);
+ 	compiler->local_size = local_size;
+ 	return SLJIT_SUCCESS;
+ }
+@@ -1167,16 +1168,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compi
+ 	if (local_size <= (63 * sizeof(sljit_sw)))
+ 		offs = (local_size - saved_regs_size) << (15 - 3);
+ 	else {
+-		saved_regs_size += 2 * sizeof(sljit_sw);
+-		local_size -= saved_regs_size;
++		FAIL_IF(push_inst(compiler, LDP_PST | 29 | RT2(TMP_LR)
++			| RN(TMP_SP) | (((16 >> 3) & 0x7f) << 15)));
++		offs = 0 << 15;
++		if (saved_regs_size & 0x8) {
++			offs = 1 << 15;
++			saved_regs_size += sizeof(sljit_sw);
++		}
++		local_size -= saved_regs_size + SLJIT_LOCALS_OFFSET;
+ 		if (local_size > 0xfff) {
+ 			FAIL_IF(push_inst(compiler, ADDI | RD(TMP_SP) | RN(TMP_SP) | ((local_size >> 12) << 10) | (1 << 22)));
+ 			local_size &= 0xfff;
+ 		}
+ 		if (local_size)
+ 			FAIL_IF(push_inst(compiler, ADDI | RD(TMP_SP) | RN(TMP_SP) | (local_size << 10)));
+-		local_size = saved_regs_size;
+-		offs = 2 << 15;
+ 	}
+ 
+ 	tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG;
+@@ -1204,8 +1209,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compi
+ 	if (prev != -1)
+ 		FAIL_IF(push_inst(compiler, LDRI | RT(prev) | RN(TMP_SP) | (offs >> 5)));
+ 
+-	FAIL_IF(push_inst(compiler, LDP_PST | 29 | RT2(TMP_LR)
+-		| RN(TMP_SP) | (((local_size >> 3) & 0x7f) << 15)));
++	if (compiler->local_size <= (63 * sizeof(sljit_sw))) {
++		FAIL_IF(push_inst(compiler, LDP_PST | 29 | RT2(TMP_LR)
++			| RN(TMP_SP) | (((local_size >> 3) & 0x7f) << 15)));
++	} else {
++		FAIL_IF(push_inst(compiler, ADDI | RD(TMP_SP) | RN(TMP_SP) | (saved_regs_size << 10)));
++	}
+ 
+ 	FAIL_IF(push_inst(compiler, RET | RN(TMP_LR)));
+ 	return SLJIT_SUCCESS;
+-- 
+2.4.0
+
diff --git a/pcre2.spec b/pcre2.spec
index 867ee8d..9c0d76c 100644
--- a/pcre2.spec
+++ b/pcre2.spec
@@ -2,7 +2,7 @@
 #%%global rcversion RC1
 Name:       pcre2
 Version:    10.10
-Release:    %{?rcversion:0.}2%{?rcversion:.%rcversion}%{?dist}
+Release:    %{?rcversion:0.}2%{?rcversion:.%rcversion}%{?dist}.1
 %global     myversion %{version}%{?rcversion:-%rcversion}
 Summary:    Perl-compatible regular expression library
 Group:      System Environment/Libraries
@@ -14,6 +14,8 @@ URL:        http://www.pcre.org/
 Source:     ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/%{?rcversion:Testing/}%{name}-%{myversion}.tar.bz2
 # Do no set RPATH if libdir is not /usr/lib
 Patch0:     pcre2-10.10-Fix-multilib.patch
+Patch1:     0001-Fix-ARM64-SP-alignment-issue-in-JIT.patch
+
 # New libtool to get rid of RPATH and to use distribution autotools
 BuildRequires:  autoconf
 BuildRequires:  automake
@@ -71,6 +73,7 @@ Utilities demonstrating PCRE2 capabilities like pcre2grep or pcre2test.
 %prep
 %setup -q -n %{name}-%{myversion}
 %patch0 -p1
+%patch1 -p1
 # Because of multilib patch
 libtoolize --copy --force && autoreconf -vif
 
@@ -148,6 +151,9 @@ make %{?_smp_mflags} check VERBOSE=yes
 %{_mandir}/man1/pcre2test.*
 
 %changelog
+* Fri May 29 2015 Marcin Juszkiewicz <mjuszkiewicz at redhat.com> - 10.10-2.1
+- Backport fix for AArch64
+
 * Tue May 05 2015 Petr Pisar <ppisar at redhat.com> - 10.10-2
 - Package pcre2demo.c as a documentation for pcre2-devel
 
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/pcre2.git/commit/?h=master&id=2b73688bdf59c236674331c01ecdf86279f8cd61


More information about the scm-commits mailing list