From d3b3facd129e4f02889855a2fc9339ef652c0bcf Mon Sep 17 00:00:00 2001 From: eabdullin Date: Thu, 28 Mar 2024 09:49:49 +0000 Subject: [PATCH] import CS bpftrace-0.19.1-1.el9 --- .bpftrace.metadata | 2 +- .gitignore | 2 +- ...17.0-0001-Parse-kernel-configuration.patch | 160 ------------------ ...e-the-KASAN_SHADOW_SCALE_SHIFT-macro.patch | 103 ----------- ...onal-in-CodegenLLVM-CodegenLLVM-call.patch | 44 ----- ....0-0004-Set-cmake-policy-for-CMP0057.patch | 46 ----- ...e-Raise-max-llvm-major-version-to-16.patch | 26 --- ...rch64-fixes-statsnoop-and-opensnoop.patch} | 18 +- SPECS/bpftrace.spec | 15 +- 9 files changed, 18 insertions(+), 398 deletions(-) delete mode 100644 SOURCES/bpftrace-0.17.0-0001-Parse-kernel-configuration.patch delete mode 100644 SOURCES/bpftrace-0.17.0-0002-arm64-define-the-KASAN_SHADOW_SCALE_SHIFT-macro.patch delete mode 100644 SOURCES/bpftrace-0.17.0-0003-ast-Use-std-optional-in-CodegenLLVM-CodegenLLVM-call.patch delete mode 100644 SOURCES/bpftrace-0.17.0-0004-Set-cmake-policy-for-CMP0057.patch delete mode 100644 SOURCES/bpftrace-0.17.0-0005-cmake-Raise-max-llvm-major-version-to-16.patch rename SOURCES/{bpftrace-0.17.0-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch => bpftrace-0.19.1-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch} (82%) diff --git a/.bpftrace.metadata b/.bpftrace.metadata index ce1ab26..2952293 100644 --- a/.bpftrace.metadata +++ b/.bpftrace.metadata @@ -1,2 +1,2 @@ -397cba881b0b7787869c1e51adeb22c169be9168 SOURCES/bpftrace-0.17.0.tar.gz +b17c71c9c5a78cbe152b1346e6d18f29eb6e4b9e SOURCES/bpftrace-0.19.1.tar.gz 974ee680e1eb103c415832d69742e194b661da5c SOURCES/cereal-1.3.2.tar.gz diff --git a/.gitignore b/.gitignore index bd7ba77..7e70cee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -SOURCES/bpftrace-0.17.0.tar.gz +SOURCES/bpftrace-0.19.1.tar.gz SOURCES/cereal-1.3.2.tar.gz diff --git a/SOURCES/bpftrace-0.17.0-0001-Parse-kernel-configuration.patch b/SOURCES/bpftrace-0.17.0-0001-Parse-kernel-configuration.patch deleted file mode 100644 index 819810c..0000000 --- a/SOURCES/bpftrace-0.17.0-0001-Parse-kernel-configuration.patch +++ /dev/null @@ -1,160 +0,0 @@ -From 79d849a3a0462ab0a33cbf208e27e28d05eab213 Mon Sep 17 00:00:00 2001 -From: Viktor Malik -Date: Fri, 3 Mar 2023 08:28:54 +0100 -Subject: [PATCH 1/2] Parse kernel configuration - -In future, it may (and will) be useful to have access to the running -kernel configuration, e.g. to add config-specific compilation options to -ClangParser. - -This adds and fills a new map BPFtrace::kconfig that maps config options -to their values. Both the option name and the value are strings. The -configuration is parsed from one of two sources: -- /boot/config-$(uname -r) -- /proc/config.gz - -For testing purposes, the config filename may be passed through the -BPFTRACE_KCONFIG_TEST env variable. ---- - src/bpftrace.h | 1 + - src/utils.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ - src/utils.h | 12 ++++++++++++ - tests/utils.cpp | 19 +++++++++++++++++++ - 4 files changed, 82 insertions(+) - -diff --git a/src/bpftrace.h b/src/bpftrace.h -index a6a8c00b..94587bff 100644 ---- a/src/bpftrace.h -+++ b/src/bpftrace.h -@@ -168,6 +168,7 @@ public: - std::map helper_use_loc_; - // mapping traceable functions to modules (or "vmlinux") that they appear in - FuncsModulesMap traceable_funcs_; -+ KConfig kconfig; - std::vector> attached_probes_; - - std::map> pcap_writers; -diff --git a/src/utils.cpp b/src/utils.cpp -index 2d9c6695..54c8f054 100644 ---- a/src/utils.cpp -+++ b/src/utils.cpp -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - - #include - -@@ -178,6 +179,55 @@ StdioSilencer::~StdioSilencer() - } - } - -+KConfig::KConfig() -+{ -+ std::vector config_locs; -+ -+ // Try to get the config from BPFTRACE_KCONFIG_TEST env -+ // If not set, use the set of default locations -+ const char *path_env = std::getenv("BPFTRACE_KCONFIG_TEST"); -+ if (path_env) -+ config_locs = { std::string(path_env) }; -+ else -+ { -+ struct utsname utsname; -+ if (uname(&utsname) < 0) -+ return; -+ config_locs = { -+ "/boot/config-" + std::string(utsname.release), -+ "/proc/config.gz", -+ }; -+ } -+ -+ for (auto &path : config_locs) -+ { -+ // gzopen/gzgets handle both uncompressed and compressed files -+ gzFile file = gzopen(path.c_str(), "r"); -+ if (!file) -+ continue; -+ -+ char buf[4096]; -+ while (gzgets(file, buf, sizeof(buf))) -+ { -+ std::string option(buf); -+ if (option.find("CONFIG_") == 0) -+ { -+ // trim trailing '\n' -+ if (option[option.length() - 1] == '\n') -+ option = option.substr(0, option.length() - 1); -+ -+ auto split = option.find("="); -+ if (split == std::string::npos) -+ continue; -+ -+ config.emplace(option.substr(0, split), option.substr(split + 1)); -+ } -+ } -+ gzclose(file); -+ } -+} -+ -+ - bool get_uint64_env_var(const std::string &str, uint64_t &dest) - { - if (const char* env_p = std::getenv(str.c_str())) -diff --git a/src/utils.h b/src/utils.h -index dccc4504..a76aa161 100644 ---- a/src/utils.h -+++ b/src/utils.h -@@ -130,6 +130,18 @@ struct DeprecatedName - typedef std::unordered_map> - FuncsModulesMap; - -+struct KConfig -+{ -+ KConfig(); -+ bool has_value(const std::string &name, const std::string &value) const -+ { -+ auto c = config.find(name); -+ return c != config.end() && c->second == value; -+ } -+ -+ std::unordered_map config; -+}; -+ - static std::vector DEPRECATED_LIST = - { - }; -diff --git a/tests/utils.cpp b/tests/utils.cpp -index 9ca4ace5..8470745b 100644 ---- a/tests/utils.cpp -+++ b/tests/utils.cpp -@@ -222,6 +222,25 @@ TEST(utils, get_cgroup_path_in_hierarchy) - } - } - -+TEST(utils, parse_kconfig) -+{ -+ char path[] = "/tmp/configXXXXXX"; -+ int fd = mkstemp(path); -+ const std::string config = "# Intro comment\n" -+ "CONFIG_YES=y\n" -+ "CONFIG_MOD=m\n" -+ "CONFIG_VAL=42\n" -+ "# CONFIG_NO is not set"; -+ EXPECT_EQ(write(fd, config.c_str(), config.length()), config.length()); -+ setenv("BPFTRACE_KCONFIG_TEST", path, true); -+ -+ KConfig kconfig; -+ ASSERT_TRUE(kconfig.has_value("CONFIG_YES", "y")); -+ ASSERT_TRUE(kconfig.has_value("CONFIG_MOD", "m")); -+ ASSERT_TRUE(kconfig.has_value("CONFIG_VAL", "42")); -+ ASSERT_EQ(kconfig.config.find("CONFIG_NO"), kconfig.config.end()); -+} -+ - } // namespace utils - } // namespace test - } // namespace bpftrace --- -2.39.2 - diff --git a/SOURCES/bpftrace-0.17.0-0002-arm64-define-the-KASAN_SHADOW_SCALE_SHIFT-macro.patch b/SOURCES/bpftrace-0.17.0-0002-arm64-define-the-KASAN_SHADOW_SCALE_SHIFT-macro.patch deleted file mode 100644 index fe837a1..0000000 --- a/SOURCES/bpftrace-0.17.0-0002-arm64-define-the-KASAN_SHADOW_SCALE_SHIFT-macro.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 29c5d381cd4d36b5e3ce140193729a5a4b97c31e Mon Sep 17 00:00:00 2001 -From: Viktor Malik -Date: Mon, 6 Mar 2023 11:41:27 +0100 -Subject: [PATCH 2/2] arm64: define the KASAN_SHADOW_SCALE_SHIFT macro - -arm64 defines this macro from Makefile instead of defining it in a -header file as is the case for other architectures. Since we're not -running make, we need to define the macro manually via CFLAGS. - -The value definition is taken from kernel's arch/arm64/Makefile and it -depends on the running kernel configuration. - -This fixes the runqlat.bt tcpdrop.bt, and undump.bt tools on -aarch64+debug kernel which previously failed with: - - # /usr/share/bpftrace/tools/runqlat.bt - [...]/source/arch/arm64/include/asm/memory.h:300:9: error: use of undeclared identifier 'KASAN_SHADOW_SCALE_SHIFT' - [...] ---- - src/main.cpp | 3 ++- - src/utils.cpp | 23 ++++++++++++++++++----- - src/utils.h | 3 ++- - 3 files changed, 22 insertions(+), 7 deletions(-) - -diff --git a/src/main.cpp b/src/main.cpp -index b76d1bb3..593c71be 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -370,7 +370,8 @@ static std::optional get_boottime() - kobj = std::get<1>(kdirs); - - if (ksrc != "") -- extra_flags = get_kernel_cflags(utsname.machine, ksrc, kobj); -+ extra_flags = get_kernel_cflags( -+ utsname.machine, ksrc, kobj, bpftrace.kconfig); - } - extra_flags.push_back("-include"); - extra_flags.push_back(CLANG_WORKAROUNDS_H); -diff --git a/src/utils.cpp b/src/utils.cpp -index 54c8f054..c8fd7da1 100644 ---- a/src/utils.cpp -+++ b/src/utils.cpp -@@ -227,7 +227,6 @@ KConfig::KConfig() - } - } - -- - bool get_uint64_env_var(const std::string &str, uint64_t &dest) - { - if (const char* env_p = std::getenv(str.c_str())) -@@ -364,10 +363,10 @@ std::vector get_possible_cpus() - return read_cpu_range("/sys/devices/system/cpu/possible"); - } - --std::vector get_kernel_cflags( -- const char* uname_machine, -- const std::string& ksrc, -- const std::string& kobj) -+std::vector get_kernel_cflags(const char *uname_machine, -+ const std::string &ksrc, -+ const std::string &kobj, -+ const KConfig &kconfig) - { - std::vector cflags; - std::string arch = uname_machine; -@@ -433,6 +432,20 @@ std::vector get_kernel_cflags( - cflags.push_back("-D__LINUX_ARM_ARCH__=7"); - } - -+ if (arch == "arm64") -+ { -+ // arm64 defines KASAN_SHADOW_SCALE_SHIFT in a Makefile instead of defining -+ // it in a header file. Since we're not executing make, we need to set the -+ // value manually (values are taken from arch/arm64/Makefile). -+ if (kconfig.has_value("CONFIG_KASAN", "y")) -+ { -+ if (kconfig.has_value("CONFIG_KASAN_SW_TAGS", "y")) -+ cflags.push_back("-DKASAN_SHADOW_SCALE_SHIFT=4"); -+ else -+ cflags.push_back("-DKASAN_SHADOW_SCALE_SHIFT=3"); -+ } -+ } -+ - return cflags; - } - -diff --git a/src/utils.h b/src/utils.h -index a76aa161..d4eeac3d 100644 ---- a/src/utils.h -+++ b/src/utils.h -@@ -178,7 +178,8 @@ std::tuple get_kernel_dirs( - bool unpack_kheaders); - std::vector get_kernel_cflags(const char *uname_machine, - const std::string &ksrc, -- const std::string &kobj); -+ const std::string &kobj, -+ const KConfig &kconfig); - std::string get_cgroup_path_in_hierarchy(uint64_t cgroupid, - std::string base_path); - std::vector> get_cgroup_hierarchy_roots(); --- -2.39.2 - diff --git a/SOURCES/bpftrace-0.17.0-0003-ast-Use-std-optional-in-CodegenLLVM-CodegenLLVM-call.patch b/SOURCES/bpftrace-0.17.0-0003-ast-Use-std-optional-in-CodegenLLVM-CodegenLLVM-call.patch deleted file mode 100644 index faf1a8a..0000000 --- a/SOURCES/bpftrace-0.17.0-0003-ast-Use-std-optional-in-CodegenLLVM-CodegenLLVM-call.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 1632c1fb41d03730a5106696c4fed64cd4a86785 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 13 Mar 2023 21:30:27 -0700 -Subject: [PATCH 1/3] ast: Use std::optional in CodegenLLVM::CodegenLLVM call - -Fixes build with clang-16 - -src/ast/passes/codegen_llvm.cpp:63:53: error: use of undeclared identifier 'Optional'; did you mean 'std::optional'? - -Signed-off-by: Khem Raj ---- - src/ast/passes/codegen_llvm.cpp | 16 +++++++++++----- - 1 file changed, 11 insertions(+), 5 deletions(-) - -diff --git a/src/ast/passes/codegen_llvm.cpp b/src/ast/passes/codegen_llvm.cpp -index 4e2a18e1..efeb4160 100644 ---- a/src/ast/passes/codegen_llvm.cpp -+++ b/src/ast/passes/codegen_llvm.cpp -@@ -56,11 +56,17 @@ CodegenLLVM::CodegenLLVM(Node *root, BPFtrace &bpftrace) - throw std::runtime_error( - "Could not find bpf llvm target, does your llvm support it?"); - -- target_machine_.reset(target->createTargetMachine(LLVMTargetTriple, -- "generic", -- "", -- TargetOptions(), -- Optional())); -+ target_machine_.reset( -+ target->createTargetMachine(LLVMTargetTriple, -+ "generic", -+ "", -+ TargetOptions(), -+#if LLVM_VERSION_MAJOR >= 16 -+ std::optional() -+#else -+ Optional() -+#endif -+ )); - target_machine_->setOptLevel(llvm::CodeGenOpt::Aggressive); - - module_->setTargetTriple(LLVMTargetTriple); --- -2.40.1 - diff --git a/SOURCES/bpftrace-0.17.0-0004-Set-cmake-policy-for-CMP0057.patch b/SOURCES/bpftrace-0.17.0-0004-Set-cmake-policy-for-CMP0057.patch deleted file mode 100644 index f332cec..0000000 --- a/SOURCES/bpftrace-0.17.0-0004-Set-cmake-policy-for-CMP0057.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 6a1eb84833fd40e9aa49b610089c6ce11f38ba43 Mon Sep 17 00:00:00 2001 -From: Viktor Malik -Date: Wed, 10 May 2023 13:30:59 +0200 -Subject: [PATCH 1/2] Set cmake policy for CMP0057 - -Building with LLVM16 fails with the error: -CMake Warning (dev) at /usr/lib/llvm-16/lib/cmake/llvm/LLVM-Config.cmake:230 (if): - Policy CMP0057 is not set: Support new IN_LIST if() operator. Run "cmake - --help-policy CMP0057" for policy details. Use the cmake_policy command to - set the policy and suppress this warning. - - IN_LIST will be interpreted as an operator when the policy is set to NEW. - Since the policy is not set the OLD behavior will be used. -Call Stack (most recent call first): - cmake/clang_libs.cmake:32 (llvm_map_components_to_libnames) - src/cc/CMakeLists.txt:126 (include) -This warning is for project developers. Use -Wno-dev to suppress it. - -CMake Error at /usr/lib/llvm-16/lib/cmake/llvm/LLVM-Config.cmake:230 (if): - if given arguments: - - "engine" "IN_LIST" "link_components" - - Unknown arguments specified - -Set cmake policy for CMP0057 explicitly. ---- - CMakeLists.txt | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 0a7914f5..045e9d97 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -1,6 +1,8 @@ - cmake_minimum_required(VERSION 3.13.0) - project(bpftrace) - -+cmake_policy(SET CMP0057 NEW) -+ - # bpftrace version number components. - set(bpftrace_VERSION_MAJOR 0) - set(bpftrace_VERSION_MINOR 17) --- -2.40.1 - diff --git a/SOURCES/bpftrace-0.17.0-0005-cmake-Raise-max-llvm-major-version-to-16.patch b/SOURCES/bpftrace-0.17.0-0005-cmake-Raise-max-llvm-major-version-to-16.patch deleted file mode 100644 index bf70e44..0000000 --- a/SOURCES/bpftrace-0.17.0-0005-cmake-Raise-max-llvm-major-version-to-16.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 359a4067c96580cd6d11202ea1ea97a72b4db650 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Fri, 10 Mar 2023 00:08:27 -0800 -Subject: [PATCH 2/2] cmake: Raise max llvm major version to 16 - -Signed-off-by: Khem Raj ---- - CMakeLists.txt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 045e9d97..88867b5b 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -167,7 +167,7 @@ else() - endif() - - set(MIN_LLVM_MAJOR 6) -- set(MAX_LLVM_MAJOR 15) -+ set(MAX_LLVM_MAJOR 16) - - if((${LLVM_VERSION_MAJOR} VERSION_LESS ${MIN_LLVM_MAJOR}) OR (${LLVM_VERSION_MAJOR} VERSION_GREATER ${MAX_LLVM_MAJOR})) - message(SEND_ERROR "Unsupported LLVM version found via ${LLVM_INCLUDE_DIRS}: ${LLVM_VERSION_MAJOR}") --- -2.40.1 - diff --git a/SOURCES/bpftrace-0.17.0-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch b/SOURCES/bpftrace-0.19.1-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch similarity index 82% rename from SOURCES/bpftrace-0.17.0-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch rename to SOURCES/bpftrace-0.19.1-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch index d5f8e7f..9425645 100644 --- a/SOURCES/bpftrace-0.17.0-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch +++ b/SOURCES/bpftrace-0.19.1-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch @@ -1,7 +1,7 @@ -From b23980e4f6ed33d98f4f09ef25ae17baca215cce Mon Sep 17 00:00:00 2001 +From 8066a715dbd54e6cbfa66176544944a2df7952a6 Mon Sep 17 00:00:00 2001 From: Jerome Marchand Date: Thu, 11 Jun 2020 14:56:36 +0200 -Subject: [PATCH 6/6] RHEL: aarch64: fixes statsnoop and opensnoop +Subject: [PATCH] RHEL: aarch64: fixes statsnoop and opensnoop On aarch64 the open syscall has been dropped. Only openat remains, wich is called by libc open() function. @@ -20,7 +20,7 @@ Signed-off-by: Jerome Marchand 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/tools/opensnoop.bt b/tools/opensnoop.bt -index a7de8026..d99db93e 100755 +index bbb26419..95185e5f 100755 --- a/tools/opensnoop.bt +++ b/tools/opensnoop.bt @@ -21,13 +21,11 @@ BEGIN @@ -30,7 +30,7 @@ index a7de8026..d99db93e 100755 -tracepoint:syscalls:sys_enter_open, tracepoint:syscalls:sys_enter_openat { - @filename[tid] = args->filename; + @filename[tid] = args.filename; } -tracepoint:syscalls:sys_exit_open, @@ -38,11 +38,11 @@ index a7de8026..d99db93e 100755 /@filename[tid]/ { diff --git a/tools/statsnoop.bt b/tools/statsnoop.bt -index b2d529e2..f612ea94 100755 +index a76b2bcc..89c2c8ea 100755 --- a/tools/statsnoop.bt +++ b/tools/statsnoop.bt @@ -30,17 +30,13 @@ tracepoint:syscalls:sys_enter_statfs - @filename[tid] = args->pathname; + @filename[tid] = args.pathname; } -tracepoint:syscalls:sys_enter_statx, @@ -50,7 +50,7 @@ index b2d529e2..f612ea94 100755 -tracepoint:syscalls:sys_enter_newlstat +tracepoint:syscalls:sys_enter_statx { - @filename[tid] = args->filename; + @filename[tid] = args.filename; } tracepoint:syscalls:sys_exit_statfs, @@ -60,7 +60,7 @@ index b2d529e2..f612ea94 100755 +tracepoint:syscalls:sys_exit_statx /@filename[tid]/ { - $ret = args->ret; + $ret = args.ret; -- -2.35.3 +2.41.0 diff --git a/SPECS/bpftrace.spec b/SPECS/bpftrace.spec index cf3b361..1915841 100644 --- a/SPECS/bpftrace.spec +++ b/SPECS/bpftrace.spec @@ -1,6 +1,6 @@ Name: bpftrace -Version: 0.17.0 -Release: 2%{?dist} +Version: 0.19.1 +Release: 1%{?dist} Summary: High-level tracing language for Linux eBPF License: ASL 2.0 @@ -13,12 +13,6 @@ Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz # for build. Source1: https://github.com/USCiLab/cereal/archive/v%{cereal_version}/cereal-%{cereal_version}.tar.gz -Patch0: %{name}-%{version}-0001-Parse-kernel-configuration.patch -Patch1: %{name}-%{version}-0002-arm64-define-the-KASAN_SHADOW_SCALE_SHIFT-macro.patch -Patch2: %{name}-%{version}-0003-ast-Use-std-optional-in-CodegenLLVM-CodegenLLVM-call.patch -Patch3: %{name}-%{version}-0004-Set-cmake-policy-for-CMP0057.patch -Patch4: %{name}-%{version}-0005-cmake-Raise-max-llvm-major-version-to-16.patch - Patch10: %{name}-%{version}-RHEL-aarch64-fixes-statsnoop-and-opensnoop.patch # Arches will be included as upstream support is added and dependencies are @@ -99,6 +93,11 @@ find %{buildroot}%{_datadir}/%{name}/tools -type f -exec \ %exclude %{_datadir}/%{name}/tools/old %changelog +* Mon Nov 06 2023 Viktor Malik - 0.19.1-1 +- Rebase on bpftrace 0.19.1 (RHEL-10693) +- Rebuild for LLVM 17 (RHEL-10592) +- Enhancements and fixes for PowerPC (RHEL-3690, RHEL-11476) + * Mon May 15 2023 Viktor Malik - 0.17.0-2 - Rebuild for LLVM 16 (rhbz#2192953)