svn commit: r313313 - in projects/ipsec: cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt cddl/contrib/opensolaris/lib/libdtrace/common etc sbin/decryptcore sbin/hastctl sbin/hastd sbin/ifc...
Andrey V. Elsukov
ae at FreeBSD.org
Mon Feb 6 04:30:21 UTC 2017
Author: ae
Date: Mon Feb 6 04:30:18 2017
New Revision: 313313
URL: https://svnweb.freebsd.org/changeset/base/313313
Log:
Merge from head/.
Added:
projects/ipsec/sbin/nvmecontrol/wdc.c
- copied unchanged from r313312, head/sbin/nvmecontrol/wdc.c
Modified:
projects/ipsec/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.enabled2.ksh
projects/ipsec/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.include.ksh
projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_dof.c
projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c
projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c
projects/ipsec/etc/devd.conf
projects/ipsec/sbin/decryptcore/decryptcore.c
projects/ipsec/sbin/hastctl/Makefile
projects/ipsec/sbin/hastd/Makefile
projects/ipsec/sbin/hastd/hast_checksum.c
projects/ipsec/sbin/hastd/hast_proto.c
projects/ipsec/sbin/ifconfig/ifieee80211.c
projects/ipsec/sbin/kldload/kldload.c
projects/ipsec/sbin/nvmecontrol/Makefile
projects/ipsec/sbin/nvmecontrol/firmware.c
projects/ipsec/sbin/nvmecontrol/logpage.c
projects/ipsec/sbin/nvmecontrol/nvmecontrol.8
projects/ipsec/sbin/nvmecontrol/nvmecontrol.c
projects/ipsec/sbin/nvmecontrol/nvmecontrol.h
projects/ipsec/sbin/savecore/savecore.c
projects/ipsec/sys/amd64/include/pcpu.h
projects/ipsec/sys/amd64/linux/linux_dummy.c
projects/ipsec/sys/amd64/linux/linux_proto.h
projects/ipsec/sys/amd64/linux/linux_syscall.h
projects/ipsec/sys/amd64/linux/linux_syscalls.c
projects/ipsec/sys/amd64/linux/linux_sysent.c
projects/ipsec/sys/amd64/linux/linux_systrace_args.c
projects/ipsec/sys/amd64/linux/syscalls.master
projects/ipsec/sys/amd64/linux32/linux32_dummy.c
projects/ipsec/sys/amd64/linux32/linux32_proto.h
projects/ipsec/sys/amd64/linux32/linux32_syscall.h
projects/ipsec/sys/amd64/linux32/linux32_syscalls.c
projects/ipsec/sys/amd64/linux32/linux32_sysent.c
projects/ipsec/sys/amd64/linux32/linux32_systrace_args.c
projects/ipsec/sys/amd64/linux32/syscalls.master
projects/ipsec/sys/arm/include/_types.h
projects/ipsec/sys/arm64/include/_types.h
projects/ipsec/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
projects/ipsec/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h
projects/ipsec/sys/cddl/dev/dtrace/dtrace_ioctl.c
projects/ipsec/sys/compat/freebsd32/freebsd32_misc.c
projects/ipsec/sys/compat/linux/linux_file.c
projects/ipsec/sys/compat/linux/linux_misc.c
projects/ipsec/sys/compat/linux/linux_socket.h
projects/ipsec/sys/dev/iwm/if_iwm.c
projects/ipsec/sys/dev/iwm/if_iwm_mac_ctxt.c
projects/ipsec/sys/dev/iwm/if_iwm_pcie_trans.c
projects/ipsec/sys/dev/iwm/if_iwm_phy_db.c
projects/ipsec/sys/dev/iwm/if_iwm_phy_db.h
projects/ipsec/sys/dev/iwm/if_iwm_scan.c
projects/ipsec/sys/dev/iwm/if_iwm_util.c
projects/ipsec/sys/dev/iwm/if_iwmreg.h
projects/ipsec/sys/dev/iwm/if_iwmvar.h
projects/ipsec/sys/dev/mmc/mmc.c
projects/ipsec/sys/dev/mmc/mmcreg.h
projects/ipsec/sys/dev/sdhci/sdhci.c
projects/ipsec/sys/dev/sdhci/sdhci.h
projects/ipsec/sys/dev/sdhci/sdhci_fdt.c
projects/ipsec/sys/dev/sdhci/sdhci_pci.c
projects/ipsec/sys/dev/usb/serial/uftdi.c
projects/ipsec/sys/dev/usb/serial/usb_serial.c
projects/ipsec/sys/dev/usb/serial/usb_serial.h
projects/ipsec/sys/i386/linux/linux_dummy.c
projects/ipsec/sys/i386/linux/linux_proto.h
projects/ipsec/sys/i386/linux/linux_syscall.h
projects/ipsec/sys/i386/linux/linux_syscalls.c
projects/ipsec/sys/i386/linux/linux_sysent.c
projects/ipsec/sys/i386/linux/linux_systrace_args.c
projects/ipsec/sys/i386/linux/syscalls.master
projects/ipsec/sys/kern/kern_cpuset.c
projects/ipsec/sys/kern/kern_descrip.c
projects/ipsec/sys/kern/kern_mutex.c
projects/ipsec/sys/kern/kern_rmlock.c
projects/ipsec/sys/kern/kern_rwlock.c
projects/ipsec/sys/kern/kern_sx.c
projects/ipsec/sys/kern/subr_witness.c
projects/ipsec/sys/kern/vfs_subr.c
projects/ipsec/sys/mips/include/_types.h
projects/ipsec/sys/mips/include/pcpu.h
projects/ipsec/sys/net/iflib.c
projects/ipsec/sys/net/netisr.c
projects/ipsec/sys/powerpc/include/_types.h
projects/ipsec/sys/powerpc/include/cpufunc.h
projects/ipsec/sys/powerpc/include/pcpu.h
projects/ipsec/sys/riscv/include/_types.h
projects/ipsec/sys/riscv/include/atomic.h
projects/ipsec/sys/sparc64/include/_types.h
projects/ipsec/sys/sparc64/include/pcpu.h
projects/ipsec/sys/sys/lockstat.h
projects/ipsec/sys/sys/mutex.h
projects/ipsec/sys/sys/rwlock.h
projects/ipsec/sys/sys/sdt.h
projects/ipsec/sys/sys/sx.h
projects/ipsec/sys/sys/syscallsubr.h
projects/ipsec/sys/sys/types.h
projects/ipsec/sys/vm/vm_object.h
projects/ipsec/sys/x86/include/_types.h
projects/ipsec/tools/tools/nanobsd/embedded/rpi2.cfg
projects/ipsec/usr.bin/sed/main.c
Directory Properties:
projects/ipsec/ (props changed)
projects/ipsec/cddl/ (props changed)
projects/ipsec/cddl/contrib/opensolaris/ (props changed)
projects/ipsec/sys/cddl/contrib/opensolaris/ (props changed)
Modified: projects/ipsec/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.enabled2.ksh
==============================================================================
--- projects/ipsec/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.enabled2.ksh Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.enabled2.ksh Mon Feb 6 04:30:18 2017 (r313313)
@@ -77,7 +77,7 @@ main(int argc, char **argv)
}
EOF
-cc -c -xO2 test.c
+cc -c -O2 test.c
if [ $? -ne 0 ]; then
print -u2 "failed to compile test.c"
exit 1
Modified: projects/ipsec/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.include.ksh
==============================================================================
--- projects/ipsec/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.include.ksh Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.include.ksh Mon Feb 6 04:30:18 2017 (r313313)
@@ -25,7 +25,7 @@
#
# ident "%Z%%M% %I% %E% SMI"
-# Make sure <unistd.h> defines _DTRACE_VERSION
+# Make sure <sys/sdt.h> defines _DTRACE_VERSION
DIR=/var/tmp/dtest.$$
@@ -33,7 +33,7 @@ mkdir $DIR
cd $DIR
cat > test.c <<EOF
-#include <unistd.h>
+#include <sys/sdt.h>
int
main(int argc, char **argv)
@@ -46,7 +46,7 @@ main(int argc, char **argv)
}
EOF
-cc -xarch=generic -o test test.c
+cc -o test test.c
if [ $? -ne 0 ]; then
print -u2 "failed to compile test.c"
exit 1
Modified: projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_dof.c
==============================================================================
--- projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_dof.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_dof.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -462,18 +462,8 @@ dof_add_probe(dt_idhash_t *dhp, dt_ident
dt_buf_write(dtp, &ddo->ddo_enoffs, pip->pi_enoffs,
pip->pi_nenoffs * sizeof (uint32_t), sizeof (uint32_t));
- /*
- * If pi_rname isn't set, the relocation will be against the
- * function name. If it is, the relocation will be against
- * pi_rname. This will be used if the function is scoped
- * locally so an alternate symbol is added for the purpose
- * of this relocation.
- */
- if (pip->pi_rname == NULL)
- dofr.dofr_name = dofpr.dofpr_func;
- else
- dofr.dofr_name = dof_add_string(ddo, pip->pi_rname);
- dofr.dofr_type = DOF_RELO_SETX;
+ dofr.dofr_name = dof_add_string(ddo, pip->pi_rname);
+ dofr.dofr_type = DOF_RELO_DOFREL;
dofr.dofr_offset = dt_buf_len(&ddo->ddo_probes);
dofr.dofr_data = 0;
Modified: projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c
==============================================================================
--- projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -237,7 +237,7 @@ printf("%s:%s(%d): DOODAD\n",__FUNCTION_
rel->r_offset = s->dofs_offset +
dofr[j].dofr_offset;
rel->r_info = ELF32_R_INFO(count + dep->de_global,
- R_386_32);
+ R_386_PC32);
#elif defined(__mips__)
/* XXX */
printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
@@ -253,15 +253,6 @@ printf("%s:%s(%d): DOODAD\n",__FUNCTION_
#elif defined(__riscv__)
/* XXX */
printf("%s:%s(%d): DOODAD\n",__FUNCTION__,__FILE__,__LINE__);
-#elif defined(__sparc)
- /*
- * Add 4 bytes to hit the low half of this 64-bit
- * big-endian address.
- */
- rel->r_offset = s->dofs_offset +
- dofr[j].dofr_offset + 4;
- rel->r_info = ELF32_R_INFO(count + dep->de_global,
- R_SPARC_32);
#else
#error unknown ISA
#endif
@@ -270,7 +261,7 @@ printf("%s:%s(%d): DOODAD\n",__FUNCTION_
sym->st_value = 0;
sym->st_size = 0;
sym->st_info = ELF32_ST_INFO(STB_GLOBAL, STT_FUNC);
- sym->st_other = 0;
+ sym->st_other = ELF32_ST_VISIBILITY(STV_HIDDEN);
sym->st_shndx = SHN_UNDEF;
rel++;
@@ -287,11 +278,7 @@ printf("%s:%s(%d): DOODAD\n",__FUNCTION_
sym->st_value = 0;
sym->st_size = dof->dofh_filesz;
sym->st_info = ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT);
-#ifdef illumos
- sym->st_other = 0;
-#else
sym->st_other = ELF32_ST_VISIBILITY(STV_HIDDEN);
-#endif
sym->st_shndx = ESHDR_DOF;
sym++;
@@ -448,18 +435,8 @@ prepare_elf64(dtrace_hdl_t *dtp, const d
#elif defined(__i386) || defined(__amd64)
rel->r_offset = s->dofs_offset +
dofr[j].dofr_offset;
-#ifdef illumos
rel->r_info = ELF64_R_INFO(count + dep->de_global,
- R_AMD64_64);
-#else
- rel->r_info = ELF64_R_INFO(count + dep->de_global,
- R_X86_64_RELATIVE);
-#endif
-#elif defined(__sparc)
- rel->r_offset = s->dofs_offset +
- dofr[j].dofr_offset;
- rel->r_info = ELF64_R_INFO(count + dep->de_global,
- R_SPARC_64);
+ R_X86_64_PC64);
#else
#error unknown ISA
#endif
@@ -468,7 +445,7 @@ prepare_elf64(dtrace_hdl_t *dtp, const d
sym->st_value = 0;
sym->st_size = 0;
sym->st_info = GELF_ST_INFO(STB_GLOBAL, STT_FUNC);
- sym->st_other = 0;
+ sym->st_other = ELF64_ST_VISIBILITY(STV_HIDDEN);
sym->st_shndx = SHN_UNDEF;
rel++;
@@ -485,11 +462,7 @@ prepare_elf64(dtrace_hdl_t *dtp, const d
sym->st_value = 0;
sym->st_size = dof->dofh_filesz;
sym->st_info = GELF_ST_INFO(STB_GLOBAL, STT_OBJECT);
-#ifdef illumos
- sym->st_other = 0;
-#else
sym->st_other = ELF64_ST_VISIBILITY(STV_HIDDEN);
-#endif
sym->st_shndx = ESHDR_DOF;
sym++;
@@ -797,16 +770,15 @@ dump_elf64(dtrace_hdl_t *dtp, const dof_
}
static int
-dt_symtab_lookup(Elf_Data *data_sym, int nsym, uintptr_t addr, uint_t shn,
- GElf_Sym *sym, int uses_funcdesc, Elf *elf)
+dt_symtab_lookup(Elf_Data *data_sym, int start, int end, uintptr_t addr,
+ uint_t shn, GElf_Sym *sym, int uses_funcdesc, Elf *elf)
{
- int i, ret = -1;
Elf64_Addr symval;
Elf_Scn *opd_scn;
Elf_Data *opd_desc;
- GElf_Sym s;
+ int i;
- for (i = 0; i < nsym && gelf_getsym(data_sym, i, sym) != NULL; i++) {
+ for (i = start; i < end && gelf_getsym(data_sym, i, sym) != NULL; i++) {
if (GELF_ST_TYPE(sym->st_info) == STT_FUNC) {
symval = sym->st_value;
if (uses_funcdesc) {
@@ -816,20 +788,12 @@ dt_symtab_lookup(Elf_Data *data_sym, int
*(uint64_t*)((char *)opd_desc->d_buf + symval);
}
if ((uses_funcdesc || shn == sym->st_shndx) &&
- symval <= addr &&
- addr < symval + sym->st_size) {
- if (GELF_ST_BIND(sym->st_info) == STB_GLOBAL)
- return (0);
-
- ret = 0;
- s = *sym;
- }
+ symval <= addr && addr < symval + sym->st_size)
+ return (0);
}
}
- if (ret == 0)
- *sym = s;
- return (ret);
+ return (-1);
}
#if defined(__aarch64__)
@@ -1237,10 +1201,11 @@ process_obj(dtrace_hdl_t *dtp, const cha
dt_provider_t *pvp;
dt_probe_t *prp;
uint32_t off, eclass, emachine1, emachine2;
- size_t symsize, nsym, isym, istr, len;
+ size_t symsize, osym, nsym, isym, istr, len;
key_t objkey;
dt_link_pair_t *pair, *bufs = NULL;
dt_strtab_t *strtab;
+ void *tmp;
if ((fd = open64(obj, O_RDWR)) == -1) {
return (dt_link_error(dtp, elf, fd, bufs,
@@ -1374,12 +1339,13 @@ process_obj(dtrace_hdl_t *dtp, const cha
* target (text) section to replace the call instruction with
* one or more nops.
*
- * If the function containing the probe is locally scoped
- * (static), we create an alias used by the relocation in the
- * generated object. The alias, a new symbol, will be global
- * (so that the relocation from the generated object can be
- * resolved), and hidden (so that it is converted to a local
- * symbol at link time). Such aliases have this form:
+ * To avoid runtime overhead, the relocations added to the
+ * generated object should be resolved at static link time. We
+ * therefore create aliases for the functions that contain
+ * probes. An alias is global (so that the relocation from the
+ * generated object can be resolved), and hidden (so that its
+ * address is known at static link time). Such aliases have this
+ * form:
*
* $dtrace<key>.<function>
*
@@ -1417,16 +1383,13 @@ process_obj(dtrace_hdl_t *dtp, const cha
if (strncmp(s, dt_prefix, sizeof (dt_prefix) - 1) != 0)
continue;
- if (dt_symtab_lookup(data_sym, isym, rela.r_offset,
- shdr_rel.sh_info, &fsym,
- (emachine1 == EM_PPC64), elf) != 0) {
+ if (dt_symtab_lookup(data_sym, 0, isym, rela.r_offset,
+ shdr_rel.sh_info, &fsym, (emachine1 == EM_PPC64),
+ elf) != 0) {
dt_strtab_destroy(strtab);
goto err;
}
- if (GELF_ST_BIND(fsym.st_info) != STB_LOCAL)
- continue;
-
if (fsym.st_name > data_str->d_size) {
dt_strtab_destroy(strtab);
goto err;
@@ -1462,12 +1425,12 @@ process_obj(dtrace_hdl_t *dtp, const cha
}
/*
- * If needed, allocate the additional space for the symbol
- * table and string table copying the old data into the new
- * buffers, and marking the buffers as dirty. We inject those
- * newly allocated buffers into the libelf data structures, but
- * are still responsible for freeing them once we're done with
- * the elf handle.
+ * If any probes were found, allocate the additional space for
+ * the symbol table and string table, copying the old data into
+ * the new buffers, and marking the buffers as dirty. We inject
+ * those newly allocated buffers into the libelf data
+ * structures, but are still responsible for freeing them once
+ * we're done with the elf handle.
*/
if (nsym > 0) {
/*
@@ -1501,7 +1464,9 @@ process_obj(dtrace_hdl_t *dtp, const cha
bufs = pair;
bcopy(data_str->d_buf, pair->dlp_str, data_str->d_size);
+ tmp = data_str->d_buf;
data_str->d_buf = pair->dlp_str;
+ pair->dlp_str = tmp;
data_str->d_size += len;
(void) elf_flagdata(data_str, ELF_C_SET, ELF_F_DIRTY);
@@ -1509,16 +1474,20 @@ process_obj(dtrace_hdl_t *dtp, const cha
(void) gelf_update_shdr(scn_str, &shdr_str);
bcopy(data_sym->d_buf, pair->dlp_sym, data_sym->d_size);
+ tmp = data_sym->d_buf;
data_sym->d_buf = pair->dlp_sym;
+ pair->dlp_sym = tmp;
data_sym->d_size += nsym * symsize;
(void) elf_flagdata(data_sym, ELF_C_SET, ELF_F_DIRTY);
shdr_sym.sh_size += nsym * symsize;
(void) gelf_update_shdr(scn_sym, &shdr_sym);
+ osym = isym;
nsym += isym;
} else {
dt_strtab_destroy(strtab);
+ continue;
}
/*
@@ -1577,8 +1546,11 @@ process_obj(dtrace_hdl_t *dtp, const cha
bcopy(s, pname, p - s);
pname[p - s] = '\0';
- if (dt_symtab_lookup(data_sym, isym, rela.r_offset,
- shdr_rel.sh_info, &fsym,
+ if (dt_symtab_lookup(data_sym, osym, isym,
+ rela.r_offset, shdr_rel.sh_info, &fsym,
+ (emachine1 == EM_PPC64), elf) != 0 &&
+ dt_symtab_lookup(data_sym, 0, osym,
+ rela.r_offset, shdr_rel.sh_info, &fsym,
(emachine1 == EM_PPC64), elf) != 0)
goto err;
@@ -1588,37 +1560,30 @@ process_obj(dtrace_hdl_t *dtp, const cha
assert(GELF_ST_TYPE(fsym.st_info) == STT_FUNC);
/*
- * If a NULL relocation name is passed to
- * dt_probe_define(), the function name is used for the
- * relocation. The relocation needs to use a mangled
- * name if the symbol is locally scoped; the function
- * name may need to change if we've found the global
- * alias for the locally scoped symbol (we prefer
- * global symbols to locals in dt_symtab_lookup()).
+ * If this is our first time encountering this symbol,
+ * emit an alias.
*/
s = (char *)data_str->d_buf + fsym.st_name;
- r = NULL;
- if (GELF_ST_BIND(fsym.st_info) == STB_LOCAL) {
+ if (strncmp(s, dt_symprefix,
+ sizeof (dt_symprefix) - 1) != 0) {
+ u_int bind = GELF_ST_BIND(fsym.st_info);
+
dsym = fsym;
dsym.st_name = istr;
- dsym.st_info = GELF_ST_INFO(STB_GLOBAL,
- STT_FUNC);
- dsym.st_other =
- ELF64_ST_VISIBILITY(STV_ELIMINATE);
+ dsym.st_info = GELF_ST_INFO(bind == STB_LOCAL ?
+ STB_GLOBAL : bind, STT_FUNC);
+ dsym.st_other = GELF_ST_VISIBILITY(STV_HIDDEN);
(void) gelf_update_sym(data_sym, isym, &dsym);
-
- r = (char *)data_str->d_buf + istr;
- istr += 1 + sprintf(r, dt_symfmt,
- dt_symprefix, objkey, s);
+ r = (char *) data_str->d_buf + istr;
+ istr += 1 + sprintf(r, dt_symfmt, dt_symprefix, objkey,
+ s);
isym++;
assert(isym <= nsym);
-
- } else if (strncmp(s, dt_symprefix,
- strlen(dt_symprefix)) == 0) {
+ } else {
r = s;
- if ((s = strchr(s, '.')) == NULL)
- goto err;
+ s = strchr(s, '.');
+ assert(s != NULL);
s++;
}
@@ -1697,9 +1662,6 @@ process_obj(dtrace_hdl_t *dtp, const cha
(void) elf_end(elf);
(void) close(fd);
-#ifndef illumos
- if (nsym > 0)
-#endif
while ((pair = bufs) != NULL) {
bufs = pair->dlp_next;
dt_free(dtp, pair->dlp_str);
Modified: projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c
==============================================================================
--- projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -545,9 +545,7 @@ dt_probe_define(dt_provider_t *pvp, dt_p
for (pip = prp->pr_inst; pip != NULL; pip = pip->pi_next) {
if (strcmp(pip->pi_fname, fname) == 0 &&
- ((rname == NULL && pip->pi_rname == NULL) ||
- (rname != NULL && pip->pi_rname != NULL &&
- strcmp(pip->pi_rname, rname) == 0)))
+ strcmp(pip->pi_rname, rname) == 0)
break;
}
@@ -565,7 +563,7 @@ dt_probe_define(dt_provider_t *pvp, dt_p
if ((pip->pi_fname = strdup(fname)) == NULL)
goto nomem;
- if (rname != NULL && (pip->pi_rname = strdup(rname)) == NULL)
+ if ((pip->pi_rname = strdup(rname)) == NULL)
goto nomem;
pip->pi_noffs = 0;
@@ -605,7 +603,7 @@ dt_probe_define(dt_provider_t *pvp, dt_p
dt_dprintf("defined probe %s %s:%s %s() +0x%x (%s)\n",
isenabled ? "(is-enabled)" : "",
pvp->pv_desc.dtvd_name, prp->pr_ident->di_name, fname, offset,
- rname != NULL ? rname : fname);
+ rname);
assert(*noffs < *maxoffs);
(*offs)[(*noffs)++] = offset;
Modified: projects/ipsec/etc/devd.conf
==============================================================================
--- projects/ipsec/etc/devd.conf Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/etc/devd.conf Mon Feb 6 04:30:18 2017 (r313313)
@@ -272,7 +272,7 @@ nomatch 10 {
match "bus" "pccard[0-9]+";
match "manufacturer" "0x1234";
match "product" "0x2323";
- action "kldload if_deqna";
+ action "kldload -n if_deqna";
};
attach 10 {
device-name "deqna[0-9]+";
Modified: projects/ipsec/sbin/decryptcore/decryptcore.c
==============================================================================
--- projects/ipsec/sbin/decryptcore/decryptcore.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/decryptcore/decryptcore.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -31,7 +31,6 @@ __FBSDID("$FreeBSD$");
#include <sys/capsicum.h>
#include <sys/endian.h>
#include <sys/kerneldump.h>
-#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/wait.h>
@@ -232,8 +231,6 @@ decrypt(const char *privkeyfile, const c
pjdlog_errno(LOG_ERR, "Unable to read data from %s",
input);
goto failed;
- } else if (bytes == 0) {
- break;
}
if (bytes > 0) {
@@ -249,10 +246,7 @@ decrypt(const char *privkeyfile, const c
}
}
- if (olen == 0)
- continue;
-
- if (write(ofd, buf, olen) != olen) {
+ if (olen > 0 && write(ofd, buf, olen) != olen) {
pjdlog_errno(LOG_ERR, "Unable to write data to %s",
output);
goto failed;
@@ -274,7 +268,6 @@ int
main(int argc, char **argv)
{
char core[PATH_MAX], encryptedcore[PATH_MAX], keyfile[PATH_MAX];
- struct stat sb;
const char *crashdir, *dumpnr, *privatekey;
int ch, debug;
size_t ii;
@@ -297,16 +290,23 @@ main(int argc, char **argv)
usesyslog = true;
break;
case 'c':
- strncpy(core, optarg, sizeof(core));
+ if (strlcpy(core, optarg, sizeof(core)) >= sizeof(core))
+ pjdlog_exitx(1, "Core file path is too long.");
break;
case 'd':
crashdir = optarg;
break;
case 'e':
- strncpy(encryptedcore, optarg, sizeof(encryptedcore));
+ if (strlcpy(encryptedcore, optarg,
+ sizeof(encryptedcore)) >= sizeof(encryptedcore)) {
+ pjdlog_exitx(1, "Encrypted core file path is too long.");
+ }
break;
case 'k':
- strncpy(keyfile, optarg, sizeof(keyfile));
+ if (strlcpy(keyfile, optarg, sizeof(keyfile)) >=
+ sizeof(keyfile)) {
+ pjdlog_exitx(1, "Key file path is too long.");
+ }
break;
case 'n':
dumpnr = optarg;
@@ -362,7 +362,7 @@ main(int argc, char **argv)
pjdlog_debug_set(debug);
if (!decrypt(privatekey, keyfile, encryptedcore, core)) {
- if (stat(core, &sb) == 0 && unlink(core) != 0)
+ if (unlink(core) == -1 && errno != ENOENT)
pjdlog_exit(1, "Unable to remove core");
exit(1);
}
Modified: projects/ipsec/sbin/hastctl/Makefile
==============================================================================
--- projects/ipsec/sbin/hastctl/Makefile Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/hastctl/Makefile Mon Feb 6 04:30:18 2017 (r313313)
@@ -33,11 +33,7 @@ CFLAGS+=-DINET6
CFLAGS+=-DYY_NO_UNPUT
CFLAGS+=-DYY_NO_INPUT
-LIBADD= util
-.if ${MK_OPENSSL} != "no"
-LIBADD+= crypto
-CFLAGS+=-DHAVE_CRYPTO
-.endif
+LIBADD= md util
YFLAGS+=-v
Modified: projects/ipsec/sbin/hastd/Makefile
==============================================================================
--- projects/ipsec/sbin/hastd/Makefile Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/hastd/Makefile Mon Feb 6 04:30:18 2017 (r313313)
@@ -31,11 +31,7 @@ CFLAGS+=-DINET
CFLAGS+=-DINET6
.endif
-LIBADD= geom pthread util
-.if ${MK_OPENSSL} != "no"
-LIBADD+= crypto
-CFLAGS+=-DHAVE_CRYPTO
-.endif
+LIBADD= geom md pthread util
YFLAGS+=-v
Modified: projects/ipsec/sbin/hastd/hast_checksum.c
==============================================================================
--- projects/ipsec/sbin/hastd/hast_checksum.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/hastd/hast_checksum.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -31,22 +31,15 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <strings.h>
-#ifdef HAVE_CRYPTO
-#include <openssl/sha.h>
-#endif
-
#include <crc32.h>
#include <hast.h>
#include <nv.h>
+#include <sha256.h>
#include <pjdlog.h>
#include "hast_checksum.h"
-#ifdef HAVE_CRYPTO
#define MAX_HASH_SIZE SHA256_DIGEST_LENGTH
-#else
-#define MAX_HASH_SIZE 4
-#endif
static void
hast_crc32_checksum(const unsigned char *data, size_t size,
@@ -60,7 +53,6 @@ hast_crc32_checksum(const unsigned char
*hsizep = sizeof(crc);
}
-#ifdef HAVE_CRYPTO
static void
hast_sha256_checksum(const unsigned char *data, size_t size,
unsigned char *hash, size_t *hsizep)
@@ -72,7 +64,6 @@ hast_sha256_checksum(const unsigned char
SHA256_Final(hash, &ctx);
*hsizep = SHA256_DIGEST_LENGTH;
}
-#endif /* HAVE_CRYPTO */
const char *
checksum_name(int num)
@@ -102,11 +93,9 @@ checksum_send(const struct hast_resource
case HAST_CHECKSUM_CRC32:
hast_crc32_checksum(*datap, *sizep, hash, &hsize);
break;
-#ifdef HAVE_CRYPTO
case HAST_CHECKSUM_SHA256:
hast_sha256_checksum(*datap, *sizep, hash, &hsize);
break;
-#endif
default:
PJDLOG_ABORT("Invalid checksum: %d.", res->hr_checksum);
}
@@ -138,10 +127,8 @@ checksum_recv(const struct hast_resource
}
if (strcmp(algo, "crc32") == 0)
hast_crc32_checksum(*datap, *sizep, chash, &chsize);
-#ifdef HAVE_CRYPTO
else if (strcmp(algo, "sha256") == 0)
hast_sha256_checksum(*datap, *sizep, chash, &chsize);
-#endif
else {
pjdlog_error("Unknown checksum algorithm '%s'.", algo);
return (-1); /* Unknown checksum algorithm. */
Modified: projects/ipsec/sbin/hastd/hast_proto.c
==============================================================================
--- projects/ipsec/sbin/hastd/hast_proto.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/hastd/hast_proto.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -42,9 +42,7 @@ __FBSDID("$FreeBSD$");
#include <pjdlog.h>
#include <proto.h>
-#ifdef HAVE_CRYPTO
#include "hast_checksum.h"
-#endif
#include "hast_compression.h"
#include "hast_proto.h"
@@ -68,9 +66,7 @@ struct hast_pipe_stage {
static struct hast_pipe_stage pipeline[] = {
{ "compression", compression_send, compression_recv },
-#ifdef HAVE_CRYPTO
{ "checksum", checksum_send, checksum_recv }
-#endif
};
/*
Modified: projects/ipsec/sbin/ifconfig/ifieee80211.c
==============================================================================
--- projects/ipsec/sbin/ifconfig/ifieee80211.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/ifconfig/ifieee80211.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -5594,12 +5594,12 @@ static struct cmd ieee80211_cmds[] = {
DEF_CMD_ARG("bgscanidle", set80211bgscanidle),
DEF_CMD_ARG("bgscanintvl", set80211bgscanintvl),
DEF_CMD_ARG("scanvalid", set80211scanvalid),
- DEF_CMD("quiet", 1, set80211quiet),
- DEF_CMD("-quiet", 0, set80211quiet),
- DEF_CMD_ARG("quiet_count", set80211quietcount),
- DEF_CMD_ARG("quiet_period", set80211quietperiod),
- DEF_CMD_ARG("quiet_dur", set80211quietduration),
- DEF_CMD_ARG("quiet_offset", set80211quietoffset),
+ DEF_CMD("quiet", 1, set80211quiet),
+ DEF_CMD("-quiet", 0, set80211quiet),
+ DEF_CMD_ARG("quiet_count", set80211quietcount),
+ DEF_CMD_ARG("quiet_period", set80211quietperiod),
+ DEF_CMD_ARG("quiet_duration", set80211quietduration),
+ DEF_CMD_ARG("quiet_offset", set80211quietoffset),
DEF_CMD_ARG("roam:rssi", set80211roamrssi),
DEF_CMD_ARG("roam:rate", set80211roamrate),
DEF_CMD_ARG("mcastrate", set80211mcastrate),
Modified: projects/ipsec/sbin/kldload/kldload.c
==============================================================================
--- projects/ipsec/sbin/kldload/kldload.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/kldload/kldload.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -41,9 +41,6 @@ __FBSDID("$FreeBSD$");
#define PATHCTL "kern.module_path"
-static int path_check(const char *, int);
-static void usage(void);
-
/*
* Check to see if the requested module is specified as a filename with no
* path. If so and if a file by the same name exists in the module path,
@@ -52,43 +49,37 @@ static void usage(void);
static int
path_check(const char *kldname, int quiet)
{
- int mib[5], found;
- size_t miblen, pathlen;
- char kldpath[MAXPATHLEN];
char *path, *tmppath, *element;
struct stat sb;
+ int mib[5];
+ char kldpath[MAXPATHLEN];
+ size_t miblen, pathlen;
dev_t dev;
ino_t ino;
+ int found;
- if (strchr(kldname, '/') != NULL) {
+ if (strchr(kldname, '/') != NULL)
return (0);
- }
- if (strstr(kldname, ".ko") == NULL) {
+ if (strstr(kldname, ".ko") == NULL)
return (0);
- }
- if (stat(kldname, &sb) != 0) {
+ if (stat(kldname, &sb) != 0)
return (0);
- }
found = 0;
dev = sb.st_dev;
ino = sb.st_ino;
miblen = nitems(mib);
- if (sysctlnametomib(PATHCTL, mib, &miblen) != 0) {
+ if (sysctlnametomib(PATHCTL, mib, &miblen) != 0)
err(1, "sysctlnametomib(%s)", PATHCTL);
- }
- if (sysctl(mib, miblen, NULL, &pathlen, NULL, 0) == -1) {
+ if (sysctl(mib, miblen, NULL, &pathlen, NULL, 0) == -1)
err(1, "getting path: sysctl(%s) - size only", PATHCTL);
- }
path = malloc(pathlen + 1);
- if (path == NULL) {
+ if (path == NULL)
err(1, "allocating %lu bytes for the path",
(unsigned long)pathlen + 1);
- }
- if (sysctl(mib, miblen, path, &pathlen, NULL, 0) == -1) {
+ if (sysctl(mib, miblen, path, &pathlen, NULL, 0) == -1)
err(1, "getting path: sysctl(%s)", PATHCTL);
- }
tmppath = path;
while ((element = strsep(&tmppath, ";")) != NULL) {
@@ -97,39 +88,36 @@ path_check(const char *kldname, int quie
strlcat(kldpath, "/", MAXPATHLEN);
}
strlcat(kldpath, kldname, MAXPATHLEN);
-
- if (stat(kldpath, &sb) == -1) {
+
+ if (stat(kldpath, &sb) == -1)
continue;
- }
found = 1;
if (sb.st_dev != dev || sb.st_ino != ino) {
- if (!quiet) {
+ if (!quiet)
warnx("%s will be loaded from %s, not the "
"current directory", kldname, element);
- }
break;
- } else if (sb.st_dev == dev && sb.st_ino == ino) {
+ } else if (sb.st_dev == dev && sb.st_ino == ino)
break;
- }
}
free(path);
-
+
if (!found) {
- if (!quiet) {
+ if (!quiet)
warnx("%s is not in the module path", kldname);
- }
return (-1);
}
-
+
return (0);
}
static void
usage(void)
{
+
fprintf(stderr, "usage: kldload [-nqv] file ...\n");
exit(1);
}
@@ -138,17 +126,17 @@ int
main(int argc, char** argv)
{
int c;
+ int check_loaded;
int errors;
int fileid;
- int verbose;
int quiet;
- int check_loaded;
+ int verbose;
errors = 0;
verbose = 0;
quiet = 0;
check_loaded = 0;
-
+
while ((c = getopt(argc, argv, "nqv")) != -1) {
switch (c) {
case 'q':
@@ -204,9 +192,8 @@ main(int argc, char** argv)
printf("Loaded %s, id=%d\n", argv[0],
fileid);
}
- } else {
+ } else
errors++;
- }
argv++;
}
Modified: projects/ipsec/sbin/nvmecontrol/Makefile
==============================================================================
--- projects/ipsec/sbin/nvmecontrol/Makefile Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/nvmecontrol/Makefile Mon Feb 6 04:30:18 2017 (r313313)
@@ -3,7 +3,7 @@
PACKAGE=runtime
PROG= nvmecontrol
SRCS= nvmecontrol.c devlist.c firmware.c identify.c logpage.c \
- perftest.c reset.c nvme_util.c power.c
+ perftest.c reset.c nvme_util.c power.c wdc.c
MAN= nvmecontrol.8
.PATH: ${.CURDIR}/../../sys/dev/nvme
Modified: projects/ipsec/sbin/nvmecontrol/firmware.c
==============================================================================
--- projects/ipsec/sbin/nvmecontrol/firmware.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/nvmecontrol/firmware.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -114,7 +114,7 @@ update_firmware(int fd, uint8_t *payload
off = 0;
resid = payload_size;
- if ((chunk = aligned_alloc(NVME_MAX_XFER_SIZE, PAGE_SIZE)) == NULL)
+ if ((chunk = aligned_alloc(PAGE_SIZE, NVME_MAX_XFER_SIZE)) == NULL)
errx(1, "unable to malloc %d bytes", NVME_MAX_XFER_SIZE);
while (resid > 0) {
Modified: projects/ipsec/sbin/nvmecontrol/logpage.c
==============================================================================
--- projects/ipsec/sbin/nvmecontrol/logpage.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/nvmecontrol/logpage.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -74,6 +74,12 @@ kv_lookup(const struct kv_name *kv, size
return bad;
}
+static void
+print_bin(void *data, uint32_t length)
+{
+ write(STDOUT_FILENO, data, length);
+}
+
/*
* 128-bit integer augments to standard values. On i386 this
* doesn't exist, so we use 64-bit values. The 128-bit counters
@@ -846,6 +852,8 @@ static struct logpage_function {
sizeof(struct nvme_firmware_page)},
{HGST_INFO_LOG, "hgst", print_hgst_info_log,
DEFAULT_SIZE},
+ {HGST_INFO_LOG, "wdc", print_hgst_info_log,
+ DEFAULT_SIZE},
{INTEL_LOG_TEMP_STATS, "intel", print_intel_temp_stats,
sizeof(struct intel_log_temp_stats)},
{INTEL_LOG_READ_LAT_LOG, "intel", print_intel_read_lat_log,
@@ -870,7 +878,7 @@ logpage(int argc, char *argv[])
{
int fd, nsid;
int log_page = 0, pageflag = false;
- int hexflag = false, ns_specified;
+ int binflag = false, hexflag = false, ns_specified;
char ch, *p;
char cname[64];
uint32_t size;
@@ -880,8 +888,11 @@ logpage(int argc, char *argv[])
struct nvme_controller_data cdata;
print_fn_t print_fn;
- while ((ch = getopt(argc, argv, "p:xv:")) != -1) {
+ while ((ch = getopt(argc, argv, "bp:xv:")) != -1) {
switch (ch) {
+ case 'b':
+ binflag = true;
+ break;
case 'p':
/* TODO: Add human-readable ASCII page IDs */
log_page = strtol(optarg, &p, 0);
@@ -940,7 +951,9 @@ logpage(int argc, char *argv[])
print_fn = print_hex;
size = DEFAULT_SIZE;
- if (!hexflag) {
+ if (binflag)
+ print_fn = print_bin;
+ if (!binflag && !hexflag) {
/*
* See if there is a pretty print function for the specified log
* page. If one isn't found, we just revert to the default
Modified: projects/ipsec/sbin/nvmecontrol/nvmecontrol.8
==============================================================================
--- projects/ipsec/sbin/nvmecontrol/nvmecontrol.8 Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/nvmecontrol/nvmecontrol.8 Mon Feb 6 04:30:18 2017 (r313313)
@@ -33,7 +33,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 10, 2016
+.Dd February 4, 2017
.Dt NVMECONTROL 8
.Os
.Sh NAME
@@ -62,6 +62,8 @@
.Ic logpage
.Aq Fl p Ar page_id
.Op Fl x
+.Op Fl v Ar vendor-string
+.Op Fl b
.Aq device id
.Aq namespace id
.Nm
@@ -74,10 +76,48 @@
.Ic power
.Op Fl l
.Op Fl p power_state
-.Op fl w workload_hint
+.Op Fl w workload_hint
+.Nm
+.Ic wdc cap-diag
+.Op Fl o path_template
+.Aq device id
+.Nm
+.Ic wdc drive-log
+.Op Fl o path_template
+.Aq device id
+.Nm
+.Ic wdc get-crash-dump
+.Op Fl o path_template
+.Aq device id
+.\" .Nm
+.\" .Ic wdc purge
+.\" .Aq device id
+.\" .Nm
+.\" .Ic wdc purge-monitor
+.\" .Aq device id
.Sh DESCRIPTION
NVM Express (NVMe) is a storage protocol standard, for SSDs and other
high-speed storage devices over PCI Express.
+.Pp
+.Ss logpage
+The logpage command knows how to print log pages of various types.
+It also knows about vendor specific log pages from hgst/wdc and intel.
+Page 0xc1 for hgst/wdc contains the advanced smart information about
+the drive.
+Page 0xc1 is read latency stats for intel.
+Page 0xc2 is write latency stats for intel.
+Page 0xc5 is temperature stats for intel.
+Page 0xca is advanced smart information for intel.
+.Ss wdc
+The various wdc command retrieve log data from the wdc/hgst drives.
+The
+.Fl o
+flag specifies a path template to use to output the files.
+Each file takes the path template (which defaults to nothing), appends
+the drive's serial number and the type of dump it is followed
+by .bin.
+These logs must be sent to the vendor for analysis.
+This tool only provides a way to extract them.
.Sh EXAMPLES
.Dl nvmecontrol devlist
.Pp
@@ -108,10 +148,21 @@ Display a human-readable summary of the
Log pages defined by the NVMe specification include Error Information Log (ID=1),
SMART/Health Information Log (ID=2), and Firmware Slot Log (ID=3).
.Pp
+.Dl nvmecontrol logpage -p 0xc1 -v wdc nvme0
+.Pp
+Display a human-readable summary of the nvme0's wdc-specific advanced
+SMART data.
+.Pp
.Dl nvmecontrol logpage -p 1 -x nvme0
.Pp
Display a hexadecimal dump of the nvme0 controller's Error Information Log.
.Pp
+.Dl nvmecontrol logpage -p 0xcb -b nvme0 > /tmp/page-cb.bin
+.Pp
+Print the contents of vendor specific page 0xcb as binary data on
+standard out.
+Redirect it to a temporary file.
+.Pp
.Dl nvmecontrol firmware -s 2 -f /tmp/nvme_firmware nvme0
.Pp
Download the firmware image contained in "/tmp/nvme_firmware" to slot 2 of the
Modified: projects/ipsec/sbin/nvmecontrol/nvmecontrol.c
==============================================================================
--- projects/ipsec/sbin/nvmecontrol/nvmecontrol.c Mon Feb 6 03:29:50 2017 (r313312)
+++ projects/ipsec/sbin/nvmecontrol/nvmecontrol.c Mon Feb 6 04:30:18 2017 (r313313)
@@ -45,13 +45,8 @@ __FBSDID("$FreeBSD$");
#include "nvmecontrol.h"
-typedef void (*nvme_fn_t)(int argc, char *argv[]);
-static struct nvme_function {
- const char *name;
- nvme_fn_t fn;
- const char *usage;
-} funcs[] = {
+static struct nvme_function funcs[] = {
{"devlist", devlist, DEVLIST_USAGE},
{"identify", identify, IDENTIFY_USAGE},
{"perftest", perftest, PERFTEST_USAGE},
@@ -59,15 +54,14 @@ static struct nvme_function {
{"logpage", logpage, LOGPAGE_USAGE},
{"firmware", firmware, FIRMWARE_USAGE},
{"power", power, POWER_USAGE},
+ {"wdc", wdc, WDC_USAGE},
{NULL, NULL, NULL},
};
-static void
-usage(void)
+void
+gen_usage(struct nvme_function *f)
{
- struct nvme_function *f;
- f = funcs;
fprintf(stderr, "usage:\n");
while (f->name != NULL) {
fprintf(stderr, "%s", f->usage);
@@ -76,6 +70,21 @@ usage(void)
exit(1);
}
+void
+dispatch(int argc, char *argv[], struct nvme_function *tbl)
+{
+ struct nvme_function *f = tbl;
+
+ while (f->name != NULL) {
+ if (strcmp(argv[1], f->name) == 0)
+ f->fn(argc-1, &argv[1]);
+ f++;
+ }
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list