On Mon, May 2, 2016 at 1:00 PM, Jiri Kosina <jikos@xxxxxxxxxx> wrote: > On Mon, 2 May 2016, Jiri Kosina wrote: > >> > FWIW, I just tried this: >> > >> > static bool is_entry_text(unsigned long addr) >> > { >> > return addr >= (unsigned long)__entry_text_start && >> > addr < (unsigned long)__entry_text_end; >> > } >> > >> > it works. So the entry code is already annotated reasonably well :) >> > >> > I just hacked it up here: >> > >> > https://git.kernel.org/cgit/linux/kernel/git/luto/linux.git/commit/?h=stack&id=085eacfe0edfc18768e48340084415dba9a6bd21 >> > >> > and it seems to work, at least for page faults. A better >> > implementation would print out the entire contents of pt_regs so that >> > people reading the stack trace will know the registers at the time of >> > the exception, which might be helpful. >> >> Sorry for being dense, but how do you distinguish here between a "real" >> kernel entry, that pushes pt_regs, and any "non-entry" function call that >> passes pt_regs around? > > Umm, actually, the more tricky part is the other way around -- how do you > make sure that whenever you are calling out from a code between > __entry_text_start and __entry_text_end, pt_regs will be at the place > you're looking for it? How's that guaranteed? It's not guaranteed in my code. I think we'd want to add a little table of call sites and their pt_regs offsets. This was just meant to test that the general idea works (and it does indeed generate better traces than the stock kernel, which gets it unconditionally wrong). --Andy > > Thanks, > > -- > Jiri Kosina > SUSE Labs > -- Andy Lutomirski AMA Capital Management, LLC -- To unsubscribe from this list: send the line "unsubscribe linux-s390" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html