From c1dd36cfca5c95289bd2ea68ed10d5652fc92c57 Mon Sep 17 00:00:00 2001 From: Pawel Biernacki Date: Mon, 30 Sep 2019 19:03:43 +0000 Subject: [PATCH] libsysdecode: decode PROT_MAX flags Extend libsysdecode to pretty-print PROT_MAX flags and fix decoding of regular protection flags broken since r349240. before: truss: mmap(0x0,40960,0x30000,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34366234624 (0x800632000) kdump: 11439 protmax CALL mmap(0,0xa000,0x30000<>196608,0x21002,0xffffffff,0) after: truss: mmap(0x0,40960,PROT_MAX(PROT_READ|PROT_WRITE)|PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON|MAP_NOCORE,-1,0x0) = 34366234624 (0x800632000) kdump: 11439 protmax CALL mmap(0,0xa000,0x30000,0x21002,0xffffffff,0) Reviewed by: kib (mentor) Approved by: kib (mentor) Differential Revision: https://reviews.freebsd.org/D21706 --- lib/libsysdecode/flags.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/libsysdecode/flags.c b/lib/libsysdecode/flags.c index ae2b5ff057e..957b4a95e66 100644 --- a/lib/libsysdecode/flags.c +++ b/lib/libsysdecode/flags.c @@ -657,8 +657,18 @@ sysdecode_mlockall_flags(FILE *fp, int flags, int *rem) bool sysdecode_mmap_prot(FILE *fp, int prot, int *rem) { + int protm; + bool printed; - return (print_mask_int(fp, mmapprot, prot, rem)); + printed = false; + protm = PROT_MAX_EXTRACT(prot); + if (protm != 0) { + fputs("PROT_MAX(", fp); + printed = print_mask_int(fp, mmapprot, protm, rem); + fputs(")|", fp); + prot = protm; + } + return (print_mask_int(fp, mmapprot, prot, rem) || printed); } bool