--- /dev/null
+#include "defs.h"
+
+#include DEF_MPERS_TYPE(seccomp_fprog_t)
+
+#include "seccomp_fprog.h"
+typedef struct seccomp_fprog seccomp_fprog_t;
+
+#include MPERS_DEFS
+
+MPERS_PRINTER_DECL(bool, fetch_seccomp_fprog)(struct tcb *tcp, const long addr, void *p)
+{
+ struct seccomp_fprog *pfp = p;
+ seccomp_fprog_t mfp;
+
+ if (sizeof(*pfp) == sizeof(mfp))
+ return !umove_or_printaddr(tcp, addr, pfp);
+
+ if (umove_or_printaddr(tcp, addr, &mfp))
+ return false;
+
+ pfp->len = mfp.len;
+ pfp->filter = mfp.filter;
+ return true;
+}
}
}
+#include "seccomp_fprog.h"
+
void
print_seccomp_filter(struct tcb *tcp, unsigned long addr)
{
-#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
- if (current_wordsize == 4) {
- struct {
- unsigned short len;
- uint32_t filter;
- } fprog;
-
- if (!umove_or_printaddr(tcp, addr, &fprog))
- decode_fprog(tcp, fprog.len, fprog.filter);
- } else {
-#endif
- struct {
- unsigned short len;
- unsigned long filter;
- } fprog;
-
- if (!umove_or_printaddr(tcp, addr, &fprog))
- decode_fprog(tcp, fprog.len, fprog.filter);
-#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
- }
-#endif
+ struct seccomp_fprog fprog;
+
+ if (fetch_seccomp_fprog(tcp, addr, &fprog))
+ decode_fprog(tcp, fprog.len, fprog.filter);
}
static void