Re: gcc-8 objtool warnings

From: Arnd Bergmann
Date: Thu Aug 24 2017 - 06:14:36 EST


On Wed, Aug 23, 2017 at 6:01 PM, Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote:
> On Wed, Aug 23, 2017 at 03:38:02PM +0200, Arnd Bergmann wrote:
>> On Wed, Aug 23, 2017 at 2:48 PM, Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote:
>> > On Wed, Aug 23, 2017 at 02:22:34PM +0200, Arnd Bergmann wrote:
>> >> ...
>> >>
>> >> 0000000000000000 <put_cred_rcu.cold.1>:
>> >> 0: e8 00 00 00 00 callq 5 <put_cred_rcu.cold.1+0x5>
>> >> 1: R_X86_64_PC32 __sanitizer_cov_trace_pc-0x4
>> >> 5: 44 8b 8b 64 ff ff ff mov -0x9c(%rbx),%r9d
>> >> c: 48 8b 8b 68 ff ff ff mov -0x98(%rbx),%rcx
>> >> 13: 44 89 e2 mov %r12d,%edx
>> >> 16: 44 8b 83 60 ff ff ff mov -0xa0(%rbx),%r8d
>> >> 1d: 4c 89 ee mov %r13,%rsi
>> >> 20: 48 c7 c7 00 00 00 00 mov $0x0,%rdi
>> >> 23: R_X86_64_32S .rodata.str1.8+0x28
>> >> 27: e8 00 00 00 00 callq 2c <__kstrtab_creds_are_invalid+0x3>
>> >> 28: R_X86_64_PC32 panic-0x4
>> >
>> > Thanks. Can you send me one of the .o files?
>>
>> Attached here now.
>
> Ok, looks like I'll need to add support for this new pattern (jumping to
> a .cold section in .text.unlikely).
>
> I'm also about to start work on fixing that other issue you found with
> GCC's inefficient update of the stack pointer.
>
> I really appreciate your finding all these warnings (and getting advance
> GCC 8 testing). Thanks again!

No worries. I've disabled the four warnings in objtool that triggered now
and almost all are gone, but I still get a few warnings after doing additional
randconfig builds.

