From 7d2978dab920b86b28f2f7f1c8823a4b28e68dd1 Mon Sep 17 00:00:00 2001 From: Tom Jones Date: Fri, 26 Jan 2024 15:16:57 +0000 Subject: [PATCH] vppinfra: Make program counter printing more portable 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 --- src/vppinfra/unix-formats.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/vppinfra/unix-formats.c b/src/vppinfra/unix-formats.c index d46b00a450c..297a3fdb8c2 100644 --- a/src/vppinfra/unix-formats.c +++ b/src/vppinfra/unix-formats.c @@ -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");