Re: [PATCH v2 2/3] perf test: fix sys_enter_openat event test for musl

From: Martin Kaiser

Date: Thu Apr 30 2026 - 03:19:57 EST


Thus wrote Ian Rogers (irogers@xxxxxxxxxx):

> On Tue, Apr 28, 2026 at 7:39 AM Martin Kaiser <martin@xxxxxxxxx> wrote:

> > The "syscalls:sys_enter_openat event fields" test calls

> > openat(AT_FDCWD, "/etc/passwd", O_RDONLY | O_DIRECTORY)

> > and verifies that the flags of the captured event are matching.
> > This fails for musl, where the openat syscall wrapper always adds
> > O_LARGEFILE.

> > Update the check to allow for additional flags, the access mode flags
> > must be unchanged.

> > Signed-off-by: Martin Kaiser <martin@xxxxxxxxx>
> > ---
> > v2:
> > - check that access mode is unchanged

> > tools/perf/tests/openat-syscall-tp-fields.c | 5 ++++-
> > 1 file changed, 4 insertions(+), 1 deletion(-)

> > diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c
> > index 2a139d2781a8..5523cf4e9321 100644
> > --- a/tools/perf/tests/openat-syscall-tp-fields.c
> > +++ b/tools/perf/tests/openat-syscall-tp-fields.c
> > @@ -120,7 +120,10 @@ static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused

> > tp_flags = evsel__intval(evsel, &sample, "flags");
> > perf_sample__exit(&sample);
> > - if (flags != tp_flags) {
> > + /* C library wrapper may set additional flags,
> > + access mode must be unchanged */

> I think normal style would be:
> ```
> /*
> * C library ...
> */
> ```

Ok, will fix this if we need another version.

> > + if ((tp_flags & O_ACCMODE) != (flags & O_ACCMODE) ||
> > + (tp_flags & flags) != flags) {

> How can this second condition be true given the first condition?

Sorry if I am missing something obvious.

The O_ACCMODE check verifies that the two lower bits (access mode flags) in
the syscall and in the recorded event are identical.

The second check tests that all flags from the syscall are also set in the
event. Additional flags in the event are ok.

For tp_flags == 0x0 and flags == 0x4, the first condition is false, the second
one is true.

Best regards,
Martin

> Thanks,
> Ian

> > pr_debug("%s: Expected flags=%#x, got %#x\n",
> > __func__, flags, tp_flags);
> > goto out_delete_evlist;
> > --
> > 2.43.7