mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-06 13:09:50 +00:00
Decode FreeBSD 11 compat stat, fstat and lstat calls.
This commit is contained in:
parent
5ab191c42b
commit
8207f12d6a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=320279
@ -10,6 +10,7 @@
|
|||||||
* BinString -- pointer to an array of chars, printed via strvisx().
|
* BinString -- pointer to an array of chars, printed via strvisx().
|
||||||
* Ptr -- pointer to some unspecified structure. Just print as hex for now.
|
* Ptr -- pointer to some unspecified structure. Just print as hex for now.
|
||||||
* Stat -- a pointer to a stat buffer. Prints a couple fields.
|
* Stat -- a pointer to a stat buffer. Prints a couple fields.
|
||||||
|
* Stat11 -- a pointer to a freebsd 11 stat buffer. Prints a couple fields.
|
||||||
* StatFs -- a pointer to a statfs buffer. Prints a few fields.
|
* StatFs -- a pointer to a statfs buffer. Prints a few fields.
|
||||||
* Ioctl -- an ioctl command. Woefully limited.
|
* Ioctl -- an ioctl command. Woefully limited.
|
||||||
* Quad -- a double-word value. e.g., lseek(int, offset_t, int)
|
* Quad -- a double-word value. e.g., lseek(int, offset_t, int)
|
||||||
@ -38,7 +39,7 @@
|
|||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum Argtype { None = 1, Hex, Octal, Int, UInt, LongHex, Name, Ptr, Stat, Ioctl,
|
enum Argtype { None = 1, Hex, Octal, Int, UInt, LongHex, Name, Ptr, Stat, Stat11, Ioctl,
|
||||||
Quad, Signal, Sockaddr, StringArray, Timespec, Timeval, Itimerval,
|
Quad, Signal, Sockaddr, StringArray, Timespec, Timeval, Itimerval,
|
||||||
Pollfd, Fd_set, Sigaction, Fcntl, Mprot, Mmapflags, Whence, Readlinkres,
|
Pollfd, Fd_set, Sigaction, Fcntl, Mprot, Mmapflags, Whence, Readlinkres,
|
||||||
Sigset, Sigprocmask, StatFs, Kevent, Sockdomain, Socktype, Open,
|
Sigset, Sigprocmask, StatFs, Kevent, Sockdomain, Socktype, Open,
|
||||||
|
@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/ptrace.h>
|
#include <sys/ptrace.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#define _WANT_FREEBSD11_STAT
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
@ -215,6 +216,14 @@ static struct syscall decoded_syscalls[] = {
|
|||||||
.args = { { Int, 0 }, { Fcntl, 1 }, { Fcntlflag, 2 } } },
|
.args = { { Int, 0 }, { Fcntl, 1 }, { Fcntlflag, 2 } } },
|
||||||
{ .name = "flock", .ret_type = 1, .nargs = 2,
|
{ .name = "flock", .ret_type = 1, .nargs = 2,
|
||||||
.args = { { Int, 0 }, { Flockop, 1 } } },
|
.args = { { Int, 0 }, { Flockop, 1 } } },
|
||||||
|
{ .name = "compat11.fstat", .ret_type = 1, .nargs = 2,
|
||||||
|
.args = { { Int, 0 }, { Stat11 | OUT, 1 } } },
|
||||||
|
{ .name = "compat11.lstat", .ret_type = 1, .nargs = 2,
|
||||||
|
.args = { { Name | IN, 0 }, { Stat11 | OUT, 1 } } },
|
||||||
|
{ .name = "compat11.stat", .ret_type = 1, .nargs = 2,
|
||||||
|
.args = { { Name | IN, 0 }, { Stat11 | OUT, 1 } } },
|
||||||
|
{ .name = "compat11.stat", .ret_type = 1, .nargs = 2,
|
||||||
|
.args = { { Name | IN, 0 }, { Stat11 | OUT, 1 } } },
|
||||||
{ .name = "fstat", .ret_type = 1, .nargs = 2,
|
{ .name = "fstat", .ret_type = 1, .nargs = 2,
|
||||||
.args = { { Int, 0 }, { Stat | OUT, 1 } } },
|
.args = { { Int, 0 }, { Stat | OUT, 1 } } },
|
||||||
{ .name = "fstatat", .ret_type = 1, .nargs = 4,
|
{ .name = "fstatat", .ret_type = 1, .nargs = 4,
|
||||||
@ -1885,6 +1894,23 @@ print_arg(struct syscall_args *sc, unsigned long *args, long *retval,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case Stat11: {
|
||||||
|
struct freebsd11_stat st;
|
||||||
|
|
||||||
|
if (get_struct(pid, (void *)args[sc->offset], &st, sizeof(st))
|
||||||
|
!= -1) {
|
||||||
|
char mode[12];
|
||||||
|
|
||||||
|
strmode(st.st_mode, mode);
|
||||||
|
fprintf(fp,
|
||||||
|
"{ mode=%s,inode=%ju,size=%jd,blksize=%ld }", mode,
|
||||||
|
(uintmax_t)st.st_ino, (intmax_t)st.st_size,
|
||||||
|
(long)st.st_blksize);
|
||||||
|
} else {
|
||||||
|
fprintf(fp, "0x%lx", args[sc->offset]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case StatFs: {
|
case StatFs: {
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
struct statfs buf;
|
struct statfs buf;
|
||||||
|
Loading…
Reference in New Issue
Block a user