freebsd32: add missing pads to preadv and pwritev

Reviewed by:	kevans
This commit is contained in:
Brooks Davis 2021-11-17 20:12:25 +00:00
parent f089a2f3d1
commit d257e57d18
6 changed files with 165 additions and 0 deletions

View File

@ -247,6 +247,24 @@ struct freebsd32_lutimes_args {
char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char tptr_l_[PADL_(const struct timeval32 *)]; const struct timeval32 * tptr; char tptr_r_[PADR_(const struct timeval32 *)];
};
#ifdef PAD64_REQUIRED
struct freebsd32_preadv_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char iovp_l_[PADL_(struct iovec32 *)]; struct iovec32 * iovp; char iovp_r_[PADR_(struct iovec32 *)];
char iovcnt_l_[PADL_(u_int)]; u_int iovcnt; char iovcnt_r_[PADR_(u_int)];
char _pad_l_[PADL_(int)]; int _pad; char _pad_r_[PADR_(int)];
char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd32_pwritev_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char iovp_l_[PADL_(struct iovec32 *)]; struct iovec32 * iovp; char iovp_r_[PADR_(struct iovec32 *)];
char iovcnt_l_[PADL_(u_int)]; u_int iovcnt; char iovcnt_r_[PADR_(u_int)];
char _pad_l_[PADL_(int)]; int _pad; char _pad_r_[PADR_(int)];
char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
#else
struct freebsd32_preadv_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char iovp_l_[PADL_(struct iovec32 *)]; struct iovec32 * iovp; char iovp_r_[PADR_(struct iovec32 *)];
@ -261,6 +279,7 @@ struct freebsd32_pwritev_args {
char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
#endif
struct freebsd32_modstat_args {
char modid_l_[PADL_(int)]; int modid; char modid_r_[PADR_(int)];
char stat_l_[PADL_(struct module_stat32 *)]; struct module_stat32 * stat; char stat_r_[PADR_(struct module_stat32 *)];
@ -801,8 +820,13 @@ int freebsd32_aio_read(struct thread *, struct freebsd32_aio_read_args *);
int freebsd32_aio_write(struct thread *, struct freebsd32_aio_write_args *);
int freebsd32_lio_listio(struct thread *, struct freebsd32_lio_listio_args *);
int freebsd32_lutimes(struct thread *, struct freebsd32_lutimes_args *);
#ifdef PAD64_REQUIRED
int freebsd32_preadv(struct thread *, struct freebsd32_preadv_args *);
int freebsd32_pwritev(struct thread *, struct freebsd32_pwritev_args *);
#else
int freebsd32_preadv(struct thread *, struct freebsd32_preadv_args *);
int freebsd32_pwritev(struct thread *, struct freebsd32_pwritev_args *);
#endif
int freebsd32_modstat(struct thread *, struct freebsd32_modstat_args *);
int freebsd32_kldstat(struct thread *, struct freebsd32_kldstat_args *);
int freebsd32_aio_return(struct thread *, struct freebsd32_aio_return_args *);
@ -979,6 +1003,9 @@ struct ofreebsd32_getdirentries_args {
#ifdef PAD64_REQUIRED
#else
#endif
#ifdef PAD64_REQUIRED
#else
#endif
int ofreebsd32_lseek(struct thread *, struct ofreebsd32_lseek_args *);
int ofreebsd32_stat(struct thread *, struct ofreebsd32_stat_args *);
int ofreebsd32_lstat(struct thread *, struct ofreebsd32_lstat_args *);
@ -1013,6 +1040,9 @@ struct freebsd4_freebsd32_fstatfs_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char buf_l_[PADL_(struct ostatfs32 *)]; struct ostatfs32 * buf; char buf_r_[PADR_(struct ostatfs32 *)];
};
#ifdef PAD64_REQUIRED
#else
#endif
struct freebsd4_freebsd32_fhstatfs_args {
char u_fhp_l_[PADL_(const struct fhandle *)]; const struct fhandle * u_fhp; char u_fhp_r_[PADR_(const struct fhandle *)];
char buf_l_[PADL_(struct ostatfs32 *)]; struct ostatfs32 * buf; char buf_r_[PADR_(struct ostatfs32 *)];
@ -1111,6 +1141,9 @@ struct freebsd6_freebsd32_ftruncate_args {
char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
#ifdef PAD64_REQUIRED
#else
#endif
struct freebsd6_freebsd32_aio_read_args {
char aiocbp_l_[PADL_(struct oaiocb32 *)]; struct oaiocb32 * aiocbp; char aiocbp_r_[PADR_(struct oaiocb32 *)];
};
@ -1187,6 +1220,9 @@ struct freebsd7_freebsd32_shmctl_args {
#ifdef PAD64_REQUIRED
#else
#endif
#ifdef PAD64_REQUIRED
#else
#endif
int freebsd7_freebsd32___semctl(struct thread *, struct freebsd7_freebsd32___semctl_args *);
int freebsd7_freebsd32_msgctl(struct thread *, struct freebsd7_freebsd32_msgctl_args *);
int freebsd7_freebsd32_shmctl(struct thread *, struct freebsd7_freebsd32_shmctl_args *);
@ -1199,6 +1235,9 @@ int freebsd7_freebsd32_shmctl(struct thread *, struct freebsd7_freebsd32_shmctl_
#if !defined(PAD64_REQUIRED) && !defined(__amd64__)
#define PAD64_REQUIRED
#endif
#ifdef PAD64_REQUIRED
#else
#endif
struct freebsd10_freebsd32_umtx_lock_args {
char umtx_l_[PADL_(struct umtx *)]; struct umtx * umtx; char umtx_r_[PADR_(struct umtx *)];
};
@ -1249,6 +1288,9 @@ struct freebsd11_freebsd32_getdirentries_args {
char count_l_[PADL_(u_int)]; u_int count; char count_r_[PADR_(u_int)];
char basep_l_[PADL_(int32_t *)]; int32_t * basep; char basep_r_[PADR_(int32_t *)];
};
#ifdef PAD64_REQUIRED
#else
#endif
struct freebsd11_freebsd32_fhstat_args {
char u_fhp_l_[PADL_(const struct fhandle *)]; const struct fhandle * u_fhp; char u_fhp_r_[PADR_(const struct fhandle *)];
char sb_l_[PADL_(struct freebsd11_stat32 *)]; struct freebsd11_stat32 * sb; char sb_r_[PADR_(struct freebsd11_stat32 *)];
@ -1313,6 +1355,9 @@ int freebsd11_freebsd32_fstatat(struct thread *, struct freebsd11_freebsd32_fsta
#ifdef PAD64_REQUIRED
#else
#endif
#ifdef PAD64_REQUIRED
#else
#endif
#endif /* COMPAT_FREEBSD12 */
@ -1389,6 +1434,8 @@ int freebsd11_freebsd32_fstatat(struct thread *, struct freebsd11_freebsd32_fsta
#define FREEBSD32_SYS_AUE_freebsd32_lutimes AUE_LUTIMES
#define FREEBSD32_SYS_AUE_freebsd32_preadv AUE_PREADV
#define FREEBSD32_SYS_AUE_freebsd32_pwritev AUE_PWRITEV
#define FREEBSD32_SYS_AUE_freebsd32_preadv AUE_PREADV
#define FREEBSD32_SYS_AUE_freebsd32_pwritev AUE_PWRITEV
#define FREEBSD32_SYS_AUE_freebsd4_freebsd32_fhstatfs AUE_FHSTATFS
#define FREEBSD32_SYS_AUE_freebsd11_freebsd32_fhstat AUE_FHSTAT
#define FREEBSD32_SYS_AUE_freebsd32_modstat AUE_NULL

View File

@ -239,6 +239,8 @@
#define FREEBSD32_SYS_freebsd11_nfstat 279
#define FREEBSD32_SYS_freebsd11_nlstat 280
#define FREEBSD32_SYS_freebsd32_preadv 289
#define FREEBSD32_SYS_freebsd32_pwritev 290
#define FREEBSD32_SYS_freebsd32_preadv 289
#define FREEBSD32_SYS_freebsd32_pwritev 290
/* 297 is freebsd4 freebsd32_fhstatfs */
#define FREEBSD32_SYS_fhopen 298

View File

@ -298,8 +298,13 @@ const char *freebsd32_syscallnames[] = {
"#286", /* 286 = nosys */
"#287", /* 287 = nosys */
"#288", /* 288 = nosys */
#ifdef PAD64_REQUIRED
"freebsd32_preadv", /* 289 = freebsd32_preadv */
"freebsd32_pwritev", /* 290 = freebsd32_pwritev */
#else
"freebsd32_preadv", /* 289 = freebsd32_preadv */
"freebsd32_pwritev", /* 290 = freebsd32_pwritev */
#endif
"#291", /* 291 = nosys */
"#292", /* 292 = nosys */
"#293", /* 293 = nosys */

View File

@ -351,8 +351,13 @@ struct sysent freebsd32_sysent[] = {
{ .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 286 = nosys */
{ .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 287 = nosys */
{ .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 288 = nosys */
#ifdef PAD64_REQUIRED
{ .sy_narg = AS(freebsd32_preadv_args), .sy_call = (sy_call_t *)freebsd32_preadv, .sy_auevent = AUE_PREADV, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 289 = freebsd32_preadv */
{ .sy_narg = AS(freebsd32_pwritev_args), .sy_call = (sy_call_t *)freebsd32_pwritev, .sy_auevent = AUE_PWRITEV, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 290 = freebsd32_pwritev */
#else
{ .sy_narg = AS(freebsd32_preadv_args), .sy_call = (sy_call_t *)freebsd32_preadv, .sy_auevent = AUE_PREADV, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 289 = freebsd32_preadv */
{ .sy_narg = AS(freebsd32_pwritev_args), .sy_call = (sy_call_t *)freebsd32_pwritev, .sy_auevent = AUE_PWRITEV, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 290 = freebsd32_pwritev */
#endif
{ .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 291 = nosys */
{ .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 292 = nosys */
{ .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 293 = nosys */

View File

@ -1307,6 +1307,32 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 2;
break;
}
#ifdef PAD64_REQUIRED
/* freebsd32_preadv */
case 289: {
struct freebsd32_preadv_args *p = params;
iarg[0] = p->fd; /* int */
uarg[1] = (intptr_t)p->iovp; /* struct iovec32 * */
uarg[2] = p->iovcnt; /* u_int */
iarg[3] = p->_pad; /* int */
uarg[4] = p->offset1; /* uint32_t */
uarg[5] = p->offset2; /* uint32_t */
*n_args = 6;
break;
}
/* freebsd32_pwritev */
case 290: {
struct freebsd32_pwritev_args *p = params;
iarg[0] = p->fd; /* int */
uarg[1] = (intptr_t)p->iovp; /* struct iovec32 * */
uarg[2] = p->iovcnt; /* u_int */
iarg[3] = p->_pad; /* int */
uarg[4] = p->offset1; /* uint32_t */
uarg[5] = p->offset2; /* uint32_t */
*n_args = 6;
break;
}
#else
/* freebsd32_preadv */
case 289: {
struct freebsd32_preadv_args *p = params;
@ -1329,6 +1355,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
*n_args = 5;
break;
}
#endif
/* fhopen */
case 298: {
struct fhopen_args *p = params;
@ -5498,6 +5525,58 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
#ifdef PAD64_REQUIRED
/* freebsd32_preadv */
case 289:
switch (ndx) {
case 0:
p = "int";
break;
case 1:
p = "userland struct iovec32 *";
break;
case 2:
p = "u_int";
break;
case 3:
p = "int";
break;
case 4:
p = "uint32_t";
break;
case 5:
p = "uint32_t";
break;
default:
break;
};
break;
/* freebsd32_pwritev */
case 290:
switch (ndx) {
case 0:
p = "int";
break;
case 1:
p = "userland struct iovec32 *";
break;
case 2:
p = "u_int";
break;
case 3:
p = "int";
break;
case 4:
p = "uint32_t";
break;
case 5:
p = "uint32_t";
break;
default:
break;
};
break;
#else
/* freebsd32_preadv */
case 289:
switch (ndx) {
@ -5542,6 +5621,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
break;
};
break;
#endif
/* fhopen */
case 298:
switch (ndx) {
@ -10009,6 +10089,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "int";
break;
#ifdef PAD64_REQUIRED
/* freebsd32_preadv */
case 289:
if (ndx == 0 || ndx == 1)
@ -10019,6 +10100,18 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
if (ndx == 0 || ndx == 1)
p = "ssize_t";
break;
#else
/* freebsd32_preadv */
case 289:
if (ndx == 0 || ndx == 1)
p = "ssize_t";
break;
/* freebsd32_pwritev */
case 290:
if (ndx == 0 || ndx == 1)
p = "ssize_t";
break;
#endif
/* fhopen */
case 298:
if (ndx == 0 || ndx == 1)

View File

@ -541,6 +541,18 @@
286 AUE_NULL UNIMPL nosys
287 AUE_NULL UNIMPL nosys
288 AUE_NULL UNIMPL nosys
#ifdef PAD64_REQUIRED
289 AUE_PREADV STD { ssize_t freebsd32_preadv(int fd, \
struct iovec32 *iovp, \
u_int iovcnt, \
int _pad, \
uint32_t offset1, uint32_t offset2); }
290 AUE_PWRITEV STD { ssize_t freebsd32_pwritev(int fd, \
struct iovec32 *iovp, \
u_int iovcnt, \
int _pad, \
uint32_t offset1, uint32_t offset2); }
#else
289 AUE_PREADV STD { ssize_t freebsd32_preadv(int fd, \
struct iovec32 *iovp, \
u_int iovcnt, \
@ -549,6 +561,7 @@
struct iovec32 *iovp, \
u_int iovcnt, \
uint32_t offset1, uint32_t offset2); }
#endif
291 AUE_NULL UNIMPL nosys
292 AUE_NULL UNIMPL nosys
293 AUE_NULL UNIMPL nosys