Page MenuHomeFreeBSD

D35153.id106483.diff
No OneTemporary

D35153.id106483.diff

Index: usr.bin/kdump/kdump.h
===================================================================
--- usr.bin/kdump/kdump.h
+++ usr.bin/kdump/kdump.h
@@ -77,6 +77,7 @@
u_long value);
#ifdef LINUX_ABI_PRESENT
+bool ktrstruct_linux(char *name, char *data, size_t datalen);
void ktrsyscall_linux(struct ktr_syscall *ktr, register_t **resip,
int *resnarg, char *resc);
#ifdef __amd64__
Index: usr.bin/kdump/kdump.c
===================================================================
--- usr.bin/kdump/kdump.c
+++ usr.bin/kdump/kdump.c
@@ -2056,7 +2056,10 @@
ktrbitset(name, set, datalen);
free(set);
} else {
- printf("unknown structure\n");
+#ifdef LINUX_ABI_PRESENT
+ if (ktrstruct_linux(name, data, datalen) == false)
+#endif
+ printf("unknown structure\n");
}
return;
invalid:
Index: usr.bin/kdump/linux.c
===================================================================
--- usr.bin/kdump/linux.c
+++ usr.bin/kdump/linux.c
@@ -31,7 +31,11 @@
#include <sys/param.h>
#include <sys/uio.h>
#include <sys/ktrace.h>
+#include <err.h>
+#include <errno.h>
#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
#include <sysdecode.h>
#include "kdump.h"
@@ -44,6 +48,8 @@
#include <i386/linux/linux_syscall.h>
#endif
+#include <compat/linux/linux.h>
+
static void
print_linux_signal(int signo)
{
@@ -180,3 +186,44 @@
*resnarg = narg;
}
#endif /* __amd64__ */
+
+static void
+ktrsigset(char *name, l_sigset_t *mask, size_t sz)
+{
+ unsigned long i, c;
+
+ printf("%s [ ", name);
+ c = 0;
+ for (i = 1; i <= sz * CHAR_BIT; i++) {
+ if (!LINUX_SIGISMEMBER(*mask, i))
+ continue;
+ if (c != 0)
+ printf(", ");
+ printf("%s", sysdecode_linux_signal(i));
+ c++;
+ }
+ if (c == 0)
+ printf(" empty ]\n");
+ else
+ printf(" ]\n");
+}
+
+bool
+ktrstruct_linux(char *name, char *data, size_t datalen)
+{
+ l_sigset_t *mask;
+
+ if (strcmp(name, "l_sigset_t") == 0) {
+ if (datalen < 1)
+ return (false);;
+ mask = malloc(datalen);
+ if (mask == NULL)
+ errx(1, "%s", strerror(ENOMEM));
+ memcpy(mask, data, datalen);
+ ktrsigset(name, mask, datalen);
+ free(mask);
+ } else
+ return (false);
+
+ return (true);
+}

File Metadata

Mime Type
text/plain
Expires
Fri, May 22, 7:52 AM (12 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33416900
Default Alt Text
D35153.id106483.diff (2 KB)

Event Timeline