forked from luck/tmp_suning_uos_patched
perf bench: Update the copies of x86's mem{cpy,set}_64.S
And update linux/linkage.h, which requires in turn that we make these files switch from ENTRY()/ENDPROC() to SYM_FUNC_START()/SYM_FUNC_END(): tools/perf/arch/arm64/tests/regs_load.S tools/perf/arch/arm/tests/regs_load.S tools/perf/arch/powerpc/tests/regs_load.S tools/perf/arch/x86/tests/regs_load.S We also need to switch SYM_FUNC_START_LOCAL() to SYM_FUNC_START() for the functions used directly by 'perf bench', and update tools/perf/check_headers.sh to ignore those changes when checking if the kernel original files drifted from the copies we carry. This is to get the changes from:6dcc5627f6
("x86/asm: Change all ENTRY+ENDPROC to SYM_FUNC_*")ef1e03152c
("x86/asm: Make some functions local")e9b9d020c4
("x86/asm: Annotate aliases") And address these tools/perf build warnings: Warning: Kernel ABI header at 'tools/arch/x86/lib/memcpy_64.S' differs from latest version at 'arch/x86/lib/memcpy_64.S' diff -u tools/arch/x86/lib/memcpy_64.S arch/x86/lib/memcpy_64.S Warning: Kernel ABI header at 'tools/arch/x86/lib/memset_64.S' differs from latest version at 'arch/x86/lib/memset_64.S' diff -u tools/arch/x86/lib/memset_64.S arch/x86/lib/memset_64.S Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Jiri Slaby <jslaby@suse.cz> Cc: Namhyung Kim <namhyung@kernel.org> Link: https://lkml.kernel.org/n/tip-tay3l8x8k11p7y3qcpqh9qh5@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
77b91c1a52
commit
bd5c6b81dd
|
@ -28,8 +28,8 @@
|
|||
* Output:
|
||||
* rax original destination
|
||||
*/
|
||||
ENTRY(__memcpy)
|
||||
ENTRY(memcpy)
|
||||
SYM_FUNC_START_ALIAS(__memcpy)
|
||||
SYM_FUNC_START_LOCAL(memcpy)
|
||||
ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \
|
||||
"jmp memcpy_erms", X86_FEATURE_ERMS
|
||||
|
||||
|
@ -41,8 +41,8 @@ ENTRY(memcpy)
|
|||
movl %edx, %ecx
|
||||
rep movsb
|
||||
ret
|
||||
ENDPROC(memcpy)
|
||||
ENDPROC(__memcpy)
|
||||
SYM_FUNC_END(memcpy)
|
||||
SYM_FUNC_END_ALIAS(__memcpy)
|
||||
EXPORT_SYMBOL(memcpy)
|
||||
EXPORT_SYMBOL(__memcpy)
|
||||
|
||||
|
@ -50,14 +50,14 @@ EXPORT_SYMBOL(__memcpy)
|
|||
* memcpy_erms() - enhanced fast string memcpy. This is faster and
|
||||
* simpler than memcpy. Use memcpy_erms when possible.
|
||||
*/
|
||||
ENTRY(memcpy_erms)
|
||||
SYM_FUNC_START(memcpy_erms)
|
||||
movq %rdi, %rax
|
||||
movq %rdx, %rcx
|
||||
rep movsb
|
||||
ret
|
||||
ENDPROC(memcpy_erms)
|
||||
SYM_FUNC_END(memcpy_erms)
|
||||
|
||||
ENTRY(memcpy_orig)
|
||||
SYM_FUNC_START(memcpy_orig)
|
||||
movq %rdi, %rax
|
||||
|
||||
cmpq $0x20, %rdx
|
||||
|
@ -182,7 +182,7 @@ ENTRY(memcpy_orig)
|
|||
|
||||
.Lend:
|
||||
retq
|
||||
ENDPROC(memcpy_orig)
|
||||
SYM_FUNC_END(memcpy_orig)
|
||||
|
||||
#ifndef CONFIG_UML
|
||||
|
||||
|
@ -193,7 +193,7 @@ MCSAFE_TEST_CTL
|
|||
* Note that we only catch machine checks when reading the source addresses.
|
||||
* Writes to target are posted and don't generate machine checks.
|
||||
*/
|
||||
ENTRY(__memcpy_mcsafe)
|
||||
SYM_FUNC_START(__memcpy_mcsafe)
|
||||
cmpl $8, %edx
|
||||
/* Less than 8 bytes? Go to byte copy loop */
|
||||
jb .L_no_whole_words
|
||||
|
@ -260,7 +260,7 @@ ENTRY(__memcpy_mcsafe)
|
|||
xorl %eax, %eax
|
||||
.L_done:
|
||||
ret
|
||||
ENDPROC(__memcpy_mcsafe)
|
||||
SYM_FUNC_END(__memcpy_mcsafe)
|
||||
EXPORT_SYMBOL_GPL(__memcpy_mcsafe)
|
||||
|
||||
.section .fixup, "ax"
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
*
|
||||
* rax original destination
|
||||
*/
|
||||
ENTRY(memset)
|
||||
ENTRY(__memset)
|
||||
SYM_FUNC_START_ALIAS(memset)
|
||||
SYM_FUNC_START(__memset)
|
||||
/*
|
||||
* Some CPUs support enhanced REP MOVSB/STOSB feature. It is recommended
|
||||
* to use it when possible. If not available, use fast string instructions.
|
||||
|
@ -42,8 +42,8 @@ ENTRY(__memset)
|
|||
rep stosb
|
||||
movq %r9,%rax
|
||||
ret
|
||||
ENDPROC(memset)
|
||||
ENDPROC(__memset)
|
||||
SYM_FUNC_END(__memset)
|
||||
SYM_FUNC_END_ALIAS(memset)
|
||||
|
||||
/*
|
||||
* ISO C memset - set a memory block to a byte value. This function uses
|
||||
|
@ -56,16 +56,16 @@ ENDPROC(__memset)
|
|||
*
|
||||
* rax original destination
|
||||
*/
|
||||
ENTRY(memset_erms)
|
||||
SYM_FUNC_START(memset_erms)
|
||||
movq %rdi,%r9
|
||||
movb %sil,%al
|
||||
movq %rdx,%rcx
|
||||
rep stosb
|
||||
movq %r9,%rax
|
||||
ret
|
||||
ENDPROC(memset_erms)
|
||||
SYM_FUNC_END(memset_erms)
|
||||
|
||||
ENTRY(memset_orig)
|
||||
SYM_FUNC_START(memset_orig)
|
||||
movq %rdi,%r10
|
||||
|
||||
/* expand byte value */
|
||||
|
@ -136,4 +136,4 @@ ENTRY(memset_orig)
|
|||
subq %r8,%rdx
|
||||
jmp .Lafter_bad_alignment
|
||||
.Lfinal:
|
||||
ENDPROC(memset_orig)
|
||||
SYM_FUNC_END(memset_orig)
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
.text
|
||||
.type perf_regs_load,%function
|
||||
ENTRY(perf_regs_load)
|
||||
SYM_FUNC_START(perf_regs_load)
|
||||
str r0, [r0, #R0]
|
||||
str r1, [r0, #R1]
|
||||
str r2, [r0, #R2]
|
||||
|
@ -56,4 +56,4 @@ ENTRY(perf_regs_load)
|
|||
str lr, [r0, #PC] // store pc as lr in order to skip the call
|
||||
// to this function
|
||||
mov pc, lr
|
||||
ENDPROC(perf_regs_load)
|
||||
SYM_FUNC_END(perf_regs_load)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#define LDR_REG(r) ldr x##r, [x0, 8 * r]
|
||||
#define SP (8 * 31)
|
||||
#define PC (8 * 32)
|
||||
ENTRY(perf_regs_load)
|
||||
SYM_FUNC_START(perf_regs_load)
|
||||
STR_REG(0)
|
||||
STR_REG(1)
|
||||
STR_REG(2)
|
||||
|
@ -44,4 +44,4 @@ ENTRY(perf_regs_load)
|
|||
str x30, [x0, #PC]
|
||||
LDR_REG(1)
|
||||
ret
|
||||
ENDPROC(perf_regs_load)
|
||||
SYM_FUNC_END(perf_regs_load)
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
.text
|
||||
#ifdef HAVE_ARCH_X86_64_SUPPORT
|
||||
ENTRY(perf_regs_load)
|
||||
SYM_FUNC_START(perf_regs_load)
|
||||
movq %rax, AX(%rdi)
|
||||
movq %rbx, BX(%rdi)
|
||||
movq %rcx, CX(%rdi)
|
||||
|
@ -60,9 +60,9 @@ ENTRY(perf_regs_load)
|
|||
movq %r14, R14(%rdi)
|
||||
movq %r15, R15(%rdi)
|
||||
ret
|
||||
ENDPROC(perf_regs_load)
|
||||
SYM_FUNC_END(perf_regs_load)
|
||||
#else
|
||||
ENTRY(perf_regs_load)
|
||||
SYM_FUNC_START(perf_regs_load)
|
||||
push %edi
|
||||
movl 8(%esp), %edi
|
||||
movl %eax, AX(%edi)
|
||||
|
@ -88,7 +88,7 @@ ENTRY(perf_regs_load)
|
|||
movl $0, FS(%edi)
|
||||
movl $0, GS(%edi)
|
||||
ret
|
||||
ENDPROC(perf_regs_load)
|
||||
SYM_FUNC_END(perf_regs_load)
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -110,8 +110,8 @@ for i in $FILES; do
|
|||
done
|
||||
|
||||
# diff with extra ignore lines
|
||||
check arch/x86/lib/memcpy_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>"'
|
||||
check arch/x86/lib/memset_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>"'
|
||||
check arch/x86/lib/memcpy_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>" -I"^SYM_FUNC_START\(_LOCAL\)*(memcpy_\(erms\|orig\))"'
|
||||
check arch/x86/lib/memset_64.S '-I "^EXPORT_SYMBOL" -I "^#include <asm/export.h>" -I"^SYM_FUNC_START\(_LOCAL\)*(memset_\(erms\|orig\))"'
|
||||
check include/uapi/asm-generic/mman.h '-I "^#include <\(uapi/\)*asm-generic/mman-common\(-tools\)*.h>"'
|
||||
check include/uapi/linux/mman.h '-I "^#include <\(uapi/\)*asm/mman.h>"'
|
||||
check include/linux/ctype.h '-I "isdigit("'
|
||||
|
|
|
@ -5,10 +5,93 @@
|
|||
|
||||
/* linkage.h ... for including arch/x86/lib/memcpy_64.S */
|
||||
|
||||
#define ENTRY(name) \
|
||||
.globl name; \
|
||||
name:
|
||||
/* Some toolchains use other characters (e.g. '`') to mark new line in macro */
|
||||
#ifndef ASM_NL
|
||||
#define ASM_NL ;
|
||||
#endif
|
||||
|
||||
#define ENDPROC(name)
|
||||
#ifndef __ALIGN
|
||||
#define __ALIGN .align 4,0x90
|
||||
#define __ALIGN_STR ".align 4,0x90"
|
||||
#endif
|
||||
|
||||
/* SYM_T_FUNC -- type used by assembler to mark functions */
|
||||
#ifndef SYM_T_FUNC
|
||||
#define SYM_T_FUNC STT_FUNC
|
||||
#endif
|
||||
|
||||
/* SYM_A_* -- align the symbol? */
|
||||
#define SYM_A_ALIGN ALIGN
|
||||
|
||||
/* SYM_L_* -- linkage of symbols */
|
||||
#define SYM_L_GLOBAL(name) .globl name
|
||||
#define SYM_L_LOCAL(name) /* nothing */
|
||||
|
||||
#define ALIGN __ALIGN
|
||||
|
||||
/* === generic annotations === */
|
||||
|
||||
/* SYM_ENTRY -- use only if you have to for non-paired symbols */
|
||||
#ifndef SYM_ENTRY
|
||||
#define SYM_ENTRY(name, linkage, align...) \
|
||||
linkage(name) ASM_NL \
|
||||
align ASM_NL \
|
||||
name:
|
||||
#endif
|
||||
|
||||
/* SYM_START -- use only if you have to */
|
||||
#ifndef SYM_START
|
||||
#define SYM_START(name, linkage, align...) \
|
||||
SYM_ENTRY(name, linkage, align)
|
||||
#endif
|
||||
|
||||
/* SYM_END -- use only if you have to */
|
||||
#ifndef SYM_END
|
||||
#define SYM_END(name, sym_type) \
|
||||
.type name sym_type ASM_NL \
|
||||
.size name, .-name
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SYM_FUNC_START_ALIAS -- use where there are two global names for one
|
||||
* function
|
||||
*/
|
||||
#ifndef SYM_FUNC_START_ALIAS
|
||||
#define SYM_FUNC_START_ALIAS(name) \
|
||||
SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
|
||||
#endif
|
||||
|
||||
/* SYM_FUNC_START -- use for global functions */
|
||||
#ifndef SYM_FUNC_START
|
||||
/*
|
||||
* The same as SYM_FUNC_START_ALIAS, but we will need to distinguish these two
|
||||
* later.
|
||||
*/
|
||||
#define SYM_FUNC_START(name) \
|
||||
SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
|
||||
#endif
|
||||
|
||||
/* SYM_FUNC_START_LOCAL -- use for local functions */
|
||||
#ifndef SYM_FUNC_START_LOCAL
|
||||
/* the same as SYM_FUNC_START_LOCAL_ALIAS, see comment near SYM_FUNC_START */
|
||||
#define SYM_FUNC_START_LOCAL(name) \
|
||||
SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN)
|
||||
#endif
|
||||
|
||||
/* SYM_FUNC_END_ALIAS -- the end of LOCAL_ALIASed or ALIASed function */
|
||||
#ifndef SYM_FUNC_END_ALIAS
|
||||
#define SYM_FUNC_END_ALIAS(name) \
|
||||
SYM_END(name, SYM_T_FUNC)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SYM_FUNC_END -- the end of SYM_FUNC_START_LOCAL, SYM_FUNC_START,
|
||||
* SYM_FUNC_START_WEAK, ...
|
||||
*/
|
||||
#ifndef SYM_FUNC_END
|
||||
/* the same as SYM_FUNC_END_ALIAS, see comment near SYM_FUNC_START */
|
||||
#define SYM_FUNC_END(name) \
|
||||
SYM_END(name, SYM_T_FUNC)
|
||||
#endif
|
||||
|
||||
#endif /* PERF_LINUX_LINKAGE_H_ */
|
||||
|
|
Loading…
Reference in New Issue
Block a user