summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mem.c40
-rw-r--r--src/xlat/madvise_cmds.in111
-rw-r--r--src/xlat/madvise_hppa_generic_cmds.in16
-rw-r--r--src/xlat/madvise_hppa_old_cmds.in12
4 files changed, 93 insertions, 86 deletions
diff --git a/src/mem.c b/src/mem.c
index f98a25e2c..a959bf708 100644
--- a/src/mem.c
+++ b/src/mem.c
@@ -290,6 +290,11 @@ SYS_FUNC(mremap)
}
#include "xlat/madvise_cmds.h"
+#include "xlat/madvise_hppa_generic_cmds.h"
+
+#if defined HPPA
+# include "xlat/madvise_hppa_old_cmds.h"
+#endif
SYS_FUNC(madvise)
{
@@ -302,7 +307,40 @@ SYS_FUNC(madvise)
tprint_arg_next();
/* advice */
- printxval(madvise_cmds, tcp->u_arg[2], "MADV_???");
+ const unsigned int advice = tcp->u_arg[2];
+#if defined HPPA
+ /*
+ * hppa decided to be very special: it used to have its own
+ * definitions for some MADV_* constants (just like Alpha,
+ * for example), but then (see Linux commit v6.2-rc1~39^2~7)
+ * decided to change their values, so their symbolic names
+ * are meaningless for the user now (which would also probably
+ * add spice to debugging old binaries with the newer kernels
+ * "in year 2025 (or later)"), and that forces us to state
+ * explicitly which variant of the constant value is used.
+ */
+ const char *old_cmd = xlookup(madvise_hppa_old_cmds, advice);
+
+ if (old_cmd) {
+ PRINT_VAL_X(advice);
+ if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_RAW)
+ tprintf_comment("old %s", old_cmd);
+ } else {
+ const char *new_cmd = xlookup(madvise_hppa_generic_cmds,
+ advice);
+
+ if (new_cmd) {
+ PRINT_VAL_X(advice);
+ if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_RAW)
+ tprintf_comment("generic %s", new_cmd);
+ } else {
+ printxval(madvise_cmds, advice, "MADV_???");
+ }
+ }
+#else
+ printxvals(advice, "MADV_???",
+ madvise_cmds, madvise_hppa_generic_cmds, NULL);
+#endif
return RVAL_DECODED;
}
diff --git a/src/xlat/madvise_cmds.in b/src/xlat/madvise_cmds.in
index 8a1f9d8e2..decae9bf5 100644
--- a/src/xlat/madvise_cmds.in
+++ b/src/xlat/madvise_cmds.in
@@ -1,91 +1,32 @@
-/* Generated by maint/gen_xlat_defs.sh -f 'd' -p 'MADV_' -c 'asm-generic/mman-common.h' -a 'asm/mman.h' */
-
-MADV_NORMAL 0
-
-MADV_RANDOM 1
-
-MADV_SEQUENTIAL 2
-
-MADV_WILLNEED 3
+#sorted
+MADV_NORMAL 0
+MADV_RANDOM 1
+MADV_SEQUENTIAL 2
+MADV_WILLNEED 3
#if defined __alpha__
-MADV_DONTNEED 6
-#else
-MADV_DONTNEED 4
-#endif
-
-MADV_FREE 8
-
-MADV_REMOVE 9
-
-MADV_DONTFORK 10
-
-MADV_DOFORK 11
-
-#if defined __hppa__
-MADV_MERGEABLE 65
-#else
-MADV_MERGEABLE 12
-#endif
-
-#if defined __hppa__
-MADV_UNMERGEABLE 66
-#else
-MADV_UNMERGEABLE 13
-#endif
-
-#if defined __hppa__
-MADV_HUGEPAGE 67
-#else
-MADV_HUGEPAGE 14
-#endif
-
-#if defined __hppa__
-MADV_NOHUGEPAGE 68
-#else
-MADV_NOHUGEPAGE 15
-#endif
-
-#if defined __hppa__
-MADV_DONTDUMP 69
-#else
-MADV_DONTDUMP 16
-#endif
-
-#if defined __hppa__
-MADV_DODUMP 70
-#else
-MADV_DODUMP 17
-#endif
-
-#if defined __hppa__
-MADV_WIPEONFORK 71
-#else
-MADV_WIPEONFORK 18
-#endif
-
-#if defined __hppa__
-MADV_KEEPONFORK 72
-#else
-MADV_KEEPONFORK 19
-#endif
-
-MADV_COLD 20
-
-MADV_PAGEOUT 21
-
+MADV_DONTNEED 6
+#else
+MADV_DONTNEED 4
+#endif
+
+MADV_FREE 8
+MADV_REMOVE 9
+MADV_DONTFORK 10
+MADV_DOFORK 11
+/* MADV_MERGEABLE 12 - see madvise_hppa_generic_cmds */
+/* MADV_UNMERGEABLE 13 - see madvise_hppa_generic_cmds */
+/* MADV_HUGEPAGE 14 - see madvise_hppa_generic_cmds */
+/* MADV_NOHUGEPAGE 15 - see madvise_hppa_generic_cmds */
+/* MADV_DONTDUMP 16 - see madvise_hppa_generic_cmds */
+/* MADV_DODUMP 17 - see madvise_hppa_generic_cmds */
+/* MADV_WIPEONFORK 18 - see madvise_hppa_generic_cmds */
+/* MADV_KEEPONFORK 19 - see madvise_hppa_generic_cmds */
+MADV_COLD 20
+MADV_PAGEOUT 21
MADV_POPULATE_READ 22
-
MADV_POPULATE_WRITE 23
-
MADV_DONTNEED_LOCKED 24
-
-#if defined __hppa__
-MADV_COLLAPSE 73
-#else
-MADV_COLLAPSE 25
-#endif
-
-MADV_HWPOISON 100
-
+/* MADV_COLLAPSE 25 - see madvise_hppa_generic_cmds */
+MADV_HWPOISON 100
MADV_SOFT_OFFLINE 101
diff --git a/src/xlat/madvise_hppa_generic_cmds.in b/src/xlat/madvise_hppa_generic_cmds.in
new file mode 100644
index 000000000..9740cab9b
--- /dev/null
+++ b/src/xlat/madvise_hppa_generic_cmds.in
@@ -0,0 +1,16 @@
+#unconditional
+#nocheckval
+/*
+ * These values are used on hppa since v6.2-rc1~39^2~7
+ * and on other architectures since their introduction;
+ * see madvise_hppa_old_cmds for the old values.
+ */
+MADV_MERGEABLE 12
+MADV_UNMERGEABLE 13
+MADV_HUGEPAGE 14
+MADV_NOHUGEPAGE 15
+MADV_DONTDUMP 16
+MADV_DODUMP 17
+MADV_WIPEONFORK 18
+MADV_KEEPONFORK 19
+MADV_COLLAPSE 25
diff --git a/src/xlat/madvise_hppa_old_cmds.in b/src/xlat/madvise_hppa_old_cmds.in
new file mode 100644
index 000000000..b939fbba6
--- /dev/null
+++ b/src/xlat/madvise_hppa_old_cmds.in
@@ -0,0 +1,12 @@
+#unconditional
+#nocheckval
+/* These values were used on hppa before v6.2-rc1~39^2~7. */
+MADV_MERGEABLE 65
+MADV_UNMERGEABLE 66
+MADV_HUGEPAGE 67
+MADV_NOHUGEPAGE 68
+MADV_DONTDUMP 69
+MADV_DODUMP 70
+MADV_WIPEONFORK 71
+MADV_KEEPONFORK 72
+MADV_COLLAPSE 73