mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 05:47:35 +00:00
strace: Add initial ioctl formatting
This is useful in general, but adding it is what finally helped uncovering #10438.
This commit is contained in:
parent
a8e5130183
commit
78de54f0f1
1 changed files with 63 additions and 0 deletions
|
@ -19,6 +19,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/ptrace.h>
|
#include <sys/ptrace.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
@ -123,6 +124,55 @@ HANDLE(SEEK_CUR)
|
||||||
HANDLE(SEEK_END)
|
HANDLE(SEEK_END)
|
||||||
END_VALUES_TO_NAMES()
|
END_VALUES_TO_NAMES()
|
||||||
|
|
||||||
|
VALUES_TO_NAMES(ioctl_request_name)
|
||||||
|
HANDLE(TIOCGPGRP)
|
||||||
|
HANDLE(TIOCSPGRP)
|
||||||
|
HANDLE(TCGETS)
|
||||||
|
HANDLE(TCSETS)
|
||||||
|
HANDLE(TCSETSW)
|
||||||
|
HANDLE(TCSETSF)
|
||||||
|
HANDLE(TCFLSH)
|
||||||
|
HANDLE(TIOCGWINSZ)
|
||||||
|
HANDLE(TIOCSCTTY)
|
||||||
|
HANDLE(TIOCSTI)
|
||||||
|
HANDLE(TIOCNOTTY)
|
||||||
|
HANDLE(TIOCSWINSZ)
|
||||||
|
HANDLE(FB_IOCTL_GET_SIZE_IN_BYTES)
|
||||||
|
HANDLE(FB_IOCTL_GET_RESOLUTION)
|
||||||
|
HANDLE(FB_IOCTL_SET_RESOLUTION)
|
||||||
|
HANDLE(FB_IOCTL_GET_BUFFER)
|
||||||
|
HANDLE(FB_IOCTL_GET_BUFFER_OFFSET)
|
||||||
|
HANDLE(FB_IOCTL_SET_BUFFER)
|
||||||
|
HANDLE(FB_IOCTL_FLUSH_BUFFERS)
|
||||||
|
HANDLE(KEYBOARD_IOCTL_GET_NUM_LOCK)
|
||||||
|
HANDLE(KEYBOARD_IOCTL_SET_NUM_LOCK)
|
||||||
|
HANDLE(KEYBOARD_IOCTL_GET_CAPS_LOCK)
|
||||||
|
HANDLE(KEYBOARD_IOCTL_SET_CAPS_LOCK)
|
||||||
|
HANDLE(SIOCSIFADDR)
|
||||||
|
HANDLE(SIOCGIFADDR)
|
||||||
|
HANDLE(SIOCGIFHWADDR)
|
||||||
|
HANDLE(SIOCGIFNETMASK)
|
||||||
|
HANDLE(SIOCSIFNETMASK)
|
||||||
|
HANDLE(SIOCGIFBRDADDR)
|
||||||
|
HANDLE(SIOCGIFMTU)
|
||||||
|
HANDLE(SIOCGIFFLAGS)
|
||||||
|
HANDLE(SIOCGIFCONF)
|
||||||
|
HANDLE(SIOCADDRT)
|
||||||
|
HANDLE(SIOCDELRT)
|
||||||
|
HANDLE(SIOCSARP)
|
||||||
|
HANDLE(SIOCDARP)
|
||||||
|
HANDLE(FIBMAP)
|
||||||
|
HANDLE(FIONBIO)
|
||||||
|
HANDLE(FIONREAD)
|
||||||
|
HANDLE(KCOV_SETBUFSIZE)
|
||||||
|
HANDLE(KCOV_ENABLE)
|
||||||
|
HANDLE(KCOV_DISABLE)
|
||||||
|
HANDLE(SOUNDCARD_IOCTL_SET_SAMPLE_RATE)
|
||||||
|
HANDLE(SOUNDCARD_IOCTL_GET_SAMPLE_RATE)
|
||||||
|
HANDLE(STORAGE_DEVICE_GET_SIZE)
|
||||||
|
HANDLE(STORAGE_DEVICE_GET_BLOCK_SIZE)
|
||||||
|
END_VALUES_TO_NAMES()
|
||||||
|
|
||||||
VALUES_TO_NAMES(domain_name)
|
VALUES_TO_NAMES(domain_name)
|
||||||
HANDLE(AF_UNSPEC)
|
HANDLE(AF_UNSPEC)
|
||||||
HANDLE(AF_UNIX)
|
HANDLE(AF_UNIX)
|
||||||
|
@ -354,6 +404,16 @@ static void format_open(FormattedSyscallBuilder& builder, Syscall::SC_open_param
|
||||||
builder.add_argument("{:04o}", params.mode);
|
builder.add_argument("{:04o}", params.mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void format_ioctl(FormattedSyscallBuilder& builder, int fd, unsigned request, void* arg)
|
||||||
|
{
|
||||||
|
builder.add_arguments(fd, ioctl_request_name(request));
|
||||||
|
if (request == FIONBIO) {
|
||||||
|
auto value = copy_from_process(reinterpret_cast<int*>(arg));
|
||||||
|
builder.add_argument(value);
|
||||||
|
} else
|
||||||
|
builder.add_argument(PointerArgument { arg });
|
||||||
|
}
|
||||||
|
|
||||||
namespace AK {
|
namespace AK {
|
||||||
template<>
|
template<>
|
||||||
struct Formatter<struct timespec> : StandardFormatter {
|
struct Formatter<struct timespec> : StandardFormatter {
|
||||||
|
@ -583,6 +643,9 @@ static void format_syscall(FormattedSyscallBuilder& builder, Syscall::Function s
|
||||||
case SC_open:
|
case SC_open:
|
||||||
format_open(builder, (Syscall::SC_open_params*)arg1);
|
format_open(builder, (Syscall::SC_open_params*)arg1);
|
||||||
break;
|
break;
|
||||||
|
case SC_ioctl:
|
||||||
|
format_ioctl(builder, (int)arg1, (unsigned)arg2, (void*)arg3);
|
||||||
|
break;
|
||||||
case SC_fstat:
|
case SC_fstat:
|
||||||
format_fstat(builder, (int)arg1, (struct stat*)arg2);
|
format_fstat(builder, (int)arg1, (struct stat*)arg2);
|
||||||
result_type = Ssize;
|
result_type = Ssize;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue