From 1dd908a44086e042259bffdad8c97548f10db90d Mon Sep 17 00:00:00 2001 From: eabdullin Date: Mon, 15 Sep 2025 12:55:10 +0000 Subject: [PATCH] import CS valgrind-3.25.1-3.el9 --- .gitignore | 2 +- .valgrind.metadata | 2 +- ...repare-NEWS-for-branch-3.25.x-fixes.patch} | 23 +- ...-Support-z17-changes-to-the-NNPA-ins.patch | 539 ++++++++++++++++++ ...exec_valgrind-Fix-off-by-one-error-w.patch | 37 -- ...missing-syscall-hooks-to-ppc64-linux.patch | 102 ++++ ...exec_valgrind-Fix-another-off-by-one.patch | 36 -- ...leak-filter-for-write-on-write-on-li.patch | 27 - ...-patterns-for-missing-main-frame-for.patch | 491 ---------------- ...onal-exp-ppc64le-files-to-EXTRA_DIST.patch | 41 -- ...landlock_create_ruleset-444-landlock.patch | 358 ------------ ...ts-tc17_sembar.c-Remove-bool-typedef.patch | 35 -- ...ntext.c-Rename-typedef-struct-thread.patch | 38 -- ...4814.c-sa_handler-take-an-int-as-arg.patch | 34 -- ...ve_mount-fsopen-fsconfig-fsmount-fsp.patch | 398 ------------- ...cognize-new-DWARF5-DW_LANG-constants.patch | 144 ----- ...Use-is-not-a-valid-CoreError-type-in.patch | 147 ----- .../0014-linux-support-EVIOCGRAB-ioctl.patch | 60 -- SOURCES/ppc64-strcmp-ld.patch | 87 +++ SPECS/valgrind.spec | 163 ++++-- 20 files changed, 856 insertions(+), 1908 deletions(-) rename SOURCES/{0001-Prepare-NEWS-for-branch-3.24-fixes.patch => 0001-Prepare-NEWS-for-branch-3.25.x-fixes.patch} (53%) create mode 100644 SOURCES/0002-Bug-503241-s390x-Support-z17-changes-to-the-NNPA-ins.patch delete mode 100644 SOURCES/0002-vgdb.c-fork_and_exec_valgrind-Fix-off-by-one-error-w.patch create mode 100644 SOURCES/0003-Add-several-missing-syscall-hooks-to-ppc64-linux.patch delete mode 100644 SOURCES/0003-vgdb.c-fork_and_exec_valgrind-Fix-another-off-by-one.patch delete mode 100644 SOURCES/0004-regtest-add-a-fdleak-filter-for-write-on-write-on-li.patch delete mode 100644 SOURCES/0005-Add-exp-and-supp-patterns-for-missing-main-frame-for.patch delete mode 100644 SOURCES/0006-Add-additional-exp-ppc64le-files-to-EXTRA_DIST.patch delete mode 100644 SOURCES/0007-Add-support-for-landlock_create_ruleset-444-landlock.patch delete mode 100644 SOURCES/0008-helgrind-tests-tc17_sembar.c-Remove-bool-typedef.patch delete mode 100644 SOURCES/0009-drd-tests-swapcontext.c-Rename-typedef-struct-thread.patch delete mode 100644 SOURCES/0010-none-tests-bug234814.c-sa_handler-take-an-int-as-arg.patch delete mode 100644 SOURCES/0011-Add-open_tree-move_mount-fsopen-fsconfig-fsmount-fsp.patch delete mode 100644 SOURCES/0012-Recognize-new-DWARF5-DW_LANG-constants.patch delete mode 100644 SOURCES/0013-Bug-498317-FdBadUse-is-not-a-valid-CoreError-type-in.patch delete mode 100644 SOURCES/0014-linux-support-EVIOCGRAB-ioctl.patch create mode 100644 SOURCES/ppc64-strcmp-ld.patch diff --git a/.gitignore b/.gitignore index 1b236d2..1819a9b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/valgrind-3.24.0.tar.bz2 +SOURCES/valgrind-3.25.1.tar.bz2 diff --git a/.valgrind.metadata b/.valgrind.metadata index 9b603e5..3749da8 100644 --- a/.valgrind.metadata +++ b/.valgrind.metadata @@ -1 +1 @@ -6fc0470fedc0d85dae3e042297cabd13c6100749 SOURCES/valgrind-3.24.0.tar.bz2 +4d2cc4d527213f81af573bca4d2cb93ccac7f274 SOURCES/valgrind-3.25.1.tar.bz2 diff --git a/SOURCES/0001-Prepare-NEWS-for-branch-3.24-fixes.patch b/SOURCES/0001-Prepare-NEWS-for-branch-3.25.x-fixes.patch similarity index 53% rename from SOURCES/0001-Prepare-NEWS-for-branch-3.24-fixes.patch rename to SOURCES/0001-Prepare-NEWS-for-branch-3.25.x-fixes.patch index 12402a0..cca72ed 100644 --- a/SOURCES/0001-Prepare-NEWS-for-branch-3.24-fixes.patch +++ b/SOURCES/0001-Prepare-NEWS-for-branch-3.25.x-fixes.patch @@ -1,19 +1,19 @@ -From cc09f61e56e90c9d3a0e7231cc69b2a499d1205f Mon Sep 17 00:00:00 2001 +From 2e92839f77ad5b1e2db95887185eca3b4e70a4d5 Mon Sep 17 00:00:00 2001 From: Mark Wielaard -Date: Sat, 23 Nov 2024 02:09:27 +0100 -Subject: [PATCH 01/11] Prepare NEWS for branch 3.24 fixes +Date: Tue, 5 Aug 2025 22:05:30 +0200 +Subject: [PATCH 1/2] Prepare NEWS for branch 3.25.x fixes --- - NEWS | 11 +++++++++++ - 1 file changed, 11 insertions(+) + NEWS | 12 ++++++++++++ + 1 file changed, 12 insertions(+) diff --git a/NEWS b/NEWS -index 49b4647d4295..8362e1d2df41 100644 +index 741329a68170..5043e7008bf0 100644 --- a/NEWS +++ b/NEWS -@@ -1,3 +1,14 @@ -+Branch 3.24 -+~~~~~~~~~~~ +@@ -1,3 +1,15 @@ ++Branch 3.25.x ++~~~~~~~~~~~~~ + +* ==================== FIXED BUGS ==================== + @@ -23,9 +23,10 @@ index 49b4647d4295..8362e1d2df41 100644 + https://bugs.kde.org/show_bug.cgi?id=XXXXXX +where XXXXXX is the bug number as listed above. + - Release 3.24.0 (31 Oct 2024) ++ + Release 3.25.1 (20 May 2025) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- -2.47.0 +2.50.1 diff --git a/SOURCES/0002-Bug-503241-s390x-Support-z17-changes-to-the-NNPA-ins.patch b/SOURCES/0002-Bug-503241-s390x-Support-z17-changes-to-the-NNPA-ins.patch new file mode 100644 index 0000000..67cf2e5 --- /dev/null +++ b/SOURCES/0002-Bug-503241-s390x-Support-z17-changes-to-the-NNPA-ins.patch @@ -0,0 +1,539 @@ +From 2ad8efa8f31c7e8733e430dad4f93541797d6792 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 25 Jun 2025 16:35:04 +0200 +Subject: [PATCH 2/2] Bug 503241 - s390x: Support z17 changes to the NNPA + instruction + +This adds support for the NNPA enhancements that are implemented with z17. + +(cherry picked from commit 24b634e8ce04de70d4aa6c61a12149df223f9c68) +--- + NEWS | 2 + + coregrind/m_extension/extension-s390x.c | 346 ++++++++++++++---------- + 2 files changed, 209 insertions(+), 139 deletions(-) + +diff --git a/NEWS b/NEWS +index 5043e7008bf0..4e6e6c6d2387 100644 +--- a/NEWS ++++ b/NEWS +@@ -5,6 +5,8 @@ Branch 3.25.x + + The following bugs have been fixed or resolved on this branch. + ++503241 s390x: Support z17 changes to the NNPA instruction ++ + To see details of a given bug, visit + https://bugs.kde.org/show_bug.cgi?id=XXXXXX + where XXXXXX is the bug number as listed above. +diff --git a/coregrind/m_extension/extension-s390x.c b/coregrind/m_extension/extension-s390x.c +index 85b99ad08687..98b825d9b5d2 100644 +--- a/coregrind/m_extension/extension-s390x.c ++++ b/coregrind/m_extension/extension-s390x.c +@@ -301,11 +301,17 @@ typedef enum { + S390_NNPA_MAX = 0x15, + S390_NNPA_LOG = 0x20, + S390_NNPA_EXP = 0x21, ++ S390_NNPA_SQRT = 0x22, ++ S390_NNPA_INVSQRT = 0x23, + S390_NNPA_RELU = 0x31, + S390_NNPA_TANH = 0x32, + S390_NNPA_SIGMOID = 0x33, + S390_NNPA_SOFTMAX = 0x34, ++ S390_NNPA_GELU = 0x35, + S390_NNPA_BATCHNORM = 0x40, ++ S390_NNPA_MOMENTS = 0x41, ++ S390_NNPA_LAYERNORM = 0x42, ++ S390_NNPA_NORM = 0x43, + S390_NNPA_MAXPOOL2D = 0x50, + S390_NNPA_AVGPOOL2D = 0x51, + S390_NNPA_LSTMACT = 0x60, +@@ -313,6 +319,9 @@ typedef enum { + S390_NNPA_CONVOLUTION = 0x70, + S390_NNPA_MATMUL_OP = 0x71, + S390_NNPA_MATMUL_OP_BCAST23 = 0x72, ++ S390_NNPA_MATMUL_OP_BCAST1 = 0x73, ++ S390_NNPA_TRANSFORM = 0xf0, ++ S390_NNPA_REDUCE = 0xf1, + } s390_nnpa_function_t; + + /* Suported NNPA functions */ +@@ -321,30 +330,51 @@ static const ULong NNPA_functions[] = { + S390_SETBIT(S390_NNPA_SUB) | S390_SETBIT(S390_NNPA_MUL) | + S390_SETBIT(S390_NNPA_DIV) | S390_SETBIT(S390_NNPA_MIN) | + S390_SETBIT(S390_NNPA_MAX) | S390_SETBIT(S390_NNPA_LOG) | +- S390_SETBIT(S390_NNPA_EXP) | S390_SETBIT(S390_NNPA_RELU) | ++ S390_SETBIT(S390_NNPA_EXP) | S390_SETBIT(S390_NNPA_SQRT) | ++ S390_SETBIT(S390_NNPA_INVSQRT) | S390_SETBIT(S390_NNPA_RELU) | + S390_SETBIT(S390_NNPA_TANH) | S390_SETBIT(S390_NNPA_SIGMOID) | +- S390_SETBIT(S390_NNPA_SOFTMAX)), +- (S390_SETBIT(S390_NNPA_BATCHNORM) | S390_SETBIT(S390_NNPA_MAXPOOL2D) | +- S390_SETBIT(S390_NNPA_AVGPOOL2D) | S390_SETBIT(S390_NNPA_LSTMACT) | +- S390_SETBIT(S390_NNPA_GRUACT) | S390_SETBIT(S390_NNPA_CONVOLUTION) | +- S390_SETBIT(S390_NNPA_MATMUL_OP) | +- S390_SETBIT(S390_NNPA_MATMUL_OP_BCAST23)), ++ S390_SETBIT(S390_NNPA_SOFTMAX) | S390_SETBIT(S390_NNPA_GELU)), ++ (S390_SETBIT(S390_NNPA_BATCHNORM) | S390_SETBIT(S390_NNPA_MOMENTS) | ++ S390_SETBIT(S390_NNPA_LAYERNORM) | S390_SETBIT(S390_NNPA_NORM) | ++ S390_SETBIT(S390_NNPA_MAXPOOL2D) | S390_SETBIT(S390_NNPA_AVGPOOL2D) | ++ S390_SETBIT(S390_NNPA_LSTMACT) | S390_SETBIT(S390_NNPA_GRUACT) | ++ S390_SETBIT(S390_NNPA_CONVOLUTION) | S390_SETBIT(S390_NNPA_MATMUL_OP) | ++ S390_SETBIT(S390_NNPA_MATMUL_OP_BCAST23) | ++ S390_SETBIT(S390_NNPA_MATMUL_OP_BCAST1)), ++ 0, ++ (S390_SETBIT(S390_NNPA_TRANSFORM) | S390_SETBIT(S390_NNPA_REDUCE)), + }; + + /* Supported parameter block formats */ + static const ULong NNPA_ipbf[] = { +- (S390_SETBIT(0)), ++ (S390_SETBIT(0) | S390_SETBIT(1)), + }; + + /* Supported data types and data layout formats */ ++enum { ++ S390_NNPA_TYPE_1 = 0, // data type 1 (16 bit) ++ S390_NNPA_TYPE_BFP32 = 6, ++ S390_NNPA_TYPE_INT8 = 8, ++ S390_NNPA_TYPE_INT32 = 10, ++}; ++ ++enum { ++ S390_NNPA_4D_FEATURE_TENSOR = 0, ++ S390_NNPA_4D_KERNEL_TENSOR = 1, ++ S390_NNPA_4D_WEIGHTS_TENSOR = 2, ++ S390_NNPA_4D_GENERIC_TENSOR = 31, ++}; ++ + static const ULong NNPA_dtypes_layouts[] = { + /* Data types */ +- (S390_SETBIT(0) | // data type 1 (16 bit) ++ (S390_SETBIT(S390_NNPA_TYPE_1) | S390_SETBIT(S390_NNPA_TYPE_BFP32) | ++ S390_SETBIT(S390_NNPA_TYPE_INT8) | S390_SETBIT(S390_NNPA_TYPE_INT32) | + + /* Data layout formats */ +- S390_SETBIT(32 + 0) | // 4D-feature tensor +- S390_SETBIT(32 + 1) // 4D-kernel tensor +- ), ++ S390_SETBIT(32 + S390_NNPA_4D_FEATURE_TENSOR) | ++ S390_SETBIT(32 + S390_NNPA_4D_KERNEL_TENSOR) | ++ S390_SETBIT(32 + S390_NNPA_4D_WEIGHTS_TENSOR) | ++ S390_SETBIT(32 + S390_NNPA_4D_GENERIC_TENSOR)), + }; + + static const ULong NNPA_conversions[] = { +@@ -360,10 +390,15 @@ struct s390_NNPA_parms_qaf { + UInt mdis; + ULong mts; + ULong conversions; +- ULong reserved2[22]; ++ ULong reserved2; ++ UInt mdnis[4]; ++ struct { ++ ULong reserved[19]; ++ } reserved3; + }; + +-struct s390_NNPA_tensor0 { ++/* Tensor descriptor, common for all data-layout formats */ ++struct s390_NNPA_tensor { + UChar layout; + UChar dtype; + UShort reserved1; +@@ -372,21 +407,21 @@ struct s390_NNPA_tensor0 { + ULong address; + }; + +-struct s390_NNPA_parms0 { +- ULong pbvn : 16; +- ULong mvn : 8; +- ULong ribm : 24; +- ULong reserved0 : 15; +- ULong cf : 1; +- ULong reserved1[6]; +- ULong save_area_address; +- struct s390_NNPA_tensor0 out[2]; +- struct s390_NNPA_tensor0 reserved2[2]; +- struct s390_NNPA_tensor0 in[3]; +- ULong reserved3[12]; +- UInt param[5]; +- UInt reserved4; +- ULong reserved5[13]; ++/* Parameter block format 0 or 1 */ ++struct s390_NNPA_parms { ++ ULong pbvn : 16; ++ ULong mvn : 8; ++ ULong ribm : 24; ++ ULong reserved0 : 15; ++ ULong cf : 1; ++ ULong reserved1[6]; ++ ULong save_area_address; ++ struct s390_NNPA_tensor out[2]; ++ struct s390_NNPA_tensor reserved2[2]; ++ struct s390_NNPA_tensor in[3]; ++ ULong reserved3[12]; ++ UInt param[16]; ++ ULong reserved4[8]; + }; + + enum { +@@ -418,135 +453,145 @@ static const char* const s390_NNPA_errmsg_access[s390_NNPA_message_n] = { + + struct s390_NNPA_mem_dimensions { + UChar layout; +- ULong dim[5]; // total dimensions +- ULong used[4]; // used dimensions, without padding +- ULong step[5]; +- ULong last_dim4_size; ++ ULong dim[4]; ++ ULong total_size; ++ ULong used_sticks; // occupied sticks per next-higher dimension ++ ULong stick_fill; ++ ULong last_stick_fill; + }; + +-/* Determine the 5 dimensions used to represent the tensor data in memory */ ++/* Determine the dimensions used to represent the tensor data in memory */ + static enum ExtensionError +-NNPA_tensor0_size(const struct s390_NNPA_tensor0* t, +- UInt msg_idx, +- struct s390_NNPA_mem_dimensions* out_md) ++NNPA_tensor_size(const struct s390_NNPA_tensor* t, ++ UInt msg_idx, ++ struct s390_NNPA_mem_dimensions* out_md) + { + struct s390_NNPA_mem_dimensions md; + ULong elem_size; ++ ULong eps; + +- md.layout = t->layout; +- if (t->dtype == 0) ++ switch (t->dtype) { ++ case S390_NNPA_TYPE_INT8: ++ elem_size = 1; ++ break; ++ case S390_NNPA_TYPE_1: + elem_size = 2; +- else ++ break; ++ case S390_NNPA_TYPE_BFP32: ++ case S390_NNPA_TYPE_INT32: ++ elem_size = 4; ++ break; ++ default: + return INSN_ERR(s390_NNPA_errmsg_dtype[msg_idx]); ++ } ++ eps = 128 / elem_size; + ++ md.layout = t->layout; + switch (t->layout) { +- case 0: // 4D-feature tensor +- md.dim[0] = md.used[0] = t->dim4; +- md.dim[1] = md.used[1] = (t->dim1 + 63) / 64; +- md.dim[2] = md.used[2] = t->dim3; +- md.dim[3] = (t->dim2 + 31) / 32 * 32; +- md.used[3] = t->dim2; +- md.dim[4] = 64; +- md.last_dim4_size = elem_size * (t->dim1 % 64); ++ case S390_NNPA_4D_FEATURE_TENSOR: ++ md.dim[0] = t->dim4; ++ md.dim[1] = (t->dim1 + eps - 1) / eps; ++ md.used_sticks = t->dim2; ++ goto common_tensor_dimensions; ++ case S390_NNPA_4D_KERNEL_TENSOR: ++ md.dim[0] = (t->dim1 + eps - 1) / eps; ++ md.dim[1] = t->dim4; ++ md.used_sticks = t->dim2; ++ goto common_tensor_dimensions; ++ case S390_NNPA_4D_WEIGHTS_TENSOR: ++ elem_size *= 2; ++ eps /= 2; ++ md.dim[0] = t->dim4; ++ md.dim[1] = (t->dim1 + eps - 1) / eps; ++ md.used_sticks = (t->dim2 + 1) / 2; ++ common_tensor_dimensions: ++ md.dim[2] = t->dim3; ++ md.dim[3] = (md.used_sticks + 31) / 32 * 32; ++ md.stick_fill = elem_size * (t->dim1 >= eps ? eps : t->dim1); ++ md.last_stick_fill = elem_size * ((t->dim1 - 1) % eps + 1); + break; +- case 1: // 4D-kernel tensor +- md.dim[0] = md.used[0] = (t->dim1 + 63) / 64; +- md.dim[1] = md.used[1] = t->dim4; +- md.dim[2] = md.used[2] = t->dim3; +- md.dim[3] = (t->dim2 + 31) / 32 * 32; +- md.used[3] = t->dim2; +- md.dim[4] = 64; +- md.last_dim4_size = elem_size * (t->dim1 % 64); ++ case S390_NNPA_4D_GENERIC_TENSOR: ++ md.dim[0] = t->dim4; ++ md.dim[1] = t->dim3; ++ md.dim[2] = t->dim2; ++ md.dim[3] = t->dim1; ++ eps = 1; + break; + default: + return INSN_ERR(s390_NNPA_errmsg_layout[msg_idx]); + } +- md.step[4] = elem_size * md.dim[4]; +- md.step[3] = md.step[4] * md.dim[3]; +- md.step[2] = md.step[3] * md.dim[2]; +- md.step[1] = md.step[2] * md.dim[1]; +- md.step[0] = md.step[1] * md.dim[0]; // total size +- *out_md = md; ++ md.total_size = ++ elem_size * eps * md.dim[3] * md.dim[2] * md.dim[1] * md.dim[0]; ++ *out_md = md; + return ExtErr_OK; + } + +-/* Determine the size of the non-pad elements in the last dimension */ +-static ULong NNPA_mem_dim4_size(const struct s390_NNPA_mem_dimensions* md, +- ULong d0, +- ULong d1) +-{ +- switch (md->layout) { +- case 0: // 4D-feature tensor +- return d1 + 1 == md->dim[1] ? md->last_dim4_size : md->step[4]; +- case 1: // 4D-kernel tensor +- return d0 + 1 == md->dim[0] ? md->last_dim4_size : md->step[4]; +- } +- return 0; +-} +- +-static enum ExtensionError NNPA_pre_read_tensor0( +- ThreadState* tst, UInt msg_idx, const struct s390_NNPA_tensor0* t) ++/* Track a tensor's memory regions with PRE_MEM_READ or POST_MEM_WRITE */ ++static enum ExtensionError NNPA_track_tensor(ThreadState* tst, ++ UInt msg_idx, ++ const struct s390_NNPA_tensor* t, ++ Bool do_write) + { + struct s390_NNPA_mem_dimensions md; + enum ExtensionError ret; ++ ULong addr = t->address; + +- ret = NNPA_tensor0_size(t, msg_idx, &md); ++ ret = NNPA_tensor_size(t, msg_idx, &md); + if (ret != ExtErr_OK) + return ret; + +- for (ULong d0 = 0; d0 < md.used[0]; d0++) { +- for (ULong d1 = 0; d1 < md.used[1]; d1++) { +- for (ULong d2 = 0; d2 < md.used[2]; d2++) { +- for (ULong d3 = 0; d3 < md.used[3]; d3++) { +- ULong addr = t->address + d0 * md.step[1] + d1 * md.step[2] + +- d2 * md.step[3] + d3 * md.step[4]; +- ULong len = NNPA_mem_dim4_size(&md, d0, d1); +- PRE_MEM_READ(tst, s390_NNPA_errmsg_access[msg_idx], addr, len); ++ switch (md.layout) { ++ case S390_NNPA_4D_FEATURE_TENSOR: ++ case S390_NNPA_4D_KERNEL_TENSOR: ++ case S390_NNPA_4D_WEIGHTS_TENSOR: ++ for (ULong d0 = 0; d0 < md.dim[0]; d0++) { ++ for (ULong d1 = 0; d1 < md.dim[1]; d1++) { ++ ULong len; ++ switch (md.layout) { ++ case S390_NNPA_4D_FEATURE_TENSOR: ++ case S390_NNPA_4D_WEIGHTS_TENSOR: ++ len = d1 + 1 == md.dim[1] ? md.last_stick_fill : md.stick_fill; ++ break; ++ case S390_NNPA_4D_KERNEL_TENSOR: ++ len = d0 + 1 == md.dim[0] ? md.last_stick_fill : md.stick_fill; ++ break; + } +- } +- } +- } +- return ExtErr_OK; +-} +- +-static UWord NNPA_pre_write_tensor0(ThreadState* tst, +- UInt msg_idx, +- const struct s390_NNPA_tensor0* t) +-{ +- struct s390_NNPA_mem_dimensions md; +- enum ExtensionError ret; +- +- ret = NNPA_tensor0_size(t, msg_idx, &md); +- if (ret != ExtErr_OK) +- return ret; +- +- PRE_MEM_WRITE(tst, "NNPA(out_tensor)", t->address, md.step[0]); +- return ExtErr_OK; +-} +- +-static void NNPA_post_write_tensor0(ThreadState* tst, +- UInt msg_idx, +- const struct s390_NNPA_tensor0* t) +-{ +- struct s390_NNPA_mem_dimensions md; +- enum ExtensionError ret; +- +- ret = NNPA_tensor0_size(t, msg_idx, &md); +- if (ret != ExtErr_OK) +- return; +- +- for (ULong d0 = 0; d0 < md.used[0]; d0++) { +- for (ULong d1 = 0; d1 < md.used[1]; d1++) { +- for (ULong d2 = 0; d2 < md.used[2]; d2++) { +- for (ULong d3 = 0; d3 < md.used[3]; d3++) { +- ULong addr = t->address + d0 * md.step[1] + d1 * md.step[2] + +- d2 * md.step[3] + d3 * md.step[4]; +- ULong len = NNPA_mem_dim4_size(&md, d0, d1); +- POST_MEM_WRITE(tst, addr, len); ++ for (ULong d2 = 0; d2 < md.dim[2]; d2++) { ++ for (ULong d3 = 0; d3 < md.used_sticks; d3++) { ++ if (md.layout == S390_NNPA_4D_WEIGHTS_TENSOR && ++ d3 == md.used_sticks - 1 && t->dim2 % 2 != 0) { ++ // even elements only ++ for (ULong i = 0; i < len - 1; i += 2) { ++ if (do_write) { ++ POST_MEM_WRITE(tst, addr + i, 1); ++ } else { ++ PRE_MEM_READ(tst, s390_NNPA_errmsg_access[msg_idx], ++ addr + i, 1); ++ } ++ } ++ } else if (do_write) { ++ POST_MEM_WRITE(tst, addr, len); ++ } else { ++ PRE_MEM_READ(tst, s390_NNPA_errmsg_access[msg_idx], addr, ++ len); ++ } ++ addr += 128; ++ } ++ addr += 128 * (md.dim[3] - md.used_sticks); + } + } + } ++ break; ++ case S390_NNPA_4D_GENERIC_TENSOR: ++ if (do_write) { ++ POST_MEM_WRITE(tst, t->address, md.total_size); ++ } else { ++ PRE_MEM_READ(tst, s390_NNPA_errmsg_access[msg_idx], t->address, ++ md.total_size); ++ } ++ break; + } ++ return ExtErr_OK; + } + + static enum ExtensionError do_extension_NNPA(ThreadState* tst, ULong variant) +@@ -571,16 +616,21 @@ static enum ExtensionError do_extension_NNPA(ThreadState* tst, ULong variant) + NNPA_dtypes_layouts, sizeof(NNPA_dtypes_layouts)); + s390_filter_functions(&parms->conversions, sizeof(ULong), + NNPA_conversions, sizeof(NNPA_conversions)); ++ // Clear reserved fields ++ parms->reserved1 = 0; ++ parms->reserved2 = 0; ++ parms->reserved3 = (__typeof__(parms->reserved3)){0}; + } else { +- struct s390_NNPA_parms0* parms = (void*)parms_addr; +- const struct s390_NNPA_parms0 orig_parms = *parms; +- ULong save_area_size = 0; +- UInt in_tensors; +- UInt out_tensors; ++ struct s390_NNPA_parms* parms = (void*)parms_addr; ++ const struct s390_NNPA_parms orig_parms = *parms; ++ ULong save_area_size = 0; ++ UInt in_tensors; ++ UInt out_tensors; ++ enum ExtensionError retval; + + parms_len = 4096; + PRE_MEM_READ(tst, "NNPA(parms)", parms_addr, +- sizeof(struct s390_NNPA_parms0)); ++ sizeof(struct s390_NNPA_parms)); + if (parms->cf) { + PRE_MEM_READ(tst, "NNPA(parms.csb)", parms_addr + 512, + parms_len - 512); +@@ -594,28 +644,39 @@ static enum ExtensionError do_extension_NNPA(ThreadState* tst, ULong variant) + case S390_NNPA_DIV: + case S390_NNPA_MIN: + case S390_NNPA_MAX: ++ case S390_NNPA_NORM: + in_tensors = 2; + out_tensors = 1; + break; + case S390_NNPA_LOG: + case S390_NNPA_EXP: ++ case S390_NNPA_SQRT: ++ case S390_NNPA_INVSQRT: + case S390_NNPA_RELU: + case S390_NNPA_TANH: + case S390_NNPA_SIGMOID: ++ case S390_NNPA_GELU: + in_tensors = 1; + out_tensors = 1; + break; + case S390_NNPA_SOFTMAX: ++ case S390_NNPA_REDUCE: + in_tensors = 1; + out_tensors = 1; + save_area_size = 8192; + break; + case S390_NNPA_BATCHNORM: ++ case S390_NNPA_LAYERNORM: + in_tensors = 3; + out_tensors = 1; + break; ++ case S390_NNPA_MOMENTS: ++ in_tensors = 1; ++ out_tensors = 2; ++ break; + case S390_NNPA_MAXPOOL2D: + case S390_NNPA_AVGPOOL2D: ++ case S390_NNPA_TRANSFORM: + in_tensors = 1; + out_tensors = 1; + break; +@@ -627,6 +688,7 @@ static enum ExtensionError do_extension_NNPA(ThreadState* tst, ULong variant) + case S390_NNPA_CONVOLUTION: + case S390_NNPA_MATMUL_OP: + case S390_NNPA_MATMUL_OP_BCAST23: ++ case S390_NNPA_MATMUL_OP_BCAST1: + in_tensors = 3; + out_tensors = 1; + break; +@@ -635,16 +697,20 @@ static enum ExtensionError do_extension_NNPA(ThreadState* tst, ULong variant) + } + + for (UInt i = 0; i < in_tensors; i++) { +- enum ExtensionError retval = +- NNPA_pre_read_tensor0(tst, s390_NNPA_message_in + i, &parms->in[i]); ++ retval = NNPA_track_tensor(tst, s390_NNPA_message_in + i, ++ &parms->in[i], False); + if (retval != ExtErr_OK) + return retval; + } + for (UInt i = 0; i < out_tensors; i++) { +- enum ExtensionError retval = NNPA_pre_write_tensor0( +- tst, s390_NNPA_message_out + i, &parms->out[i]); ++ UInt msg_idx = s390_NNPA_message_out + i; ++ struct s390_NNPA_mem_dimensions md; ++ ++ retval = NNPA_tensor_size(&parms->out[i], msg_idx, &md); + if (retval != ExtErr_OK) + return retval; ++ PRE_MEM_WRITE(tst, s390_NNPA_errmsg_access[msg_idx], ++ parms->out[i].address, md.total_size); + } + if (save_area_size != 0) { + PRE_MEM_WRITE(tst, "NNPA(save_area)", parms->save_area_address, +@@ -653,8 +719,10 @@ static enum ExtensionError do_extension_NNPA(ThreadState* tst, ULong variant) + cc = do_NNPA_insn(&gpr0, parms_addr); + if (cc == 0) { + for (UInt i = 0; i < out_tensors; i++) { +- NNPA_post_write_tensor0(tst, s390_NNPA_message_out + i, +- &orig_parms.out[i]); ++ retval = NNPA_track_tensor(tst, s390_NNPA_message_out + i, ++ &orig_parms.out[i], True); ++ if (retval != ExtErr_OK) ++ return retval; + } + } + } +-- +2.50.1 + diff --git a/SOURCES/0002-vgdb.c-fork_and_exec_valgrind-Fix-off-by-one-error-w.patch b/SOURCES/0002-vgdb.c-fork_and_exec_valgrind-Fix-off-by-one-error-w.patch deleted file mode 100644 index 30fd79d..0000000 --- a/SOURCES/0002-vgdb.c-fork_and_exec_valgrind-Fix-off-by-one-error-w.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 2cb0bee2d7722b57956f66a0795b5b9106f88afc Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Tue, 12 Nov 2024 13:23:03 +0100 -Subject: [PATCH 02/11] vgdb.c (fork_and_exec_valgrind): Fix off-by-one error - write - -commit 646978d9adc5 ("vgdb: Handle EINTR and EAGAIN more -consistently") introduced an off-by-one issue trying to write back the -error from child to parent. - -Instead of +1 it should have been +written (which initially is zero). - -This is in an "should never happen" path, so hopefully didn't really -cause issues. But if it did happen the parent would have gotten the -wrong error code. - -(cherry picked from commit f4fe5faf3d0f45b3824bbb9070232682df52a582) ---- - coregrind/vgdb.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c -index 786ead160d34..112f23fe6ba1 100644 ---- a/coregrind/vgdb.c -+++ b/coregrind/vgdb.c -@@ -1368,7 +1368,7 @@ int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, - // We try to write the result to the parent, but always exit. - size_t written = 0; - while (written < sizeof (int)) { -- ssize_t nrw = write (pipefd[1], ((char *) &err) + 1, -+ ssize_t nrw = write (pipefd[1], ((char *) &err) + written, - sizeof (int) - written); - if (nrw == -1) { - if (errno == EINTR || errno == EAGAIN) --- -2.47.0 - diff --git a/SOURCES/0003-Add-several-missing-syscall-hooks-to-ppc64-linux.patch b/SOURCES/0003-Add-several-missing-syscall-hooks-to-ppc64-linux.patch new file mode 100644 index 0000000..7331e2b --- /dev/null +++ b/SOURCES/0003-Add-several-missing-syscall-hooks-to-ppc64-linux.patch @@ -0,0 +1,102 @@ +From 5c912fcfaff2c7c34232562a118fa5722c6df995 Mon Sep 17 00:00:00 2001 +From: Martin Cermak +Date: Fri, 8 Aug 2025 23:46:53 +0200 +Subject: [PATCH 3/3] Add several missing syscall hooks to ppc64-linux + +Specifically: + +sys_getrlimit +sys_mincore +sys_tkill +sys_unshare +sys_splice +sys_tee +sys_vmsplice +sys_fanotify_init +sys_fanotify_mark +sys_kcmp +sys_bpf + +https://bugs.kde.org/show_bug.cgi?id=508030 +(cherry picked from commit 4363549490ecaeaa6c3048beeb8c5edcec33ec06) +--- + NEWS | 1 + + coregrind/m_syswrap/syswrap-ppc64-linux.c | 14 +++++++++++--- + 2 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/NEWS b/NEWS +index 4e6e6c6d2387..3eea6bb1b709 100644 +--- a/NEWS ++++ b/NEWS +@@ -6,6 +6,7 @@ Branch 3.25.x + The following bugs have been fixed or resolved on this branch. + + 503241 s390x: Support z17 changes to the NNPA instruction ++508030 Add several missing syscall hooks to ppc64-linux + + To see details of a given bug, visit + https://bugs.kde.org/show_bug.cgi?id=XXXXXX +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index 007fa6336c0e..03a5e6a822c1 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -691,7 +691,7 @@ static SyscallTableEntry syscall_table[] = { + // _____(__NR_sethostname, sys_sethostname), // 74 + + GENX_(__NR_setrlimit, sys_setrlimit), // 75 +-// _____(__NR_getrlimit, sys_getrlimit), // 76 ++ GENXY(__NR_getrlimit, sys_getrlimit), // 76 + GENXY(__NR_getrusage, sys_getrusage), // 77 + GENXY(__NR_gettimeofday, sys_gettimeofday), // 78 + // _____(__NR_settimeofday, sys_settimeofday), // 79 +@@ -847,9 +847,9 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_fcntl64, sys_fcntl64), // 204 !!!!?? 32bit only */ + + GENX_(__NR_madvise, sys_madvise), // 205 +-// _____(__NR_mincore, sys_mincore), // 206 ++ GENXY(__NR_mincore, sys_mincore), // 206 + LINX_(__NR_gettid, sys_gettid), // 207 +-// _____(__NR_tkill, sys_tkill), // 208 ++ LINXY(__NR_tkill, sys_tkill), // 208 + LINX_(__NR_setxattr, sys_setxattr), // 209 + + LINX_(__NR_lsetxattr, sys_lsetxattr), // 210 +@@ -934,6 +934,10 @@ static SyscallTableEntry syscall_table[] = { + + LINXY(__NR_pselect6, sys_pselect6), // 280 + LINXY(__NR_ppoll, sys_ppoll), // 281 ++ LINX_(__NR_unshare, sys_unshare), // 282 ++ LINX_(__NR_splice, sys_splice), // 283 ++ LINX_(__NR_tee, sys_tee), // 284 ++ LINXY(__NR_vmsplice, sys_vmsplice), // 285 + + LINXY(__NR_openat, sys_openat), // 286 + LINX_(__NR_mkdirat, sys_mkdirat), // 287 +@@ -972,6 +976,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_preadv, sys_preadv), // 320 + LINX_(__NR_pwritev, sys_pwritev), // 321 + LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322 ++ LINXY(__NR_fanotify_init, sys_fanotify_init), // 323 ++ LINX_(__NR_fanotify_mark, sys_fanotify_mark), // 324 + + LINXY(__NR_prlimit64, sys_prlimit64), // 325 + LINXY(__NR_socket, sys_socket), // 326 +@@ -1001,6 +1007,7 @@ static SyscallTableEntry syscall_table[] = { + + LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 + LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352 ++ LINX_(__NR_kcmp, sys_kcmp), // 354 + + LINX_(__NR_sched_setattr, sys_sched_setattr), // 355 + LINXY(__NR_sched_getattr, sys_sched_getattr), // 356 +@@ -1008,6 +1015,7 @@ static SyscallTableEntry syscall_table[] = { + + LINXY(__NR_getrandom, sys_getrandom), // 359 + LINXY(__NR_memfd_create, sys_memfd_create), // 360 ++ LINXY(__NR_bpf, sys_bpf), // 361 + + LINX_(__NR_execveat, sys_execveat), // 362 + +-- +2.50.1 + diff --git a/SOURCES/0003-vgdb.c-fork_and_exec_valgrind-Fix-another-off-by-one.patch b/SOURCES/0003-vgdb.c-fork_and_exec_valgrind-Fix-another-off-by-one.patch deleted file mode 100644 index d04870f..0000000 --- a/SOURCES/0003-vgdb.c-fork_and_exec_valgrind-Fix-another-off-by-one.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 8b08da73cf3d72439c4f750c96ed2f088ef1bbec Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Tue, 12 Nov 2024 13:34:09 +0100 -Subject: [PATCH 03/11] vgdb.c (fork_and_exec_valgrind): Fix another off-by-one - error write - -commit 646978d9adc5 ("vgdb: Handle EINTR and EAGAIN more -consistently") introduced another off-by-one issue trying to write -back the error from child to parent. - -Instead of +1 it should have been +written (which initially is zero). - -This is when the child needs to do a chdir and that chdir fails. If -that happens the parent would have gotten the wrong error code. - -(cherry picked from commit 747ca4eb5fed5dd58a14391a997bb9e658e3b1c8) ---- - coregrind/vgdb.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c -index 112f23fe6ba1..cc945c8dfafa 100644 ---- a/coregrind/vgdb.c -+++ b/coregrind/vgdb.c -@@ -1289,7 +1289,7 @@ int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, - // We try to write the result to the parent, but always exit. - size_t written = 0; - while (written < sizeof (int)) { -- int nrw = write (pipefd[1], ((char *)&err) + 1, -+ int nrw = write (pipefd[1], ((char *)&err) + written, - sizeof (int) - written); - if (nrw == -1) { - if (errno == EINTR || errno == EAGAIN) --- -2.47.0 - diff --git a/SOURCES/0004-regtest-add-a-fdleak-filter-for-write-on-write-on-li.patch b/SOURCES/0004-regtest-add-a-fdleak-filter-for-write-on-write-on-li.patch deleted file mode 100644 index 2a8838a..0000000 --- a/SOURCES/0004-regtest-add-a-fdleak-filter-for-write-on-write-on-li.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 7e79bb6e6b80eb43138cbbb64737433f9e036cd4 Mon Sep 17 00:00:00 2001 -From: Paul Floyd -Date: Thu, 21 Nov 2024 08:44:04 +0100 -Subject: [PATCH 04/11] regtest: add a fdleak filter for write on write on - linux arm64 - -(cherry picked from commit 9150b3c7cfad2fdbeb7cf707175c359ee12d8f75) ---- - none/tests/filter_fdleak | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/none/tests/filter_fdleak b/none/tests/filter_fdleak -index d26937bccd38..72923aa730c8 100755 ---- a/none/tests/filter_fdleak -+++ b/none/tests/filter_fdleak -@@ -19,6 +19,8 @@ perl -p -e 's/socket\.c:[1-9][0-9]*/in \/...libc.../' | - # arm systems substitute open for creat - perl -p -e 's/open \(open64\.c:[1-9][0-9]*\)/creat (in \/...libc...)/' | - perl -p -e "s/: open \(/: creat (/" | -+# arm64 write resolved to file:line with debuginfo -+perl -p -e "s/write\.c:[1-9][0-9]*/in \/...libc.../" | - - # FreeBSD specific fdleak filters - perl -p -e 's/ _close / close /;s/ _openat / creat /;s/internet/AF_INET socket 4: 127.0.0.1:... <-> 127.0.0.1:.../' | --- -2.47.0 - diff --git a/SOURCES/0005-Add-exp-and-supp-patterns-for-missing-main-frame-for.patch b/SOURCES/0005-Add-exp-and-supp-patterns-for-missing-main-frame-for.patch deleted file mode 100644 index 22efd08..0000000 --- a/SOURCES/0005-Add-exp-and-supp-patterns-for-missing-main-frame-for.patch +++ /dev/null @@ -1,491 +0,0 @@ -From ba15b8fe7d6fabfb73424a616de18a752a56430a Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sat, 23 Nov 2024 21:28:13 +0100 -Subject: [PATCH 05/11] Add exp and supp patterns for missing main frame for - ppc64le - -In some cases on ppc64le we are missing the main frame. -Add alternative .exp-ppc64le variants for socket_close_xml, -fdleak_cmsg_xml and fdleak_ipv4_xml. And extra suppressions -without a main frame for fdleak_cmsg_supp. - -See also commit 04d30049b "Filter away "main" differences in filter_fdleak" - -(cherry picked from commit e6960c2e41b103ab8d393cbe13dc6473fb89bffc) ---- - none/tests/fdleak_cmsg_supp.supp | 47 ++++++ - none/tests/fdleak_cmsg_xml.stderr.exp-ppc64le | 147 ++++++++++++++++++ - none/tests/fdleak_ipv4_xml.stderr.exp-ppc64le | 139 +++++++++++++++++ - .../tests/socket_close_xml.stderr.exp-ppc64le | 98 ++++++++++++ - 4 files changed, 431 insertions(+) - create mode 100644 none/tests/fdleak_cmsg_xml.stderr.exp-ppc64le - create mode 100644 none/tests/fdleak_ipv4_xml.stderr.exp-ppc64le - create mode 100644 none/tests/socket_close_xml.stderr.exp-ppc64le - -diff --git a/none/tests/fdleak_cmsg_supp.supp b/none/tests/fdleak_cmsg_supp.supp -index 92fbacabdb78..a169fd888bcc 100644 ---- a/none/tests/fdleak_cmsg_supp.supp -+++ b/none/tests/fdleak_cmsg_supp.supp -@@ -12,6 +12,13 @@ - fun:server - fun:main - } -+{ -+ sup2-ppc64le -+ CoreError:FdNotClosed -+ fun:socket -+ fun:server -+ #fun:main -+} - { - sup3 - CoreError:FdNotClosed -@@ -42,3 +49,43 @@ - fun:client - fun:main - } -+{ -+ sup6-ppc64le -+ CoreError:FdNotClosed -+ fun:socket -+ fun:client -+ #fun:main -+} -+{ -+ sup7 -+ CoreError:FdNotClosed -+ fun:_so_socket -+ fun:__xnet_socket -+ fun:client -+ fun:main -+} -+{ -+ sup8 -+ CoreError:FdNotClosed -+ fun:__so_recvmsg -+ fun:__xnet_recvmsg -+ fun:client -+ fun:main -+} -+{ -+ sup9 -+ CoreError:FdNotClosed -+ fun:_so_socket -+ fun:__xnet_socket -+ fun:server -+ fun:main -+} -+{ -+ sup10 -+ CoreError:FdNotClosed -+ fun:__so_accept -+ fun:accept -+ fun:server -+ fun:main -+} -+ -diff --git a/none/tests/fdleak_cmsg_xml.stderr.exp-ppc64le b/none/tests/fdleak_cmsg_xml.stderr.exp-ppc64le -new file mode 100644 -index 000000000000..6294094eb92e ---- /dev/null -+++ b/none/tests/fdleak_cmsg_xml.stderr.exp-ppc64le -@@ -0,0 +1,147 @@ -+ -+ -+ -+ -+5 -+none -+ -+ -+ Nulgrind, the minimal Valgrind tool -+ Copyright... -+ Using Valgrind... -+ Command: ./fdleak_cmsg -+ -+ -+... -+... -+none -+ -+ -+ -+ ... -+ --command-line-only=yes -+ --memcheck:leak-check=no -+ --tool=none -+ --track-fds=all -+ --xml=yes -+ --xml-fd=2 -+ --child-silent-after-fork=yes -+ -+ -+ ... -+ -+ -+ -+ -+ RUNNING -+ -+ -+ -+ -+ -+ FINISHED -+ -+ -+ -+ -+ 0x........ -+ ... -+ FdNotClosed -+ 5 -+ ... -+ ... -+ -+ -+ 0x........ -+ ... -+ client -+ ... -+ fdleak_cmsg.c -+ 133 -+ -+ -+ 0x........ -+ ... -+ main -+ ... -+ fdleak_cmsg.c -+ 174 -+ -+ -+ -+ -+ -+ 0x........ -+ ... -+ FdNotClosed -+ 4 -+ ... -+ ... -+ -+ -+ 0x........ -+ ... -+ client -+ ... -+ fdleak_cmsg.c -+ 133 -+ -+ -+ 0x........ -+ ... -+ main -+ ... -+ fdleak_cmsg.c -+ 174 -+ -+ -+ -+ -+ -+ 0x........ -+ ... -+ FdNotClosed -+ 3 -+ ... -+ -+ -+ 0x........ -+ ... -+ client -+ ... -+ fdleak_cmsg.c -+ 112 -+ -+ -+ -+ -+ -+ 0x........ -+ ... -+ FdNotClosed -+ 2 -+ ... -+ ... -+ -+ -+ -+ 0x........ -+ ... -+ FdNotClosed -+ 1 -+ ... -+ ... -+ -+ -+ -+ 0x........ -+ ... -+ FdNotClosed -+ 0 -+ ... -+ ... -+ -+ -+ -+ -+ -diff --git a/none/tests/fdleak_ipv4_xml.stderr.exp-ppc64le b/none/tests/fdleak_ipv4_xml.stderr.exp-ppc64le -new file mode 100644 -index 000000000000..df413b62895c ---- /dev/null -+++ b/none/tests/fdleak_ipv4_xml.stderr.exp-ppc64le -@@ -0,0 +1,139 @@ -+ -+ -+ -+ -+5 -+none -+ -+ -+ Nulgrind, the minimal Valgrind tool -+ Copyright... -+ Using Valgrind... -+ Command: ./fdleak_ipv4 -+ -+ -+... -+... -+none -+ -+ -+ -+ ... -+ --command-line-only=yes -+ --memcheck:leak-check=no -+ --tool=none -+ --track-fds=yes -+ --xml=yes -+ --xml-fd=2 -+ --child-silent-after-fork=yes -+ -+ -+ ... -+ -+ -+ -+ -+ RUNNING -+ -+ -+ -+ -+ 0x........ -+ ... -+ FdBadClose -+ 4 -+ ... -+ -+ -+ 0x........ -+ ... -+ client -+ ... -+ fdleak_ipv4.c -+ 70 -+ -+ -+ 0x........ -+ ... -+ main -+ ... -+ fdleak_ipv4.c -+ 90 -+ -+ -+ Previously closed -+ -+ -+ 0x........ -+ ... -+ client -+ ... -+ fdleak_ipv4.c -+ 69 -+ -+ -+ 0x........ -+ ... -+ main -+ ... -+ fdleak_ipv4.c -+ 90 -+ -+ -+ Originally opened -+ -+ -+ 0x........ -+ ... -+ client -+ ... -+ fdleak_ipv4.c -+ 68 -+ -+ -+ 0x........ -+ ... -+ main -+ ... -+ fdleak_ipv4.c -+ 90 -+ -+ -+ -+ -+ -+ -+ FINISHED -+ -+ -+ -+ -+ 0x........ -+ ... -+ FdNotClosed -+ 3 -+ ... -+ -+ -+ 0x........ -+ ... -+ client -+ ... -+ fdleak_ipv4.c -+ 51 -+ -+ -+ -+ -+ -+ -+ 1 -+ 0x........ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/none/tests/socket_close_xml.stderr.exp-ppc64le b/none/tests/socket_close_xml.stderr.exp-ppc64le -new file mode 100644 -index 000000000000..2f2bc9831e79 ---- /dev/null -+++ b/none/tests/socket_close_xml.stderr.exp-ppc64le -@@ -0,0 +1,98 @@ -+ -+ -+ -+ -+5 -+none -+ -+ -+ Nulgrind, the minimal Valgrind tool -+ Copyright... -+ Using Valgrind... -+ Command: ./socket_close -+ -+ -+... -+... -+none -+ -+ -+ -+ ... -+ --command-line-only=yes -+ --memcheck:leak-check=no -+ --tool=none -+ -q -+ --track-fds=yes -+ --xml=yes -+ --xml-fd=2 -+ -+ -+ ... -+ -+ -+ -+ -+ RUNNING -+ -+ -+ -+Open socket 3 -+close socket_fd 3 -+and close the socket again 3 -+ -+ 0x........ -+ ... -+ FdBadClose -+ 3 -+ ... -+ -+ -+ 0x........ -+ ... -+ main -+ ... -+ socket_close.c -+ 40 -+ -+ -+ Previously closed -+ -+ -+ 0x........ -+ ... -+ main -+ ... -+ socket_close.c -+ 36 -+ -+ -+ Originally opened -+ -+ -+ 0x........ -+ ... -+ open_socket -+ ... -+ socket_close.c -+ 17 -+ -+ -+ -+ -+ -+ -+ FINISHED -+ -+ -+ -+ -+ -+ 1 -+ 0x........ -+ -+ -+ -+ -+ -+ --- -2.47.0 - diff --git a/SOURCES/0006-Add-additional-exp-ppc64le-files-to-EXTRA_DIST.patch b/SOURCES/0006-Add-additional-exp-ppc64le-files-to-EXTRA_DIST.patch deleted file mode 100644 index 2a483ba..0000000 --- a/SOURCES/0006-Add-additional-exp-ppc64le-files-to-EXTRA_DIST.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 42f196574aebea451c7e4138b476e042ba302745 Mon Sep 17 00:00:00 2001 -From: Paul Floyd -Date: Sun, 24 Nov 2024 08:10:51 +0100 -Subject: [PATCH 06/11] Add additional exp-ppc64le files to EXTRA_DIST - -(cherry picked from commit 7241959ebb88a588eebe5a9fd35d1642db71474b) ---- - none/tests/Makefile.am | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am -index 59be79e57920..53a6e1f6bc95 100644 ---- a/none/tests/Makefile.am -+++ b/none/tests/Makefile.am -@@ -135,6 +135,7 @@ EXTRA_DIST = \ - faultstatus.vgtest faultstatus.stderr.exp faultstatus.stderr.exp-s390x \ - fcntl_setown.vgtest fcntl_setown.stdout.exp fcntl_setown.stderr.exp \ - fdleak_cmsg.stderr.exp fdleak_cmsg.vgtest \ -+ fdleak_cmsg_xml.stderr.exp-ppc64le \ - fdleak_cmsg_xml.stderr.exp fdleak_cmsg_xml.vgtest \ - fdleak_cmsg_supp.stderr.exp fdleak_cmsg_supp.supp \ - fdleak_cmsg_supp.vgtest \ -@@ -149,6 +150,7 @@ EXTRA_DIST = \ - fdleak_fcntl.stderr.exp fdleak_fcntl.vgtest \ - fdleak_fcntl_xml.stderr.exp fdleak_fcntl_xml.vgtest \ - fdleak_ipv4.stderr.exp fdleak_ipv4.stdout.exp fdleak_ipv4.vgtest \ -+ fdleak_ipv4_xml.stderr.exp-ppc64le \ - fdleak_ipv4_xml.stderr.exp fdleak_ipv4_xml.stdout.exp \ - fdleak_ipv4_xml.vgtest fdleak_ipv4_xml.stderr.exp-nomain \ - fdleak_open.stderr.exp fdleak_open.vgtest \ -@@ -248,6 +250,7 @@ EXTRA_DIST = \ - process_vm_readv_writev.stderr.exp process_vm_readv_writev.vgtest \ - sigprocmask.stderr.exp sigprocmask.vgtest \ - socket_close.stderr.exp socket_close.vgtest \ -+ socket_close_xml.stderr.exp-ppc64le \ - socket_close_xml.stderr.exp socket_close_xml.vgtest \ - file_dclose.stderr.exp file_dclose.vgtest \ - file_dclose_xml.stderr.exp file_dclose_xml.vgtest \ --- -2.47.0 - diff --git a/SOURCES/0007-Add-support-for-landlock_create_ruleset-444-landlock.patch b/SOURCES/0007-Add-support-for-landlock_create_ruleset-444-landlock.patch deleted file mode 100644 index 28377de..0000000 --- a/SOURCES/0007-Add-support-for-landlock_create_ruleset-444-landlock.patch +++ /dev/null @@ -1,358 +0,0 @@ -From 3d72dd780be97bd19331403da60908f295712fc7 Mon Sep 17 00:00:00 2001 -From: Peter Seiderer -Date: Mon, 8 Jul 2024 11:05:47 +0200 -Subject: [PATCH 07/11] Add support for landlock_create_ruleset (444), - landlock_add_rule (445) and landlock_restrict_self (446) syscalls - -- add support for landlock_create_ruleset (444) syscall -- add support for landlock_add_rule (445) syscall -- add support for landlock_restrict_self (446) syscall - -https://bugs.kde.org/show_bug.cgi?id=489913 - -Signed-off-by: Peter Seiderer - -(cherry picked from commit b1453546fe7396e7d4b4b2fc8ec7e64b71d18611) ---- - NEWS | 2 + - coregrind/m_syswrap/priv_syswrap-linux.h | 5 ++ - coregrind/m_syswrap/syswrap-amd64-linux.c | 4 ++ - coregrind/m_syswrap/syswrap-arm-linux.c | 4 ++ - coregrind/m_syswrap/syswrap-arm64-linux.c | 4 ++ - coregrind/m_syswrap/syswrap-linux.c | 48 ++++++++++++++++++++ - coregrind/m_syswrap/syswrap-mips32-linux.c | 4 ++ - coregrind/m_syswrap/syswrap-mips64-linux.c | 5 +- - coregrind/m_syswrap/syswrap-nanomips-linux.c | 3 ++ - coregrind/m_syswrap/syswrap-ppc32-linux.c | 4 ++ - coregrind/m_syswrap/syswrap-ppc64-linux.c | 4 ++ - coregrind/m_syswrap/syswrap-s390x-linux.c | 4 ++ - coregrind/m_syswrap/syswrap-x86-linux.c | 4 ++ - include/Makefile.am | 3 +- - include/pub_tool_vki.h | 1 + - include/vki/vki-linux-landlock.h | 37 +++++++++++++++ - include/vki/vki-scnums-shared-linux.h | 4 ++ - 17 files changed, 138 insertions(+), 2 deletions(-) - create mode 100644 include/vki/vki-linux-landlock.h - -diff --git a/NEWS b/NEWS -index 8362e1d2df41..68cd0c6fa603 100644 ---- a/NEWS -+++ b/NEWS -@@ -5,6 +5,8 @@ Branch 3.24 - - The following bugs have been fixed or resolved on this branch. - -+489913 WARNING: unhandled amd64-linux syscall: 444 (landlock_create_ruleset) -+ - To see details of a given bug, visit - https://bugs.kde.org/show_bug.cgi?id=XXXXXX - where XXXXXX is the bug number as listed above. -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index d50cdcc981b9..221439a0ec33 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -328,6 +328,11 @@ DECL_TEMPLATE(linux, sys_pidfd_open); - DECL_TEMPLATE(linux, sys_close_range); - DECL_TEMPLATE(linux, sys_openat2); - -+// Linux-specific (new in Linux 5.13) -+DECL_TEMPLATE(linux, sys_landlock_create_ruleset) -+DECL_TEMPLATE(linux, sys_landlock_add_rule) -+DECL_TEMPLATE(linux, sys_landlock_restrict_self) -+ - // Linux-specific (new in Linux 5.14) - DECL_TEMPLATE(linux, sys_memfd_secret); - -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 2230baf772b0..9488d3090e80 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -887,6 +887,10 @@ static SyscallTableEntry syscall_table[] = { - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - -+ LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444 -+ LINX_(__NR_landlock_add_rule, sys_landlock_add_rule), // 445 -+ LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), // 446 -+ - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 - - LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index d326fdb9eeda..65f64af99bb7 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1062,6 +1062,10 @@ static SyscallTableEntry syscall_main_table[] = { - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - -+ LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444 -+ LINX_(__NR_landlock_add_rule, sys_landlock_add_rule), // 445 -+ LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), // 446 -+ - LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 - }; - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 05e0e421fa6c..151ae0640b10 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -840,6 +840,10 @@ static SyscallTableEntry syscall_main_table[] = { - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - -+ LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444 -+ LINX_(__NR_landlock_add_rule, sys_landlock_add_rule), // 445 -+ LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), // 446 -+ - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 - - LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index eec8388224ba..70ae837a9454 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -4163,6 +4163,54 @@ POST(sys_memfd_create) - } - } - -+PRE(sys_landlock_create_ruleset) -+{ -+ PRINT("sys_landlock_create_ruleset ( %#" FMT_REGWORD "x, %lu, %lu )", -+ ARG1, ARG2, ARG3); -+ PRE_REG_READ3(long, "landlock_create_ruleset", -+ const struct vki_landlock_ruleset_attr*, attr, -+ vki_size_t, size, vki_uint32_t, flags); -+ PRE_MEM_READ( "landlock_create_ruleset(value)", ARG1, ARG2 ); -+ -+ /* XXX Alternatively we could always fail with EOPNOTSUPP -+ since the rules might interfere with valgrind itself. */ -+} -+ -+POST(sys_landlock_create_ruleset) -+{ -+ /* Returns either the abi version or a file descriptor. */ -+ if (ARG3 != VKI_LANDLOCK_CREATE_RULESET_VERSION) { -+ if (!ML_(fd_allowed)(RES, "landlock_create_ruleset", tid, True)) { -+ VG_(close)(RES); -+ SET_STATUS_Failure( VKI_EMFILE ); -+ } else { -+ if (VG_(clo_track_fds)) -+ ML_(record_fd_open_nameless)(tid, RES); -+ } -+ } -+} -+ -+PRE(sys_landlock_add_rule) -+{ -+ PRINT("sys_landlock_add_rule ( %ld, %lu, %#" FMT_REGWORD "x, %lu )", -+ SARG1, ARG2, ARG3, ARG4); -+ PRE_REG_READ4(long, "landlock_add_rule", -+ int, ruleset_fd, enum vki_landlock_rule_type, rule_type, -+ const void*, rule_attr, vki_uint32_t, flags); -+ if (!ML_(fd_allowed)(ARG1, "landlock_add_rule", tid, False)) -+ SET_STATUS_Failure(VKI_EBADF); -+ /* XXX Depending on rule_type we should also check the given rule_attr. */ -+} -+ -+PRE(sys_landlock_restrict_self) -+{ -+ PRINT("sys_landlock_restrict_self ( %ld, %lu )", SARG1, ARG2); -+ PRE_REG_READ2(long, "landlock_create_ruleset", -+ int, ruleset_fd, vki_uint32_t, flags); -+ if (!ML_(fd_allowed)(ARG1, "landlock_restrict_self", tid, False)) -+ SET_STATUS_Failure(VKI_EBADF); -+} -+ - PRE(sys_memfd_secret) - { - PRINT("sys_memfd_secret ( %#" FMT_REGWORD "x )", ARG1); -diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c -index 421344213676..757b637ba986 100644 ---- a/coregrind/m_syswrap/syswrap-mips32-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips32-linux.c -@@ -1147,6 +1147,10 @@ static SyscallTableEntry syscall_main_table[] = { - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - -+ LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444 -+ LINX_(__NR_landlock_add_rule, sys_landlock_add_rule), // 445 -+ LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), // 446 -+ - LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 - }; - -diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c -index e9bb5c54c59c..f0c5f7e04f4e 100644 ---- a/coregrind/m_syswrap/syswrap-mips64-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips64-linux.c -@@ -824,7 +824,10 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY (__NR_openat2, sys_openat2), - LINXY (__NR_pidfd_getfd, sys_pidfd_getfd), - LINX_ (__NR_faccessat2, sys_faccessat2), -- LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), -+ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), -+ LINXY (__NR_landlock_create_ruleset, sys_landlock_create_ruleset), -+ LINX_ (__NR_landlock_add_rule, sys_landlock_add_rule), -+ LINX_ (__NR_landlock_restrict_self, sys_landlock_restrict_self), - LINX_ (__NR_fchmodat2, sys_fchmodat2), - }; - -diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c -index 36a5c0ca002d..f466aca147e0 100644 ---- a/coregrind/m_syswrap/syswrap-nanomips-linux.c -+++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c -@@ -831,6 +831,9 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_pidfd_getfd, sys_pidfd_getfd), - LINX_ (__NR_faccessat2, sys_faccessat2), - LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), -+ LINXY (__NR_landlock_create_ruleset,sys_landlock_create_ruleset), -+ LINX_ (__NR_landlock_add_rule, sys_landlock_add_rule), -+ LINX_ (__NR_landlock_restrict_self, sys_landlock_restrict_self), - LINX_ (__NR_fchmodat2, sys_fchmodat2), - }; - -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index f7a90c753060..634f288ce0d1 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1069,6 +1069,10 @@ static SyscallTableEntry syscall_table[] = { - - LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - -+ LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444 -+ LINX_(__NR_landlock_add_rule, sys_landlock_add_rule), // 445 -+ LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), // 446 -+ - LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 - }; - -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index 8de95624fa7c..2c2def330ad7 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1035,6 +1035,10 @@ static SyscallTableEntry syscall_table[] = { - - LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - -+ LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444 -+ LINX_(__NR_landlock_add_rule, sys_landlock_add_rule), // 445 -+ LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), // 446 -+ - LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 - }; - -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index 8a1be8cbef54..ca571f0f1a7c 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -875,6 +875,10 @@ static SyscallTableEntry syscall_table[] = { - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - -+ LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444 -+ LINX_(__NR_landlock_add_rule, sys_landlock_add_rule), // 445 -+ LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), // 446 -+ - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 - - LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index 31243a0db373..a23743743abe 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1656,6 +1656,10 @@ static SyscallTableEntry syscall_table[] = { - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - -+ LINXY(__NR_landlock_create_ruleset, sys_landlock_create_ruleset), // 444 -+ LINX_(__NR_landlock_add_rule, sys_landlock_add_rule), // 445 -+ LINX_(__NR_landlock_restrict_self, sys_landlock_restrict_self), // 446 -+ - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 - - LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 -diff --git a/include/Makefile.am b/include/Makefile.am -index 8012d73749b3..5d5162a46eb6 100644 ---- a/include/Makefile.am -+++ b/include/Makefile.am -@@ -107,4 +107,5 @@ nobase_pkginclude_HEADERS = \ - vki/vki-xen-xsm.h \ - vki/vki-xen-x86.h \ - vki/vki-linux-drm.h \ -- vki/vki-linux-io_uring.h -+ vki/vki-linux-io_uring.h \ -+ vki/vki-linux-landlock.h -diff --git a/include/pub_tool_vki.h b/include/pub_tool_vki.h -index 24f99cc09f16..7b6e71e11eb4 100644 ---- a/include/pub_tool_vki.h -+++ b/include/pub_tool_vki.h -@@ -47,6 +47,7 @@ - # include "vki/vki-linux.h" - # include "vki/vki-linux-drm.h" - # include "vki/vki-linux-io_uring.h" -+# include "vki/vki-linux-landlock.h" - #elif defined(VGO_darwin) - # include "vki/vki-darwin.h" - #elif defined(VGO_solaris) -diff --git a/include/vki/vki-linux-landlock.h b/include/vki/vki-linux-landlock.h -new file mode 100644 -index 000000000000..e549ae93eff9 ---- /dev/null -+++ b/include/vki/vki-linux-landlock.h -@@ -0,0 +1,37 @@ -+/* -+ This file is part of Valgrind, a dynamic binary instrumentation framework. -+ -+ Copyright (C) 2024 Peter Seiderer -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public License as -+ published by the Free Software Foundation; either version 2 of the -+ License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, see . -+ -+ The GNU General Public License is contained in the file COPYING. -+*/ -+#ifndef __VKI_LANDLOCK_H -+#define __VKI_LANDLOCK_H -+ -+// Derived from linux-6.9.7/include/uapi/linux/landlock.h -+struct vki_landlock_ruleset_attr { -+ __vki_u64 handled_access_fs; -+ __vki_u64 handled_access_net; -+}; -+ -+enum vki_landlock_rule_type { -+ VKI_LANDLOCK_RULE_PATH_BENEATH = 1, -+ VKI_LANDLOCK_RULE_NET_PORT, -+}; -+ -+#define VKI_LANDLOCK_CREATE_RULESET_VERSION 1 -+ -+#endif -diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h -index 068a2cd12bd6..20346ca71678 100644 ---- a/include/vki/vki-scnums-shared-linux.h -+++ b/include/vki/vki-scnums-shared-linux.h -@@ -48,6 +48,10 @@ - - #define __NR_epoll_pwait2 441 - -+#define __NR_landlock_create_ruleset 444 -+#define __NR_landlock_add_rule 445 -+#define __NR_landlock_restrict_self 446 -+ - #define __NR_memfd_secret 447 - - #define __NR_fchmodat2 452 --- -2.47.0 - diff --git a/SOURCES/0008-helgrind-tests-tc17_sembar.c-Remove-bool-typedef.patch b/SOURCES/0008-helgrind-tests-tc17_sembar.c-Remove-bool-typedef.patch deleted file mode 100644 index 5a02dda..0000000 --- a/SOURCES/0008-helgrind-tests-tc17_sembar.c-Remove-bool-typedef.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 459fa5b82df0d07cf871fc7359a060410052b82e Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sat, 23 Nov 2024 22:37:14 +0100 -Subject: [PATCH 08/11] helgrind/tests/tc17_sembar.c: Remove bool typedef - -Since C23 bool is a keyword. Also bool wasn't actually used. - -tc17_sembar.c:45:14: error: both 'long' and '_Bool' in declaration specifiers - 45 | typedef long bool; - | ^~~~ -tc17_sembar.c:45:1: warning: useless type name in empty declaration - 45 | typedef long bool; - | ^~~~~~~ - -(cherry picked from commit 932bf2c027579c8d933b57ed80bb5842b390bdb3) ---- - helgrind/tests/tc17_sembar.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/helgrind/tests/tc17_sembar.c b/helgrind/tests/tc17_sembar.c -index 36412a07e206..ee40160b082d 100644 ---- a/helgrind/tests/tc17_sembar.c -+++ b/helgrind/tests/tc17_sembar.c -@@ -42,7 +42,7 @@ typedef struct - sem_t* xxx; - } gomp_barrier_t; - --typedef long bool; -+ - - void - gomp_barrier_init (gomp_barrier_t *bar, unsigned count) --- -2.47.0 - diff --git a/SOURCES/0009-drd-tests-swapcontext.c-Rename-typedef-struct-thread.patch b/SOURCES/0009-drd-tests-swapcontext.c-Rename-typedef-struct-thread.patch deleted file mode 100644 index b940eba..0000000 --- a/SOURCES/0009-drd-tests-swapcontext.c-Rename-typedef-struct-thread.patch +++ /dev/null @@ -1,38 +0,0 @@ -From c08e155fdf6641a569053b3a70c52bfae09dd34c Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sat, 23 Nov 2024 22:48:03 +0100 -Subject: [PATCH 09/11] drd/tests/swapcontext.c: Rename typedef struct - thread_local to threadlocal - -Since C23 thread_local is a keyword (thread storage duration). - -swapcontext.c:23:16: error: expected '{' before 'thread_local' - 23 | typedef struct thread_local { - | ^~~~~~~~~~~~ -swapcontext.c:23:16: warning: 'thread_local' is not at beginning of declaration [-Wold-style-declaration] -swapcontext.c:23:16: error: 'thread_local' used with 'typedef' -swapcontext.c:26:3: warning: data definition has no type or storage class - 26 | } thread_local_t; - | ^~~~~~~~~~~~~~ - -(cherry picked from commit 907b985725805f1537396a6d76539bf490cc6c7e) ---- - drd/tests/swapcontext.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drd/tests/swapcontext.c b/drd/tests/swapcontext.c -index 2cb969a5eafa..ec191968cab1 100644 ---- a/drd/tests/swapcontext.c -+++ b/drd/tests/swapcontext.c -@@ -20,7 +20,7 @@ - - #define STACKSIZE (PTHREAD_STACK_MIN + 4096) - --typedef struct thread_local { -+typedef struct threadlocal { - ucontext_t uc[3]; - size_t nrsw; - } thread_local_t; --- -2.47.0 - diff --git a/SOURCES/0010-none-tests-bug234814.c-sa_handler-take-an-int-as-arg.patch b/SOURCES/0010-none-tests-bug234814.c-sa_handler-take-an-int-as-arg.patch deleted file mode 100644 index 5ae9012..0000000 --- a/SOURCES/0010-none-tests-bug234814.c-sa_handler-take-an-int-as-arg.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 53d667789d369042b1fe45f72102ecb5c16e5d12 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sat, 23 Nov 2024 22:59:21 +0100 -Subject: [PATCH 10/11] none/tests/bug234814.c: sa_handler take an int as - argument - -GCC15 will turn this warning into an error: - -bug234814.c: In function 'main': -bug234814.c:20:18: error: assignment to '__sighandler_t' {aka 'void (*)(int)'} from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types] - 20 | sa.sa_handler = mysigbus; - | ^ - -(cherry picked from commit 8f6cef269b91739f6a2e7f3b4b1e0a429db3e748) ---- - none/tests/bug234814.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/none/tests/bug234814.c b/none/tests/bug234814.c -index 16b561fde6b0..11e0f6779162 100644 ---- a/none/tests/bug234814.c -+++ b/none/tests/bug234814.c -@@ -9,7 +9,7 @@ const char kSigbus[] = "I caught the SIGBUS signal!\n"; - - int GLOB = 3; - --void mysigbus() { -+void mysigbus(int signum) { - write(1, kSigbus, sizeof(kSigbus)-1); - GLOB--; - return; --- -2.47.0 - diff --git a/SOURCES/0011-Add-open_tree-move_mount-fsopen-fsconfig-fsmount-fsp.patch b/SOURCES/0011-Add-open_tree-move_mount-fsopen-fsconfig-fsmount-fsp.patch deleted file mode 100644 index a1be881..0000000 --- a/SOURCES/0011-Add-open_tree-move_mount-fsopen-fsconfig-fsmount-fsp.patch +++ /dev/null @@ -1,398 +0,0 @@ -From 349b57d3a8c8d2df23128d4b03eca91b629629e1 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Tue, 26 Nov 2024 19:00:34 +0100 -Subject: [PATCH 11/11] Add open_tree, move_mount, fsopen, fsconfig, fsmount, - fspick linux syswraps - -Shared linux syscalls implementing various file system mount tasks. -Since linux kernel version 5.2. - -Check arguments and track file descriptors. - -https://bugs.kde.org/show_bug.cgi?id=494246 - -(cherry picked from commit 4044bcea0427853fc44a3d02a0fc0b2a81935452) ---- - NEWS | 1 + - coregrind/m_syswrap/priv_syswrap-linux.h | 8 + - coregrind/m_syswrap/syswrap-amd64-linux.c | 6 + - coregrind/m_syswrap/syswrap-arm-linux.c | 7 +- - coregrind/m_syswrap/syswrap-arm64-linux.c | 7 +- - coregrind/m_syswrap/syswrap-linux.c | 146 +++++++++++++++++++ - coregrind/m_syswrap/syswrap-mips32-linux.c | 7 +- - coregrind/m_syswrap/syswrap-mips64-linux.c | 6 + - coregrind/m_syswrap/syswrap-nanomips-linux.c | 6 + - coregrind/m_syswrap/syswrap-ppc32-linux.c | 7 +- - coregrind/m_syswrap/syswrap-ppc64-linux.c | 7 +- - coregrind/m_syswrap/syswrap-s390x-linux.c | 7 +- - coregrind/m_syswrap/syswrap-x86-linux.c | 7 +- - 13 files changed, 215 insertions(+), 7 deletions(-) - -diff --git a/NEWS b/NEWS -index 68cd0c6fa603..7f1334aa0f07 100644 ---- a/NEWS -+++ b/NEWS -@@ -6,6 +6,7 @@ Branch 3.24 - The following bugs have been fixed or resolved on this branch. - - 489913 WARNING: unhandled amd64-linux syscall: 444 (landlock_create_ruleset) -+494246 syscall fsopen not wrapped - - To see details of a given bug, visit - https://bugs.kde.org/show_bug.cgi?id=XXXXXX -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index 221439a0ec33..1bdd9a94ec19 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -321,6 +321,14 @@ DECL_TEMPLATE(linux, sys_io_uring_setup); - DECL_TEMPLATE(linux, sys_io_uring_enter); - DECL_TEMPLATE(linux, sys_io_uring_register); - -+// open_tree and friends (shared linux syscalls) -+DECL_TEMPLATE(linux, sys_open_tree); -+DECL_TEMPLATE(linux, sys_move_mount); -+DECL_TEMPLATE(linux, sys_fsopen); -+DECL_TEMPLATE(linux, sys_fsconfig); -+DECL_TEMPLATE(linux, sys_fsmount); -+DECL_TEMPLATE(linux, sys_fspick); -+ - // Linux-specific (new in Linux 5.3) - DECL_TEMPLATE(linux, sys_pidfd_open); - -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 9488d3090e80..bdba41826ad8 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -877,6 +877,12 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -+ LINXY(__NR_open_tree, sys_open_tree), // 428 -+ LINX_(__NR_move_mount, sys_move_mount), // 429 -+ LINXY(__NR_fsopen, sys_fsopen), // 430 -+ LINX_(__NR_fsconfig, sys_fsconfig), // 431 -+ LINXY(__NR_fsmount, sys_fsmount), // 432 -+ LINXY(__NR_fspick, sys_fspick), // 433 - - LINXY(__NR_pidfd_open, sys_pidfd_open), // 434 - GENX_(__NR_clone3, sys_ni_syscall), // 435 -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 65f64af99bb7..108e1f91e5e9 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1052,7 +1052,12 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -- -+ LINXY(__NR_open_tree, sys_open_tree), // 428 -+ LINX_(__NR_move_mount, sys_move_mount), // 429 -+ LINXY(__NR_fsopen, sys_fsopen), // 430 -+ LINX_(__NR_fsconfig, sys_fsconfig), // 431 -+ LINXY(__NR_fsmount, sys_fsmount), // 432 -+ LINXY(__NR_fspick, sys_fspick), // 433 - LINXY(__NR_pidfd_open, sys_pidfd_open), // 434 - GENX_(__NR_clone3, sys_ni_syscall), // 435 - LINXY(__NR_close_range, sys_close_range), // 436 -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 151ae0640b10..23b0b6b51c10 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -830,7 +830,12 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -- -+ LINXY(__NR_open_tree, sys_open_tree), // 428 -+ LINX_(__NR_move_mount, sys_move_mount), // 429 -+ LINXY(__NR_fsopen, sys_fsopen), // 430 -+ LINX_(__NR_fsconfig, sys_fsconfig), // 431 -+ LINXY(__NR_fsmount, sys_fsmount), // 432 -+ LINXY(__NR_fspick, sys_fspick), // 433 - LINXY(__NR_pidfd_open, sys_pidfd_open), // 434 - GENX_(__NR_clone3, sys_ni_syscall), // 435 - LINXY(__NR_close_range, sys_close_range), // 436 -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 70ae837a9454..57672f167126 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -13836,6 +13836,152 @@ POST(sys_pidfd_getfd) - } - } - -+/* int open_tree (int dfd, const char *filename, unsigned int flags) */ -+PRE(sys_open_tree) -+{ -+ PRINT("sys_open_tree ( %ld, %#" FMT_REGWORD "x(%s), %ld", -+ SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3); -+ PRE_REG_READ3(long, "open_tree", -+ int, dfd, const char *, filename, int, flags); -+ PRE_MEM_RASCIIZ( "open_tree(filename)", ARG2); -+ /* For absolute filenames, dfd is ignored. If dfd is AT_FDCWD, -+ filename is relative to cwd. When comparing dfd against AT_FDCWD, -+ be sure only to compare the bottom 32 bits. */ -+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 ) -+ && *(Char *)(Addr)ARG2 != '/' -+ && ((Int)ARG1) != ((Int)VKI_AT_FDCWD) -+ && !ML_(fd_allowed)(ARG1, "open_tree", tid, False)) -+ SET_STATUS_Failure( VKI_EBADF ); -+} -+ -+POST(sys_open_tree) -+{ -+ if (!ML_(fd_allowed)(RES, "open_tree", tid, True)) { -+ VG_(close)(RES); -+ SET_STATUS_Failure( VKI_EMFILE ); -+ } else { -+ if (VG_(clo_track_fds)) -+ ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)(Addr)ARG2); -+ } -+} -+ -+/* int move_mount (int from_dfd, const char *from_pathname, -+ int to_dfd, const char *to_pathname, -+ unsigned int flags) */ -+PRE(sys_move_mount) -+{ -+ PRINT("sys_move_mount ( %ld, %#" FMT_REGWORD "x(%s), " -+ "%ld, %#" FMT_REGWORD "x(%s), %ld", -+ SARG1, ARG2, (HChar*)(Addr)ARG2, -+ SARG3, ARG4, (HChar*)(Addr)ARG4, SARG5); -+ PRE_REG_READ5(long, "mount_move", -+ int, from_dfd, const char *, from_pathname, -+ int, to_dfd, const char*, to_pathname, int, flags); -+ PRE_MEM_RASCIIZ( "mount_move(from_pathname)", ARG2); -+ /* For absolute filenames, from_dfd is ignored. If from_dfd is AT_FDCWD, -+ from_pathname is relative to cwd. When comparing from_dfd against -+ AT_FDCWD, be sure only to compare the bottom 32 bits. */ -+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 ) -+ && *(Char *)(Addr)ARG2 != '/' -+ && ((Int)ARG1) != ((Int)VKI_AT_FDCWD) -+ && !ML_(fd_allowed)(ARG1, "mount_move", tid, False)) -+ SET_STATUS_Failure( VKI_EBADF ); -+ PRE_MEM_RASCIIZ( "mount_move(from_pathname)", ARG4); -+ /* For absolute filenames, to_dfd is ignored. If to_dfd is AT_FDCWD, -+ to_pathname is relative to cwd. When comparing to_dfd against -+ AT_FDCWD, be sure only to compare the bottom 32 bits. */ -+ if (ML_(safe_to_deref)( (void*)(Addr)ARG4, 1 ) -+ && *(Char *)(Addr)ARG4 != '/' -+ && ((Int)ARG4) != ((Int)VKI_AT_FDCWD) -+ && !ML_(fd_allowed)(ARG3, "mount_move", tid, False)) -+ SET_STATUS_Failure( VKI_EBADF ); -+} -+ -+/* int fsopen (const char *fs_name, unsigned int flags) */ -+PRE(sys_fsopen) -+{ -+ PRINT("sys_fsopen ( %#" FMT_REGWORD "x(%s), %ld", -+ ARG1, (HChar*)(Addr)ARG1, SARG2); -+ PRE_REG_READ2(long, "fsopen", const char *, fs_name, int, flags); -+ PRE_MEM_RASCIIZ( "fsopen(filename)", ARG1); -+} -+ -+POST(sys_fsopen) -+{ -+ if (!ML_(fd_allowed)(RES, "fsopen", tid, True)) { -+ VG_(close)(RES); -+ SET_STATUS_Failure( VKI_EMFILE ); -+ } else { -+ if (VG_(clo_track_fds)) -+ ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)(Addr)ARG1); -+ } -+} -+ -+/* int fsmount (int fd, unsigned int flags, unsigned int ms_flags) */ -+PRE(sys_fsmount) -+{ -+ PRINT("sys_fsmount ( %ld, %ld, %ld", SARG1, SARG2, SARG3); -+ PRE_REG_READ3(long, "fsmount", int, fd, int, flags, int, ms_flags); -+ if (!ML_(fd_allowed)(ARG1, "fsmount", tid, False)) -+ SET_STATUS_Failure( VKI_EBADF ); -+} -+ -+POST(sys_fsmount) -+{ -+ if (!ML_(fd_allowed)(RES, "fsmount", tid, True)) { -+ VG_(close)(RES); -+ SET_STATUS_Failure( VKI_EMFILE ); -+ } else { -+ if (VG_(clo_track_fds)) -+ ML_(record_fd_open_nameless)(tid, RES); -+ } -+} -+ -+/* int fsconfig (int fd, unsigned int cmd, const char *key, -+ const void *value, int aux) */ -+PRE(sys_fsconfig) -+{ -+ PRINT("sys_fsconfig ( %ld, %ld, %#" FMT_REGWORD "x(%s), " -+ "%#" FMT_REGWORD "x, %ld )", -+ SARG1, SARG2, ARG3, (HChar*)(Addr)ARG3, ARG4, SARG6); -+ PRE_REG_READ5(long, "fsconfig", int, fd, int, cmd, -+ const char *, key, const void *, value, int, aux); -+ if (ARG3) -+ PRE_MEM_RASCIIZ( "fsconfig(key)", ARG3); -+ if (!ML_(fd_allowed)(ARG1, "fsconfig", tid, False)) -+ SET_STATUS_Failure( VKI_EBADF ); -+ /* XXX we could also check the value based on the cmd FSCONFIG_... */ -+} -+ -+/* int fspick (int dfd, const char *path, unsigned int flags) */ -+PRE(sys_fspick) -+{ -+ PRINT("sys_fspick ( %ld, %#" FMT_REGWORD "x(%s), %ld", -+ SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3); -+ PRE_REG_READ3(long, "fspick", -+ int, dfd, const char *, filename, int, flags); -+ PRE_MEM_RASCIIZ( "fspick(path)", ARG2); -+ /* For absolute filenames, dfd is ignored. If dfd is AT_FDCWD, -+ path is relative to cwd. When comparing dfd against AT_FDCWD, -+ be sure only to compare the bottom 32 bits. */ -+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 ) -+ && *(Char *)(Addr)ARG2 != '/' -+ && ((Int)ARG1) != ((Int)VKI_AT_FDCWD) -+ && !ML_(fd_allowed)(ARG1, "fspick", tid, False)) -+ SET_STATUS_Failure( VKI_EBADF ); -+} -+ -+POST(sys_fspick) -+{ -+ if (!ML_(fd_allowed)(RES, "fspick", tid, True)) { -+ VG_(close)(RES); -+ SET_STATUS_Failure( VKI_EMFILE ); -+ } else { -+ if (VG_(clo_track_fds)) -+ ML_(record_fd_open_with_given_name)(tid, RES, (HChar*)(Addr)ARG2); -+ } -+} -+ - #undef PRE - #undef POST - -diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c -index 757b637ba986..39ba911aa5e4 100644 ---- a/coregrind/m_syswrap/syswrap-mips32-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips32-linux.c -@@ -1137,7 +1137,12 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -- -+ LINXY(__NR_open_tree, sys_open_tree), // 428 -+ LINX_(__NR_move_mount, sys_move_mount), // 429 -+ LINXY(__NR_fsopen, sys_fsopen), // 430 -+ LINX_(__NR_fsconfig, sys_fsconfig), // 431 -+ LINXY(__NR_fsmount, sys_fsmount), // 432 -+ LINXY(__NR_fspick, sys_fspick), // 433 - LINXY(__NR_pidfd_open, sys_pidfd_open), // 434 - GENX_(__NR_clone3, sys_ni_syscall), // 435 - LINXY(__NR_close_range, sys_close_range), // 436 -diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c -index f0c5f7e04f4e..d603924c5566 100644 ---- a/coregrind/m_syswrap/syswrap-mips64-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips64-linux.c -@@ -818,6 +818,12 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY (__NR_io_uring_setup, sys_io_uring_setup), - LINXY (__NR_io_uring_enter, sys_io_uring_enter), - LINXY (__NR_io_uring_register, sys_io_uring_register), -+ LINXY (__NR_open_tree, sys_open_tree), -+ LINX_ (__NR_move_mount, sys_move_mount), -+ LINXY (__NR_fsopen, sys_fsopen), -+ LINX_ (__NR_fsconfig, sys_fsconfig), -+ LINXY (__NR_fsmount, sys_fsmount), -+ LINXY (__NR_fspick, sys_fspick), - LINXY (__NR_pidfd_open, sys_pidfd_open), - GENX_ (__NR_clone3, sys_ni_syscall), - LINXY (__NR_close_range, sys_close_range), -diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c -index f466aca147e0..853495e981b1 100644 ---- a/coregrind/m_syswrap/syswrap-nanomips-linux.c -+++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c -@@ -824,6 +824,12 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY (__NR_io_uring_setup, sys_io_uring_setup), - LINXY (__NR_io_uring_enter, sys_io_uring_enter), - LINXY (__NR_io_uring_register, sys_io_uring_register), -+ LINXY (__NR_open_tree, sys_open_tree), -+ LINX_ (__NR_move_mount, sys_move_mount), -+ LINXY (__NR_fsopen, sys_fsopen), -+ LINX_ (__NR_fsconfig, sys_fsconfig), -+ LINXY (__NR_fsmount, sys_fsmount), -+ LINXY (__NR_fspick, sys_fspick), - LINXY (__NR_pidfd_open, sys_pidfd_open), - GENX_ (__NR_clone3, sys_ni_syscall), - LINXY (__NR_close_range, sys_close_range), -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index 634f288ce0d1..24d8eb213190 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1059,7 +1059,12 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -- -+ LINXY(__NR_open_tree, sys_open_tree), // 428 -+ LINX_(__NR_move_mount, sys_move_mount), // 429 -+ LINXY(__NR_fsopen, sys_fsopen), // 430 -+ LINX_(__NR_fsconfig, sys_fsconfig), // 431 -+ LINXY(__NR_fsmount, sys_fsmount), // 432 -+ LINXY(__NR_fspick, sys_fspick), // 433 - LINXY(__NR_pidfd_open, sys_pidfd_open), // 434 - GENX_(__NR_clone3, sys_ni_syscall), // 435 - LINXY(__NR_close_range, sys_close_range), // 436 -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index 2c2def330ad7..2a3ed8b92481 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1025,7 +1025,12 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -- -+ LINXY(__NR_open_tree, sys_open_tree), // 428 -+ LINX_(__NR_move_mount, sys_move_mount), // 429 -+ LINXY(__NR_fsopen, sys_fsopen), // 430 -+ LINX_(__NR_fsconfig, sys_fsconfig), // 431 -+ LINXY(__NR_fsmount, sys_fsmount), // 432 -+ LINXY(__NR_fspick, sys_fspick), // 433 - LINXY(__NR_pidfd_open, sys_pidfd_open), // 434 - GENX_(__NR_clone3, sys_ni_syscall), // 435 - LINXY(__NR_close_range, sys_close_range), // 436 -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index ca571f0f1a7c..893306bbdae3 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -865,7 +865,12 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -- -+ LINXY(__NR_open_tree, sys_open_tree), // 428 -+ LINX_(__NR_move_mount, sys_move_mount), // 429 -+ LINXY(__NR_fsopen, sys_fsopen), // 430 -+ LINX_(__NR_fsconfig, sys_fsconfig), // 431 -+ LINXY(__NR_fsmount, sys_fsmount), // 432 -+ LINXY(__NR_fspick, sys_fspick), // 433 - LINXY(__NR_pidfd_open, sys_pidfd_open), // 434 - GENX_(__NR_clone3, sys_ni_syscall), // 435 - LINXY(__NR_close_range, sys_close_range), // 436 -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index a23743743abe..50384817dbe5 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1646,7 +1646,12 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register),// 427 -- -+ LINXY(__NR_open_tree, sys_open_tree), // 428 -+ LINX_(__NR_move_mount, sys_move_mount), // 429 -+ LINXY(__NR_fsopen, sys_fsopen), // 430 -+ LINX_(__NR_fsconfig, sys_fsconfig), // 431 -+ LINXY(__NR_fsmount, sys_fsmount), // 432 -+ LINXY(__NR_fspick, sys_fspick), // 433 - LINXY(__NR_pidfd_open, sys_pidfd_open), // 434 - GENX_(__NR_clone3, sys_ni_syscall), // 435 - LINXY(__NR_close_range, sys_close_range), // 436 --- -2.47.0 - diff --git a/SOURCES/0012-Recognize-new-DWARF5-DW_LANG-constants.patch b/SOURCES/0012-Recognize-new-DWARF5-DW_LANG-constants.patch deleted file mode 100644 index ef89578..0000000 --- a/SOURCES/0012-Recognize-new-DWARF5-DW_LANG-constants.patch +++ /dev/null @@ -1,144 +0,0 @@ -From a2c30f44ac39eb36baa4e831b041fe7cdf25e481 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Fri, 6 Dec 2024 15:39:25 +0100 -Subject: [PATCH 12/14] Recognize new DWARF5 DW_LANG constants - -When using --read-var-info=yes readdwarf3 will try to read and -interpret the CU DW_AT_langauge attribute. Since DWARF5 was released a -number if new language constants have been introduced. See -https://dwarfstd.org/languages.html - -GCC15 might start emitting some of these when switching to C23 by -default. - -When valgrind --read-var-info=yes encounters an unknown DW_LANG -constant it will produce an error and stop processing any further -DWARF. - -Recognize all currently known language constants. In particular -recognize DW_LANG_C17, DW_LANG_C23, DW_LANG_C_plus_plus_17, -DW_LANG_C_plus_plus_20, DW_LANG_C_plus_plus_23, DW_LANG_Fortran18, -DW_LANG_Fortran23, DW_LANG_Ada2005, DW_LANG_Ada2012 and DW_LANG_Rust. - -https://bugs.kde.org/show_bug.cgi?id=497130 - -(cherry picked from commit 7136316123c54aba37fdab166e1bf860e452a4ae) ---- - NEWS | 1 + - coregrind/m_debuginfo/priv_d3basics.h | 31 +++++++++++++++++++++++++++ - coregrind/m_debuginfo/readdwarf3.c | 27 +++++++++++++++++++++-- - 3 files changed, 57 insertions(+), 2 deletions(-) - -diff --git a/NEWS b/NEWS -index 7f1334aa0f07..a25f9b663098 100644 ---- a/NEWS -+++ b/NEWS -@@ -7,6 +7,7 @@ The following bugs have been fixed or resolved on this branch. - - 489913 WARNING: unhandled amd64-linux syscall: 444 (landlock_create_ruleset) - 494246 syscall fsopen not wrapped -+497130 Recognize new DWARF5 DW_LANG constants - - To see details of a given bug, visit - https://bugs.kde.org/show_bug.cgi?id=XXXXXX -diff --git a/coregrind/m_debuginfo/priv_d3basics.h b/coregrind/m_debuginfo/priv_d3basics.h -index 3f6e5c72c9e4..34c98728711c 100644 ---- a/coregrind/m_debuginfo/priv_d3basics.h -+++ b/coregrind/m_debuginfo/priv_d3basics.h -@@ -179,6 +179,7 @@ typedef enum dwarf_source_language - /* DWARF 4. */ - DW_LANG_Python = 0x0014, - /* DWARF 5. */ -+ DW_LANG_OpenCL = 0x0015, - DW_LANG_Go = 0x0016, - DW_LANG_Modula3 = 0x0017, - DW_LANG_Haskell = 0x0018, -@@ -195,6 +196,36 @@ typedef enum dwarf_source_language - DW_LANG_Fortran08 = 0x0023, - DW_LANG_RenderScript = 0x0024, - DW_LANG_BLISS = 0x0025, -+ /* Language codes added since DWARF 5. -+ https://dwarfstd.org/languages.html */ -+ DW_LANG_Kotlin = 0x0026, -+ DW_LANG_Zig = 0x0027, -+ DW_LANG_Crystal = 0x0028, -+ DW_LANG_C_plus_plus_17 = 0x002a, -+ DW_LANG_C_plus_plus_20 = 0x002b, -+ DW_LANG_C17 = 0x002c, -+ DW_LANG_Fortran18 = 0x002d, -+ DW_LANG_Ada2005 = 0x002e, -+ DW_LANG_Ada2012 = 0x002f, -+ DW_LANG_HIP = 0x0030, -+ DW_LANG_Assembly = 0x0031, -+ DW_LANG_C_sharp = 0x0032, -+ DW_LANG_Mojo = 0x0033, -+ DW_LANG_GLSL = 0x0034, -+ DW_LANG_GLSL_ES = 0x0035, -+ DW_LANG_HLSL = 0x0036, -+ DW_LANG_OpenCL_CPP = 0x0037, -+ DW_LANG_CPP_for_OpenCL = 0x0038, -+ DW_LANG_SYCL = 0x0039, -+ DW_LANG_C_plus_plus_23 = 0x003a, -+ DW_LANG_Odin = 0x003b, -+ DW_LANG_P4 = 0x003c, -+ DW_LANG_Metal = 0x003d, -+ DW_LANG_C23 = 0x003e, -+ DW_LANG_Fortran23 = 0x003f, -+ DW_LANG_Ruby = 0x0040, -+ DW_LANG_Move = 0x0041, -+ DW_LANG_Hylo = 0x0042, - /* MIPS. */ - DW_LANG_Mips_Assembler = 0x8001, - /* UPC. */ -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index a4b75a8c532b..735896f7c0d3 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -3972,19 +3972,42 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - case DW_LANG_C_plus_plus: case DW_LANG_ObjC: - case DW_LANG_ObjC_plus_plus: case DW_LANG_UPC: - case DW_LANG_Upc: case DW_LANG_C99: case DW_LANG_C11: -+ case DW_LANG_C17: case DW_LANG_C23: - case DW_LANG_C_plus_plus_11: case DW_LANG_C_plus_plus_14: -+ case DW_LANG_C_plus_plus_17: case DW_LANG_C_plus_plus_20: -+ case DW_LANG_C_plus_plus_23: - parser->language = 'C'; break; - case DW_LANG_Fortran77: case DW_LANG_Fortran90: - case DW_LANG_Fortran95: case DW_LANG_Fortran03: -- case DW_LANG_Fortran08: -+ case DW_LANG_Fortran08: case DW_LANG_Fortran18: -+ case DW_LANG_Fortran23: - parser->language = 'F'; break; - case DW_LANG_Ada83: case DW_LANG_Ada95: -+ case DW_LANG_Ada2005: case DW_LANG_Ada2012: - parser->language = 'A'; break; - case DW_LANG_Cobol74: - case DW_LANG_Cobol85: case DW_LANG_Pascal83: - case DW_LANG_Modula2: case DW_LANG_Java: - case DW_LANG_PLI: -- case DW_LANG_D: case DW_LANG_Python: case DW_LANG_Go: -+ case DW_LANG_D: case DW_LANG_Python: -+ case DW_LANG_OpenCL: case DW_LANG_Go: -+ case DW_LANG_Modula3: case DW_LANG_Haskell: -+ case DW_LANG_OCaml: case DW_LANG_Rust: case DW_LANG_Swift: -+ case DW_LANG_Julia: case DW_LANG_Dylan: -+ case DW_LANG_RenderScript: case DW_LANG_BLISS: -+ case DW_LANG_Kotlin: case DW_LANG_Zig: -+ case DW_LANG_Crystal: case DW_LANG_HIP: -+ case DW_LANG_Assembly: case DW_LANG_C_sharp: -+ case DW_LANG_Mojo: case DW_LANG_GLSL: -+ case DW_LANG_GLSL_ES: case DW_LANG_HLSL: -+ case DW_LANG_OpenCL_CPP: case DW_LANG_CPP_for_OpenCL: -+ case DW_LANG_SYCL: -+ case DW_LANG_Odin: -+ case DW_LANG_P4: -+ case DW_LANG_Metal: -+ case DW_LANG_Ruby: -+ case DW_LANG_Move: -+ case DW_LANG_Hylo: - case DW_LANG_Mips_Assembler: - parser->language = '?'; break; - default: --- -2.47.1 - diff --git a/SOURCES/0013-Bug-498317-FdBadUse-is-not-a-valid-CoreError-type-in.patch b/SOURCES/0013-Bug-498317-FdBadUse-is-not-a-valid-CoreError-type-in.patch deleted file mode 100644 index 6c8c3f7..0000000 --- a/SOURCES/0013-Bug-498317-FdBadUse-is-not-a-valid-CoreError-type-in.patch +++ /dev/null @@ -1,147 +0,0 @@ -From febe1ccef09f70777b086f938c03f3e71989a7c8 Mon Sep 17 00:00:00 2001 -From: Paul Floyd -Date: Tue, 7 Jan 2025 08:05:20 +0100 -Subject: [PATCH 13/14] Bug 498317 - FdBadUse is not a valid CoreError type in - a suppression even though it's generated by --gen-suppressions=yes - -https://bugs.kde.org/show_bug.cgi?id=498317 - -(cherry picked from commit 47bdc4a6f3de8e2071561d349fdd5f830388c489) ---- - NEWS | 2 ++ - coregrind/m_errormgr.c | 7 +++++-- - coregrind/m_syswrap/syswrap-freebsd.c | 4 ++++ - none/tests/freebsd/Makefile.am | 4 +++- - none/tests/freebsd/bug498317.c | 7 +++++++ - none/tests/freebsd/bug498317.stderr.exp | 0 - none/tests/freebsd/bug498317.supp | 8 ++++++++ - none/tests/freebsd/bug498317.vgtest | 2 ++ - 9 files changed, 32 insertions(+), 3 deletions(-) - create mode 100644 none/tests/freebsd/bug498317.c - create mode 100644 none/tests/freebsd/bug498317.stderr.exp - create mode 100644 none/tests/freebsd/bug498317.supp - create mode 100644 none/tests/freebsd/bug498317.vgtest - -diff --git a/NEWS b/NEWS -index a25f9b663098..2fb8ce5c724b 100644 ---- a/NEWS -+++ b/NEWS -@@ -8,6 +8,8 @@ The following bugs have been fixed or resolved on this branch. - 489913 WARNING: unhandled amd64-linux syscall: 444 (landlock_create_ruleset) - 494246 syscall fsopen not wrapped - 497130 Recognize new DWARF5 DW_LANG constants -+498317 FdBadUse is not a valid CoreError type in a suppression -+ even though it's generated by --gen-suppressions=yes - - To see details of a given bug, visit - https://bugs.kde.org/show_bug.cgi?id=XXXXXX -diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c -index 4bbcea02474c..2ce919482f77 100644 ---- a/coregrind/m_errormgr.c -+++ b/coregrind/m_errormgr.c -@@ -206,7 +206,8 @@ typedef - // example should new core errors ever be added. - ThreadSupp = -1, /* Matches ThreadErr */ - FdBadCloseSupp = -2, -- FdNotClosedSupp = -3 -+ FdNotClosedSupp = -3, -+ FdBadUseSupp = -4 - } - CoreSuppKind; - -@@ -1033,7 +1034,7 @@ static Bool core_error_matches_suppression(const Error* err, const Supp* su) - return err->ekind == FdBadClose; - case FdNotClosedSupp: - return err->ekind == FdNotClosed; -- case FdBadUse: -+ case FdBadUseSupp: - return err->ekind == FdBadUse; - default: - VG_(umsg)("FATAL: unknown core suppression kind: %d\n", su->skind ); -@@ -1522,6 +1523,8 @@ static void load_one_suppressions_file ( Int clo_suppressions_i ) - supp->skind = FdBadCloseSupp; - else if (VG_STREQ(supp_name, "FdNotClosed")) - supp->skind = FdNotClosedSupp; -+ else if (VG_STREQ(supp_name, "FdBadUse")) -+ supp->skind = FdBadUseSupp; - else - BOMB("unknown core suppression type"); - } -diff --git a/coregrind/m_syswrap/syswrap-freebsd.c b/coregrind/m_syswrap/syswrap-freebsd.c -index 685eb6be076c..a2b79545594e 100644 ---- a/coregrind/m_syswrap/syswrap-freebsd.c -+++ b/coregrind/m_syswrap/syswrap-freebsd.c -@@ -1400,6 +1400,10 @@ PRE(sys_fcntl) - PRINT("sys_fcntl[UNKNOWN] ( %lu, %lu, %lu )", ARG1,ARG2,ARG3); - I_die_here; - } -+ -+ if (!ML_(fd_allowed)(ARG1, "fcntl", tid, False)) { -+ SET_STATUS_Failure (VKI_EBADF); -+ } - } - - POST(sys_fcntl) -diff --git a/none/tests/freebsd/Makefile.am b/none/tests/freebsd/Makefile.am -index fe4f8db69824..1ccfefb57fe2 100644 ---- a/none/tests/freebsd/Makefile.am -+++ b/none/tests/freebsd/Makefile.am -@@ -11,6 +11,8 @@ EXTRA_DIST = \ - auxv.stderr.exp-freebsd131 \ - auxv.stderr.exp-freebsd14 \ - auxv.stderr.exp-arm64 \ -+ bug498317.vgtest bug498317.stderr.exp \ -+ bug498317.supp \ - cp.vgtest \ - cp.stderr.exp \ - osrel.vgtest \ -@@ -61,7 +63,7 @@ EXTRA_DIST = \ - usrstack.stdout.exp - - check_PROGRAMS = \ -- auxv osrel swapcontext hello_world fexecve 452275 usrstack \ -+ auxv bug498317 osrel swapcontext hello_world fexecve 452275 usrstack \ - proc_pid_file sanity_level_thread umtx_shm_creat - - AM_CFLAGS += $(AM_FLAG_M3264_PRI) -diff --git a/none/tests/freebsd/bug498317.c b/none/tests/freebsd/bug498317.c -new file mode 100644 -index 000000000000..36a1a5a1365e ---- /dev/null -+++ b/none/tests/freebsd/bug498317.c -@@ -0,0 +1,7 @@ -+#include -+ -+int main(void) { -+ fcntl(-1, F_GETFD); -+ return 0; -+} -+ -diff --git a/none/tests/freebsd/bug498317.stderr.exp b/none/tests/freebsd/bug498317.stderr.exp -new file mode 100644 -index 000000000000..e69de29bb2d1 -diff --git a/none/tests/freebsd/bug498317.supp b/none/tests/freebsd/bug498317.supp -new file mode 100644 -index 000000000000..b3a99447c2a4 ---- /dev/null -+++ b/none/tests/freebsd/bug498317.supp -@@ -0,0 +1,8 @@ -+{ -+ test suppression of FdBadUse -+ CoreError:FdBadUse -+ fun:_fcntl -+ fun:fcntl -+ fun:main -+} -+ -diff --git a/none/tests/freebsd/bug498317.vgtest b/none/tests/freebsd/bug498317.vgtest -new file mode 100644 -index 000000000000..6579ebce8c56 ---- /dev/null -+++ b/none/tests/freebsd/bug498317.vgtest -@@ -0,0 +1,2 @@ -+prog: bug498317 -+vgopts: -q --- -2.47.1 - diff --git a/SOURCES/0014-linux-support-EVIOCGRAB-ioctl.patch b/SOURCES/0014-linux-support-EVIOCGRAB-ioctl.patch deleted file mode 100644 index 8213dc0..0000000 --- a/SOURCES/0014-linux-support-EVIOCGRAB-ioctl.patch +++ /dev/null @@ -1,60 +0,0 @@ -From b732f86998e39ca8714330f487804428b54c481c Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Wed, 8 Jan 2025 16:52:03 +0100 -Subject: [PATCH 14/14] linux: support EVIOCGRAB ioctl - -EVIOCGRAB just takes an int argument. - -https://bugs.kde.org/show_bug.cgi?id=498143 - -(cherry picked from commit 59eb5a4af60d4beb2c6910a1fa6cdf8d1f3a56f2) ---- - NEWS | 1 + - coregrind/m_syswrap/syswrap-linux.c | 4 ++++ - include/vki/vki-linux.h | 3 +++ - 3 files changed, 8 insertions(+) - -diff --git a/NEWS b/NEWS -index 2fb8ce5c724b..7f9e005c59f4 100644 ---- a/NEWS -+++ b/NEWS -@@ -10,6 +10,7 @@ The following bugs have been fixed or resolved on this branch. - 497130 Recognize new DWARF5 DW_LANG constants - 498317 FdBadUse is not a valid CoreError type in a suppression - even though it's generated by --gen-suppressions=yes -+498143 False positive on EVIOCGRAB ioctl - - To see details of a given bug, visit - https://bugs.kde.org/show_bug.cgi?id=XXXXXX -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 57672f167126..87ab82e6e342 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -10397,6 +10397,10 @@ PRE(sys_ioctl) - break; - } - -+ case VKI_EVIOCGRAB: -+ /* This just takes an int argument. */ -+ break; -+ - default: - /* EVIOC* are variable length and return size written on success */ - switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) { -diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h -index 006f16d92201..d4e1908e1e9c 100644 ---- a/include/vki/vki-linux.h -+++ b/include/vki/vki-linux.h -@@ -3226,6 +3226,9 @@ struct vki_getcpu_cache { - - #define VKI_EVIOCGBIT(ev,len) _VKI_IOC(_VKI_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */ - -+#define VKI_EVIOCGRAB _VKI_IOW('E', 0x90, int) -+/* grab device */ -+ - /* - * Event types - */ --- -2.47.1 - diff --git a/SOURCES/ppc64-strcmp-ld.patch b/SOURCES/ppc64-strcmp-ld.patch new file mode 100644 index 0000000..92c6b7e --- /dev/null +++ b/SOURCES/ppc64-strcmp-ld.patch @@ -0,0 +1,87 @@ +diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c +index 63172b971..857f910cb 100644 +--- a/coregrind/m_redir.c ++++ b/coregrind/m_redir.c +@@ -1508,6 +1508,12 @@ void VG_(redir_initialise) ( void ) + NULL /* not mandatory - so why bother at all? */ + /* glibc-2.5 (FC6, ppc64) seems fine without it */ + ); ++ ++ add_hardwired_spec( ++ "ld64.so.2", "strcmp", ++ (Addr)&VG_(ppc64_linux_REDIR_FOR_strcmp), ++ NULL ++ ); + } + + # elif defined(VGP_arm_linux) +diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S +index 2c2cc0dc2..5e1f2f147 100644 +--- a/coregrind/m_trampoline.S ++++ b/coregrind/m_trampoline.S +@@ -602,8 +602,52 @@ VG_(ppc64_linux_REDIR_FOR_strchr): + .long 0 + .byte 0,0,0,0,0,0,0,0 + .L1end: +- + ++ /* this function is written using the "dotless" ABI convention */ ++ .align 2 ++ .globl VG_(ppc64_linux_REDIR_FOR_strcmp) ++#if !defined VGP_ppc64be_linux || _CALL_ELF == 2 ++ /* Little Endian uses ELF version 2 */ ++ .type VG_(ppc64_linux_REDIR_FOR_strcmp),@function ++VG_(ppc64_linux_REDIR_FOR_strcmp): ++#else ++ /* Big Endian uses ELF version 1 */ ++ .section ".opd","aw" ++ .align 3 ++VG_(ppc64_linux_REDIR_FOR_strcmp): ++ .quad .L.VG_(ppc64_linux_REDIR_FOR_strcmp),.TOC.@tocbase,0 ++ .previous ++ .size VG_(ppc64_linux_REDIR_FOR_strcmp), \ ++ .LFE0-.L.VG_(ppc64_linux_REDIR_FOR_strcmp) ++ .type VG_(ppc64_linux_REDIR_FOR_strcmp), @function ++ ++.L.VG_(ppc64_linux_REDIR_FOR_strcmp): ++#endif ++#if _CALL_ELF == 2 ++0: addis 2,12,.TOC.-0b@ha ++ addi 2,2,.TOC.-0b@l ++ .localentry VG_(ppc64_linux_REDIR_FOR_strcmp), .-VG_(ppc64_linux_REDIR_FOR_strcmp) ++#endif ++.LFB0: ++ .cfi_startproc ++ li 10,0 ++.L3: ++ lbzx 8,3,10 ++ lbzx 9,4,10 ++ cmpwi 0,8,0 ++ beq 0,.L2 ++ cmpw 0,8,9 ++ addi 10,10,1 ++ beq 0,.L3 ++.L2: ++ subf 3,9,8 ++ extsw 3,3 ++ blr ++ .long 0 ++ .byte 0,0,0,0,0,0,0,0 ++ .cfi_endproc ++.LFE0: ++ + .global VG_(trampoline_stuff_end) + VG_(trampoline_stuff_end): + +diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h +index 11d791df7..92b4fc67b 100644 +--- a/coregrind/pub_core_trampoline.h ++++ b/coregrind/pub_core_trampoline.h +@@ -97,6 +97,7 @@ extern void* VG_(ppc32_linux_REDIR_FOR_strchr)( void*, Int ); + #if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) + extern Addr VG_(ppc64_linux_SUBST_FOR_rt_sigreturn); + extern UInt VG_(ppc64_linux_REDIR_FOR_strlen)( void* ); ++extern UInt VG_(ppc64_linux_REDIR_FOR_strcmp)( void*, void* ); + extern void* VG_(ppc64_linux_REDIR_FOR_strchr)( void*, Int ); + /* A label (sans dot) marking the ultra-magical return stub via which + all redirected and wrapped functions are made to "return" on diff --git a/SPECS/valgrind.spec b/SPECS/valgrind.spec index f385bf8..19a2d58 100644 --- a/SPECS/valgrind.spec +++ b/SPECS/valgrind.spec @@ -2,7 +2,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind -Version: 3.24.0 +Version: 3.25.1 Release: 3%{?dist} Epoch: 1 License: GPLv2+ @@ -78,21 +78,14 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch -# VALGRIND_3_24_BRANCH patches -Patch5: 0001-Prepare-NEWS-for-branch-3.24-fixes.patch -Patch6: 0002-vgdb.c-fork_and_exec_valgrind-Fix-off-by-one-error-w.patch -Patch7: 0003-vgdb.c-fork_and_exec_valgrind-Fix-another-off-by-one.patch -Patch8: 0004-regtest-add-a-fdleak-filter-for-write-on-write-on-li.patch -Patch9: 0005-Add-exp-and-supp-patterns-for-missing-main-frame-for.patch -Patch10: 0006-Add-additional-exp-ppc64le-files-to-EXTRA_DIST.patch -Patch11: 0007-Add-support-for-landlock_create_ruleset-444-landlock.patch -Patch12: 0008-helgrind-tests-tc17_sembar.c-Remove-bool-typedef.patch -Patch13: 0009-drd-tests-swapcontext.c-Rename-typedef-struct-thread.patch -Patch14: 0010-none-tests-bug234814.c-sa_handler-take-an-int-as-arg.patch -Patch15: 0011-Add-open_tree-move_mount-fsopen-fsconfig-fsmount-fsp.patch -Patch16: 0012-Recognize-new-DWARF5-DW_LANG-constants.patch -Patch17: 0013-Bug-498317-FdBadUse-is-not-a-valid-CoreError-type-in.patch -Patch18: 0014-linux-support-EVIOCGRAB-ioctl.patch +# VALGRIND_3_25_BRANCH patches +Patch5: 0001-Prepare-NEWS-for-branch-3.25.x-fixes.patch +Patch6: 0002-Bug-503241-s390x-Support-z17-changes-to-the-NNPA-ins.patch +Patch7: 0003-Add-several-missing-syscall-hooks-to-ppc64-linux.patch + +# Proposed upstream patches +# https://bugs.kde.org/show_bug.cgi?id=508145 +Patch101: ppc64-strcmp-ld.patch BuildRequires: make BuildRequires: glibc-devel @@ -132,6 +125,11 @@ BuildRequires: elfutils-debuginfod-client Recommends: elfutils-debuginfod-client %endif +# Optional subpackages +Recommends: %{?scl_prefix}valgrind-docs = %{epoch}:%{version}-%{release} +Recommends: %{?scl_prefix}valgrind-scripts = %{epoch}:%{version}-%{release} +Recommends: %{?scl_prefix}valgrind-gdb = %{epoch}:%{version}-%{release} + # For running the testsuite. # Some of the python scripts require python 3.9+ BuildRequires: python3-devel @@ -141,7 +139,7 @@ BuildRequires: python3-devel # We could use %%valgrind_arches as defined in redhat-rpm-config # But that is really for programs using valgrind, it defines the # set of architectures that valgrind works correctly on. -ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64 +ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64 riscv64 # Define valarch, the architecture name that valgrind uses # And only_arch, the configure option to only build for that arch. @@ -177,6 +175,10 @@ ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64 %define valarch arm64 %define only_arch --enable-only64bit %endif +%ifarch riscv64 +%define valarch riscv64 +%define only_arch --enable-only64bit +%endif %description Valgrind is an instrumentation framework for building dynamic analysis @@ -191,11 +193,43 @@ profiler (callgrind), and a heap profiler (massif). %package devel Summary: Development files for valgrind aware programs -Requires: %{?scl_prefix}valgrind = %{epoch}:%{version}-%{release} +# These are just the header files, so strictly speaking you don't +# need valgrind itself unless you are testing your builds. This used +# to be a Requires, so people might depend on the package pulling in +# the core valgrind package, so make it at least a weak dependency. +Recommends: %{?scl_prefix}valgrind = %{epoch}:%{version}-%{release} %description devel Header files and libraries for development of valgrind aware programs. +%package docs +Summary: Documentation for valgrind tools, scripts and gdb integration +License: GFDL-1.2-or-later + +%description docs +Documentation in html and pdf, plus man pages for valgrind tools and scripts. + +%package scripts +Summary: Scripts for post-processing valgrind tool output +License: GPL-2.0-or-later +# Most scripts can be used as is for post-processing a valgrind tool run. +# But callgrind_control uses vgdb. +Recommends: %{?scl_prefix}valgrind-gdb = %{epoch}:%{version}-%{release} + +%description scripts +Perl and Python scripts for post-processing valgrind tool output. + +%package gdb +Summary: Tools for integrating valgrind and gdb +License: GPL-2.0-or-later +Requires: %{?scl_prefix}valgrind = %{epoch}:%{version}-%{release} +# vgdb can be used without gdb, just to control valgrind. +# But normally you use it together with both valgrind and gdb. +Recommends: gdb + +%description gdb +Tools and support files for integrating valgrind and gdb. + %if %{build_tools_devel} %package tools-devel Summary: Development files for building valgrind tools. @@ -228,17 +262,8 @@ Valgrind User Manual for details. %patch -P5 -p1 %patch -P6 -p1 %patch -P7 -p1 -%patch -P8 -p1 -%patch -P9 -p1 -%patch -P10 -p1 -%patch -P11 -p1 -%patch -P12 -p1 -%patch -P13 -p1 -%patch -P14 -p1 -%patch -P15 -p1 -%patch -P16 -p1 -%patch -P17 -p1 -%patch -P18 -p1 + +%patch -P101 -p1 %build # LTO triggers undefined symbols in valgrind. But valgrind has a @@ -409,18 +434,41 @@ echo ===============END TESTING=============== %{!?_licensedir:%global license %%doc} %files -%license COPYING COPYING.DOCS -%doc NEWS README_* -%doc docs/installed/html docs/installed/*.pdf -%{_bindir}/* +%license COPYING +%{_bindir}/valgrind %dir %{_libexecdir}/valgrind -# Install everything in the libdir except the .so. -# The vgpreload so files might need file mode adjustment. -%{_libexecdir}/valgrind/*[^o] +# Install just the core tools, default suppression and vgpreload libraries. +%{_libexecdir}/valgrind/default.supp +%{_libexecdir}/valgrind/*-*-linux # Turn on executable bit again for vgpreload libraries. # Was disabled in %%install to prevent debuginfo stripping. -%attr(0755,root,root) %{_libexecdir}/valgrind/vgpreload*-%{valarch}-*so +%attr(0755,root,root) %{_libexecdir}/valgrind/vgpreload_*-%{valarch}-linux.so + +%files docs +%license COPYING.DOCS +%doc NEWS README_* +%doc docs/installed/html docs/installed/*.pdf %{_mandir}/man1/* + +%files scripts +%license COPYING +%{_bindir}/callgrind_annotate +%{_bindir}/callgrind_control +%{_bindir}/cg_annotate +%{_bindir}/cg_diff +%{_bindir}/cg_merge +%{_bindir}/ms_print +%{_libexecdir}/valgrind/dh_view.css +%{_libexecdir}/valgrind/dh_view.html +%{_libexecdir}/valgrind/dh_view.js + +%files gdb +%license COPYING +%{_bindir}/valgrind-di-server +%{_bindir}/valgrind-listener +%{_bindir}/vgdb +# gdb register descriptions +%{_libexecdir}/valgrind/*.xml %{_datadir}/gdb/auto-load/valgrind-monitor.py %{_datadir}/gdb/auto-load/valgrind-monitor-def.py @@ -453,24 +501,41 @@ echo ===============END TESTING=============== %{_libdir}/valgrind/libmpiwrap*.so %endif -%if 0%{?rhel} == 6 -%post -# There is a bug in rpm (rhbz#214737) that might cause post to be run -# even thought the binary isn't installed when installing two multilib -# versions at the same time. -if [ -x %{_bindir}/valgrind ]; then -# On RHEL6 the fs equivalency should be setup by the devtoolset meta -# package, but because of a rpm bug (rhbz#924044) it might not work. -%{?scl:/sbin/restorecon %{_bindir}/valgrind}%{!?scl:true} -fi -%endif - %changelog +* Mon Aug 18 2025 Mark Wielaard - 3.25.1-3 +- Add ppc64-strcmp-ld.patch +- Add 0003-Add-several-missing-syscall-hooks-to-ppc64-linux.patch + +* Tue Aug 5 2025 Mark Wielaard - 3.25.1-2 +- Add VALGRIND_3_25_BRANCH patches + - 0001-Prepare-NEWS-for-branch-3.25.x-fixes.patch + - 0002-Bug-503241-s390x-Support-z17-changes-to-the-NNPA-ins.patch + +* Thu May 22 2025 Mark Wielaard - 3.25.1-1 +- Valgrind 3.25.1 final + +* Fri Apr 25 2025 Mark Wielaard - 3.25.0-1 +- Valgrind 3.25.0 final + +* Wed Feb 26 2025 Mark Wielaard - 3.24.0-4 +- Split main valgrind package into several subpackages: + - valgrind now contains just the core tools. + - valgrind-scripts contains the post-processing scripts for callgrind, + cachegrind, massif and dhat which depend on perl and python. + - valgrind-gdb contains the debuginfo client/server and (v)gdb support. + - valgrind-docs contains the man pages, html and pdf manual. +- Adjust Requires/Recommends to subpackages can be installed independently. + - valgrind-devel now Recommends, instead of Requires, valgrind. + - valgrind-gdb Requires valgrind + - valgrind-scripts Recommends valgrind-gdb + - valgrind-gdb Recommends gdb + * Tue Jan 14 2025 Mark Wielaard - 3.24.0-3 - Add more VALGRIND_3_24_BRANCH patches 0012-Recognize-new-DWARF5-DW_LANG-constants.patch 0013-Bug-498317-FdBadUse-is-not-a-valid-CoreError-type-in.patch 0014-linux-support-EVIOCGRAB-ioctl.patch + * Tue Nov 26 2024 Mark Wielaard - 3.24.0-2 - Add VALGRIND_3_24_BRANCH patches 0001-Prepare-NEWS-for-branch-3.24-fixes.patch