Bug 5302 - [ANCK-4.19][ck27.4][anolis7.9][x86_64]perf-sanity-tests:Basic_BPF_llvm_compile用例失败,error: unknown target triple 'bpf', please use -triple or -arch
Summary: [ANCK-4.19][ck27.4][anolis7.9][x86_64]perf-sanity-tests:Basic_BPF_llvm_compil...
Status: NEW
Alias: None
Product: Antest
Classification: Infrastructures
Component: 测试用例 (show other bugs) 测试用例
Version: unspecified
Hardware: All Linux
: P3-Medium S3-normal
Target Milestone: ---
Assignee: yunmeng365524
QA Contact: shuming
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-05-24 15:00 UTC by wangpingping
Modified: 2023-05-24 15:00 UTC (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description wangpingping alibaba_cloud_group 2023-05-24 15:00:04 UTC
[缺陷描述]:
perf-sanity-tests新增Basic_BPF_llvm_compile用例失败,报错:error: unknown target triple 'bpf', please use -triple or -arch

失败日志如下:
# perf test -v 38
38: LLVM search and compile                               :
38.1: Basic BPF llvm compile                              :
--- start ---
test child forked, pid 28151
Kernel build dir is set to /lib/modules/4.19.91-27.4.an7.x86_64/build
set env: KBUILD_DIR=/lib/modules/4.19.91-27.4.an7.x86_64/build
unset env: KBUILD_OPTS
include option is set to  -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include -I./arch/x86/include -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h
set env: NR_CPUS=8
set env: LINUX_VERSION_CODE=0x4135b
set env: CLANG_EXEC=/bin/clang
set env: CLANG_OPTIONS=-xc
set env: KERNEL_INC_OPTIONS= -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include -I./arch/x86/include -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h
set env: PERF_BPF_INC_OPTIONS=-I/usr/lib/perf/include/bpf
set env: WORKING_DIR=/lib/modules/4.19.91-27.4.an7.x86_64/build
set env: CLANG_SOURCE=-
llvm compiling command template: echo '/*
 * bpf-script-example.c
 * Test basic LLVM building
 */
#ifndef LINUX_VERSION_CODE
# error Need LINUX_VERSION_CODE
# error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig'
#endif
#define BPF_ANY 0
#define BPF_MAP_TYPE_ARRAY 2
#define BPF_FUNC_map_lookup_elem 1
#define BPF_FUNC_map_update_elem 2

static void *(*bpf_map_lookup_elem)(void *map, void *key) =
        (void *) BPF_FUNC_map_lookup_elem;
static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) =
        (void *) BPF_FUNC_map_update_elem;

struct bpf_map_def {
        unsigned int type;
        unsigned int key_size;
        unsigned int value_size;
        unsigned int max_entries;
};

#define SEC(NAME) __attribute__((section(NAME), used))
struct bpf_map_def SEC("maps") flip_table = {
        .type = BPF_MAP_TYPE_ARRAY,
        .key_size = sizeof(int),
        .value_size = sizeof(int),
        .max_entries = 1,
};

SEC("func=do_epoll_wait")
int bpf_func__SyS_epoll_pwait(void *ctx)
{
        int ind =0;
        int *flag = bpf_map_lookup_elem(&flip_table, &ind);
        int new_flag;
        if (!flag)
                return 0;
        /* flip flag and store back */
        new_flag = !*flag;
        bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY);
        return new_flag;
}
char _license[] SEC("license") = "GPL";
int _version SEC("version") = LINUX_VERSION_CODE;
' | $CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS -DLINUX_VERSION_CODE=$LINUX_VERSION_CODE $CLANG_OPTIONS $KERNEL_INC_OPTIONS $PERF_BPF_INC_OPTIONS -Wno-unused-value -Wno-pointer-sign -working-directory $WORKING_DIR -c "$CLANG_SOURCE" -target bpf $CLANG_EMIT_LLVM -O2 -o - $LLVM_OPTIONS_PIPE
llvm compiling command : echo '/*
 * bpf-script-example.c
 * Test basic LLVM building
 */
#ifndef LINUX_VERSION_CODE
# error Need LINUX_VERSION_CODE
# error Example: for 4.2 kernel, put 'clang-opt=-DLINUX_VERSION_CODE=0x40200 into llvm section of ~/.perfconfig'
#endif
#define BPF_ANY 0
#define BPF_MAP_TYPE_ARRAY 2
#define BPF_FUNC_map_lookup_elem 1
#define BPF_FUNC_map_update_elem 2

static void *(*bpf_map_lookup_elem)(void *map, void *key) =
        (void *) BPF_FUNC_map_lookup_elem;
static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) =
        (void *) BPF_FUNC_map_update_elem;

struct bpf_map_def {
        unsigned int type;
        unsigned int key_size;
        unsigned int value_size;
        unsigned int max_entries;
};

#define SEC(NAME) __attribute__((section(NAME), used))
struct bpf_map_def SEC(maps) flip_table = {
        .type = BPF_MAP_TYPE_ARRAY,
        .key_size = sizeof(int),
        .value_size = sizeof(int),
        .max_entries = 1,
};

SEC(func=do_epoll_wait)
int bpf_func__SyS_epoll_pwait(void *ctx)
{
        int ind =0;
        int *flag = bpf_map_lookup_elem(&flip_table, &ind);
        int new_flag;
        if (!flag)
                return 0;
        /* flip flag and store back */
        new_flag = !*flag;
        bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY);
        return new_flag;
}
char _license[] SEC(license) = GPL;
int _version SEC(version) = LINUX_VERSION_CODE;
' | /bin/clang -D__KERNEL__ -D__NR_CPUS__=8 -DLINUX_VERSION_CODE=0x4135b -xc   -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include -I./arch/x86/include -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h  -I/usr/lib/perf/include/bpf -Wno-unused-value -Wno-pointer-sign -working-directory /lib/modules/4.19.91-27.4.an7.x86_64/build -c - -target bpf  -O2 -o -
error: unknown target triple 'bpf', please use -triple or -arch
ERROR:  unable to compile -
Hint:   Check error message shown above.
Hint:   You can also pre-compile it into .o using:
                clang -target bpf -O2 -c -
        with proper -I and -D options.
Failed to compile test case: 'Basic BPF llvm compile'
test child finished with -1
---- end ----
LLVM search and compile subtest 1: FAILED!
38.2: kbuild searching                                    :
--- force skipped ---
LLVM search and compile subtest 2: Skip
38.3: Compile source for BPF prologue generation          :
--- force skipped ---
LLVM search and compile subtest 3: Skip
38.4: Compile source for BPF relocation                   :
--- force skipped ---
LLVM search and compile subtest 4: Skip

[复现概率]:
必现

[复现环境]:
内核:
4.19.91-27.4.an7.x86_64

# cat /etc/os-release
NAME="Anolis OS"
VERSION="7.9"
ID="anolis"
ID_LIKE="rhel fedora centos"
VERSION_ID="7.9"
PRETTY_NAME="Anolis OS 7.9"
ANSI_COLOR="0;31"
HOME_URL="https://openanolis.cn/"
BUG_REPORT_URL="https://bugs.openanolis.cn/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

rpm信息:
# perf -v
perf version 4.19.91-27.4.an7.x86_64.debug

# rpm -qa |grep clang
clang-3.4.2-9.el7.x86_64

[复现步骤]:
1.安装和内核匹配的perf版本;
2.perf test -v 38

[预期结果]:
用例执行成功

[实际结果]:
用例执行失败