vppinfra: Make program counter printing more portable 68/40268/2
authorTom Jones <thj@freebsd.org>
Fri, 26 Jan 2024 15:16:57 +0000 (15:16 +0000)
committerDamjan Marion <dmarion@0xa5.net>
Tue, 13 Feb 2024 16:24:45 +0000 (16:24 +0000)
Finding the program counter in the ucontext struct is platform and
architecture specific, place the Linux checks inside an #ifdef and add a
look up for the FreeBSD amd64 specific naming.

Type: improvement
Change-Id: I42fcef5f20227c23d84acee336e37c4870146bb4
Signed-off-by: Tom Jones <thj@freebsd.org>
src/vppinfra/unix-formats.c

index d46b00a..297a3fd 100644 (file)
@@ -432,6 +432,7 @@ u8 * format_ucontext_pc (u8 * s, va_list * args)
 
   uc = va_arg (*args, ucontext_t *);
 
+#ifdef __linux__
 #if defined (powerpc)
   regs = &uc->uc_mcontext.uc_regs->gregs[0];
 #elif defined (powerpc64)
@@ -454,6 +455,13 @@ u8 * format_ucontext_pc (u8 * s, va_list * args)
   reg_no = 0;
   regs = 0;
 #endif
+#elif __FreeBSD__
+#if defined(__amd64__)
+  reg_no = 0;
+  regs = (void *) &uc->uc_mcontext.mc_rip;
+#else
+#endif /* __amd64__ */
+#endif /* __linux__ */
 
   if (! regs)
     return format (s, "unsupported");