This commit is contained in:
Konstantin Belousov 2024-01-19 21:55:42 +02:00
parent f006524d6d
commit 38bfddf597
10 changed files with 95 additions and 3 deletions

View file

@ -506,4 +506,5 @@
#define FREEBSD32_SYS_timerfd_create 585
#define FREEBSD32_SYS_freebsd32_timerfd_gettime 586
#define FREEBSD32_SYS_freebsd32_timerfd_settime 587
#define FREEBSD32_SYS_MAXSYSCALL 588
#define FREEBSD32_SYS_kcmp 588
#define FREEBSD32_SYS_MAXSYSCALL 589

View file

@ -593,4 +593,5 @@ const char *freebsd32_syscallnames[] = {
"timerfd_create", /* 585 = timerfd_create */
"freebsd32_timerfd_gettime", /* 586 = freebsd32_timerfd_gettime */
"freebsd32_timerfd_settime", /* 587 = freebsd32_timerfd_settime */
"kcmp", /* 588 = kcmp */
};

View file

@ -649,4 +649,5 @@ struct sysent freebsd32_sysent[] = {
{ .sy_narg = AS(timerfd_create_args), .sy_call = (sy_call_t *)sys_timerfd_create, .sy_auevent = AUE_TIMERFD, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 585 = timerfd_create */
{ .sy_narg = AS(freebsd32_timerfd_gettime_args), .sy_call = (sy_call_t *)freebsd32_timerfd_gettime, .sy_auevent = AUE_TIMERFD, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 586 = freebsd32_timerfd_gettime */
{ .sy_narg = AS(freebsd32_timerfd_settime_args), .sy_call = (sy_call_t *)freebsd32_timerfd_settime, .sy_auevent = AUE_TIMERFD, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 587 = freebsd32_timerfd_settime */
{ .sy_narg = AS(kcmp_args), .sy_call = (sy_call_t *)sys_kcmp, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 588 = kcmp */
};

View file

@ -3357,6 +3357,17 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 4;
break;
}
/* kcmp */
case 588: {
struct kcmp_args *p = params;
iarg[a++] = p->pid1; /* pid_t */
iarg[a++] = p->pid2; /* pid_t */
iarg[a++] = p->type; /* int */
uarg[a++] = (intptr_t)p->idx1; /* uintptr_t */
uarg[a++] = (intptr_t)p->idx2; /* uintptr_t */
*n_args = 5;
break;
}
default:
*n_args = 0;
break;
@ -9067,6 +9078,28 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
/* kcmp */
case 588:
switch (ndx) {
case 0:
p = "pid_t";
break;
case 1:
p = "pid_t";
break;
case 2:
p = "int";
break;
case 3:
p = "uintptr_t";
break;
case 4:
p = "uintptr_t";
break;
default:
break;
};
break;
default:
break;
};
@ -10945,6 +10978,11 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "int";
break;
/* kcmp */
case 588:
if (ndx == 0 || ndx == 1)
p = "int";
break;
default:
break;
};

View file

@ -648,4 +648,5 @@ struct sysent sysent[] = {
{ .sy_narg = AS(timerfd_create_args), .sy_call = (sy_call_t *)sys_timerfd_create, .sy_auevent = AUE_TIMERFD, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 585 = timerfd_create */
{ .sy_narg = AS(timerfd_gettime_args), .sy_call = (sy_call_t *)sys_timerfd_gettime, .sy_auevent = AUE_TIMERFD, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 586 = timerfd_gettime */
{ .sy_narg = AS(timerfd_settime_args), .sy_call = (sy_call_t *)sys_timerfd_settime, .sy_auevent = AUE_TIMERFD, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 587 = timerfd_settime */
{ .sy_narg = AS(kcmp_args), .sy_call = (sy_call_t *)sys_kcmp, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 588 = kcmp */
};

View file

@ -593,4 +593,5 @@ const char *syscallnames[] = {
"timerfd_create", /* 585 = timerfd_create */
"timerfd_gettime", /* 586 = timerfd_gettime */
"timerfd_settime", /* 587 = timerfd_settime */
"kcmp", /* 588 = kcmp */
};

View file

@ -3444,6 +3444,17 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 4;
break;
}
/* kcmp */
case 588: {
struct kcmp_args *p = params;
iarg[a++] = p->pid1; /* pid_t */
iarg[a++] = p->pid2; /* pid_t */
iarg[a++] = p->type; /* int */
uarg[a++] = (intptr_t)p->idx1; /* uintptr_t */
uarg[a++] = (intptr_t)p->idx2; /* uintptr_t */
*n_args = 5;
break;
}
default:
*n_args = 0;
break;
@ -9212,6 +9223,28 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
/* kcmp */
case 588:
switch (ndx) {
case 0:
p = "pid_t";
break;
case 1:
p = "pid_t";
break;
case 2:
p = "int";
break;
case 3:
p = "uintptr_t";
break;
case 4:
p = "uintptr_t";
break;
default:
break;
};
break;
default:
break;
};
@ -11180,6 +11213,11 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "int";
break;
/* kcmp */
case 588:
if (ndx == 0 || ndx == 1)
p = "int";
break;
default:
break;
};

View file

@ -524,4 +524,5 @@
#define SYS_timerfd_create 585
#define SYS_timerfd_gettime 586
#define SYS_timerfd_settime 587
#define SYS_MAXSYSCALL 588
#define SYS_kcmp 588
#define SYS_MAXSYSCALL 589

View file

@ -427,4 +427,5 @@ MIASM = \
membarrier.o \
timerfd_create.o \
timerfd_gettime.o \
timerfd_settime.o
timerfd_settime.o \
kcmp.o

View file

@ -1870,6 +1870,13 @@ struct timerfd_settime_args {
char new_value_l_[PADL_(const struct itimerspec *)]; const struct itimerspec * new_value; char new_value_r_[PADR_(const struct itimerspec *)];
char old_value_l_[PADL_(struct itimerspec *)]; struct itimerspec * old_value; char old_value_r_[PADR_(struct itimerspec *)];
};
struct kcmp_args {
char pid1_l_[PADL_(pid_t)]; pid_t pid1; char pid1_r_[PADR_(pid_t)];
char pid2_l_[PADL_(pid_t)]; pid_t pid2; char pid2_r_[PADR_(pid_t)];
char type_l_[PADL_(int)]; int type; char type_r_[PADR_(int)];
char idx1_l_[PADL_(uintptr_t)]; uintptr_t idx1; char idx1_r_[PADR_(uintptr_t)];
char idx2_l_[PADL_(uintptr_t)]; uintptr_t idx2; char idx2_r_[PADR_(uintptr_t)];
};
int sys_exit(struct thread *, struct exit_args *);
int sys_fork(struct thread *, struct fork_args *);
int sys_read(struct thread *, struct read_args *);
@ -2268,6 +2275,7 @@ int sys_membarrier(struct thread *, struct membarrier_args *);
int sys_timerfd_create(struct thread *, struct timerfd_create_args *);
int sys_timerfd_gettime(struct thread *, struct timerfd_gettime_args *);
int sys_timerfd_settime(struct thread *, struct timerfd_settime_args *);
int sys_kcmp(struct thread *, struct kcmp_args *);
#ifdef COMPAT_43
@ -3246,6 +3254,7 @@ int freebsd13_swapoff(struct thread *, struct freebsd13_swapoff_args *);
#define SYS_AUE_timerfd_create AUE_TIMERFD
#define SYS_AUE_timerfd_gettime AUE_TIMERFD
#define SYS_AUE_timerfd_settime AUE_TIMERFD
#define SYS_AUE_kcmp AUE_NULL
#undef PAD_
#undef PADL_