The printf's are problematic in a header.  Specifically when we include and
use those functions from within parts of glibc, we can trigger the dreaded
'multiple libc' problem when building glibc.

Signed-off-by: Barret Rhoden <[email protected]>
---
 user/parlib/include/vcore.h       |  3 ++
 user/parlib/include/x86/vcore32.h | 49 ---------------------------------
 user/parlib/include/x86/vcore64.h | 58 ---------------------------------------
 user/parlib/x86/vcore.c           | 57 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 60 insertions(+), 107 deletions(-)

diff --git a/user/parlib/include/vcore.h b/user/parlib/include/vcore.h
index 16655da49739..a965591b04f7 100644
--- a/user/parlib/include/vcore.h
+++ b/user/parlib/include/vcore.h
@@ -63,6 +63,9 @@ void ensure_vcore_runs(uint32_t vcoreid);
 void cpu_relax_vc(uint32_t vcoreid);
 uint32_t get_vcoreid(void);
 bool check_vcoreid(const char *str, uint32_t vcoreid);
+void print_hw_tf(struct hw_trapframe *tf);
+void print_sw_tf(struct sw_trapframe *sw_tf);
+void print_user_context(struct user_context *ctx);
 
 /* This works so long as we don't dlopen parlib (which we never do) */
 #define get_tlsvar_linaddr(_vcoreid, _var)                                     
\
diff --git a/user/parlib/include/x86/vcore32.h 
b/user/parlib/include/x86/vcore32.h
index 88f4de1741c9..483c97a81ddd 100644
--- a/user/parlib/include/x86/vcore32.h
+++ b/user/parlib/include/x86/vcore32.h
@@ -329,55 +329,6 @@ static inline uintptr_t get_user_ctx_stack(struct 
user_context *ctx)
        temp; \
 })
 
-/* For debugging. */
-#include <stdio.h>
-static void print_hw_tf(struct hw_trapframe *tf)
-{
-       printf("[user] HW TRAP frame %08p\n", tf);
-       printf("  edi  0x%08x\n", tf->tf_regs.reg_edi);
-       printf("  esi  0x%08x\n", tf->tf_regs.reg_esi);
-       printf("  ebp  0x%08x\n", tf->tf_regs.reg_ebp);
-       printf("  oesp 0x%08x\n", tf->tf_regs.reg_oesp);
-       printf("  ebx  0x%08x\n", tf->tf_regs.reg_ebx);
-       printf("  edx  0x%08x\n", tf->tf_regs.reg_edx);
-       printf("  ecx  0x%08x\n", tf->tf_regs.reg_ecx);
-       printf("  eax  0x%08x\n", tf->tf_regs.reg_eax);
-       printf("  gs   0x----%04x\n", tf->tf_gs);
-       printf("  fs   0x----%04x\n", tf->tf_fs);
-       printf("  es   0x----%04x\n", tf->tf_es);
-       printf("  ds   0x----%04x\n", tf->tf_ds);
-       printf("  trap 0x%08x\n", tf->tf_trapno);
-       printf("  err  0x%08x\n", tf->tf_err);
-       printf("  eip  0x%08x\n", tf->tf_eip);
-       printf("  cs   0x----%04x\n", tf->tf_cs);
-       printf("  flag 0x%08x\n", tf->tf_eflags);
-       printf("  esp  0x%08x\n", tf->tf_esp);
-       printf("  ss   0x----%04x\n", tf->tf_ss);
-}
-
-static void print_sw_tf(struct sw_trapframe *sw_tf)
-{
-       printf("[user] SW TRAP frame %08p\n", sw_tf);
-       printf("  ebp  0x%08x\n", sw_tf->tf_ebp);
-       printf("  ebx  0x%08x\n", sw_tf->tf_ebx);
-       printf("  esi  0x%08x\n", sw_tf->tf_esi);
-       printf("  edi  0x%08x\n", sw_tf->tf_edi);
-       printf("  esp  0x%08x\n", sw_tf->tf_esp);
-       printf("  eip  0x%08x\n", sw_tf->tf_eip);
-       printf(" mxcsr 0x%08x\n", sw_tf->tf_mxcsr);
-       printf(" fpucw 0x----%04x\n", sw_tf->tf_fpucw);
-}
-
-static void print_user_context(struct user_context *ctx)
-{
-       if (ctx->type == ROS_HW_CTX)
-               print_hw_tf(&ctx->tf.hw_tf);
-       else if (ctx->type == ROS_SW_CTX)
-               print_sw_tf(&ctx->tf.sw_tf);
-       else
-               printf("Unknown context type %d\n", ctx->type);
-}
-
 static bool has_refl_fault(struct user_context *ctx)
 {
        return ctx->tf.hw_tf.tf_padding3 == ROS_ARCH_REFL_ID;
diff --git a/user/parlib/include/x86/vcore64.h 
b/user/parlib/include/x86/vcore64.h
index 77efbb39b350..bf3815be526c 100644
--- a/user/parlib/include/x86/vcore64.h
+++ b/user/parlib/include/x86/vcore64.h
@@ -368,64 +368,6 @@ static inline uintptr_t get_user_ctx_stack(struct 
user_context *ctx)
        temp; \
 })
 
