Re: [PATCH 2/2] x86/unwind: Make CONFIG_UNWINDER_ORC=y the default in kconfig for 64-bit

From: Josh Poimboeuf
Date: Mon Mar 19 2018 - 15:29:19 EST


On Mon, Mar 19, 2018 at 11:57:32AM -0700, Matthias Kaehlcke wrote:
> Hi Josh,
>
> El Fri, Oct 13, 2017 at 03:02:01PM -0500 Josh Poimboeuf ha dit:
>
> > The ORC unwinder has been stable in testing so far. Give it much wider
> > testing by making it the default in kconfig for x86_64. It's not yet
> > supported for 32-bit, so leave frame pointers as the default there.
> >
> > Suggested-by: Ingo Molnar <mingo@xxxxxxxxxx>
> > Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> > ---
>
> Building an upstream kernel with clang results in plenty of objtool
> warnings like these:
>
> drivers/gpu/drm/i915/dvo_ch7017.o: warning: objtool: ch7017_get_hw_state()+0x80: return with modified stack frame
> CC drivers/gpu/drm/i915/i915_oa_cflgt2.o
> ...
> CC drivers/gpu/drm/i915/intel_lpe_audio.o
> drivers/gpu/drm/i915/i915_gpu_error.o: warning: objtool: i915_error_printf()+0x6c: return with modified stack frame
> drivers/gpu/drm/i915/intel_display.o: warning: objtool: pipe_config_err()+0xa6: return with modified stack frame
>
> Bisecting shows that the warnings are generated since the ORC unwinder
> was made the default. Not sure if the issue is on the unwinder side
> or clang.
>
> Any ideas on what could be the problems?

Hi Matthias,

The ORC unwinder relies on objtool, which reverse engineers the compiled
code. This is objtool's first exposure to clang, so I'm not at all
surprised if it's getting confused.

Send me one of the .o files and I can take a quick look to see how bad
it is, but I'm guessing it's going to be a lot of work to make objtool
compatible with clang (and unfortunately I won't have the bandwidth to
work on that in the near term.)

In the meantime I'd recommend that you use frame pointers (and
CONFIG_STACK_VALIDATION=n) for clang-compiled kernels.

--
Josh