Messages in this thread | | | Date | Tue, 19 May 2020 10:29:26 +0200 | From | Peter Zijlstra <> | Subject | Re: [patch V6 00/37] x86/entry: Rework leftovers and merge plan |
| |
On Mon, May 18, 2020 at 08:53:49PM +0200, Thomas Gleixner wrote: > Peter Zijlstra <peterz@infradead.org> writes: > > So on top of you entry-v8-full; I had to chase one of those > > instrumentation_end() escapes an (extended) basic block chase (again!). > > > > +#ifdef CONFIG_DEBUG_ENTRY > > Why this? We lose the kprobes runtime protection that way.
Oh bugger indeed. I forgot about that :-(
I added the CONFIG_DEBUG_ENTRY dependency to instrumentation_{begin,end}() because they now emit actual code, and I figured we shouldn't bother 'production' kernels with all them extra NOPs.
And then I figured (wrongly!) that since I have that, I might as well add noinstr to is.
> > +/* Section for code which can't be instrumented at all */ > > +#define noinstr \ > > + noinline notrace __attribute((__section__(".noinstr.text"))) > > + > > /* Begin/end of an instrumentation safe region */ > > -#define instrumentation_begin() ({ \ > > +#define instrumentation_begin() ({ \ > > asm volatile("%c0:\n\t" \ > > ".pushsection .discard.instr_begin\n\t" \ > > ".long %c0b - .\n\t" \ > > ".popsection\n\t" : : "i" (__COUNTER__)); > > Nifty.
Yeah, took a bit of fiddling because objtool is a bit weird vs UD2, but if you order it just right in the WARN thing it works :-)
You want a new delta without the noinstr thing on?
| |