Browse code

kernels: Add full retpoline support by building with retpoline-enabled gcc

The retpoline technique is one of the mitigations for the Spectre v2
vulnerability on modern processors. At the moment, our kernels have
only minimal asm retpoline support. Enhance the kernel with full
retpoline support by building with a retpoline-enabled version of gcc
(v7.3.0)

Change-Id: I34e62266a9843b9a4ca24938589cd9a30ccec42f
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/5069
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Bo Gan <ganb@vmware.com>

Srivatsa S. Bhat authored on 2018/04/24 05:29:15
Showing 12 changed files
... ...
@@ -1,7 +1,7 @@
1 1
 Summary:	Linux API header files
2 2
 Name:		linux-api-headers
3 3
 Version:	4.9.94
4
-Release:	1%{?dist}
4
+Release:	2%{?dist}
5 5
 License:	GPLv2
6 6
 URL:		http://www.kernel.org/
7 7
 Group:		System Environment/Kernel
... ...
@@ -25,6 +25,8 @@ find /%{buildroot}%{_includedir} \( -name .install -o -name ..install.cmd \) -de
25 25
 %defattr(-,root,root)
26 26
 %{_includedir}/*
27 27
 %changelog
28
+*   Mon Apr 23 2018 Srivatsa S. Bhat <srivatsa@csail.mit.edu> 4.9.94-2
29
+-   Add full retpoline support by building with retpoline-enabled gcc.
28 30
 *   Wed Apr 18 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.94-1
29 31
 -   Update to version 4.9.94
30 32
 *   Mon Apr 02 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.92-1
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux-aws
4 4
 Version:        4.9.94
5
-Release:        1%{?kat_build:.%kat_build}%{?dist}
5
+Release:        2%{?kat_build:.%kat_build}%{?dist}
6 6
 License:    	GPLv2
7 7
 URL:        	http://www.kernel.org/
8 8
 Group:        	System Environment/Kernel
... ...
@@ -434,6 +434,8 @@ ln -sf %{name}-%{uname_r}.cfg /boot/photon.cfg
434 434
 /usr/share/doc/*
435 435
 
436 436
 %changelog
437
+*   Mon Apr 23 2018 Srivatsa S. Bhat <srivatsa@csail.mit.edu> 4.9.94-2
438
+-   Add full retpoline support by building with retpoline-enabled gcc.
437 439
 *   Wed Apr 18 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.94-1
438 440
 -   Update to version 4.9.94. Fix panic in ip_set.
439 441
 *   Mon Apr 02 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.92-1
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux-esx
4 4
 Version:        4.9.94
5
-Release:        1%{?dist}
5
+Release:        2%{?dist}
6 6
 License:        GPLv2
7 7
 URL:            http://www.kernel.org/
8 8
 Group:          System Environment/Kernel
... ...
@@ -232,6 +232,8 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
232 232
 /usr/src/linux-headers-%{uname_r}
233 233
 
234 234
 %changelog
235
+*   Mon Apr 23 2018 Srivatsa S. Bhat <srivatsa@csail.mit.edu> 4.9.94-2
236
+-   Add full retpoline support by building with retpoline-enabled gcc.
235 237
 *   Wed Apr 18 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.94-1
236 238
 -   Update to version 4.9.94. Fix panic in ip_set.
237 239
 *   Mon Apr 02 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.92-1
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux-secure
4 4
 Version:        4.9.94
5
-Release:        1%{?kat_build:.%kat_build}%{?dist}
5
+Release:        2%{?kat_build:.%kat_build}%{?dist}
6 6
 License:        GPLv2
7 7
 URL:            http://www.kernel.org/
8 8
 Group:          System Environment/Kernel
... ...
@@ -321,6 +321,8 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
321 321
 /usr/src/linux-headers-%{uname_r}
322 322
 
323 323
 %changelog
324
+*   Mon Apr 23 2018 Srivatsa S. Bhat <srivatsa@csail.mit.edu> 4.9.94-2
325
+-   Add full retpoline support by building with retpoline-enabled gcc.
324 326
 *   Wed Apr 18 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.94-1
325 327
 -   Update to version 4.9.94. Fix panic in ip_set.
326 328
 *   Mon Apr 02 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.92-1
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux
4 4
 Version:        4.9.94
5
-Release:        1%{?kat_build:.%kat_build}%{?dist}
5
+Release:        2%{?kat_build:.%kat_build}%{?dist}
6 6
 License:    	GPLv2
7 7
 URL:        	http://www.kernel.org/
8 8
 Group:        	System Environment/Kernel
... ...
@@ -355,6 +355,8 @@ ln -sf %{name}-%{uname_r}.cfg /boot/photon.cfg
355 355
 /usr/share/doc/*
356 356
 
357 357
 %changelog
358
+*   Mon Apr 23 2018 Srivatsa S. Bhat <srivatsa@csail.mit.edu> 4.9.94-2
359
+-   Add full retpoline support by building with retpoline-enabled gcc.
358 360
 *   Wed Apr 18 2018 Alexey Makhalov <amakhalov@vmware.com> 4.9.94-1
359 361
 -   Update to version 4.9.94. Fix panic in ip_set.
360 362
 -   .config: disable XEN_BALLOON_MEMORY_HOTPLUG
... ...
@@ -1,9 +1,87 @@
1 1
 {
2
-    "dummy_package": { 
2
+    "dummy_package": {
3 3
         "files": [
4
-                     {"src": "path_to_file1_to_be_copied", "dst": "file1_destination"}, 
4
+                     {"src": "path_to_file1_to_be_copied", "dst": "file1_destination"},
5 5
                      {"src": "path_to_file2_to_be_copied", "dst": "file2_destination"}
6
-        ], 
7
-        "macros": ["macro1 value1","macro2 value2"]
6
+        ],
7
+        "macros": ["macro1 value1","macro2 value2"],
8
+        "override_toolchain": [
9
+                     {"package": "package_name", "version": "version_to_use"}
10
+        ]
11
+    },
12
+
13
+    "linux-api-headers": {
14
+        "files": [],
15
+        "macros": [],
16
+        "override_toolchain": [
17
+                     {"package": "gcc", "version": "7.3.0"},
18
+                     {"package": "libgcc", "version": "7.3.0"},
19
+                     {"package": "libgcc-devel", "version": "7.3.0"},
20
+                     {"package": "libgcc-atomic", "version": "7.3.0"},
21
+                     {"package": "libstdc++", "version": "7.3.0"},
22
+                     {"package": "libstdc++-devel", "version": "7.3.0"},
23
+                     {"package": "libgomp", "version": "7.3.0"},
24
+                     {"package": "libgomp-devel", "version": "7.3.0"}
25
+        ]
26
+    },
27
+
28
+    "linux": {
29
+        "files": [],
30
+        "macros": [],
31
+        "override_toolchain": [
32
+                     {"package": "gcc", "version": "7.3.0"},
33
+                     {"package": "libgcc", "version": "7.3.0"},
34
+                     {"package": "libgcc-devel", "version": "7.3.0"},
35
+                     {"package": "libgcc-atomic", "version": "7.3.0"},
36
+                     {"package": "libstdc++", "version": "7.3.0"},
37
+                     {"package": "libstdc++-devel", "version": "7.3.0"},
38
+                     {"package": "libgomp", "version": "7.3.0"},
39
+                     {"package": "libgomp-devel", "version": "7.3.0"}
40
+        ]
41
+    },
42
+
43
+    "linux-esx": {
44
+        "files": [],
45
+        "macros": [],
46
+        "override_toolchain": [
47
+                     {"package": "gcc", "version": "7.3.0"},
48
+                     {"package": "libgcc", "version": "7.3.0"},
49
+                     {"package": "libgcc-devel", "version": "7.3.0"},
50
+                     {"package": "libgcc-atomic", "version": "7.3.0"},
51
+                     {"package": "libstdc++", "version": "7.3.0"},
52
+                     {"package": "libstdc++-devel", "version": "7.3.0"},
53
+                     {"package": "libgomp", "version": "7.3.0"},
54
+                     {"package": "libgomp-devel", "version": "7.3.0"}
55
+        ]
56
+    },
57
+
58
+    "linux-secure": {
59
+        "files": [],
60
+        "macros": [],
61
+        "override_toolchain": [
62
+                     {"package": "gcc", "version": "7.3.0"},
63
+                     {"package": "libgcc", "version": "7.3.0"},
64
+                     {"package": "libgcc-devel", "version": "7.3.0"},
65
+                     {"package": "libgcc-atomic", "version": "7.3.0"},
66
+                     {"package": "libstdc++", "version": "7.3.0"},
67
+                     {"package": "libstdc++-devel", "version": "7.3.0"},
68
+                     {"package": "libgomp", "version": "7.3.0"},
69
+                     {"package": "libgomp-devel", "version": "7.3.0"}
70
+        ]
71
+    },
72
+
73
+    "linux-aws": {
74
+        "files": [],
75
+        "macros": [],
76
+        "override_toolchain": [
77
+                     {"package": "gcc", "version": "7.3.0"},
78
+                     {"package": "libgcc", "version": "7.3.0"},
79
+                     {"package": "libgcc-devel", "version": "7.3.0"},
80
+                     {"package": "libgcc-atomic", "version": "7.3.0"},
81
+                     {"package": "libstdc++", "version": "7.3.0"},
82
+                     {"package": "libstdc++-devel", "version": "7.3.0"},
83
+                     {"package": "libgomp", "version": "7.3.0"},
84
+                     {"package": "libgomp-devel", "version": "7.3.0"}
85
+        ]
8 86
     }
9 87
 }
... ...
@@ -4,13 +4,17 @@ import os
4 4
 class CommandUtils(object):
5 5
     def __init__(self):
6 6
         self.findBinary = "find"
7
+        self.sortBinary = "sort"
7 8
 
8 9
     def findFile (self, filename, sourcePath):
9
-        process = subprocess.Popen([self.findBinary,  "-L", sourcePath,  "-name", filename, "-not", "-type", "d"],  stdout=subprocess.PIPE)
10
-        returnVal = process.wait()
10
+        # Perform an alphabetical sort of the output from find, to get consistent ordering.
11
+        processFind = subprocess.Popen([self.findBinary,  "-L", sourcePath,  "-name", filename, "-not", "-type", "d"],  stdout=subprocess.PIPE)
12
+        processSort = subprocess.Popen([self.sortBinary,  "-d"], stdin=processFind.stdout, stdout=subprocess.PIPE)
13
+        processFind.stdout.close() # Allow processFind to receive a SIGPIPE if processSort exits.
14
+        returnVal = processSort.wait()
11 15
         if returnVal != 0:
12 16
             return None
13
-        result=process.communicate()[0]
17
+        result=processSort.communicate()[0]
14 18
         if result is None:
15 19
             return None
16 20
         return result.split()
... ...
@@ -40,7 +40,7 @@ class PackageBuilderBase(object):
40 40
         packageIsAlreadyBuilt=True
41 41
         pkgUtils = PackageUtils(self.logName,self.logPath)
42 42
         for pkg in listRPMPackages:
43
-            if pkgUtils.findRPMFileForGivenPackage(pkg, index) is None:
43
+            if pkgUtils.findRPMFileForGivenPackage(pkg, "*", index) is None:
44 44
                 packageIsAlreadyBuilt=False
45 45
                 break
46 46
         return packageIsAlreadyBuilt
... ...
@@ -81,7 +81,7 @@ class PackageBuilder(PackageBuilderBase):
81 81
             if not returnVal:
82 82
                 raise Exception("Unable to prepare build root")
83 83
             tUtils=ToolChainUtils(self.logName,self.logPath)
84
-            tUtils.installToolChainRPMS(chrootID, self.package, self.logPath)
84
+            tUtils.installToolChainRPMS(chrootID, self.package, self.listBuildOptionPackages, self.pkgBuildOptionFile, self.logPath)
85 85
         except Exception as e:
86 86
             if chrootID is not None:
87 87
                 self.logger.debug("Deleting chroot: " + chrootID)
... ...
@@ -290,10 +290,15 @@ class PackageUtils(object):
290 290
                     listSRPMFiles.append(listcontents[1])
291 291
         return listRPMFiles,listSRPMFiles
292 292
 
293
-    def findRPMFileForGivenPackage(self,package, index=0):
293
+    def findRPMFileForGivenPackage(self, package, version = "*", index=0):
294 294
         cmdUtils = CommandUtils()
295
-        version = SPECS.getData().getVersion(package,index)
296
-        release = SPECS.getData().getRelease(package,index)
295
+        release = "*"
296
+
297
+        # If no version is specified, use the latest from the source
298
+        # code.
299
+        if version == "*":
300
+            version = SPECS.getData().getVersion(package,index)
301
+            release = SPECS.getData().getRelease(package,index)
297 302
         listFoundRPMFiles = sum([cmdUtils.findFile(package+"-"+version+"-"+release+"."+platform.machine()+".rpm",constants.rpmPath),
298 303
                             cmdUtils.findFile(package+"-"+version+"-"+release+".noarch.rpm",constants.rpmPath)], [])
299 304
         if constants.inputRPMSPath is not None:
... ...
@@ -8,6 +8,8 @@ import os.path
8 8
 import platform
9 9
 import traceback
10 10
 import shutil
11
+import json
12
+import collections
11 13
 
12 14
 class ToolChainUtils(object):
13 15
 
... ...
@@ -56,9 +58,9 @@ class ToolChainUtils(object):
56 56
 
57 57
         self.logger.info("Successfully prepared chroot:"+chrootID)
58 58
 
59
-    def findRPMFileInGivenLocation(self,package,rpmdirPath):
59
+    def findRPMFileInGivenLocation(self, package, rpmdirPath, version = "*"):
60 60
         cmdUtils = CommandUtils()
61
-        listFoundRPMFiles = cmdUtils.findFile(package+"-*.rpm",rpmdirPath)
61
+        listFoundRPMFiles = cmdUtils.findFile(package+"-"+version+"-*.rpm",rpmdirPath)
62 62
         listFilterRPMFiles=[]
63 63
         for f in listFoundRPMFiles:
64 64
             rpmFileName=os.path.basename(f)
... ...
@@ -71,8 +73,13 @@ class ToolChainUtils(object):
71 71
         if len(listFilterRPMFiles) == 0 :
72 72
             return None
73 73
         if len(listFilterRPMFiles) > 1 :
74
-            self.logger.error("Found multiple rpm files for given package in rpm directory.Unable to determine the rpm file for package:"+package)
75
-            return None
74
+            # We use findRPMFileInGivenLocation() only when bootstrapping;
75
+            # so it is okay to use any version for the core toolchain packages.
76
+            if package in constants.listToolChainRPMsToInstall:
77
+                return listFilterRPMFiles[0]
78
+            else:
79
+                self.logger.error("Found multiple rpm files for given package in rpm directory.Unable to determine the rpm file for package:"+package)
80
+                return None
76 81
 
77 82
     def buildCoreToolChainPackages(self, listBuildOptionPackages, pkgBuildOptionFile):
78 83
         self.logger.info("Building core toolchain packages.....")
... ...
@@ -95,7 +102,7 @@ class ToolChainUtils(object):
95 95
                 if not returnVal:
96 96
                     self.logger.error("Creating chroot failed")
97 97
                     raise Exception("creating chroot failed")
98
-                self.installToolChainRPMS(chrootID, package, destLogPath)
98
+                self.installToolChainRPMS(chrootID, package, listBuildOptionPackages, pkgBuildOptionFile, destLogPath)
99 99
                 pkgUtils.adjustGCCSpecs(package, chrootID, destLogPath)
100 100
                 pkgUtils.buildRPMSForGivenPackage(package, chrootID, listBuildOptionPackages, pkgBuildOptionFile, destLogPath)
101 101
                 pkgCount += 1
... ...
@@ -111,7 +118,7 @@ class ToolChainUtils(object):
111 111
             raise e
112 112
         return pkgCount
113 113
                 
114
-    def installToolChainRPMS(self,chrootID, packageName, logPath=None):
114
+    def installToolChainRPMS(self,chrootID, packageName, listBuildOptionPackages, pkgBuildOptionFile, logPath=None):
115 115
         if logPath is None:
116 116
             logPath=self.logPath
117 117
         cmdUtils = CommandUtils()
... ...
@@ -122,22 +129,38 @@ class ToolChainUtils(object):
122 122
         for package in constants.listToolChainRPMsToInstall:
123 123
             pkgUtils=PackageUtils(self.logName,self.logPath)
124 124
             rpmFile = None
125
+
126
+            # Default to any version.
127
+            version = "*"
128
+            if packageName in listBuildOptionPackages:
129
+                jsonData = open(pkgBuildOptionFile)
130
+                pkg_build_option_json = json.load(jsonData, object_pairs_hook=collections.OrderedDict)
131
+                jsonData.close()
132
+                pkgs_sorted = pkg_build_option_json.items()
133
+                for pkg in pkgs_sorted:
134
+                    p = str(pkg[0].encode('utf-8'))
135
+                    if p == packageName:
136
+                        overridelist = pkg[1]["override_toolchain"]
137
+                        for override in overridelist:
138
+                            if package == str(override["package"].encode('utf-8')):
139
+                                version = str(override["version"].encode('utf-8'))
140
+
125 141
             if constants.rpmCheck:
126
-                rpmFile=pkgUtils.findRPMFileForGivenPackage(package)
142
+                rpmFile=pkgUtils.findRPMFileForGivenPackage(package, version)
127 143
             else:
128 144
                 if (packageName not in constants.listToolChainRPMsToInstall or
129 145
                         constants.listToolChainRPMsToInstall.index(packageName) > constants.listToolChainRPMsToInstall.index(package)):
130
-                    rpmFile=pkgUtils.findRPMFileForGivenPackage(package)
146
+                    rpmFile=pkgUtils.findRPMFileForGivenPackage(package, version)
131 147
             if rpmFile is None:
132 148
                 # sqlite-autoconf package was renamed, but it still published as sqlite-autoconf
133 149
                 if package == "sqlite":
134 150
                     package = "sqlite-autoconf"
135
-                rpmFile=self.findRPMFileInGivenLocation(package, constants.prevPublishRPMRepo)
151
+                rpmFile=self.findRPMFileInGivenLocation(package, constants.prevPublishRPMRepo, version)
136 152
                 if rpmFile is None:
137 153
                     if package in constants.listOfRPMsProvidedAfterBuild:
138 154
                         self.logger.info("No old version of "+package+" exists, skip until the new version is built")
139 155
                         continue
140
-                    self.logger.error("Unable to find rpm "+ package +" in current and previous versions")
156
+                    self.logger.error("Unable to find rpm "+ package + "-" + version +" in current and previous versions")
141 157
                     raise Exception("Input Error")
142 158
             rpmFiles += " " + rpmFile
143 159
             packages += " " + package
... ...
@@ -133,6 +133,7 @@ class constants(object):
133 133
         "mpc",
134 134
         "libgcc",
135 135
         "libgcc-devel",
136
+        "libgcc-atomic",
136 137
         "libstdc++",
137 138
         "libstdc++-devel",
138 139
         "libgomp",
... ...
@@ -5,7 +5,7 @@ x86_64/python2-devel-2.7.11-1.ph1.x86_64.rpm
5 5
 x86_64/nspr-4.11-1.ph1.x86_64.rpm
6 6
 x86_64/rpm-4.13.0.1-5.ph2.x86_64.rpm
7 7
 x86_64/rpm-libs-4.13.0.1-5.ph2.x86_64.rpm
8
-x86_64/binutils-devel-2.25.1-1.ph1.x86_64.rpm
8
+x86_64/binutils-devel-2.30-2.ph1.x86_64.rpm
9 9
 x86_64/nss-3.21-1.ph1.x86_64.rpm
10 10
 x86_64/mpfr-devel-3.1.3-1.ph1.x86_64.rpm
11 11
 x86_64/cpio-2.12-1.ph1.x86_64.rpm
... ...
@@ -13,7 +13,8 @@ x86_64/sed-4.2.2-1.ph1.x86_64.rpm
13 13
 x86_64/libffi-3.2.1-1.ph1.x86_64.rpm
14 14
 x86_64/gmp-6.0.0a-1.ph1.x86_64.rpm
15 15
 x86_64/diffutils-3.3-2.ph1.x86_64.rpm
16
-x86_64/gcc-5.3.0-1.ph1.x86_64.rpm
16
+x86_64/gcc-5.3.0-4.ph1.x86_64.rpm
17
+x86_64/gcc-7.3.0-1.ph1.x86_64.rpm
17 18
 x86_64/gmp-devel-6.0.0a-1.ph1.x86_64.rpm
18 19
 x86_64/automake-1.15-1.ph1.x86_64.rpm
19 20
 x86_64/groff-1.22.2-1.ph1.x86_64.rpm
... ...
@@ -28,7 +29,10 @@ x86_64/rpm-devel-4.13.0.1-5.ph2.x86_64.rpm
28 28
 x86_64/file-5.24-1.ph1.x86_64.rpm
29 29
 x86_64/mpfr-3.1.3-1.ph1.x86_64.rpm
30 30
 x86_64/zlib-devel-1.2.8-2.ph1.x86_64.rpm
31
-x86_64/libgcc-devel-5.3.0-1.ph1.x86_64.rpm
31
+x86_64/libgcc-devel-5.3.0-4.ph1.x86_64.rpm
32
+x86_64/libgcc-devel-7.3.0-1.ph1.x86_64.rpm
33
+x86_64/libgcc-atomic-5.3.0-4.ph1.x86_64.rpm
34
+x86_64/libgcc-atomic-7.3.0-1.ph1.x86_64.rpm
32 35
 x86_64/bison-3.0.4-1.ph1.x86_64.rpm
33 36
 x86_64/lua-5.3.2-1.ph1.x86_64.rpm
34 37
 x86_64/util-linux-2.27.1-1.ph1.x86_64.rpm
... ...
@@ -45,11 +49,13 @@ x86_64/gawk-4.1.3-4.ph1.x86_64.rpm
45 45
 x86_64/libtool-2.4.6-1.ph1.x86_64.rpm
46 46
 x86_64/zlib-1.2.8-2.ph1.x86_64.rpm
47 47
 x86_64/python2-libs-2.7.11-1.ph1.x86_64.rpm
48
-x86_64/libgomp-5.3.0-1.ph1.x86_64.rpm
48
+x86_64/libgomp-5.3.0-4.ph1.x86_64.rpm
49
+x86_64/libgomp-7.3.0-1.ph1.x86_64.rpm
49 50
 x86_64/readline-devel-7.0-1.ph1.x86_64.rpm
50 51
 x86_64/sqlite-autoconf-3.11.0-1.ph1.x86_64.rpm
51 52
 x86_64/flex-2.5.39-1.ph1.x86_64.rpm
52
-x86_64/libstdc++-devel-5.3.0-1.ph1.x86_64.rpm
53
+x86_64/libstdc++-devel-5.3.0-4.ph1.x86_64.rpm
54
+x86_64/libstdc++-devel-7.3.0-1.ph1.x86_64.rpm
53 55
 x86_64/openssl-1.0.2g-1.ph1.x86_64.rpm
54 56
 x86_64/elfutils-0.165-1.ph1.x86_64.rpm
55 57
 x86_64/expat-2.1.0-1.ph1.x86_64.rpm
... ...
@@ -61,10 +67,12 @@ x86_64/python2-2.7.11-1.ph1.x86_64.rpm
61 61
 x86_64/elfutils-devel-0.165-1.ph1.x86_64.rpm
62 62
 x86_64/patch-2.7.5-1.ph1.x86_64.rpm
63 63
 x86_64/xz-5.2.2-1.ph1.x86_64.rpm
64
-x86_64/binutils-2.25.1-1.ph1.x86_64.rpm
65
-x86_64/libgomp-devel-5.3.0-1.ph1.x86_64.rpm
64
+x86_64/binutils-2.30-2.ph1.x86_64.rpm
65
+x86_64/libgomp-devel-5.3.0-4.ph1.x86_64.rpm
66
+x86_64/libgomp-devel-7.3.0-1.ph1.x86_64.rpm
66 67
 x86_64/bzip2-devel-1.0.6-4.ph1.x86_64.rpm
67
-x86_64/libgcc-5.3.0-1.ph1.x86_64.rpm
68
+x86_64/libgcc-5.3.0-4.ph1.x86_64.rpm
69
+x86_64/libgcc-7.3.0-1.ph1.x86_64.rpm
68 70
 x86_64/gzip-1.6-1.ph1.x86_64.rpm
69 71
 x86_64/elfutils-libelf-devel-0.165-1.ph1.x86_64.rpm
70 72
 x86_64/openssl-devel-1.0.2g-1.ph1.x86_64.rpm
... ...
@@ -72,7 +80,8 @@ x86_64/pkg-config-0.28-1.ph1.x86_64.rpm
72 72
 x86_64/popt-devel-1.16-1.ph1.x86_64.rpm
73 73
 x86_64/flex-devel-2.5.39-1.ph1.x86_64.rpm
74 74
 x86_64/findutils-4.4.2-1.ph1.x86_64.rpm
75
-x86_64/libstdc++-5.3.0-1.ph1.x86_64.rpm
75
+x86_64/libstdc++-5.3.0-4.ph1.x86_64.rpm
76
+x86_64/libstdc++-7.3.0-1.ph1.x86_64.rpm
76 77
 x86_64/libpipeline-1.4.1-1.ph1.x86_64.rpm
77 78
 x86_64/make-4.1-1.ph1.x86_64.rpm
78 79
 x86_64/glibc-devel-2.22-3.ph1.x86_64.rpm