Merge ^/head r340213 through r340234.
This commit is contained in:
commit
8c1538224a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/projects/clang700-import/; revision=340235
@ -27,5 +27,25 @@
|
||||
#define _CRT_H_
|
||||
|
||||
#define HAVE_CTORS
|
||||
#define CTORS_CONSTRUCTORS
|
||||
#ifdef __mips_o32
|
||||
#define INIT_CALL_SEQ(func) \
|
||||
".set noreorder \n" \
|
||||
"bal 1f \n" \
|
||||
"nop \n" \
|
||||
"1: \n" \
|
||||
".cpload $ra \n" \
|
||||
".set reorder \n" \
|
||||
"jal " __STRING(func)
|
||||
#else
|
||||
#define INIT_CALL_SEQ(func) \
|
||||
".set noreorder \n" \
|
||||
"bal 1f \n" \
|
||||
"nop \n" \
|
||||
"1: \n" \
|
||||
".set reorder \n" \
|
||||
".cpsetup $ra, $v0, 1b \n" \
|
||||
"jal " __STRING(func)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -27,5 +27,7 @@
|
||||
#define _CRT_H_
|
||||
|
||||
#define HAVE_CTORS
|
||||
#define CTORS_CONSTRUCTORS
|
||||
#define INIT_CALL_SEQ(func) "call " __STRING(func) "; nop"
|
||||
|
||||
#endif
|
||||
|
@ -1264,6 +1264,13 @@ digest_dynamic1(Obj_Entry *obj, int early, const Elf_Dyn **dyn_rpath,
|
||||
*((Elf_Addr *)(dynp->d_un.d_ptr)) = (Elf_Addr) &r_debug;
|
||||
break;
|
||||
|
||||
case DT_MIPS_RLD_MAP_REL:
|
||||
// The MIPS_RLD_MAP_REL tag stores the offset to the .rld_map
|
||||
// section relative to the address of the tag itself.
|
||||
*((Elf_Addr *)(__DECONST(char*, dynp) + dynp->d_un.d_val)) =
|
||||
(Elf_Addr) &r_debug;
|
||||
break;
|
||||
|
||||
case DT_MIPS_PLTGOT:
|
||||
obj->mips_pltgot = (Elf_Addr *)(obj->relocbase +
|
||||
dynp->d_un.d_ptr);
|
||||
|
@ -29,7 +29,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd June 19, 2018
|
||||
.Dd November 7, 2018
|
||||
.Dt RC.SUBR 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -491,16 +491,22 @@ Check for the existence of the listed directories
|
||||
before running the
|
||||
.Cm start
|
||||
method.
|
||||
The list is checked before running
|
||||
.Va start_precmd .
|
||||
.It Va required_files
|
||||
Check for the readability of the listed files
|
||||
before running the
|
||||
.Cm start
|
||||
method.
|
||||
The list is checked before running
|
||||
.Va start_precmd .
|
||||
.It Va required_modules
|
||||
Ensure that the listed kernel modules are loaded
|
||||
before running the
|
||||
.Cm start
|
||||
method.
|
||||
The list is checked after running
|
||||
.Va start_precmd .
|
||||
This is done after invoking the commands from
|
||||
.Va start_precmd
|
||||
so that the missing modules are not loaded in vain
|
||||
@ -531,6 +537,8 @@ on each of the list variables
|
||||
before running the
|
||||
.Cm start
|
||||
method.
|
||||
The list is checked after running
|
||||
.Va start_precmd .
|
||||
.It Va ${name}_chdir
|
||||
Directory to
|
||||
.Ic cd
|
||||
|
@ -193,6 +193,7 @@ __DEFAULT_YES_OPTIONS = \
|
||||
ZONEINFO
|
||||
|
||||
__DEFAULT_NO_OPTIONS = \
|
||||
BSD_CRTBEGIN \
|
||||
BSD_GREP \
|
||||
CLANG_EXTRAS \
|
||||
DTRACE_TESTS \
|
||||
@ -385,13 +386,6 @@ BROKEN_OPTIONS+=HYPERV
|
||||
BROKEN_OPTIONS+=NVME
|
||||
.endif
|
||||
|
||||
.if ${__T} == "aarch64" || ${__T} == "amd64" || ${__T} == "i386" || \
|
||||
${__T} == "powerpc64"
|
||||
__DEFAULT_NO_OPTIONS+=BSD_CRTBEGIN
|
||||
.else
|
||||
BROKEN_OPTIONS+=BSD_CRTBEGIN
|
||||
.endif
|
||||
|
||||
.include <bsd.mkopt.mk>
|
||||
|
||||
#
|
||||
|
@ -265,9 +265,7 @@ disk_open(struct disk_devdesc *dev, uint64_t mediasize, u_int sectorsize)
|
||||
rc = ENXIO;
|
||||
goto out;
|
||||
}
|
||||
if (mediasize > od->mediasize) {
|
||||
od->mediasize = mediasize;
|
||||
}
|
||||
od->mediasize = mediasize;
|
||||
|
||||
if (ptable_gettype(od->table) == PTABLE_BSD &&
|
||||
partition >= 0) {
|
||||
|
@ -323,8 +323,7 @@ ptable_gptread(struct ptable *table, void *dev, diskread_t dread)
|
||||
* Note, this is still not a foolproof way to get disk's size. For
|
||||
* example, an image file can be truncated when copied to smaller media.
|
||||
*/
|
||||
if (hdr.hdr_lba_alt + 1 > table->sectors)
|
||||
table->sectors = hdr.hdr_lba_alt + 1;
|
||||
table->sectors = hdr.hdr_lba_alt + 1;
|
||||
|
||||
for (i = 0; i < size / hdr.hdr_entsz; i++) {
|
||||
ent = (struct gpt_ent *)(tbl + i * hdr.hdr_entsz);
|
||||
|
@ -438,6 +438,33 @@ bd_print(int verbose)
|
||||
return (ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read disk size from partition.
|
||||
* This is needed to work around buggy BIOS systems returning
|
||||
* wrong (truncated) disk media size.
|
||||
* During bd_probe() we tested if the multiplication of bd_sectors
|
||||
* would overflow so it should be safe to perform here.
|
||||
*/
|
||||
static uint64_t
|
||||
bd_disk_get_sectors(struct disk_devdesc *dev)
|
||||
{
|
||||
struct disk_devdesc disk;
|
||||
uint64_t size;
|
||||
|
||||
disk.dd.d_dev = dev->dd.d_dev;
|
||||
disk.dd.d_unit = dev->dd.d_unit;
|
||||
disk.d_slice = -1;
|
||||
disk.d_partition = -1;
|
||||
disk.d_offset = 0;
|
||||
|
||||
size = BD(dev).bd_sectors * BD(dev).bd_sectorsize;
|
||||
if (disk_open(&disk, size, BD(dev).bd_sectorsize) == 0) {
|
||||
(void) disk_ioctl(&disk, DIOCGMEDIASIZE, &size);
|
||||
disk_close(&disk);
|
||||
}
|
||||
return (size / BD(dev).bd_sectorsize);
|
||||
}
|
||||
|
||||
/*
|
||||
* Attempt to open the disk described by (dev) for use by (f).
|
||||
*
|
||||
@ -452,9 +479,7 @@ static int
|
||||
bd_open(struct open_file *f, ...)
|
||||
{
|
||||
struct disk_devdesc *dev;
|
||||
struct disk_devdesc disk;
|
||||
va_list ap;
|
||||
uint64_t size;
|
||||
int rc;
|
||||
|
||||
va_start(ap, f);
|
||||
@ -470,33 +495,12 @@ bd_open(struct open_file *f, ...)
|
||||
if ((BD(dev).bd_flags & BD_NO_MEDIA) == BD_NO_MEDIA)
|
||||
return (EIO);
|
||||
}
|
||||
BD(dev).bd_open++;
|
||||
if (BD(dev).bd_bcache == NULL)
|
||||
BD(dev).bd_bcache = bcache_allocate();
|
||||
|
||||
/*
|
||||
* Read disk size from partition.
|
||||
* This is needed to work around buggy BIOS systems returning
|
||||
* wrong (truncated) disk media size.
|
||||
* During bd_probe() we tested if the mulitplication of bd_sectors
|
||||
* would overflow so it should be safe to perform here.
|
||||
*/
|
||||
disk.dd.d_dev = dev->dd.d_dev;
|
||||
disk.dd.d_unit = dev->dd.d_unit;
|
||||
disk.d_slice = -1;
|
||||
disk.d_partition = -1;
|
||||
disk.d_offset = 0;
|
||||
|
||||
if (disk_open(&disk, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
|
||||
BD(dev).bd_sectorsize) == 0) {
|
||||
|
||||
if (disk_ioctl(&disk, DIOCGMEDIASIZE, &size) == 0) {
|
||||
size /= BD(dev).bd_sectorsize;
|
||||
if (size > BD(dev).bd_sectors)
|
||||
BD(dev).bd_sectors = size;
|
||||
}
|
||||
disk_close(&disk);
|
||||
}
|
||||
if (BD(dev).bd_open == 0)
|
||||
BD(dev).bd_sectors = bd_disk_get_sectors(dev);
|
||||
BD(dev).bd_open++;
|
||||
|
||||
rc = disk_open(dev, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
|
||||
BD(dev).bd_sectorsize);
|
||||
|
@ -107,21 +107,6 @@ static Elf64_Brandinfo freebsd_brand_info = {
|
||||
SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_FIRST,
|
||||
(sysinit_cfunc_t)elf64_insert_brand_entry, &freebsd_brand_info);
|
||||
|
||||
static Elf64_Brandinfo freebsd_brand_oinfo = {
|
||||
.brand = ELFOSABI_FREEBSD,
|
||||
.machine = EM_AARCH64,
|
||||
.compat_3_brand = "FreeBSD",
|
||||
.emul_path = NULL,
|
||||
.interp_path = "/usr/libexec/ld-elf.so.1",
|
||||
.sysvec = &elf64_freebsd_sysvec,
|
||||
.interp_newpath = NULL,
|
||||
.brand_note = &elf64_freebsd_brandnote,
|
||||
.flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE
|
||||
};
|
||||
|
||||
SYSINIT(oelf64, SI_SUB_EXEC, SI_ORDER_ANY,
|
||||
(sysinit_cfunc_t)elf64_insert_brand_entry, &freebsd_brand_oinfo);
|
||||
|
||||
void
|
||||
elf64_dump_thread(struct thread *td __unused, void *dst __unused,
|
||||
size_t *off __unused)
|
||||
|
@ -8839,7 +8839,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
|
||||
/* break */
|
||||
case 17:
|
||||
if (ndx == 0 || ndx == 1)
|
||||
p = "caddr_t";
|
||||
p = "void *";
|
||||
break;
|
||||
/* getpid */
|
||||
case 20:
|
||||
@ -9388,7 +9388,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
|
||||
/* shmat */
|
||||
case 228:
|
||||
if (ndx == 0 || ndx == 1)
|
||||
p = "int";
|
||||
p = "void *";
|
||||
break;
|
||||
/* shmdt */
|
||||
case 230:
|
||||
@ -10139,7 +10139,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
|
||||
/* freebsd32_mmap */
|
||||
case 477:
|
||||
if (ndx == 0 || ndx == 1)
|
||||
p = "caddr_t";
|
||||
p = "void *";
|
||||
break;
|
||||
/* freebsd32_lseek */
|
||||
case 478:
|
||||
@ -10170,7 +10170,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
|
||||
/* freebsd32_mmap */
|
||||
case 477:
|
||||
if (ndx == 0 || ndx == 1)
|
||||
p = "caddr_t";
|
||||
p = "void *";
|
||||
break;
|
||||
/* freebsd32_lseek */
|
||||
case 478:
|
||||
|
@ -88,7 +88,7 @@
|
||||
int mode, int dev); }
|
||||
15 AUE_CHMOD NOPROTO { int chmod(const char *path, mode_t mode); }
|
||||
16 AUE_CHOWN NOPROTO { int chown(const char *path, int uid, int gid); }
|
||||
17 AUE_NULL NOPROTO { caddr_t break(char *nsize); }
|
||||
17 AUE_NULL NOPROTO { void *break(char *nsize); }
|
||||
18 AUE_GETFSSTAT COMPAT4 { int freebsd32_getfsstat( \
|
||||
struct statfs32 *buf, long bufsize, \
|
||||
int mode); }
|
||||
@ -175,7 +175,7 @@
|
||||
68 AUE_NULL OBSOL vwrite
|
||||
69 AUE_SBRK NOPROTO { int sbrk(int incr); }
|
||||
70 AUE_SSTK NOPROTO { int sstk(int incr); }
|
||||
71 AUE_MMAP COMPAT|NOPROTO { int mmap(void *addr, int len, \
|
||||
71 AUE_MMAP COMPAT|NOPROTO { void *mmap(void *addr, int len, \
|
||||
int prot, int flags, int fd, int pos); }
|
||||
72 AUE_O_VADVISE COMPAT11|NOPROTO { int vadvise(int anom); }
|
||||
73 AUE_MUNMAP NOPROTO { int munmap(void *addr, size_t len); }
|
||||
@ -373,7 +373,7 @@
|
||||
__setrlimit_args int
|
||||
196 AUE_GETDIRENTRIES COMPAT11 { int freebsd32_getdirentries(int fd, \
|
||||
char *buf, u_int count, int32_t *basep); }
|
||||
197 AUE_MMAP COMPAT6 { caddr_t freebsd32_mmap(void *addr, \
|
||||
197 AUE_MMAP COMPAT6 { void *freebsd32_mmap(void *addr, \
|
||||
size_t len, int prot, int flags, int fd, \
|
||||
int pad, uint32_t pos1, uint32_t pos2); }
|
||||
198 AUE_NULL NOPROTO { int nosys(void); } __syscall \
|
||||
@ -432,7 +432,7 @@
|
||||
size_t msgsz, int msgflg); }
|
||||
227 AUE_MSGRCV NOSTD { int freebsd32_msgrcv(int msqid, void *msgp, \
|
||||
size_t msgsz, long msgtyp, int msgflg); }
|
||||
228 AUE_SHMAT NOSTD|NOPROTO { int shmat(int shmid, void *shmaddr, \
|
||||
228 AUE_SHMAT NOSTD|NOPROTO { void *shmat(int shmid, void *shmaddr, \
|
||||
int shmflg); }
|
||||
229 AUE_SHMCTL COMPAT7|NOSTD { int freebsd32_shmctl( \
|
||||
int shmid, int cmd, \
|
||||
@ -876,7 +876,7 @@
|
||||
const void *buf, size_t nbyte, \
|
||||
int pad, \
|
||||
uint32_t offset1, uint32_t offset2); }
|
||||
477 AUE_MMAP STD { caddr_t freebsd32_mmap(void *addr, \
|
||||
477 AUE_MMAP STD { void *freebsd32_mmap(void *addr, \
|
||||
size_t len, int prot, int flags, int fd, \
|
||||
int pad, \
|
||||
uint32_t pos1, uint32_t pos2); }
|
||||
@ -897,7 +897,7 @@
|
||||
476 AUE_PWRITE STD { ssize_t freebsd32_pwrite(int fd, \
|
||||
const void *buf, size_t nbyte, \
|
||||
uint32_t offset1, uint32_t offset2); }
|
||||
477 AUE_MMAP STD { caddr_t freebsd32_mmap(void *addr, \
|
||||
477 AUE_MMAP STD { void *freebsd32_mmap(void *addr, \
|
||||
size_t len, int prot, int flags, int fd, \
|
||||
uint32_t pos1, uint32_t pos2); }
|
||||
478 AUE_LSEEK STD { off_t freebsd32_lseek(int fd, \
|
||||
|
@ -420,8 +420,6 @@ g_io_check(struct bio *bp)
|
||||
return (EIO);
|
||||
if (bp->bio_offset > pp->mediasize)
|
||||
return (EIO);
|
||||
if (bp->bio_offset == pp->mediasize && bp->bio_length > 0)
|
||||
return (EIO);
|
||||
|
||||
/* Truncate requests to the end of providers media. */
|
||||
excess = bp->bio_offset + bp->bio_length;
|
||||
|
@ -120,7 +120,8 @@ SYSCTL_INT(_debug, OID_AUTO, __elfN(legacy_coredump), CTLFLAG_RW,
|
||||
|
||||
int __elfN(nxstack) =
|
||||
#if defined(__amd64__) || defined(__powerpc64__) /* both 64 and 32 bit */ || \
|
||||
(defined(__arm__) && __ARM_ARCH >= 7) || defined(__aarch64__)
|
||||
(defined(__arm__) && __ARM_ARCH >= 7) || defined(__aarch64__) || \
|
||||
defined(__riscv)
|
||||
1;
|
||||
#else
|
||||
0;
|
||||
|
@ -325,6 +325,7 @@ sed -e '
|
||||
}
|
||||
function parseline() {
|
||||
f=4 # toss number, type, audit event
|
||||
ret_inc = 0
|
||||
argc= 0;
|
||||
argssize = "0"
|
||||
thr_flag = "SY_THR_STATIC"
|
||||
@ -340,12 +341,15 @@ sed -e '
|
||||
funcalias=""
|
||||
argalias=""
|
||||
rettype="int"
|
||||
if ($(f+2) == "*") {
|
||||
ret_inc = 1
|
||||
}
|
||||
end=NF
|
||||
}
|
||||
if (flag("NODEF")) {
|
||||
auditev="AUE_NULL"
|
||||
funcname=$4
|
||||
argssize = "AS(" $6 ")"
|
||||
funcname=$(4 + ret_inc)
|
||||
argssize = "AS(" $(6 + ret_inc) ")"
|
||||
return
|
||||
}
|
||||
if ($f != "{")
|
||||
@ -363,6 +367,11 @@ sed -e '
|
||||
|
||||
syscallret=$f
|
||||
f++
|
||||
while (ret_inc > 0) {
|
||||
syscallret=syscallret " " $f
|
||||
f++
|
||||
ret_inc--
|
||||
}
|
||||
|
||||
funcname=$f
|
||||
|
||||
|
@ -180,7 +180,7 @@
|
||||
);
|
||||
}
|
||||
17 AUE_NULL STD {
|
||||
caddr_t break(
|
||||
void *break(
|
||||
_In_ char *nsize
|
||||
);
|
||||
}
|
||||
@ -480,7 +480,7 @@
|
||||
);
|
||||
}
|
||||
71 AUE_MMAP COMPAT {
|
||||
int mmap(
|
||||
void *mmap(
|
||||
_In_ void *addr,
|
||||
int len,
|
||||
int prot,
|
||||
@ -1168,7 +1168,7 @@
|
||||
);
|
||||
}
|
||||
197 AUE_MMAP COMPAT6 {
|
||||
caddr_t mmap(
|
||||
void *mmap(
|
||||
_In_ void *addr,
|
||||
size_t len,
|
||||
int prot,
|
||||
@ -1317,7 +1317,7 @@
|
||||
);
|
||||
}
|
||||
228 AUE_SHMAT NOSTD {
|
||||
int shmat(
|
||||
void *shmat(
|
||||
int shmid,
|
||||
_In_ const void *shmaddr,
|
||||
int shmflg
|
||||
@ -2543,7 +2543,7 @@
|
||||
);
|
||||
}
|
||||
477 AUE_MMAP STD {
|
||||
caddr_t mmap(
|
||||
void *mmap(
|
||||
_In_ void *addr,
|
||||
size_t len,
|
||||
int prot,
|
||||
|
@ -8788,7 +8788,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
|
||||
/* break */
|
||||
case 17:
|
||||
if (ndx == 0 || ndx == 1)
|
||||
p = "caddr_t";
|
||||
p = "void *";
|
||||
break;
|
||||
/* getpid */
|
||||
case 20:
|
||||
@ -9357,7 +9357,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
|
||||
/* shmat */
|
||||
case 228:
|
||||
if (ndx == 0 || ndx == 1)
|
||||
p = "int";
|
||||
p = "void *";
|
||||
break;
|
||||
/* shmdt */
|
||||
case 230:
|
||||
@ -10187,7 +10187,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
|
||||
/* mmap */
|
||||
case 477:
|
||||
if (ndx == 0 || ndx == 1)
|
||||
p = "caddr_t";
|
||||
p = "void *";
|
||||
break;
|
||||
/* lseek */
|
||||
case 478:
|
||||
|
@ -83,10 +83,12 @@ struct sysentvec elf64_freebsd_sysvec = {
|
||||
.sv_setregs = exec_setregs,
|
||||
.sv_fixlimit = NULL,
|
||||
.sv_maxssiz = NULL,
|
||||
.sv_flags = SV_ABI_FREEBSD | SV_LP64,
|
||||
.sv_flags = SV_ABI_FREEBSD | SV_LP64 | SV_SHP,
|
||||
.sv_set_syscall_retval = cpu_set_syscall_retval,
|
||||
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
|
||||
.sv_syscallnames = syscallnames,
|
||||
.sv_shared_page_base = SHAREDPAGE,
|
||||
.sv_shared_page_len = PAGE_SIZE,
|
||||
.sv_schedtail = NULL,
|
||||
.sv_thread_detach = NULL,
|
||||
.sv_trap = NULL,
|
||||
@ -109,22 +111,6 @@ SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_FIRST,
|
||||
(sysinit_cfunc_t) elf64_insert_brand_entry,
|
||||
&freebsd_brand_info);
|
||||
|
||||
static Elf64_Brandinfo freebsd_brand_oinfo = {
|
||||
.brand = ELFOSABI_FREEBSD,
|
||||
.machine = EM_RISCV,
|
||||
.compat_3_brand = "FreeBSD",
|
||||
.emul_path = NULL,
|
||||
.interp_path = "/usr/libexec/ld-elf.so.1",
|
||||
.sysvec = &elf64_freebsd_sysvec,
|
||||
.interp_newpath = NULL,
|
||||
.brand_note = &elf64_freebsd_brandnote,
|
||||
.flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE
|
||||
};
|
||||
|
||||
SYSINIT(oelf64, SI_SUB_EXEC, SI_ORDER_ANY,
|
||||
(sysinit_cfunc_t) elf64_insert_brand_entry,
|
||||
&freebsd_brand_oinfo);
|
||||
|
||||
static int debug_kld;
|
||||
SYSCTL_INT(_kern, OID_AUTO, debug_kld,
|
||||
CTLFLAG_RW, &debug_kld, 0,
|
||||
|
@ -707,6 +707,7 @@ typedef struct {
|
||||
#define DT_MIPS_PLTGOT 0x70000032
|
||||
#define DT_MIPS_RLD_OBJ_UPDATE 0x70000033
|
||||
#define DT_MIPS_RWPLT 0x70000034
|
||||
#define DT_MIPS_RLD_MAP_REL 0x70000035
|
||||
|
||||
#define DT_PPC_GOT 0x70000000
|
||||
#define DT_PPC_TLSOPT 0x70000001
|
||||
|
@ -334,6 +334,23 @@ test_getuid(uintmax_t num, uintmax_t int_arg __unused, const char *path __unused
|
||||
return (i);
|
||||
}
|
||||
|
||||
static uintmax_t
|
||||
test_lstat(uintmax_t num, uintmax_t int_arg __unused, const char *path)
|
||||
{
|
||||
struct stat sb;
|
||||
uintmax_t i;
|
||||
int error;
|
||||
|
||||
benchmark_start();
|
||||
BENCHMARK_FOREACH(i, num) {
|
||||
error = lstat(path, &sb);
|
||||
if (error != 0)
|
||||
err(-1, "lstat");
|
||||
}
|
||||
benchmark_stop();
|
||||
return (i);
|
||||
}
|
||||
|
||||
static uintmax_t
|
||||
test_memcpy(uintmax_t num, uintmax_t int_arg, const char *path __unused)
|
||||
{
|
||||
@ -823,6 +840,23 @@ test_socketpair_dgram(uintmax_t num, uintmax_t int_arg __unused, const char *pat
|
||||
return (i);
|
||||
}
|
||||
|
||||
static uintmax_t
|
||||
test_readlink(uintmax_t num, uintmax_t int_arg __unused, const char *path)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
ssize_t rv;
|
||||
uintmax_t i;
|
||||
|
||||
benchmark_start();
|
||||
BENCHMARK_FOREACH(i, num) {
|
||||
rv = readlink(path, buf, sizeof(buf));
|
||||
if (rv < 0 && errno != EINVAL)
|
||||
err(-1, "readlink");
|
||||
}
|
||||
benchmark_stop();
|
||||
return (i);
|
||||
}
|
||||
|
||||
static uintmax_t
|
||||
test_vfork(uintmax_t num, uintmax_t int_arg __unused, const char *path __unused)
|
||||
{
|
||||
@ -904,6 +938,7 @@ static const struct test tests[] = {
|
||||
{ "getresuid", test_getresuid, .t_flags = 0 },
|
||||
{ "gettimeofday", test_gettimeofday, .t_flags = 0 },
|
||||
{ "getuid", test_getuid, .t_flags = 0 },
|
||||
{ "lstat", test_lstat, .t_flags = FLAG_PATH },
|
||||
{ "memcpy_1", test_memcpy, .t_flags = 0, .t_int = 1 },
|
||||
{ "memcpy_10", test_memcpy, .t_flags = 0, .t_int = 10 },
|
||||
{ "memcpy_100", test_memcpy, .t_flags = 0, .t_int = 100 },
|
||||
@ -962,6 +997,7 @@ static const struct test tests[] = {
|
||||
{ "socketpair_dgram", test_socketpair_dgram, .t_flags = 0 },
|
||||
{ "socket_tcp", test_socket_stream, .t_int = PF_INET },
|
||||
{ "socket_udp", test_socket_dgram, .t_int = PF_INET },
|
||||
{ "readlink", test_readlink, .t_flags = FLAG_PATH },
|
||||
{ "vfork", test_vfork, .t_flags = 0 },
|
||||
{ "vfork_exec", test_vfork_exec, .t_flags = 0 },
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user