find rand*/ -name \*success -mtime -2 -size +0c | xargs grep -v
"sibling call from callable instruction" | grep -v "call without frame
pointer save/setup" | grep -v "return with modified stack frame" | cut
-f 3- -d: | sort | uniq -c
1 warning: objtool: adv76xx_log_status.cold.34()+0x338: stack
state mismatch: reg1[14]=-1+0 reg2[14]=-2-24
1 warning: objtool: bnx2x_panic_dump.cold.125()+0x1c6:
unsupported stack register modification
1 warning: objtool: cx25840_probe.cold.9()+0x189: stack state
mismatch: reg1[3]=-2-16 reg2[3]=-1+0
1 warning: objtool: hpet_alloc.cold.6()+0x39d: stack state
mismatch: reg1[14]=-1+0 reg2[14]=-2-16
1 warning: objtool: init_test_probes.cold.6()+0x3ae: leave
instruction with modified stack frame
4 warning: objtool: lkdtm_ATOMIC_TIMING.cold.0()+0x0: leave
instruction with modified stack frame
4 warning: objtool: lkdtm_ATOMIC_TIMING.cold.4()+0x0: leave
instruction with modified stack frame
2 warning: objtool: lkdtm_REFCOUNT_TIMING.cold.1()+0x0: leave
instruction with modified stack frame
3 warning: objtool: lkdtm_REFCOUNT_TIMING.cold.5()+0x0: leave
instruction with modified stack frame
1 warning: objtool: mgsl_add_device.cold.27()+0x82: stack state
mismatch: reg1[15]=-2-16 reg2[15]=-1+0
1 warning: objtool: mgsl_add_device.cold.41()+0x82: stack state
mismatch: reg1[15]=-2-16 reg2[15]=-1+0
1 warning: objtool: mlx5_eswitch_disable_sriov.cold.19()+0xd0:
stack state mismatch: reg1[13]=-1+0 reg2[13]=-2-16
1 warning: objtool: __oom_reap_task_mm.cold.10()+0x0: stack
state mismatch: cfa1=6+16 cfa2=7+8
1 warning: objtool: __oom_reap_task_mm.cold.12()+0x0: stack
state mismatch: cfa1=6+16 cfa2=7+8
2 warning: objtool: __oom_reap_task_mm.cold.3()+0x0: stack
state mismatch: cfa1=6+16 cfa2=7+8
1 warning: objtool: __oom_reap_task_mm.cold.31()+0x0: stack
state mismatch: cfa1=6+16 cfa2=7+8
1 warning: objtool: __oom_reap_task_mm.cold.7()+0x0: stack
state mismatch: cfa1=6+16 cfa2=7+8
2 warning: objtool: ppp_print_buffer.cold.7()+0x0: stack state
mismatch: cfa1=6+16 cfa2=7+8
1 warning: objtool: rndis_msg_parser.cold.6()+0x0: stack state
mismatch: cfa1=6+16 cfa2=7+8
6 warning: objtool: rodata_test.cold.0()+0x31: leave
instruction with modified stack frame
3 warning: objtool: rodata_test.cold.0()+0x4a: leave
instruction with modified stack frame
1 warning: objtool: show_free_areas.cold.110()+0x394: stack
state mismatch: reg1[15]=-1+0 reg2[15]=-2-32
1 warning: objtool: show_free_areas.cold.116()+0x239: stack
state mismatch: reg1[12]=-1+0 reg2[12]=-2-32
1 warning: objtool: show_free_areas.cold.129()+0x23a: stack
state mismatch: reg1[13]=-1+0 reg2[13]=-2-16
1 warning: objtool: show_free_areas.cold.18()+0x3aa: stack
state mismatch: reg1[12]=-1+0 reg2[12]=-2-16
1 warning: objtool: show_free_areas.cold.21()+0x3c1: stack
state mismatch: reg1[12]=-1+0 reg2[12]=-2-32
1 warning: objtool: show_free_areas.cold.21()+0x3e2: stack
state mismatch: reg1[12]=-1+0 reg2[12]=-2-32
1 warning: objtool: show_free_areas.cold.24()+0x3c1: stack
state mismatch: reg1[12]=-1+0 reg2[12]=-2-32
1 warning: objtool: show_free_areas.cold.27()+0x239: stack
state mismatch: reg1[13]=-1+0 reg2[13]=-2-16
1 warning: objtool: show_free_areas.cold.30()+0x239: stack
state mismatch: reg1[13]=-1+0 reg2[13]=-2-16
1 warning: objtool: show_free_areas.cold.31()+0x23c: stack
state mismatch: reg1[13]=-1+0 reg2[13]=-2-56
1 warning: objtool: show_free_areas.cold.34()+0x24b: stack
state mismatch: reg1[13]=-1+0 reg2[13]=-2-16
1 warning: objtool: snic_alloc_vnic_res.cold.2()+0x2b1: stack
state mismatch: reg1[13]=-1+0 reg2[13]=-2-24
1 warning: objtool: snic_alloc_vnic_res.cold.2()+0x352: stack
state mismatch: reg1[13]=-1+0 reg2[13]=-2-24
1 warning: objtool: syscon_poweroff.cold.0()+0x10: leave
instruction with modified stack frame
1 warning: objtool: tda18271c2_rf_cal_init.cold.13()+0x156:
stack state mismatch: reg1[13]=-1+0 reg2[13]=-2-24
3 warning: objtool: tda18271c2_rf_cal_init.cold.6()+0x156:
stack state mismatch: reg1[13]=-1+0 reg2[13]=-2-24
1 warning: objtool: tea5761_autodetection.cold.1()+0x3c: leave
instruction with modified stack frame
1 warning: objtool: tea5761_autodetection.cold.5()+0x3c: leave
instruction with modified stack frame
1 warning: objtool: test.cold.1()+0x7e: stack state mismatch:
reg1[3]=-1+0 reg2[3]=-2-32
1 warning: objtool: test.cold.3()+0x6e: stack state mismatch:
reg1[12]=-1+0 reg2[12]=-2-32
1 warning: objtool: test.cold.4()+0x7e: stack state mismatch:
reg1[3]=-1+0 reg2[3]=-2-32
1 warning: objtool: test.cold.5()+0x90: stack state mismatch:
reg1[3]=-1+0 reg2[3]=-2-32
1 warning: objtool: .text.unlikely: unexpected end of section
1 warning: objtool: __twa_shutdown.cold.26()+0x1a: leave
instruction with modified stack frame
1 warning: objtool: __twl_shutdown.cold.10()+0x1c: leave
instruction with modified stack frame
1 warning: objtool: __twl_shutdown.cold.19()+0x1c: leave
instruction with modified stack frame
1 warning: objtool: vc4_hvs_dump_state.cold.1()+0x1e: stack
state mismatch: reg1[14]=-1+0 reg2[14]=-2-16
1 warning: objtool: vt596_dump_regs.cold.1()+0x1a: stack state
mismatch: cfa1=6+16 cfa2=7+8
1 warning: objtool: wcn36xx_smd_start.cold.20()+0x32:
unsupported stack register modification
1 warning: objtool: wsm_cmd_send.cold.18()+0x48: stack state
mismatch: reg1[14]=-1+0 reg2[14]=-2-24
1 warning: objtool: xen_callback_vector.cold.18()+0x92: leave
instruction with modified stack frame
1 warning: objtool: xlvbd_flush.cold.20()+0x3c: leave
instruction with modified stack frame
1 warning: objtool: xlvbd_flush.cold.5()+0x3f: leave
instruction with modified stack frame

I'll send you some more object files as private mail.

Arnd