Blame SOURCES/0005-detect-arch-at-runtime-for-proc-cpuinfo-parsing.patch

df7b7f
From 1a778e7a7ec7a646596ed5bf6daba278f36902f6 Mon Sep 17 00:00:00 2001
df7b7f
From: Dan Callaghan <dcallagh@redhat.com>
df7b7f
Date: Thu, 18 Jun 2015 17:36:53 +1000
df7b7f
Subject: [PATCH 05/26] detect arch at runtime for /proc/cpuinfo parsing
df7b7f
df7b7f
This patch makes it possible to run cross-platform unit tests by
df7b7f
faking the architecture returned by uname(2) to match the format of
df7b7f
/proc/cpuinfo.
df7b7f
---
df7b7f
 src/core/cpuinfo.cc | 75 +++++++++++++++++++++++------------------------------
df7b7f
 src/core/osutils.cc |  9 ++-----
df7b7f
 2 files changed, 35 insertions(+), 49 deletions(-)
df7b7f
df7b7f
diff --git a/src/core/cpuinfo.cc b/src/core/cpuinfo.cc
df7b7f
index 5a2b8c0..afde4c2 100644
df7b7f
--- a/src/core/cpuinfo.cc
df7b7f
+++ b/src/core/cpuinfo.cc
df7b7f
@@ -62,7 +62,6 @@ int n = 0)
df7b7f
 }
df7b7f
 
df7b7f
 
df7b7f
-#ifdef __powerpc__
df7b7f
 static void cpuinfo_ppc_ibm(hwNode & node,
df7b7f
 			    const string & description, const string & version)
df7b7f
 {
df7b7f
@@ -103,9 +102,7 @@ string value)
df7b7f
     }
df7b7f
   }
df7b7f
 }
df7b7f
-#endif
df7b7f
 
df7b7f
-#ifdef __s390x__
df7b7f
 static vector <string> s390x_features;
df7b7f
 static string s390x_vendor;
df7b7f
 static void cpuinfo_s390x(hwNode & node,
df7b7f
@@ -157,9 +154,7 @@ string value)
df7b7f
       cpu->describeCapability("te", "transactional/constraint transactional execution facilities");
df7b7f
     }
df7b7f
 }
df7b7f
-#endif
df7b7f
 
df7b7f
-#ifdef __arm__
df7b7f
 static void cpuinfo_arm(hwNode & node,
df7b7f
                         string id,
df7b7f
                         string value)
df7b7f
@@ -218,9 +213,7 @@ static void cpuinfo_arm(hwNode & node,
df7b7f
       cpu->describeCapability("evtstrm", "Unknown");
df7b7f
     }
df7b7f
 }
df7b7f
-#endif
df7b7f
 
df7b7f
-#ifdef __aarch64__
df7b7f
 static vector <string> aarch64_features;
df7b7f
 static string aarch64_processor_name;
df7b7f
 static void cpuinfo_aarch64(hwNode & node,
df7b7f
@@ -281,9 +274,7 @@ static void cpuinfo_aarch64(hwNode & node,
df7b7f
         }
df7b7f
     }
df7b7f
 }
df7b7f
-#endif
df7b7f
 
df7b7f
-#ifdef __ia64__
df7b7f
 static void cpuinfo_ia64(hwNode & node,
df7b7f
 string id,
df7b7f
 string value)
df7b7f
@@ -335,9 +328,7 @@ string value)
df7b7f
     }
df7b7f
   }
df7b7f
 }
df7b7f
-#endif
df7b7f
 
df7b7f
-#ifdef __hppa__
df7b7f
 static void cpuinfo_hppa(hwNode & node,
df7b7f
 string id,
df7b7f
 string value)
df7b7f
@@ -371,9 +360,7 @@ string value)
df7b7f
     }
df7b7f
   }
df7b7f
 }
df7b7f
-#endif
df7b7f
 
df7b7f
-#ifdef __alpha__
df7b7f
 static void cpuinfo_alpha(hwNode & node,
df7b7f
 string id,
df7b7f
 string value)
df7b7f
@@ -431,9 +418,7 @@ string value)
df7b7f
       mycpu->enable();
df7b7f
   }
df7b7f
 }
df7b7f
-#endif
df7b7f
 
df7b7f
-#if defined(__i386__) || defined(__x86_64__)
df7b7f
 static void cpuinfo_x86(hwNode & node,
df7b7f
 string id,
df7b7f
 string value)
df7b7f
@@ -577,7 +562,6 @@ string value)
df7b7f
     if(node.getWidth()==0) node.setWidth(cpu->getWidth());
df7b7f
   }
df7b7f
 }
df7b7f
-#endif
df7b7f
 
df7b7f
 bool scan_cpuinfo(hwNode & n)