-/* For debugging. */
-#include <stdio.h>
-static void print_hw_tf(struct hw_trapframe *hw_tf)
-{
-       printf("[user] HW TRAP frame 0x%016x\n", hw_tf);
-       printf("  rax  0x%016lx\n",           hw_tf->tf_rax);
-       printf("  rbx  0x%016lx\n",           hw_tf->tf_rbx);
-       printf("  rcx  0x%016lx\n",           hw_tf->tf_rcx);
-       printf("  rdx  0x%016lx\n",           hw_tf->tf_rdx);
-       printf("  rbp  0x%016lx\n",           hw_tf->tf_rbp);
-       printf("  rsi  0x%016lx\n",           hw_tf->tf_rsi);
-       printf("  rdi  0x%016lx\n",           hw_tf->tf_rdi);
-       printf("  r8   0x%016lx\n",           hw_tf->tf_r8);
-       printf("  r9   0x%016lx\n",           hw_tf->tf_r9);
-       printf("  r10  0x%016lx\n",           hw_tf->tf_r10);
-       printf("  r11  0x%016lx\n",           hw_tf->tf_r11);
-       printf("  r12  0x%016lx\n",           hw_tf->tf_r12);
-       printf("  r13  0x%016lx\n",           hw_tf->tf_r13);
-       printf("  r14  0x%016lx\n",           hw_tf->tf_r14);
-       printf("  r15  0x%016lx\n",           hw_tf->tf_r15);
-       printf("  trap 0x%08x\n",             hw_tf->tf_trapno);
-       printf("  gsbs 0x%016lx\n",           hw_tf->tf_gsbase);
-       printf("  fsbs 0x%016lx\n",           hw_tf->tf_fsbase);
-       printf("  err  0x--------%08x\n",     hw_tf->tf_err);
-       printf("  rip  0x%016lx\n",           hw_tf->tf_rip);
-       printf("  cs   0x------------%04x\n", hw_tf->tf_cs);
-       printf("  flag 0x%016lx\n",           hw_tf->tf_rflags);
-       printf("  rsp  0x%016lx\n",           hw_tf->tf_rsp);
-       printf("  ss   0x------------%04x\n", hw_tf->tf_ss);
-}
-
-static void print_sw_tf(struct sw_trapframe *sw_tf)
-{
-       printf("[user] SW TRAP frame 0x%016p\n", sw_tf);
-       printf("  rbx  0x%016lx\n",           sw_tf->tf_rbx);
-       printf("  rbp  0x%016lx\n",           sw_tf->tf_rbp);
-       printf("  r12  0x%016lx\n",           sw_tf->tf_r12);
-       printf("  r13  0x%016lx\n",           sw_tf->tf_r13);
-       printf("  r14  0x%016lx\n",           sw_tf->tf_r14);
-       printf("  r15  0x%016lx\n",           sw_tf->tf_r15);
-       printf("  gsbs 0x%016lx\n",           sw_tf->tf_gsbase);
-       printf("  fsbs 0x%016lx\n",           sw_tf->tf_fsbase);
-       printf("  rip  0x%016lx\n",           sw_tf->tf_rip);
-       printf("  rsp  0x%016lx\n",           sw_tf->tf_rsp);
-       printf(" mxcsr 0x%08x\n",             sw_tf->tf_mxcsr);
-       printf(" fpucw 0x%04x\n",             sw_tf->tf_fpucw);
-}
-
-static void print_user_context(struct user_context *ctx)
-{
-       if (ctx->type == ROS_HW_CTX)
-               print_hw_tf(&ctx->tf.hw_tf);
-       else if (ctx->type == ROS_SW_CTX)
-               print_sw_tf(&ctx->tf.sw_tf);
-       else
-               printf("Unknown context type %d\n", ctx->type);
-}
-
 static bool has_refl_fault(struct user_context *ctx)
 {
        return ctx->tf.hw_tf.tf_padding3 == ROS_ARCH_REFL_ID;
diff --git a/user/parlib/x86/vcore.c b/user/parlib/x86/vcore.c
index df1cb49c27fc..b3c6182deef5 100644
--- a/user/parlib/x86/vcore.c
+++ b/user/parlib/x86/vcore.c
@@ -1,5 +1,6 @@
 #include <ros/syscall.h>
 #include <parlib/arch/vcore.h>
+#include <parlib/stdio.h>
 
 struct syscall vc_entry = {
        .num = SYS_vc_entry,
@@ -15,3 +16,59 @@ struct syscall vc_entry = {
        .arg4 = 0,
        .arg5 = 0,
 };
+
+void print_hw_tf(struct hw_trapframe *hw_tf)
+{
+       printf("[user] HW TRAP frame 0x%016x\n", hw_tf);
+       printf("  rax  0x%016lx\n",           hw_tf->tf_rax);
+       printf("  rbx  0x%016lx\n",           hw_tf->tf_rbx);
+       printf("  rcx  0x%016lx\n",           hw_tf->tf_rcx);
+       printf("  rdx  0x%016lx\n",           hw_tf->tf_rdx);
+       printf("  rbp  0x%016lx\n",           hw_tf->tf_rbp);
+       printf("  rsi  0x%016lx\n",           hw_tf->tf_rsi);
+       printf("  rdi  0x%016lx\n",           hw_tf->tf_rdi);
+       printf("  r8   0x%016lx\n",           hw_tf->tf_r8);
+       printf("  r9   0x%016lx\n",           hw_tf->tf_r9);
+       printf("  r10  0x%016lx\n",           hw_tf->tf_r10);
+       printf("  r11  0x%016lx\n",           hw_tf->tf_r11);
+       printf("  r12  0x%016lx\n",           hw_tf->tf_r12);
+       printf("  r13  0x%016lx\n",           hw_tf->tf_r13);
+       printf("  r14  0x%016lx\n",           hw_tf->tf_r14);
+       printf("  r15  0x%016lx\n",           hw_tf->tf_r15);
+       printf("  trap 0x%08x\n",             hw_tf->tf_trapno);
+       printf("  gsbs 0x%016lx\n",           hw_tf->tf_gsbase);
+       printf("  fsbs 0x%016lx\n",           hw_tf->tf_fsbase);
+       printf("  err  0x--------%08x\n",     hw_tf->tf_err);
+       printf("  rip  0x%016lx\n",           hw_tf->tf_rip);
+       printf("  cs   0x------------%04x\n", hw_tf->tf_cs);
+       printf("  flag 0x%016lx\n",           hw_tf->tf_rflags);
+       printf("  rsp  0x%016lx\n",           hw_tf->tf_rsp);
+       printf("  ss   0x------------%04x\n", hw_tf->tf_ss);
+}
+
+void print_sw_tf(struct sw_trapframe *sw_tf)
+{
+       printf("[user] SW TRAP frame 0x%016p\n", sw_tf);
+       printf("  rbx  0x%016lx\n",           sw_tf->tf_rbx);
+       printf("  rbp  0x%016lx\n",           sw_tf->tf_rbp);
+       printf("  r12  0x%016lx\n",           sw_tf->tf_r12);
+       printf("  r13  0x%016lx\n",           sw_tf->tf_r13);
+       printf("  r14  0x%016lx\n",           sw_tf->tf_r14);
+       printf("  r15  0x%016lx\n",           sw_tf->tf_r15);
+       printf("  gsbs 0x%016lx\n",           sw_tf->tf_gsbase);
+       printf("  fsbs 0x%016lx\n",           sw_tf->tf_fsbase);
+       printf("  rip  0x%016lx\n",           sw_tf->tf_rip);
+       printf("  rsp  0x%016lx\n",           sw_tf->tf_rsp);
+       printf(" mxcsr 0x%08x\n",             sw_tf->tf_mxcsr);
+       printf(" fpucw 0x%04x\n",             sw_tf->tf_fpucw);
+}
+
+void print_user_context(struct user_context *ctx)
+{
+       if (ctx->type == ROS_HW_CTX)
+               print_hw_tf(&ctx->tf.hw_tf);
+       else if (ctx->type == ROS_SW_CTX)
+               print_sw_tf(&ctx->tf.sw_tf);
+       else
+               printf("Unknown context type %d\n", ctx->type);
+}
-- 
2.6.0.rc2.230.g3dd15c0

-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to