summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2016-03-03 20:19:02 +0100
committerGerrit Code Review <gerrit@fd.io>2016-03-03 21:22:03 +0000
commit01be6a0cb1d16fbad9a7d33449489b3a86a78521 (patch)
treed7b6a088f25a1e43a6284b38c83ab1f7d5557dd9
parent73f7ef8ab714464c477de5bd3938b976c01d37cf (diff)
Refuse to start if binary requires unavailable CPU extensions
Change-Id: I4d0d152b6f5d4ba566398fcccaa6a1f96625f864 Signed-off-by: Damjan Marion <damarion@cisco.com>
-rw-r--r--vpp/vnet/main.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/vpp/vnet/main.c b/vpp/vnet/main.c
index 290b5c03f32..04ee6b7607c 100644
--- a/vpp/vnet/main.c
+++ b/vpp/vnet/main.c
@@ -63,6 +63,35 @@ int main (int argc, char * argv[])
u32 size;
void vlib_set_get_handoff_structure_cb (void *cb);
+#if __x86_64__
+ const char * msg = "ERROR: This binary requires CPU with %s extensions.\n";
+#define _(a,b) \
+ if (!__builtin_cpu_supports(a)) \
+ { \
+ fprintf(stderr, msg, b); \
+ exit(1); \
+ }
+
+#if __AVX2__
+ _("avx2", "AVX2")
+#endif
+#if __AVX__
+ _("avx", "AVX")
+#endif
+#if __SSE4_2__
+ _("sse4.2", "SSE4.2")
+#endif
+#if __SSE4_1__
+ _("sse4.1", "SSE4.1")
+#endif
+#if __SSSE3__
+ _("ssse3", "SSSE3")
+#endif
+#if __SSE3__
+ _("sse3", "SSE3")
+#endif
+#endif
+
/*
* Load startup config from file.
* usage: vpp -c /etc/vpp/startup.conf