Calling dump_stack() in response to failing assertions can be useful to pinpoint where things started going awry. This is also done in TLSF code, but dump_stack actually calls malloc, because it uses the logging functions instead of printing directly to console. To avoid circular dependencies and dump_stack() falsifying debugging results, let's use eprintf instead of pr_*: That way, the output still makes it to stderr, but it's no longer logged. This also removes the orange WARNING: prefix, but that can be added back if needed. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- arch/arm/lib32/unwind.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/arch/arm/lib32/unwind.c b/arch/arm/lib32/unwind.c index 6f73cb1b7300..c355bba1b7a4 100644 --- a/arch/arm/lib32/unwind.c +++ b/arch/arm/lib32/unwind.c @@ -65,9 +65,9 @@ static void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame) { #ifdef CONFIG_KALLSYMS - pr_warning("[<%08lx>] (%pS) from [<%08lx>] (%pS)\n", where, (void *)where, from, (void *)from); + eprintf("[<%08lx>] (%pS) from [<%08lx>] (%pS)\n", where, (void *)where, from, (void *)from); #else - pr_warning("Function entered at [<%08lx>] from [<%08lx>]\n", where, from); + eprintf("Function entered at [<%08lx>] from [<%08lx>]\n", where, from); #endif } @@ -124,7 +124,7 @@ static const struct unwind_idx *search_index(unsigned long addr, if (likely(start->addr_offset <= addr_prel31)) return start; else { - pr_warning("unwind: Unknown symbol address %08lx\n", addr); + eprintf("unwind: Unknown symbol address %08lx\n", addr); return NULL; } } @@ -177,7 +177,7 @@ static unsigned long unwind_get_byte(struct unwind_ctrl_block *ctrl) unsigned long ret; if (ctrl->entries <= 0) { - pr_warning("unwind: Corrupt unwind table\n"); + eprintf("unwind: Corrupt unwind table\n"); return 0; } @@ -214,7 +214,7 @@ static int unwind_exec_insn(struct unwind_ctrl_block *ctrl) insn = (insn << 8) | unwind_get_byte(ctrl); mask = insn & 0x0fff; if (mask == 0) { - pr_warning("unwind: 'Refuse to unwind' instruction %04lx\n", + eprintf("unwind: 'Refuse to unwind' instruction %04lx\n", insn); return -URC_FAILURE; } @@ -253,7 +253,7 @@ static int unwind_exec_insn(struct unwind_ctrl_block *ctrl) int reg = 0; if (mask == 0 || mask & 0xf0) { - pr_warning("unwind: Spare encoding %04lx\n", + eprintf("unwind: Spare encoding %04lx\n", (insn << 8) | mask); return -URC_FAILURE; } @@ -271,7 +271,7 @@ static int unwind_exec_insn(struct unwind_ctrl_block *ctrl) ctrl->vrs[SP] += 0x204 + (uleb128 << 2); } else { - pr_warning("unwind: Unhandled instruction %02lx\n", insn); + eprintf("unwind: Unhandled instruction %02lx\n", insn); return -URC_FAILURE; } @@ -303,7 +303,7 @@ int unwind_frame(struct stackframe *frame) idx = unwind_find_idx(frame->pc); if (!idx) { - pr_warning("unwind: Index not found %08lx\n", frame->pc); + eprintf("unwind: Index not found %08lx\n", frame->pc); return -URC_FAILURE; } @@ -322,7 +322,7 @@ int unwind_frame(struct stackframe *frame) /* only personality routine 0 supported in the index */ ctrl.insn = &idx->insn; else { - pr_warning("unwind: Unsupported personality routine %08lx in the index at %p\n", + eprintf("unwind: Unsupported personality routine %08lx in the index at %p\n", idx->insn, idx); return -URC_FAILURE; } @@ -335,7 +335,7 @@ int unwind_frame(struct stackframe *frame) ctrl.byte = 1; ctrl.entries = 1 + ((*ctrl.insn & 0x00ff0000) >> 16); } else { - pr_warning("unwind: Unsupported personality routine %08lx at %p\n", + eprintf("unwind: Unsupported personality routine %08lx at %p\n", *ctrl.insn, ctrl.insn); return -URC_FAILURE; } -- 2.39.2