lkml.org 
[lkml]   [2022]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subjectclang memcpy calls
Hi folks,

so I've been looking at a recent objtool noinstr warning from clang
builds:

vmlinux.o: warning: objtool: sync_regs()+0x20: call to memcpy() leaves .noinstr.text section

The issue is that clang generates a memcpy() call when a struct copy
happens:

if (regs != eregs)
*regs = *eregs;

see below for asm output.

While gcc does simply generate an actual "rep; movsq".

So, how hard would it be to make clang do that too pls?

Oh, and another thing while we're comparing asm: I'd love for clang's
-fverbose-asm to issue interleaved C source lines too, like gcc does.

That's it - no pink pony - just "normal" wishes. :-)

GCC:
====

sync_regs:
.LASANPC4246:
# arch/x86/kernel/traps.c:770: {
movq %rdi, %rsi # tmp91, eregs
# arch/x86/kernel/traps.c:771: struct pt_regs *regs = (struct pt_regs *)this_cpu_read(cpu_current_top_of_stack) - 1;
#APP
# 771 "arch/x86/kernel/traps.c" 1
movq %gs:cpu_current_top_of_stack(%rip), %rax # cpu_current_top_of_stack, pfo_val__
# 0 "" 2
# arch/x86/kernel/traps.c:771: struct pt_regs *regs = (struct pt_regs *)this_cpu_read(cpu_current_top_of_stack) - 1;
#NO_APP
subq $168, %rax #, <retval>
# arch/x86/kernel/traps.c:772: if (regs != eregs)
cmpq %rdi, %rax # eregs, <retval>
je .L387 #,
# arch/x86/kernel/traps.c:773: *regs = *eregs;
movl $21, %ecx #, tmp89
movq %rax, %rdi # <retval>, <retval>
rep movsq
.L387:
# arch/x86/kernel/traps.c:775: }
ret

CLANG:
======

.section .noinstr.text,"ax",@progbits
.globl sync_regs # -- Begin function sync_regs
.p2align 6, 0x90
.type sync_regs,@function
sync_regs: # @sync_regs
# %bb.0: # %entry
pushq %rbx
#APP
movq %gs:cpu_current_top_of_stack(%rip), %rbx
#NO_APP
addq $-168, %rbx
cmpq %rdi, %rbx
je .LBB19_2
# %bb.1: # %if.then
movq %rdi, %rsi
movl $168, %edx
movq %rbx, %rdi
callq memcpy@PLT
.LBB19_2: # %if.end
movq %rbx, %rax
popq %rbx
retq


--
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette

\
 
 \ /
  Last update: 2022-03-24 12:20    [W:0.114 / U:0.408 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site