Messages in this thread Patch in this message | | | Subject | Re: [PATCH 1/2] x86/stacktrace: do not fail when regs on stack for ORC | From | Jiri Slaby <> | Date | Fri, 11 May 2018 09:01:30 +0200 |
| |
On 05/10/2018, 02:49 PM, Josh Poimboeuf wrote: > On Thu, May 10, 2018 at 02:33:03PM +0200, Jiri Slaby wrote: >> On 04/19/2018, 03:42 PM, Josh Poimboeuf wrote: >>> On Mon, Apr 16, 2018 at 05:16:53PM -0500, Josh Poimboeuf wrote: >>>> On Wed, Dec 20, 2017 at 08:07:17PM +0100, Jiri Slaby wrote: >>>>> On 12/20/2017, 06:45 PM, Josh Poimboeuf wrote: >>>>>> It might not be until 2018 though. But in the meantime you can go ahead >>>>>> and update your patches accordingly and then we can combine them for >>>>>> testing next year. >>>>> >>>>> I already did ;). So when you have that ready, I will send it on top >>>>> right after. >>>> >>>> Sorry for the delay... Here's a (lightly tested) patch. Can you test >>>> it with the latest version of your patches? >>> >>> This one actually compiles: >>> >>> From: Josh Poimboeuf <jpoimboe@redhat.com> >>> Subject: [PATCH] x86/unwind/orc: Detect the end of the stack >> >> With this patch applied, livepatching never completes. Kthreads are in >> the unpatched state forever. I have no details yet. > > Hm, I thought I had tested that, but now I'm not sure. Let me try it > again.
We need to propagate end from hints to orcs. This works for me™:
commit ad05e939b5809db104528731ed0147ad59466db5 Author: Jiri Slaby <jslaby@suse.cz> Date: Fri May 11 09:00:12 2018 +0200
objtool: take end hint into account
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 5409f6f..fef15ce 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -1109,6 +1109,7 @@ static int read_unwind_hints(struct objtool_file *file)
cfa->offset = hint->sp_offset; insn->state.type = hint->type; + insn->state.end = hint->end; }
return 0; diff --git a/tools/objtool/check.h b/tools/objtool/check.h index c6b68fc..000ecf3 100644 --- a/tools/objtool/check.h +++ b/tools/objtool/check.h @@ -30,6 +30,7 @@ struct insn_state { struct cfi_reg regs[CFI_NUM_REGS]; int stack_size; unsigned char type; + unsigned char end; bool bp_scratch; bool drap; int drap_reg, drap_offset; diff --git a/tools/objtool/orc_dump.c b/tools/objtool/orc_dump.c index c334382..a9bf1861 100644 --- a/tools/objtool/orc_dump.c +++ b/tools/objtool/orc_dump.c @@ -203,7 +203,9 @@ int orc_dump(const char *_objname)
print_reg(orc[i].bp_reg, orc[i].bp_offset);
- printf(" type:%s\n", orc_type_name(orc[i].type)); + printf(" type:%s", orc_type_name(orc[i].type)); + + printf(" end:%u\n", orc[i].end); }
elf_end(elf); diff --git a/tools/objtool/orc_gen.c b/tools/objtool/orc_gen.c index 18384d9..f413cc2 100644 --- a/tools/objtool/orc_gen.c +++ b/tools/objtool/orc_gen.c @@ -31,6 +31,9 @@ int create_orc(struct objtool_file *file) struct cfi_reg *cfa = &insn->state.cfa; struct cfi_reg *bp = &insn->state.regs[CFI_BP];
+ //if (insn->hint) + orc->end = insn->state.end; + if (cfa->base == CFI_UNDEFINED) { orc->sp_reg = ORC_REG_UNDEFINED; continue; thanks, -- js suse labs
| |