vppinfra: fix calljmp test 90/34290/2
authorDamjan Marion <damarion@cisco.com>
Sun, 31 Oct 2021 18:06:20 +0000 (19:06 +0100)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 2 Nov 2021 04:42:21 +0000 (04:42 +0000)
Change-Id: Id1b380880c6509d983727f6fb57e7db97e66655a
Type: fix
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vppinfra/test_longjmp.c

index 01debe2..50dc24b 100644 (file)
@@ -82,27 +82,25 @@ test_longjmp_main (unformat_input_t * input)
 static uword
 f3 (uword arg)
 {
-  uword i, j, array[10];
-
-  for (i = 0; i < ARRAY_LEN (array); i++)
-    array[i] = arg + i;
-
-  j = 0;
-  for (i = 0; i < ARRAY_LEN (array); i++)
-    j ^= array[i];
-
-  return j;
+  return (uword) __builtin_frame_address (0);
 }
 
 static void
 test_calljmp (unformat_input_t * input)
 {
-  static u8 stack[32 * 1024] __attribute__ ((aligned (16)));
-  uword v;
+  u8 stack[4096] __attribute__ ((aligned (16))) = {};
+  uword start, end, v;
+
+  start = pointer_to_uword (stack);
+  end = start + ARRAY_LEN (stack);
+
+  v = f3 (0);
+  if (!(v < start || v > end))
+    clib_panic ("something went wrong in the calljmp test");
 
   v = clib_calljmp (f3, 0, stack + sizeof (stack));
-  ASSERT (v == f3 (0));
-  if_verbose ("calljump ok");
+  if_verbose ("calljump %s",
+             v >= start && v < (end - sizeof (uword)) ? "ok" : "fail");
 }
 
 #ifdef CLIB_UNIX