df7b7f
 {
df7b7f
@@ -599,6 +583,7 @@ bool scan_cpuinfo(hwNode & n)
df7b7f
     size_t count;
df7b7f
     string cpuinfo_str = "";
df7b7f
     string description = "", version = "";
df7b7f
+    string plat = platform();
df7b7f
 
df7b7f
     while ((count = read(cpuinfo, buffer, sizeof(buffer))) > 0)
df7b7f
     {
df7b7f
@@ -624,48 +609,53 @@ bool scan_cpuinfo(hwNode & n)
df7b7f
         id = hw::strip(cpuinfo_lines[i].substr(0, pos));
df7b7f
         value = hw::strip(cpuinfo_lines[i].substr(pos + 1));
df7b7f
 
df7b7f
-#if defined(__i386__) || defined(__x86_64__)
df7b7f
-        cpuinfo_x86(n, id, value);
df7b7f
-#endif
df7b7f
-#ifdef __powerpc__
df7b7f
-
df7b7f
-        // All cores have same product name and version on power systems
df7b7f
-        if (is_system_ppc_ibm(n))
df7b7f
+        if (plat == "ppc" || plat == "ppc64" || plat == "ppc64le")
df7b7f
         {
df7b7f
-          if (id == "cpu")
df7b7f
-            description = value;
df7b7f
-          if (id == "revision")
df7b7f
-            version = value;
df7b7f
+          // All cores have same product name and version on power systems
df7b7f
+          if (is_system_ppc_ibm(n))
df7b7f
+            {
df7b7f
+              if (id == "cpu")
df7b7f
+                description = value;
df7b7f
+              if (id == "revision")
df7b7f
+                version = value;
df7b7f
 
df7b7f
-          if (description != "" && version != "")
df7b7f
-          {
df7b7f
-            cpuinfo_ppc_ibm(n, description, version);
df7b7f
-            break;
df7b7f
-          }
df7b7f
+              if (description != "" && version != "")
df7b7f
+              {
df7b7f
+                cpuinfo_ppc_ibm(n, description, version);
df7b7f
+                break;
df7b7f
+              }
df7b7f
+            }
df7b7f
+          else
df7b7f
+            cpuinfo_ppc(n, id, value);
df7b7f
+        }
df7b7f
+        else if (plat == "hppa")
df7b7f
+        {
df7b7f
+          cpuinfo_hppa(n, id, value);
df7b7f
+        }
df7b7f
+        else if (plat == "alpha")
df7b7f
+        {
df7b7f
+          cpuinfo_alpha(n, id, value);
df7b7f
+        }
df7b7f
+        else if (plat == "ia64")
df7b7f
+        {
df7b7f
+          cpuinfo_ia64(n, id, value);
df7b7f
+        }
df7b7f
+        else if (plat == "s390" || plat == "s390x")
df7b7f
+        {
df7b7f
+          cpuinfo_s390x(n, id, value);
df7b7f
+        }
df7b7f
+        else if (plat.compare(0, 3, "arm") == 0)
df7b7f
+        {
df7b7f
+          cpuinfo_arm(n, id, value);
df7b7f
+        }
df7b7f
+        else if (plat == "aarch64")
df7b7f
+        {
df7b7f
+          cpuinfo_aarch64(n, id, value);
df7b7f
         }
df7b7f
         else
df7b7f
-          cpuinfo_ppc(n, id, value);
df7b7f
-#endif
df7b7f
-#ifdef __s390x__
df7b7f
-        cpuinfo_s390x(n, id, value);
df7b7f
-#endif
df7b7f
-#ifdef __hppa__
df7b7f
-        cpuinfo_hppa(n, id, value);
df7b7f
-#endif
df7b7f
-#ifdef __alpha__
df7b7f
-        cpuinfo_alpha(n, id, value);
df7b7f
-#endif
df7b7f
-#ifdef __ia64__
df7b7f
-        cpuinfo_ia64(n, id, value);
df7b7f
-#endif
df7b7f
-
df7b7f
-#ifdef __arm__
df7b7f
-        cpuinfo_arm(n, id, value);
df7b7f
-#endif
df7b7f
-#ifdef __aarch64__
df7b7f
-        cpuinfo_aarch64(n, id, value);
df7b7f
-#endif
df7b7f
-
df7b7f
+        {
df7b7f
+          cpuinfo_x86(n, id, value);
df7b7f
+        }
df7b7f
       }
df7b7f
     }
df7b7f
   }
df7b7f
diff --git a/src/core/osutils.cc b/src/core/osutils.cc
df7b7f
index cb7f638..c9543b9 100644
df7b7f
--- a/src/core/osutils.cc
df7b7f
+++ b/src/core/osutils.cc
df7b7f
@@ -832,15 +832,10 @@ string operating_system()
df7b7f
 
df7b7f
 string platform()
df7b7f
 {
df7b7f
-  string p = "";
df7b7f
   struct utsname u;
df7b7f
 
df7b7f
-#ifdef __i386__
df7b7f
-  p = "i386";
df7b7f
-#endif
df7b7f
-
df7b7f
   if(uname(&u) != 0)
df7b7f
-    return p;
df7b7f
+    return string("i386");
df7b7f
   else
df7b7f
-    return p + (p!=""?"/":"") + string(u.machine);
df7b7f
+    return string(u.machine);
df7b7f
 }
df7b7f
-- 
df7b7f
2.10.2