mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 16:22:46 -04:00
kdump: decode pollfd struct arrays coming from poll(2)
We'll handle these just as we do kevents, one per line with subsequent
lines indented sufficiently to distinguish them from the upcoming
return value.
Sample, with indentation stripped and revents changed to '...' in the
first one to keep the line length down:
CALL poll(0x820610560,0x3,0)
STRU struct pollfd[] = { { fd=0, events=0x1<POLLIN>, revents=0x11<...>
{ fd=1, events=0x4<POLLOUT>, revents=0x4<POLLOUT>}
{ fd=-1, events=0x4<POLLOUT>, revents=0} }
RET poll 2
Reviewed by: bapt, jhb
Differential Revision: https://reviews.freebsd.org/D44160
This commit is contained in:
parent
bd23e71f91
commit
02c57f7b48
1 changed files with 20 additions and 0 deletions
|
|
@ -46,6 +46,7 @@
|
|||
#include <sys/ktrace.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/poll.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/sysent.h>
|
||||
|
|
@ -110,6 +111,7 @@ void ktrcapfail(struct ktr_cap_fail *);
|
|||
void ktrfault(struct ktr_fault *);
|
||||
void ktrfaultend(struct ktr_faultend *);
|
||||
void ktrkevent(struct kevent *);
|
||||
void ktrpollfd(struct pollfd *);
|
||||
void ktrstructarray(struct ktr_struct_array *, size_t);
|
||||
void ktrbitset(char *, struct bitset *, size_t);
|
||||
void ktrsyscall_freebsd(struct ktr_syscall *ktr, register_t **resip,
|
||||
|
|
@ -2209,10 +2211,23 @@ ktrkevent(struct kevent *kev)
|
|||
printf(", data=%#jx, udata=%p }", (uintmax_t)kev->data, kev->udata);
|
||||
}
|
||||
|
||||
void
|
||||
ktrpollfd(struct pollfd *pfd)
|
||||
{
|
||||
|
||||
printf("{ fd=%d", pfd->fd);
|
||||
printf(", events=");
|
||||
print_mask_arg0(sysdecode_pollfd_events, pfd->events);
|
||||
printf(", revents=");
|
||||
print_mask_arg0(sysdecode_pollfd_events, pfd->revents);
|
||||
printf("}");
|
||||
}
|
||||
|
||||
void
|
||||
ktrstructarray(struct ktr_struct_array *ksa, size_t buflen)
|
||||
{
|
||||
struct kevent kev;
|
||||
struct pollfd pfd;
|
||||
char *name, *data;
|
||||
size_t namelen, datalen;
|
||||
int i;
|
||||
|
|
@ -2294,6 +2309,11 @@ ktrstructarray(struct ktr_struct_array *ksa, size_t buflen)
|
|||
kev.udata = (void *)(uintptr_t)kev32.udata;
|
||||
ktrkevent(&kev);
|
||||
#endif
|
||||
} else if (strcmp(name, "pollfd") == 0) {
|
||||
if (ksa->struct_size != sizeof(pfd))
|
||||
goto bad_size;
|
||||
memcpy(&pfd, data, sizeof(pfd));
|
||||
ktrpollfd(&pfd);
|
||||
} else {
|
||||
printf("<unknown structure> }\n");
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in a new issue