View | Details | Raw Unified | Return to bug 249053 | Differences between
and this patch

Collapse All | Expand All

(-)security/nss/files/patch-bug1659256 (+106 lines)
Line 0 Link Here
1
2
# HG changeset patch
3
# User Daiki Ueno <dueno@redhat.com>
4
# Date 1599626828 -7200
5
# Node ID b971c77c0d68d76c086a0df21841efb813b78c7b
6
# Parent  e524a577761d8d61ff096121a3c00bf22f2cfa94
7
Bug 1659256, add gcc version check on AArch64 optimization, r=rrelyea
8
9
Summary: As described in https://access.redhat.com/solutions/19458,
10
gcc version in RHEL-7 is still 4.8.x and cannot compile the newly
11
added aes-armv8.c. There is a version check already for 32-bit arm,
12
but not for AArch64. This also removes NS_USE_GCC check added in bug
13
1652032 in favor of the automatic detection using CC_IS_* macros.
14
15
Reviewers: rrelyea
16
17
Reviewed By: rrelyea
18
19
Subscribers: jmux, kjacobs
20
21
Bug #: 1659256
22
23
Differential Revision: https://phabricator.services.mozilla.com/D87174
24
25
diff --git a/lib/freebl/Makefile b/lib/freebl/Makefile
26
--- lib/freebl/Makefile
27
+++ lib/freebl/Makefile
28
@@ -114,31 +114,47 @@ ifeq (,$(filter-out i386 x386 x86 x86_64
29
 $(OBJDIR)/gcm-x86.o: CFLAGS += -mpclmul -maes
30
 $(OBJDIR)/aes-x86.o: CFLAGS += -mpclmul -maes
31
 ifneq (,$(USE_64)$(USE_X32))
32
         DEFINES += -DNSS_X64
33
 else
34
         DEFINES += -DNSS_X86
35
 endif
36
 endif
37
-ifdef NS_USE_GCC
38
 ifeq ($(CPU_ARCH),aarch64)
39
-    DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2
40
-    EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c
41
-endif
42
+    ifdef CC_IS_CLANG
43
+        DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2
44
+        EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c
45
+    else ifeq (1,$(CC_IS_GCC))
46
+        # GCC versions older than 4.9 don't support ARM AES. The check
47
+        # is done in two parts, first allows "major.minor" == "4.9",
48
+        # and then rejects any major versions prior to 5. Note that
49
+        # there has been no GCC 4.10, as it was renamed to GCC 5.
50
+        ifneq (,$(filter 4.9,$(word 1,$(GCC_VERSION)).$(word 2,$(GCC_VERSION))))
51
+            DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2
52
+            EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c
53
+        endif
54
+        ifeq (,$(filter 0 1 2 3 4,$(word 1,$(GCC_VERSION))))
55
+            DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2
56
+            EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c
57
+        endif
58
+    endif
59
 endif
60
 ifeq ($(CPU_ARCH),arm)
61
 ifndef NSS_DISABLE_ARM32_NEON
62
     EXTRA_SRCS += gcm-arm32-neon.c
63
 endif
64
     ifdef CC_IS_CLANG
65
         DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2
66
         EXTRA_SRCS += aes-armv8.c sha1-armv8.c sha256-armv8.c
67
     else ifeq (1,$(CC_IS_GCC))
68
-        # Old compiler doesn't support ARM AES.
69
+        # GCC versions older than 4.9 don't support ARM AES. The check
70
+        # is done in two parts, first allows "major.minor" == "4.9",
71
+        # and then rejects any major versions prior to 5. Note that
72
+        # there has been no GCC 4.10, as it was renamed to GCC 5.
73
         ifneq (,$(filter 4.9,$(word 1,$(GCC_VERSION)).$(word 2,$(GCC_VERSION))))
74
             DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2
75
             EXTRA_SRCS += aes-armv8.c sha1-armv8.c sha256-armv8.c
76
         endif
77
         ifeq (,$(filter 0 1 2 3 4,$(word 1,$(GCC_VERSION))))
78
             DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2
79
             EXTRA_SRCS += aes-armv8.c sha1-armv8.c sha256-armv8.c
80
         endif
81
@@ -723,24 +739,22 @@ USES_SOFTFLOAT_ABI := $(shell $(CC) -o -
82
 $(OBJDIR)/$(PROG_PREFIX)aes-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a -mfpu=crypto-neon-fp-armv8$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp)
83
 $(OBJDIR)/$(PROG_PREFIX)sha1-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a -mfpu=crypto-neon-fp-armv8$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp)
84
 $(OBJDIR)/$(PROG_PREFIX)sha256-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a -mfpu=crypto-neon-fp-armv8$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp)
85
 ifndef NSS_DISABLE_ARM32_NEON
86
 $(OBJDIR)/$(PROG_PREFIX)gcm-arm32-neon$(OBJ_SUFFIX): CFLAGS += -mfpu=neon$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp)
87
 endif
88
 endif
89
 
90
-ifdef NS_USE_GCC
91
 ifeq ($(CPU_ARCH),aarch64)
92
 $(OBJDIR)/$(PROG_PREFIX)aes-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto
93
 $(OBJDIR)/$(PROG_PREFIX)gcm-aarch64$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto
94
 $(OBJDIR)/$(PROG_PREFIX)sha1-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto
95
 $(OBJDIR)/$(PROG_PREFIX)sha256-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto
96
 endif
97
-endif
98
 
99
 ifeq ($(CPU_ARCH),ppc)
100
 ifndef NSS_DISABLE_ALTIVEC
101
 $(OBJDIR)/$(PROG_PREFIX)gcm-ppc$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx
102
 $(OBJDIR)/$(PROG_PREFIX)gcm$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx
103
 $(OBJDIR)/$(PROG_PREFIX)rijndael$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx
104
 $(OBJDIR)/$(PROG_PREFIX)sha512$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx \
105
 					-funroll-loops -fpeel-loops
106

Return to bug 249053