summaryrefslogtreecommitdiff
path: root/usr/src/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd')
-rw-r--r--usr/src/cmd/Makefile2
-rw-r--r--usr/src/cmd/addbadsec/Makefile4
-rw-r--r--usr/src/cmd/audio/audioconvert/Makefile1
-rw-r--r--usr/src/cmd/audio/include/AudioError.h3
-rw-r--r--usr/src/cmd/audio/include/AudioTypes.h1
-rw-r--r--usr/src/cmd/audio/utilities/Makefile1
-rw-r--r--usr/src/cmd/auditreduce/Makefile2
-rw-r--r--usr/src/cmd/bart/Makefile2
-rw-r--r--usr/src/cmd/ccidadm/Makefile51
-rw-r--r--usr/src/cmd/ccidadm/ccidadm.c844
-rw-r--r--usr/src/cmd/devfsadm/Makefile.com2
-rw-r--r--usr/src/cmd/devfsadm/cfg_link.c29
-rw-r--r--usr/src/cmd/devfsadm/cfg_link.h4
-rw-r--r--usr/src/cmd/devfsadm/usb_link.c36
-rw-r--r--usr/src/cmd/dumpadm/svc-dumpadm14
-rw-r--r--usr/src/cmd/fs.d/nfs/nfsd/Makefile2
-rw-r--r--usr/src/cmd/genmsg/Makefile2
-rw-r--r--usr/src/cmd/init/init.c5
-rw-r--r--usr/src/cmd/ksh/builtins/Makefile1
-rw-r--r--usr/src/cmd/make/Makefile.com1
-rw-r--r--usr/src/cmd/make/include/mksh/defs.h1
-rw-r--r--usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c18
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_kb_kvm.c2
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_kproc.c40
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_kvm.c2
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_main.c6
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_proc.c12
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_rawfile.c54
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_value.c66
-rw-r--r--usr/src/cmd/mdb/common/modules/crypto/impl.c2
-rw-r--r--usr/src/cmd/mdb/common/modules/genunix/memory.c2
-rw-r--r--usr/src/cmd/mdb/common/modules/genunix/tsd.c3
-rw-r--r--usr/src/cmd/mdb/common/modules/ufs/ufs.c3
-rw-r--r--usr/src/cmd/mdb/common/modules/ufs/ufs_log.c3
-rw-r--r--usr/src/cmd/mdb/common/modules/usba/prtusb.c35
-rw-r--r--usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c34
-rw-r--r--usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c20
-rw-r--r--usr/src/cmd/picl/plugins/common/devtree/picldevtree.c70
-rw-r--r--usr/src/cmd/power/Makefile14
-rw-r--r--usr/src/cmd/praudit/Makefile2
-rw-r--r--usr/src/cmd/sleep/Makefile29
-rw-r--r--usr/src/cmd/sleep/sleep.c168
-rw-r--r--usr/src/cmd/smbios/Makefile2
-rw-r--r--usr/src/cmd/smbios/smbios.c145
-rw-r--r--usr/src/cmd/sort/common/initialize.c18
-rw-r--r--usr/src/cmd/truss/print.c11
-rw-r--r--usr/src/cmd/vgrind/Makefile16
47 files changed, 1558 insertions, 227 deletions
diff --git a/usr/src/cmd/Makefile b/usr/src/cmd/Makefile
index 3d5c7e4e30..7a410a3a49 100644
--- a/usr/src/cmd/Makefile
+++ b/usr/src/cmd/Makefile
@@ -83,6 +83,7 @@ COMMON_SUBDIRS= \
cal \
captoinfo \
cat \
+ ccidadm \
cdrw \
cfgadm \
checkeq \
@@ -378,6 +379,7 @@ COMMON_SUBDIRS= \
sgs \
sh \
shcomp \
+ sleep \
smbios \
smbsrv \
smserverd \
diff --git a/usr/src/cmd/addbadsec/Makefile b/usr/src/cmd/addbadsec/Makefile
index 54fc4fa23b..4a05f046ae 100644
--- a/usr/src/cmd/addbadsec/Makefile
+++ b/usr/src/cmd/addbadsec/Makefile
@@ -25,7 +25,7 @@
#
# Copyright (c) 2018, Joyent, Inc.
-PROG= addbadsec
+PROG= addbadsec
OBJECTS= addbadsec.o ix_altsctr.o
SRCS= $(OBJECTS:.o=.c)
@@ -43,7 +43,7 @@ SMATCH=off
all: $(PROG)
$(PROG): $(OBJECTS)
- $(CC) -o $@ $(OBJECTS) $(LDFLAGS) $(LDLIBS)
+ $(LINK.c) -o $@ $(OBJECTS) $(LDLIBS)
$(POST_PROCESS)
install: all $(ROOTPROG)
diff --git a/usr/src/cmd/audio/audioconvert/Makefile b/usr/src/cmd/audio/audioconvert/Makefile
index 3cdd2b4e0e..051b918766 100644
--- a/usr/src/cmd/audio/audioconvert/Makefile
+++ b/usr/src/cmd/audio/audioconvert/Makefile
@@ -34,6 +34,7 @@ include ../../Makefile.cmd
INCLUDES += -I../include -I.
CPPFLAGS += $(INCLUDES)
+CCFLAGS += -_gcc4=-std=gnu++0x
PROGSRCS= convert.cc file.cc main.cc parse.cc
diff --git a/usr/src/cmd/audio/include/AudioError.h b/usr/src/cmd/audio/include/AudioError.h
index de4e67f986..76d127e2c2 100644
--- a/usr/src/cmd/audio/include/AudioError.h
+++ b/usr/src/cmd/audio/include/AudioError.h
@@ -27,8 +27,6 @@
#ifndef _MULTIMEDIA_AUDIOERROR_H
#define _MULTIMEDIA_AUDIOERROR_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <locale.h>
#include <errno.h>
#include <audio_errno.h> /* to get enum for error codes */
@@ -52,6 +50,7 @@ private:
public:
int sys; // system error code
+ AudioError(const AudioError&) = default;
inline AudioError(audioerror_t val = AUDIO_SUCCESS): // Constructor
code(val), sys(0)
{ if (code == AUDIO_UNIXERROR) sys = errno; }
diff --git a/usr/src/cmd/audio/include/AudioTypes.h b/usr/src/cmd/audio/include/AudioTypes.h
index 1eb10d92c0..2d8971c04a 100644
--- a/usr/src/cmd/audio/include/AudioTypes.h
+++ b/usr/src/cmd/audio/include/AudioTypes.h
@@ -145,6 +145,7 @@ public:
{ val += y; return (*this); }
inline Double& operator -= (double y)
{ val -= y; return (*this); }
+ Double& operator=(const Double&) = default;
};
// inline double fabs(double x)
diff --git a/usr/src/cmd/audio/utilities/Makefile b/usr/src/cmd/audio/utilities/Makefile
index 6d62590594..4038386710 100644
--- a/usr/src/cmd/audio/utilities/Makefile
+++ b/usr/src/cmd/audio/utilities/Makefile
@@ -33,6 +33,7 @@ INCLUDES += -I../include
CPPFLAGS += $(INCLUDES)
+CCFLAGS += -_gcc4=-std=gnu++0x
CFLAGS += $(CCVERBOSE)
CERRWARN += $(CNOWARN_UNINIT)
CERRWARN += -_gcc=-Wno-unused-variable
diff --git a/usr/src/cmd/auditreduce/Makefile b/usr/src/cmd/auditreduce/Makefile
index 1c39fe869f..f8b5cd7f0e 100644
--- a/usr/src/cmd/auditreduce/Makefile
+++ b/usr/src/cmd/auditreduce/Makefile
@@ -54,7 +54,7 @@ all: $(PROG)
install: all $(ROOTUSRSBINPROG)
$(PROG): $(OBJS)
- $(CC) -o $(PROG) $(OBJS) $(LDFLAGS) $(LDLIBS)
+ $(LINK.c) -o $(PROG) $(OBJS) $(LDLIBS)
$(POST_PROCESS)
toktable.o: $(TABLEDIR)/toktable.c
diff --git a/usr/src/cmd/bart/Makefile b/usr/src/cmd/bart/Makefile
index 47938144ab..e5ac75c33b 100644
--- a/usr/src/cmd/bart/Makefile
+++ b/usr/src/cmd/bart/Makefile
@@ -52,7 +52,7 @@ ROOTLIBDIFFH= $(DIFFH:%=$(ROOTLIB)/%)
all: $(PROG)
$(PROG): $(OBJS)
- $(CC) -o $(PROG) $(OBJS) $(LDFLAGS) $(LDLIBS)
+ $(LINK.c) -o $(PROG) $(OBJS) $(LDLIBS)
$(POST_PROCESS)
clean:
diff --git a/usr/src/cmd/ccidadm/Makefile b/usr/src/cmd/ccidadm/Makefile
new file mode 100644
index 0000000000..de9761ff9d
--- /dev/null
+++ b/usr/src/cmd/ccidadm/Makefile
@@ -0,0 +1,51 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2019, Joyent, Inc.
+#
+
+PROG= ccidadm
+
+include ../Makefile.cmd
+include ../Makefile.ctf
+
+ROOTCMDDIR = $(ROOTLIB)/ccid
+CFLAGS += $(CCVERBOSE)
+LDLIBS += -lofmt -lcmdutils
+SRCS = ccidadm.c atr.c
+OBJS = $(SRCS:%.c=%.o)
+CPPFLAGS += -I$(SRC)/common/ccid
+
+ROOTCCIDFILES = $(PROG:%=$(ROOTCMDDIR)/%)
+
+.KEEP_STATE:
+
+$(PROG): $(OBJS)
+ $(LINK.c) -o $@ $(OBJS) $(LDLIBS)
+ $(POST_PROCESS)
+
+%.o: %.c
+ $(COMPILE.c) $<
+ $(POST_PROCESS_O)
+
+%.o: $(SRC)/common/ccid/%.c
+ $(COMPILE.c) $<
+ $(POST_PROCESS_O)
+
+all: $(PROG)
+
+install: all $(ROOTCMD)
+
+clean:
+ $(RM) $(OBJS)
+
+include ../Makefile.targ
diff --git a/usr/src/cmd/ccidadm/ccidadm.c b/usr/src/cmd/ccidadm/ccidadm.c
new file mode 100644
index 0000000000..1d3c2bcbfc
--- /dev/null
+++ b/usr/src/cmd/ccidadm/ccidadm.c
@@ -0,0 +1,844 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2019, Joyent, Inc.
+ */
+
+/*
+ * Print out information about a CCID device.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <err.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <unistd.h>
+#include <ofmt.h>
+#include <libgen.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <libcmdutils.h>
+#include <fts.h>
+
+#include <sys/usb/clients/ccid/uccid.h>
+#include <atr.h>
+
+#define EXIT_USAGE 2
+
+static const char *ccidadm_pname;
+
+#define CCID_ROOT "/dev/ccid/"
+
+typedef enum {
+ CCIDADM_LIST_DEVICE,
+ CCIDADM_LIST_PRODUCT,
+ CCIDADM_LIST_STATE,
+ CCIDADM_LIST_TRANSPORT,
+ CCIDADM_LIST_SUPPORTED,
+} ccidadm_list_index_t;
+
+typedef struct ccidadm_pair {
+ uint32_t ccp_val;
+ const char *ccp_name;
+} ccidadm_pair_t;
+
+typedef struct ccid_list_ofmt_arg {
+ const char *cloa_name;
+ uccid_cmd_status_t *cloa_status;
+} ccid_list_ofmt_arg_t;
+
+/*
+ * Attempt to open a CCID slot specified by a user. In general, we expect that
+ * users will use a path like "ccid0/slot0". However, they may also specify a
+ * full path. If the card boolean is set to true, that means that they may have
+ * just specified "ccid0", so we need to try to open up the default slot.
+ */
+static int
+ccidadm_open(const char *base, boolean_t card)
+{
+ int fd;
+ char buf[PATH_MAX];
+
+ /*
+ * If it's an absolute path, just try to open it.
+ */
+ if (base[0] == '/') {
+ return (open(base, O_RDWR));
+ }
+
+ /*
+ * For a card, try to append slot0 first.
+ */
+ if (card) {
+ if (snprintf(buf, sizeof (buf), "%s/%s/slot0", CCID_ROOT,
+ base) >= sizeof (buf)) {
+ errno = ENAMETOOLONG;
+ return (-1);
+ }
+
+ if ((fd = open(buf, O_RDWR)) >= 0) {
+ return (fd);
+ }
+
+ if (errno != ENOENT && errno != ENOTDIR) {
+ return (fd);
+ }
+ }
+
+ if (snprintf(buf, sizeof (buf), "%s/%s", CCID_ROOT, base) >=
+ sizeof (buf)) {
+ errno = ENAMETOOLONG;
+ return (-1);
+ }
+
+ return (open(buf, O_RDWR));
+}
+
+static void
+ccidadm_iter(boolean_t readeronly, boolean_t newline,
+ void(*cb)(int, const char *, void *), void *arg)
+{
+ FTS *fts;
+ FTSENT *ent;
+ char *const paths[] = { CCID_ROOT, NULL };
+ int fd;
+ boolean_t first = B_TRUE;
+
+ fts = fts_open(paths, FTS_LOGICAL | FTS_NOCHDIR, NULL);
+ if (fts == NULL) {
+ err(EXIT_FAILURE, "failed to create directory stream");
+ }
+
+ while ((ent = fts_read(fts)) != NULL) {
+ const char *name;
+
+ /* Skip the root and post-order dirs */
+ if (ent->fts_level == 0 || ent->fts_info == FTS_DP) {
+ continue;
+ }
+ if (readeronly && ent->fts_level != 1) {
+ continue;
+ } else if (!readeronly && ent->fts_level != 2) {
+ continue;
+ }
+
+ if (ent->fts_info == FTS_ERR || ent->fts_info == FTS_NS) {
+ warn("skipping %s, failed to get information: %s",
+ ent->fts_name, strerror(ent->fts_errno));
+ continue;
+ }
+
+ name = ent->fts_path + strlen(CCID_ROOT);
+ if ((fd = ccidadm_open(name, readeronly)) < 0) {
+ err(EXIT_FAILURE, "failed to open %s", name);
+ }
+
+ if (!first && newline) {
+ (void) printf("\n");
+ }
+ first = B_FALSE;
+ cb(fd, name, arg);
+ (void) close(fd);
+ }
+
+ (void) fts_close(fts);
+}
+
+static void
+ccidadm_list_slot_status_str(uccid_cmd_status_t *ucs, char *buf, uint_t buflen)
+{
+ if (!(ucs->ucs_status & UCCID_STATUS_F_CARD_PRESENT)) {
+ (void) snprintf(buf, buflen, "missing");
+ return;
+ }
+
+ if (ucs->ucs_status & UCCID_STATUS_F_CARD_ACTIVE) {
+ (void) snprintf(buf, buflen, "activated");
+ return;
+ }
+
+ (void) snprintf(buf, buflen, "unactivated");
+}
+
+static boolean_t
+ccidadm_list_slot_transport_str(uccid_cmd_status_t *ucs, char *buf,
+ uint_t buflen)
+{
+ const char *prot;
+ const char *tran;
+ uint_t bits = CCID_CLASS_F_TPDU_XCHG | CCID_CLASS_F_SHORT_APDU_XCHG |
+ CCID_CLASS_F_EXT_APDU_XCHG;
+
+ switch (ucs->ucs_class.ccd_dwFeatures & bits) {
+ case 0:
+ tran = "character";
+ break;
+ case CCID_CLASS_F_TPDU_XCHG:
+ tran = "TPDU";
+ break;
+ case CCID_CLASS_F_SHORT_APDU_XCHG:
+ case CCID_CLASS_F_EXT_APDU_XCHG:
+ tran = "APDU";
+ break;
+ default:
+ tran = "unknown";
+ break;
+ }
+
+ if ((ucs->ucs_status & UCCID_STATUS_F_PARAMS_VALID) != 0) {
+ switch (ucs->ucs_prot) {
+ case UCCID_PROT_T0:
+ prot = " (T=0)";
+ break;
+ case UCCID_PROT_T1:
+ prot = " (T=1)";
+ break;
+ default:
+ prot = "";
+ break;
+ }
+ } else {
+ prot = "";
+ }
+
+ return (snprintf(buf, buflen, "%s%s", tran, prot) < buflen);
+}
+
+static boolean_t
+ccidadm_list_slot_usable_str(uccid_cmd_status_t *ucs, char *buf,
+ uint_t buflen)
+{
+ char *un = "";
+ ccid_class_features_t feat;
+ uint_t prot = CCID_CLASS_F_SHORT_APDU_XCHG | CCID_CLASS_F_EXT_APDU_XCHG;
+ uint_t param = CCID_CLASS_F_AUTO_PARAM_NEG | CCID_CLASS_F_AUTO_PPS;
+ uint_t clock = CCID_CLASS_F_AUTO_BAUD | CCID_CLASS_F_AUTO_ICC_CLOCK;
+
+ feat = ucs->ucs_class.ccd_dwFeatures;
+
+ if ((feat & prot) == 0 ||
+ (feat & param) != param ||
+ (feat & clock) != clock) {
+ un = "un";
+ }
+
+ return (snprintf(buf, buflen, "%ssupported", un) < buflen);
+}
+
+static boolean_t
+ccidadm_list_ofmt_cb(ofmt_arg_t *ofmt, char *buf, uint_t buflen)
+{
+ ccid_list_ofmt_arg_t *cloa = ofmt->ofmt_cbarg;
+
+ switch (ofmt->ofmt_id) {
+ case CCIDADM_LIST_DEVICE:
+ if (snprintf(buf, buflen, "%s", cloa->cloa_name) >= buflen) {
+ return (B_FALSE);
+ }
+ break;
+ case CCIDADM_LIST_PRODUCT:
+ if (snprintf(buf, buflen, "%s",
+ cloa->cloa_status->ucs_product) >= buflen) {
+ return (B_FALSE);
+ }
+ break;
+ case CCIDADM_LIST_STATE:
+ ccidadm_list_slot_status_str(cloa->cloa_status, buf, buflen);
+ break;
+ case CCIDADM_LIST_TRANSPORT:
+ return (ccidadm_list_slot_transport_str(cloa->cloa_status, buf,
+ buflen));
+ break;
+ case CCIDADM_LIST_SUPPORTED:
+ return (ccidadm_list_slot_usable_str(cloa->cloa_status, buf,
+ buflen));
+ break;
+ default:
+ return (B_FALSE);
+ }
+
+ return (B_TRUE);
+}
+
+static void
+ccidadm_list_slot(int slotfd, const char *name, void *arg)
+{
+ uccid_cmd_status_t ucs;
+ ofmt_handle_t ofmt = arg;
+ ccid_list_ofmt_arg_t cloa;
+
+ bzero(&ucs, sizeof (ucs));
+ ucs.ucs_version = UCCID_CURRENT_VERSION;
+
+ if (ioctl(slotfd, UCCID_CMD_STATUS, &ucs) != 0) {
+ err(EXIT_FAILURE, "failed to issue status ioctl to %s", name);
+ }
+
+ if ((ucs.ucs_status & UCCID_STATUS_F_PRODUCT_VALID) == 0) {
+ (void) strlcpy(ucs.ucs_product, "<unknown>",
+ sizeof (ucs.ucs_product));
+ }
+
+ cloa.cloa_name = name;
+ cloa.cloa_status = &ucs;
+ ofmt_print(ofmt, &cloa);
+}
+
+static ofmt_field_t ccidadm_list_fields[] = {
+ { "PRODUCT", 24, CCIDADM_LIST_PRODUCT, ccidadm_list_ofmt_cb },
+ { "DEVICE", 16, CCIDADM_LIST_DEVICE, ccidadm_list_ofmt_cb },
+ { "CARD STATE", 12, CCIDADM_LIST_STATE, ccidadm_list_ofmt_cb },
+ { "TRANSPORT", 12, CCIDADM_LIST_TRANSPORT, ccidadm_list_ofmt_cb },
+ { "SUPPORTED", 12, CCIDADM_LIST_SUPPORTED, ccidadm_list_ofmt_cb },
+ { NULL, 0, 0, NULL }
+};
+
+static void
+ccidadm_do_list(int argc, char *argv[])
+{
+ ofmt_handle_t ofmt;
+
+ if (argc != 0) {
+ errx(EXIT_USAGE, "list command does not take arguments\n");
+ }
+
+ if (ofmt_open(NULL, ccidadm_list_fields, 0, 0, &ofmt) != OFMT_SUCCESS) {
+ errx(EXIT_FAILURE, "failed to initialize ofmt state");
+ }
+
+ ccidadm_iter(B_FALSE, B_FALSE, ccidadm_list_slot, ofmt);
+ ofmt_close(ofmt);
+}
+
+static void
+ccidadm_list_usage(FILE *out)
+{
+ (void) fprintf(out, "\tlist\n");
+}
+
+/*
+ * Print out logical information about the ICC's ATR. This includes information
+ * about what protocols it supports, required negotiation, etc.
+ */
+static void
+ccidadm_atr_props(uccid_cmd_status_t *ucs)
+{
+ int ret;
+ atr_data_t *data;
+ atr_protocol_t prots, defprot;
+ boolean_t negotiate;
+ atr_data_rate_choice_t rate;
+ uint32_t bps;
+
+ if ((data = atr_data_alloc()) == NULL) {
+ err(EXIT_FAILURE, "failed to allocate memory for "
+ "ATR data");
+ }
+
+ ret = atr_parse(ucs->ucs_atr, ucs->ucs_atrlen, data);
+ if (ret != ATR_CODE_OK) {
+ errx(EXIT_FAILURE, "failed to parse ATR data: %s",
+ atr_strerror(ret));
+ }
+
+ prots = atr_supported_protocols(data);
+ (void) printf("ICC supports protocol(s): ");
+ if (prots == ATR_P_NONE) {
+ (void) printf("none\n");
+ atr_data_free(data);
+ return;
+ }
+
+ (void) printf("%s\n", atr_protocol_to_string(prots));
+
+ negotiate = atr_params_negotiable(data);
+ defprot = atr_default_protocol(data);
+
+ if (negotiate) {
+ (void) printf("Card protocol is negotiable; starts with "
+ "default %s parameters\n", atr_protocol_to_string(defprot));
+ } else {
+ (void) printf("Card protocol is not negotiable; starts with "
+ "specific %s parameters\n",
+ atr_protocol_to_string(defprot));
+ }
+
+ /*
+ * For each supported protocol, figure out parameters we would
+ * negotiate. We only need to warn about auto-negotiation if this
+ * is TPDU or character and specific bits are missing.
+ */
+ if (((ucs->ucs_class.ccd_dwFeatures & (CCID_CLASS_F_SHORT_APDU_XCHG |
+ CCID_CLASS_F_EXT_APDU_XCHG)) == 0) &&
+ ((ucs->ucs_class.ccd_dwFeatures & (CCID_CLASS_F_AUTO_PARAM_NEG |
+ CCID_CLASS_F_AUTO_PPS)) == 0)) {
+ (void) printf("CCID/ICC require explicit TPDU parameter/PPS "
+ "negotiation\n");
+ }
+
+ /*
+ * Determine which set of Di/Fi values we should use and how we should
+ * get there (note a reader may not have to set them).
+ */
+ rate = atr_data_rate(data, &ucs->ucs_class, NULL, 0, &bps);
+ switch (rate) {
+ case ATR_RATE_USEDEFAULT:
+ (void) printf("Reader will run ICC at the default (Di=1/Fi=1) "
+ "speed\n");
+ break;
+ case ATR_RATE_USEATR:
+ (void) printf("Reader will run ICC at ICC's Di/Fi values\n");
+ break;
+ case ATR_RATE_USEATR_SETRATE:
+ (void) printf("Reader will run ICC at ICC's Di/Fi values, but "
+ "must set data rate to %u bps\n", bps);
+ break;
+ case ATR_RATE_UNSUPPORTED:
+ (void) printf("Reader cannot run ICC due to Di/Fi mismatch\n");
+ break;
+ default:
+ (void) printf("Cannot determine Di/Fi rate, unexpected "
+ "value: %u\n", rate);
+ break;
+ }
+ if (prots & ATR_P_T0) {
+ uint8_t fi, di;
+ atr_convention_t conv;
+ atr_clock_stop_t clock;
+
+ fi = atr_fi_index(data);
+ di = atr_di_index(data);
+ conv = atr_convention(data);
+ clock = atr_clock_stop(data);
+ (void) printf("T=0 properties that would be negotiated:\n");
+ (void) printf(" + Fi/Fmax Index: %u (Fi %s/Fmax %s MHz)\n",
+ fi, atr_fi_index_to_string(fi),
+ atr_fmax_index_to_string(fi));
+ (void) printf(" + Di Index: %u (Di %s)\n", di,
+ atr_di_index_to_string(di));
+ (void) printf(" + Clock Convention: %u (%s)\n", conv,
+ atr_convention_to_string(conv));
+ (void) printf(" + Extra Guardtime: %u\n",
+ atr_extra_guardtime(data));
+ (void) printf(" + WI: %u\n", atr_t0_wi(data));
+ (void) printf(" + Clock Stop: %u (%s)\n", clock,
+ atr_clock_stop_to_string(clock));
+ }
+
+ if (prots & ATR_P_T1) {
+ uint8_t fi, di;
+ atr_clock_stop_t clock;
+ atr_t1_checksum_t cksum;
+
+ fi = atr_fi_index(data);
+ di = atr_di_index(data);
+ clock = atr_clock_stop(data);
+ cksum = atr_t1_checksum(data);
+ (void) printf("T=1 properties that would be negotiated:\n");
+ (void) printf(" + Fi/Fmax Index: %u (Fi %s/Fmax %s MHz)\n",
+ fi, atr_fi_index_to_string(fi),
+ atr_fmax_index_to_string(fi));
+ (void) printf(" + Di Index: %u (Di %s)\n", di,
+ atr_di_index_to_string(di));
+ (void) printf(" + Checksum: %s\n",
+ cksum == ATR_T1_CHECKSUM_CRC ? "CRC" : "LRC");
+ (void) printf(" + Extra Guardtime: %u\n",
+ atr_extra_guardtime(data));
+ (void) printf(" + BWI: %u\n", atr_t1_bwi(data));
+ (void) printf(" + CWI: %u\n", atr_t1_cwi(data));
+ (void) printf(" + Clock Stop: %u (%s)\n", clock,
+ atr_clock_stop_to_string(clock));
+ (void) printf(" + IFSC: %u\n", atr_t1_ifsc(data));
+ (void) printf(" + CCID Supports NAD: %s\n",
+ ucs->ucs_class.ccd_dwFeatures & CCID_CLASS_F_ALTNAD_SUP ?
+ "yes" : "no");
+ }
+
+ atr_data_free(data);
+}
+
+static void
+ccidadm_atr_verbose(uccid_cmd_status_t *ucs)
+{
+ int ret;
+ atr_data_t *data;
+
+ if ((data = atr_data_alloc()) == NULL) {
+ err(EXIT_FAILURE, "failed to allocate memory for "
+ "ATR data");
+ }
+
+ ret = atr_parse(ucs->ucs_atr, ucs->ucs_atrlen, data);
+ if (ret != ATR_CODE_OK) {
+ errx(EXIT_FAILURE, "failed to parse ATR data: %s",
+ atr_strerror(ret));
+ }
+ atr_data_dump(data, stdout);
+ atr_data_free(data);
+}
+
+typedef struct cciadm_atr_args {
+ boolean_t caa_hex;
+ boolean_t caa_props;
+ boolean_t caa_verbose;
+} ccidadm_atr_args_t;
+
+static void
+ccidadm_atr_fetch(int fd, const char *name, void *arg)
+{
+ uccid_cmd_status_t ucs;
+ ccidadm_atr_args_t *caa = arg;
+
+ bzero(&ucs, sizeof (ucs));
+ ucs.ucs_version = UCCID_CURRENT_VERSION;
+
+ if (ioctl(fd, UCCID_CMD_STATUS, &ucs) != 0) {
+ err(EXIT_FAILURE, "failed to issue status ioctl to %s",
+ name);
+ }
+
+ if (ucs.ucs_atrlen == 0) {
+ warnx("slot %s has no card inserted or activated", name);
+ return;
+ }
+
+ (void) printf("ATR for %s (%u bytes):\n", name, ucs.ucs_atrlen);
+ if (caa->caa_props) {
+ ccidadm_atr_props(&ucs);
+ }
+
+ if (caa->caa_hex) {
+ atr_data_hexdump(ucs.ucs_atr, ucs.ucs_atrlen, stdout);
+ }
+
+ if (caa->caa_verbose) {
+ ccidadm_atr_verbose(&ucs);
+ }
+}
+
+static void
+ccidadm_do_atr(int argc, char *argv[])
+{
+ uint_t i;
+ int c;
+ ccidadm_atr_args_t caa;
+
+ bzero(&caa, sizeof (caa));
+ optind = 0;
+ while ((c = getopt(argc, argv, "vx")) != -1) {
+ switch (c) {
+ case 'v':
+ caa.caa_verbose = B_TRUE;
+ break;
+ case 'x':
+ caa.caa_hex = B_TRUE;
+ break;
+ case ':':
+ errx(EXIT_USAGE, "Option -%c requires an argument\n",
+ optopt);
+ break;
+ case '?':
+ errx(EXIT_USAGE, "Unknown option: -%c\n", optopt);
+ break;
+ }
+ }
+
+ if (!caa.caa_verbose && !caa.caa_props && !caa.caa_hex) {
+ caa.caa_props = B_TRUE;
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc == 0) {
+ ccidadm_iter(B_FALSE, B_TRUE, ccidadm_atr_fetch, &caa);
+ return;
+ }
+
+ for (i = 0; i < argc; i++) {
+ int fd;
+
+ if ((fd = ccidadm_open(argv[i], B_FALSE)) < 0) {
+ warn("failed to open %s", argv[i]);
+ errx(EXIT_FAILURE, "valid CCID slot?");
+ }
+
+ ccidadm_atr_fetch(fd, argv[i], &caa);
+ (void) close(fd);
+ if (i + 1 < argc) {
+ (void) printf("\n");
+ }
+ }
+}
+
+static void
+ccidadm_atr_usage(FILE *out)
+{
+ (void) fprintf(out, "\tatr [-vx]\t[device] ...\n");
+}
+
+static void
+ccidadm_print_pairs(uint32_t val, ccidadm_pair_t *ccp)
+{
+ while (ccp->ccp_name != NULL) {
+ if ((val & ccp->ccp_val) == ccp->ccp_val) {
+ (void) printf(" + %s\n", ccp->ccp_name);
+ }
+ ccp++;
+ }
+}
+
+static ccidadm_pair_t ccidadm_p_protocols[] = {
+ { 0x01, "T=0" },
+ { 0x02, "T=1" },
+ { 0x0, NULL }
+};
+
+static ccidadm_pair_t ccidadm_p_voltages[] = {
+ { CCID_CLASS_VOLT_5_0, "5.0 V" },
+ { CCID_CLASS_VOLT_3_0, "3.0 V" },
+ { CCID_CLASS_VOLT_1_8, "1.8 V" },
+ { 0x0, NULL }
+};
+
+static ccidadm_pair_t ccidadm_p_syncprots[] = {
+ { 0x01, "2-Wire Support" },
+ { 0x02, "3-Wire Support" },
+ { 0x04, "I2C Support" },
+ { 0x0, NULL }
+};
+
+static ccidadm_pair_t ccidadm_p_mechanical[] = {
+ { CCID_CLASS_MECH_CARD_ACCEPT, "Card Accept Mechanism" },
+ { CCID_CLASS_MECH_CARD_EJECT, "Card Eject Mechanism" },
+ { CCID_CLASS_MECH_CARD_CAPTURE, "Card Capture Mechanism" },
+ { CCID_CLASS_MECH_CARD_LOCK, "Card Lock/Unlock Mechanism" },
+ { 0x0, NULL }
+};
+
+static ccidadm_pair_t ccidadm_p_features[] = {
+ { CCID_CLASS_F_AUTO_PARAM_ATR,
+ "Automatic parameter configuration based on ATR data" },
+ { CCID_CLASS_F_AUTO_ICC_ACTIVATE,
+ "Automatic activation on ICC insertion" },
+ { CCID_CLASS_F_AUTO_ICC_VOLTAGE, "Automatic ICC voltage selection" },
+ { CCID_CLASS_F_AUTO_ICC_CLOCK,
+ "Automatic ICC clock frequency change" },
+ { CCID_CLASS_F_AUTO_BAUD, "Automatic baud rate change" },
+ { CCID_CLASS_F_AUTO_PARAM_NEG,
+ "Automatic parameter negotiation by CCID" },
+ { CCID_CLASS_F_AUTO_PPS, "Automatic PPS made by CCID" },
+ { CCID_CLASS_F_ICC_CLOCK_STOP, "CCID can set ICC in clock stop mode" },
+ { CCID_CLASS_F_ALTNAD_SUP, "NAD value other than zero accepted" },
+ { CCID_CLASS_F_AUTO_IFSD, "Automatic IFSD exchange" },
+ { CCID_CLASS_F_TPDU_XCHG, "TPDU support" },
+ { CCID_CLASS_F_SHORT_APDU_XCHG, "Short APDU support" },
+ { CCID_CLASS_F_EXT_APDU_XCHG, "Short and Extended APDU support" },
+ { CCID_CLASS_F_WAKE_UP, "USB Wake Up signaling support" },
+ { 0x0, NULL }
+};
+
+static ccidadm_pair_t ccidadm_p_pin[] = {
+ { CCID_CLASS_PIN_VERIFICATION, "PIN verification" },
+ { CCID_CLASS_PIN_MODIFICATION, "PIN modification" },
+ { 0x0, NULL }
+};
+
+static void
+ccidadm_reader_print(int fd, const char *name, void *unused __unused)
+{
+ uccid_cmd_status_t ucs;
+ ccid_class_descr_t *cd;
+ char nnbuf[NN_NUMBUF_SZ + 1];
+
+ bzero(&ucs, sizeof (uccid_cmd_status_t));
+ ucs.ucs_version = UCCID_CURRENT_VERSION;
+
+ if (ioctl(fd, UCCID_CMD_STATUS, &ucs) != 0) {
+ err(EXIT_FAILURE, "failed to issue status ioctl to %s",
+ name);
+ }
+
+ cd = &ucs.ucs_class;
+ (void) printf("Reader %s, CCID class v%u.%u device:\n", name,
+ CCID_VERSION_MAJOR(cd->ccd_bcdCCID),
+ CCID_VERSION_MINOR(cd->ccd_bcdCCID));
+
+ if ((ucs.ucs_status & UCCID_STATUS_F_PRODUCT_VALID) == 0) {
+ (void) strlcpy(ucs.ucs_product, "<unknown>",
+ sizeof (ucs.ucs_product));
+ }
+
+ if ((ucs.ucs_status & UCCID_STATUS_F_SERIAL_VALID) == 0) {
+ (void) strlcpy(ucs.ucs_serial, "<unknown>",
+ sizeof (ucs.ucs_serial));
+ }
+
+ (void) printf(" Product: %s\n", ucs.ucs_product);
+ (void) printf(" Serial: %s\n", ucs.ucs_serial);
+ (void) printf(" Slots Present: %u\n", cd->ccd_bMaxSlotIndex + 1);
+ (void) printf(" Maximum Busy Slots: %u\n", cd->ccd_bMaxCCIDBusySlots);
+ (void) printf(" Supported Voltages:\n");
+ ccidadm_print_pairs(cd->ccd_bVoltageSupport, ccidadm_p_voltages);
+ (void) printf(" Supported Protocols:\n");
+ ccidadm_print_pairs(cd->ccd_dwProtocols, ccidadm_p_protocols);
+ nicenum_scale(cd->ccd_dwDefaultClock, 1000, nnbuf,
+ sizeof (nnbuf), NN_DIVISOR_1000 | NN_UNIT_SPACE);
+ (void) printf(" Default Clock: %sHz\n", nnbuf);
+ nicenum_scale(cd->ccd_dwMaximumClock, 1000, nnbuf,
+ sizeof (nnbuf), NN_DIVISOR_1000 | NN_UNIT_SPACE);
+ (void) printf(" Maximum Clock: %sHz\n", nnbuf);
+ (void) printf(" Supported Clock Rates: %u\n",
+ cd->ccd_bNumClockSupported);
+ nicenum_scale(cd->ccd_dwDataRate, 1, nnbuf, sizeof (nnbuf),
+ NN_DIVISOR_1000 | NN_UNIT_SPACE);
+ (void) printf(" Default Data Rate: %sbps\n", nnbuf);
+ nicenum_scale(cd->ccd_dwMaxDataRate, 1, nnbuf, sizeof (nnbuf),
+ NN_DIVISOR_1000 | NN_UNIT_SPACE);
+ (void) printf(" Maximum Data Rate: %sbps\n", nnbuf);
+ (void) printf(" Supported Data Rates: %u\n",
+ cd->ccd_bNumDataRatesSupported);
+ (void) printf(" Maximum IFSD (T=1 only): %u\n", cd->ccd_dwMaxIFSD);
+ if (cd->ccd_dwSyncProtocols != 0) {
+ (void) printf(" Synchronous Protocols Supported:\n");
+ ccidadm_print_pairs(cd->ccd_dwSyncProtocols,
+ ccidadm_p_syncprots);
+ }
+ if (cd->ccd_dwMechanical != 0) {
+ (void) printf(" Mechanical Features:\n");
+ ccidadm_print_pairs(cd->ccd_dwMechanical, ccidadm_p_mechanical);
+ }
+ if (cd->ccd_dwFeatures != 0) {
+ (void) printf(" Device Features:\n");
+ ccidadm_print_pairs(cd->ccd_dwFeatures, ccidadm_p_features);
+ }
+ (void) printf(" Maximum Message Length: %u bytes\n",
+ cd->ccd_dwMaxCCIDMessageLength);
+ if (cd->ccd_dwFeatures & CCID_CLASS_F_EXT_APDU_XCHG) {
+ if (cd->ccd_bClassGetResponse == 0xff) {
+ (void) printf(" Default Get Response Class: echo\n");
+ } else {
+ (void) printf(" Default Get Response Class: %u\n",
+ cd->ccd_bClassGetResponse);
+ }
+ if (cd->ccd_bClassEnvelope == 0xff) {
+ (void) printf(" Default Envelope Class: echo\n");
+ } else {
+ (void) printf(" Default Envelope Class: %u\n",
+ cd->ccd_bClassEnvelope);
+ }
+ }
+ if (cd->ccd_wLcdLayout != 0) {
+ (void) printf(" %2ux%2u LCD present\n",
+ cd->ccd_wLcdLayout >> 8, cd->ccd_wLcdLayout & 0xff);
+ }
+
+ if (cd->ccd_bPinSupport) {
+ (void) printf(" Pin Support:\n");
+ ccidadm_print_pairs(cd->ccd_bPinSupport, ccidadm_p_pin);
+ }
+}
+
+static void
+ccidadm_do_reader(int argc, char *argv[])
+{
+ int i;
+
+ if (argc == 0) {
+ ccidadm_iter(B_TRUE, B_TRUE, ccidadm_reader_print, NULL);
+ return;
+ }
+
+ for (i = 0; i < argc; i++) {
+ int fd;
+
+ if ((fd = ccidadm_open(argv[i], B_TRUE)) < 0) {
+ warn("failed to open %s", argv[i]);
+ errx(EXIT_FAILURE, "valid ccid reader");
+ }
+
+ ccidadm_reader_print(fd, argv[i], NULL);
+ (void) close(fd);
+ if (i + 1 < argc) {
+ (void) printf("\n");
+ }
+ }
+}
+
+static void
+ccidadm_reader_usage(FILE *out)
+{
+ (void) fprintf(out, "\treader\t\t[reader] ...\n");
+}
+
+typedef struct ccidadm_cmdtab {
+ const char *cc_name;
+ void (*cc_op)(int, char *[]);
+ void (*cc_usage)(FILE *);
+} ccidadm_cmdtab_t;
+
+static ccidadm_cmdtab_t ccidadm_cmds[] = {
+ { "list", ccidadm_do_list, ccidadm_list_usage },
+ { "atr", ccidadm_do_atr, ccidadm_atr_usage },
+ { "reader", ccidadm_do_reader, ccidadm_reader_usage },
+ { NULL }
+};
+
+static int
+ccidadm_usage(const char *format, ...)
+{
+ ccidadm_cmdtab_t *tab;
+
+ if (format != NULL) {
+ va_list ap;
+
+ va_start(ap, format);
+ (void) fprintf(stderr, "%s: ", ccidadm_pname);
+ (void) vfprintf(stderr, format, ap);
+ (void) fprintf(stderr, "\n");
+ va_end(ap);
+ }
+
+ (void) fprintf(stderr, "usage: %s <subcommand> <args> ...\n\n",
+ ccidadm_pname);
+ (void) fprintf(stderr, "Subcommands:\n");
+ for (tab = ccidadm_cmds; tab->cc_name != NULL; tab++) {
+ tab->cc_usage(stderr);
+ }
+
+ return (EXIT_USAGE);
+}
+
+int
+main(int argc, char *argv[])
+{
+ ccidadm_cmdtab_t *tab;
+
+ ccidadm_pname = basename(argv[0]);
+ if (argc < 2) {
+ return (ccidadm_usage("missing required subcommand"));
+ }
+
+ for (tab = ccidadm_cmds; tab->cc_name != NULL; tab++) {
+ if (strcmp(argv[1], tab->cc_name) == 0) {
+ argc -= 2;
+ argv += 2;
+ tab->cc_op(argc, argv);
+ return (EXIT_SUCCESS);
+ }
+ }
+
+ return (ccidadm_usage("unknown command: %s", argv[1]));
+}
diff --git a/usr/src/cmd/devfsadm/Makefile.com b/usr/src/cmd/devfsadm/Makefile.com
index 4332220e5f..ec9037409e 100644
--- a/usr/src/cmd/devfsadm/Makefile.com
+++ b/usr/src/cmd/devfsadm/Makefile.com
@@ -185,7 +185,7 @@ $(DEVFSADM_MOD): $(DEVFSADM_OBJ)
$(POST_PROCESS)
SUNW_%.so: %.o $(MAPFILES)
- $(CC) -o $@ $(GSHARED) $(DYNFLAGS) -h $@ $< $(LDLIBS) -lc
+ $(LINK.c) -o $@ $(GSHARED) $(DYNFLAGS) -h $@ $< $(LDLIBS) -lc
$(POST_PROCESS_SO)
%.o: $(COMMON)/%.c
diff --git a/usr/src/cmd/devfsadm/cfg_link.c b/usr/src/cmd/devfsadm/cfg_link.c
index e7229325ac..4415ad55ce 100644
--- a/usr/src/cmd/devfsadm/cfg_link.c
+++ b/usr/src/cmd/devfsadm/cfg_link.c
@@ -20,6 +20,7 @@
*/
/*
+ * Copyright 2019, Joyent, Inc.
* Copyright 2016 Nexenta Systems, Inc. All rights reserved.
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
@@ -59,6 +60,7 @@ static int pci_cfg_creat_cb(di_minor_t minor, di_node_t node);
static int ib_cfg_creat_cb(di_minor_t minor, di_node_t node);
static int sata_cfg_creat_cb(di_minor_t minor, di_node_t node);
static int sdcard_cfg_creat_cb(di_minor_t minor, di_node_t node);
+static int ccid_cfg_creat_cb(di_minor_t minor, di_node_t node);
static di_node_t pci_cfg_chassis_node(di_node_t, di_prom_handle_t);
static char *pci_cfg_slotname(di_node_t, di_prom_handle_t, minor_t);
@@ -120,6 +122,9 @@ static devfsadm_create_t cfg_create_cbt[] = {
},
{ "attachment-point", DDI_NT_SDCARD_ATTACHMENT_POINT, NULL,
TYPE_EXACT, ILEVEL_0, sdcard_cfg_creat_cb
+ },
+ { "attachment-point", DDI_NT_CCID_ATTACHMENT_POINT, NULL,
+ TYPE_EXACT, ILEVEL_0, ccid_cfg_creat_cb
}
};
@@ -153,6 +158,9 @@ static devfsadm_remove_t cfg_remove_cbt[] = {
{ "attachment-point", SDCARD_CFG_LINK_RE, RM_POST|RM_HOT|RM_ALWAYS,
ILEVEL_0, devfsadm_rm_all
},
+ { "attachment-point", CCID_CFG_LINK_RE, RM_POST|RM_HOT|RM_ALWAYS,
+ ILEVEL_0, devfsadm_rm_all
+ }
};
DEVFSADM_REMOVE_INIT_V0(cfg_remove_cbt);
@@ -1246,3 +1254,24 @@ serid_printable(uint64_t *seridp)
return (1);
}
+
+/*
+ * Create a link for cfgadm that points back to the normal ccid links in
+ * /dev/ccid.
+ */
+static int
+ccid_cfg_creat_cb(di_minor_t minor, di_node_t node)
+{
+ const char *minor_nm;
+ char cfg_path[MAXPATHLEN];
+
+ if ((minor_nm = di_minor_name(minor)) == NULL) {
+ return (DEVFSADM_CONTINUE);
+ }
+
+ (void) snprintf(cfg_path, sizeof (cfg_path), "%s/ccid%d/%s",
+ CFG_DIRNAME, di_instance(node), minor_nm);
+
+ (void) devfsadm_mklink(cfg_path, node, minor, 0);
+ return (DEVFSADM_CONTINUE);
+}
diff --git a/usr/src/cmd/devfsadm/cfg_link.h b/usr/src/cmd/devfsadm/cfg_link.h
index e2bb24864d..7c3cf13eb8 100644
--- a/usr/src/cmd/devfsadm/cfg_link.h
+++ b/usr/src/cmd/devfsadm/cfg_link.h
@@ -22,6 +22,9 @@
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
+/*
+ * Copyright 2019, Joyent, Inc.
+ */
/* private devlink info interfaces */
@@ -43,6 +46,7 @@ extern "C" {
#define SDCARD_CFG_LINK_RE "^cfg/sdcard[0-9]+/[0-9]+$"
#define PCI_CFG_PATH_LINK_RE \
"^cfg/(.*(pci[0-9]|pcie[0-9]|Slot[0-9]|\\<pci\\>|\\<pcie\\>).*)$"
+#define CCID_CFG_LINK_RE "^cfg/ccid[0-9]+/slot[0-9]+$"
#define CFG_DIRNAME "cfg"
diff --git a/usr/src/cmd/devfsadm/usb_link.c b/usr/src/cmd/devfsadm/usb_link.c
index ac6a8447fb..80996a1773 100644
--- a/usr/src/cmd/devfsadm/usb_link.c
+++ b/usr/src/cmd/devfsadm/usb_link.c
@@ -21,6 +21,9 @@
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
+/*
+ * Copyright 2019, Joyent, Inc.
+ */
#include <devfsadm.h>
#include <stdio.h>
@@ -37,6 +40,8 @@ static int usb_process(di_minor_t minor, di_node_t node);
static void ugen_create_link(char *p_path, char *node_name,
di_node_t node, di_minor_t minor);
+static void ccid_create_link(char *p_path, char *node_name,
+ di_node_t node, di_minor_t minor);
/* Rules for creating links */
@@ -81,6 +86,8 @@ static devfsadm_create_t usb_cbt[] = {
ILEVEL_0, usb_process },
{ "usb", DDI_NT_NEXUS, "hwahc", DRV_EXACT|TYPE_EXACT,
ILEVEL_0, usb_process },
+ { "usb", DDI_NT_CCID_ATTACHMENT_POINT, "ccid", DRV_EXACT|TYPE_EXACT,
+ ILEVEL_0, usb_process },
};
/* For debug printing (-V filter) */
@@ -105,6 +112,7 @@ DEVFSADM_CREATE_INIT_V0(usb_cbt);
#define USB_LINK_RE_WHOST "^usb/whost[0-9]+$"
#define USB_LINK_RE_HWARC "^usb/hwarc[0-9]+$"
#define USB_LINK_RE_WUSB_CA "^usb/wusb_ca[0-9]+$"
+#define USB_LINK_RE_CCID "^ccid/ccid[0-9]+/slot[0-9]+$"
/* Rules for removing links */
static devfsadm_remove_t usb_remove_cbt[] = {
@@ -138,7 +146,9 @@ static devfsadm_remove_t usb_remove_cbt[] = {
{ "usb", USB_LINK_RE_HWARC, RM_POST | RM_HOT | RM_ALWAYS, ILEVEL_0,
devfsadm_rm_all },
{ "usb", USB_LINK_RE_WUSB_CA, RM_POST | RM_HOT | RM_ALWAYS, ILEVEL_0,
- devfsadm_rm_all }
+ devfsadm_rm_all },
+ { "usb", USB_LINK_RE_CCID, RM_POST | RM_HOT | RM_ALWAYS, ILEVEL_0,
+ devfsadm_rm_all }
};
/*
@@ -306,6 +316,14 @@ usb_process(di_minor_t minor, di_node_t node)
return (DEVFSADM_CONTINUE);
}
+ if (strcmp(di_minor_nodetype(minor), DDI_NT_CCID_ATTACHMENT_POINT)
+ == 0) {
+ ccid_create_link(p_path, minor_nm, node, minor);
+ free(l_path);
+ free(p_path);
+ return (DEVFSADM_CONTINUE);
+ }
+
/* Figure out which rules to apply */
switch (index) {
case DRIVER_HUBD:
@@ -493,3 +511,19 @@ ugen_create_link(char *p_path, char *node_name,
free(buf);
}
+
+/*
+ * Create a CCID related link.
+ */
+static void
+ccid_create_link(char *p_path, char *minor_nm, di_node_t node, di_minor_t minor)
+{
+ char l_path[MAXPATHLEN];
+
+ (void) snprintf(l_path, sizeof (l_path), "ccid/ccid%d/%s",
+ di_instance(node), minor_nm);
+
+ devfsadm_print(debug_mid, "mklink %s -> %s\n", l_path, p_path);
+
+ (void) devfsadm_mklink(l_path, node, minor, 0);
+}
diff --git a/usr/src/cmd/dumpadm/svc-dumpadm b/usr/src/cmd/dumpadm/svc-dumpadm
index 316e075754..488ba8d54d 100644
--- a/usr/src/cmd/dumpadm/svc-dumpadm
+++ b/usr/src/cmd/dumpadm/svc-dumpadm
@@ -21,6 +21,7 @@
#
#
# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright 2020 Joyent, Inc.
#
. /lib/svc/share/smf_include.sh
@@ -100,7 +101,7 @@ fi
# how to modify the dump settings.
#
if [ -x /usr/sbin/dumpadm ]; then
- /usr/sbin/dumpadm -u || $SMF_EXIT_ERR_CONFIG
+ /usr/sbin/dumpadm -u || exit $SMF_EXIT_ERR_CONFIG
else
echo "WARNING: /usr/sbin/dumpadm is missing or not executable" >& 2
exit $SMF_EXIT_ERR_CONFIG
@@ -113,6 +114,11 @@ else
exit $SMF_EXIT_ERR_CONFIG
fi
+if [[ -f $DUMPADM_SAVDIR/keyfile ]]; then
+ /usr/sbin/dumpadm -k $DUMPADM_SAVDIR/keyfile || \
+ exit $SMT_EXIT_ERR_CONFIG
+fi
+
#
# If the savecore executable is absent then we're done
#
@@ -147,11 +153,15 @@ if [ "x$DUMPADM_ENABLE" != xno ]; then
mksavedir && /usr/bin/savecore $DUMPADM_SAVDIR &
fi
else
+ keyarg=""
+ [[ -f "$DUMPADM_SAVDIR/keyfile" ]] && \
+ keyarg="-k $DUMPADM_SAVDIR/keyfile"
+
#
# The dump device couldn't have been dedicated before we
# ran dumpadm, so we must execute savecore again.
#
- mksavedir && /usr/bin/savecore $DUMPADM_SAVDIR &
+ mksavedir && /usr/bin/savecore $keyarg $DUMPADM_SAVDIR &
fi
else
#
diff --git a/usr/src/cmd/fs.d/nfs/nfsd/Makefile b/usr/src/cmd/fs.d/nfs/nfsd/Makefile
index 384d6a0c66..d9553ac9a2 100644
--- a/usr/src/cmd/fs.d/nfs/nfsd/Makefile
+++ b/usr/src/cmd/fs.d/nfs/nfsd/Makefile
@@ -46,7 +46,7 @@ CERRWARN += -_gcc=-Wno-extra
SMATCH=off
$(TYPEPROG): $(OBJS)
- $(CC) -o $@ $(OBJS) $(LDFLAGS) $(LDLIBS)
+ $(LINK.c) -o $@ $(OBJS) $(LDLIBS)
$(POST_PROCESS)
nfs_tbind.o: ../lib/nfs_tbind.c
diff --git a/usr/src/cmd/genmsg/Makefile b/usr/src/cmd/genmsg/Makefile
index aafd07c843..420bfd58d1 100644
--- a/usr/src/cmd/genmsg/Makefile
+++ b/usr/src/cmd/genmsg/Makefile
@@ -69,7 +69,7 @@ all: $(PROG)
install: all $(ROOTPROG)
$(PROG): $(OBJS) $(MAPFILES)
- $(CC) -o $@ $(OBJS) $(LDFLAGS) $(LDLIBS)
+ $(LINK.c) -o $@ $(OBJS) $(LDLIBS)
$(POST_PROCESS)
$(LEXINTSRCS): $(LEXSRCS)
diff --git a/usr/src/cmd/init/init.c b/usr/src/cmd/init/init.c
index edf58e22bf..b37322aa5c 100644
--- a/usr/src/cmd/init/init.c
+++ b/usr/src/cmd/init/init.c
@@ -23,7 +23,7 @@
* Copyright (c) 2013 Gary Mills
*
* Copyright (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2015, Joyent, Inc.
+ * Copyright 2020 Joyent, Inc.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
@@ -701,8 +701,7 @@ main(int argc, char *argv[])
console(B_FALSE,
"\n\n%s Release %s Version %s %d-bit\r\n",
un.sysname, un.release, un.version, bits);
- console(B_FALSE, "Copyright (c) 2010-2012, "
- "Joyent Inc. All rights reserved.\r\n");
+ console(B_FALSE, "Copyright 2010-2020 Joyent, Inc.\r\n");
}
/*
diff --git a/usr/src/cmd/ksh/builtins/Makefile b/usr/src/cmd/ksh/builtins/Makefile
index 1033c6cdd3..2a3977c94c 100644
--- a/usr/src/cmd/ksh/builtins/Makefile
+++ b/usr/src/cmd/ksh/builtins/Makefile
@@ -49,7 +49,6 @@ ALIASPROG= \
print \
read \
rev \
- sleep \
sum \
tee \
test \
diff --git a/usr/src/cmd/make/Makefile.com b/usr/src/cmd/make/Makefile.com
index dcc587439e..fc76730f2a 100644
--- a/usr/src/cmd/make/Makefile.com
+++ b/usr/src/cmd/make/Makefile.com
@@ -14,6 +14,7 @@
MAKE_INCLUDE= $(SRC)/cmd/make/include
CFLAGS += $(CCVERBOSE)
CPPFLAGS += -I$(MAKE_INCLUDE) $(MAKE_DEFS)
+CCFLAGS += -_gcc4=-std=gnu++0x
# So that it's set even for the libraries we build
TEXT_DOMAIN = SUNW_OST_OSCMD
diff --git a/usr/src/cmd/make/include/mksh/defs.h b/usr/src/cmd/make/include/mksh/defs.h
index 9ad58c4e61..0cf3d837c8 100644
--- a/usr/src/cmd/make/include/mksh/defs.h
+++ b/usr/src/cmd/make/include/mksh/defs.h
@@ -804,6 +804,7 @@ public:
// constructors
iterator() : node(0) {}
iterator(entry *node_) : node(node_) {}
+ iterator(const iterator&) = default;
// dereference operator
Name operator->() const { return node->name; }
diff --git a/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c b/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c
index d14ce2fbed..628503d179 100644
--- a/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c
+++ b/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c
@@ -2394,9 +2394,9 @@ kmt_destroy(mdb_tgt_t *t)
static const mdb_tgt_ops_t kmt_ops = {
kmt_setflags, /* t_setflags */
- (int (*)()) mdb_tgt_notsup, /* t_setcontext */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_setcontext */
kmt_activate, /* t_activate */
- (void (*)()) mdb_tgt_nop, /* t_deactivate */
+ (void (*)())(uintptr_t) mdb_tgt_nop, /* t_deactivate */
kmt_periodic, /* t_periodic */
kmt_destroy, /* t_destroy */
kmt_name, /* t_name */
@@ -2425,25 +2425,25 @@ static const mdb_tgt_ops_t kmt_ops = {
kmt_addr_to_ctf, /* t_addr_to_ctf */
kmt_name_to_ctf, /* t_name_to_ctf */
kmt_status, /* t_status */
- (int (*)()) mdb_tgt_notsup, /* t_run */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_run */
kmt_step, /* t_step */
kmt_step_out, /* t_step_out */
kmt_next, /* t_next */
kmt_continue, /* t_cont */
- (int (*)()) mdb_tgt_notsup, /* t_signal */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_signal */
kmt_add_vbrkpt, /* t_add_vbrkpt */
kmt_add_sbrkpt, /* t_add_sbrkpt */
kmt_add_pwapt, /* t_add_pwapt */
kmt_add_vwapt, /* t_add_vwapt */
kmt_add_iowapt, /* t_add_iowapt */
- (int (*)()) mdb_tgt_null, /* t_add_sysenter */
- (int (*)()) mdb_tgt_null, /* t_add_sysexit */
- (int (*)()) mdb_tgt_null, /* t_add_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysenter */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysexit */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_signal */
kmt_add_trap, /* t_add_fault */
kmt_getareg, /* t_getareg */
kmt_putareg, /* t_putareg */
- (int (*)()) mdb_tgt_nop, /* XXX t_stack_iter */
- (int (*)()) mdb_tgt_notsup /* t_auxv */
+ (int (*)())(uintptr_t) mdb_tgt_nop, /* XXX t_stack_iter */
+ (int (*)())(uintptr_t) mdb_tgt_notsup /* t_auxv */
};
/*
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_kb_kvm.c b/usr/src/cmd/mdb/common/mdb/mdb_kb_kvm.c
index 48b6e1ec93..cae14e419d 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_kb_kvm.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_kb_kvm.c
@@ -65,7 +65,7 @@ libkvm_kb_ops(void)
.kb_awrite = (ssize_t (*)())kvm_awrite,
.kb_pread = (ssize_t (*)())kvm_pread,
.kb_pwrite = (ssize_t (*)())kvm_pwrite,
- .kb_getmregs = (int (*)())mdb_tgt_notsup,
+ .kb_getmregs = (int (*)())(uintptr_t)mdb_tgt_notsup,
.kb_vtop = (uint64_t (*)())kvm_physaddr,
};
return (&ops);
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_kproc.c b/usr/src/cmd/mdb/common/mdb/mdb_kproc.c
index f09b97db0d..4eeb8ac708 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_kproc.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_kproc.c
@@ -885,11 +885,11 @@ kp_auxv(mdb_tgt_t *t, const auxv_t **auxvp)
}
static const mdb_tgt_ops_t kproc_ops = {
- (int (*)()) mdb_tgt_notsup, /* t_setflags */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_setflags */
kp_setcontext, /* t_setcontext */
kp_activate, /* t_activate */
kp_deactivate, /* t_deactivate */
- (void (*)()) mdb_tgt_nop, /* t_periodic */
+ (void (*)())(uintptr_t) mdb_tgt_nop, /* t_periodic */
kp_destroy, /* t_destroy */
kp_name, /* t_name */
kp_isa, /* t_isa */
@@ -917,24 +917,24 @@ static const mdb_tgt_ops_t kproc_ops = {
(struct ctf_file *(*)()) mdb_tgt_null, /* t_addr_to_ctf */
(struct ctf_file *(*)()) mdb_tgt_null, /* t_name_to_ctf */
kp_status, /* t_status */
- (int (*)()) mdb_tgt_notsup, /* t_run */
- (int (*)()) mdb_tgt_notsup, /* t_step */
- (int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_next */
- (int (*)()) mdb_tgt_notsup, /* t_cont */
- (int (*)()) mdb_tgt_notsup, /* t_signal */
- (int (*)()) mdb_tgt_null, /* t_add_sbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_vbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_pwapt */
- (int (*)()) mdb_tgt_null, /* t_add_vwapt */
- (int (*)()) mdb_tgt_null, /* t_add_iowapt */
- (int (*)()) mdb_tgt_null, /* t_add_sysenter */
- (int (*)()) mdb_tgt_null, /* t_add_sysexit */
- (int (*)()) mdb_tgt_null, /* t_add_signal */
- (int (*)()) mdb_tgt_null, /* t_add_fault */
- (int (*)()) mdb_tgt_notsup, /* t_getareg XXX */
- (int (*)()) mdb_tgt_notsup, /* t_putareg XXX */
- (int (*)()) mdb_tgt_notsup, /* t_stack_iter XXX */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_run */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_step */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_step_out */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_next */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_cont */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_pwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_iowapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysenter */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysexit */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_fault */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_getareg XXX */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_putareg XXX */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_stack_iter XXX */
kp_auxv /* t_auxv */
};
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_kvm.c b/usr/src/cmd/mdb/common/mdb/mdb_kvm.c
index 2a446d6fc9..27ca238ca9 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_kvm.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_kvm.c
@@ -1496,7 +1496,7 @@ mdb_kvm_tgt_create(mdb_tgt_t *t, int argc, const char *argv[])
goto err;
}
- kt->k_dump_print_content = (void (*)())kt_data_stub;
+ kt->k_dump_print_content = (void (*)())(uintptr_t)kt_data_stub;
kt->k_dump_find_curproc = kt_data_stub;
/*
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_main.c b/usr/src/cmd/mdb/common/mdb/mdb_main.c
index 1077e1b719..e1c2ce5fa4 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_main.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_main.c
@@ -506,8 +506,10 @@ main(int argc, char *argv[], char *envp[])
(void) mdb_signal_sethandler(SIGBUS, flt_handler, NULL);
(void) mdb_signal_sethandler(SIGSEGV, flt_handler, NULL);
- (void) mdb_signal_sethandler(SIGHUP, (mdb_signal_f *)terminate, NULL);
- (void) mdb_signal_sethandler(SIGTERM, (mdb_signal_f *)terminate, NULL);
+ (void) mdb_signal_sethandler(SIGHUP,
+ (mdb_signal_f *)(uintptr_t)terminate, NULL);
+ (void) mdb_signal_sethandler(SIGTERM,
+ (mdb_signal_f *)(uintptr_t)terminate, NULL);
for (mdb.m_rdvers = RD_VERSION; mdb.m_rdvers > 0; mdb.m_rdvers--) {
if (rd_init(mdb.m_rdvers) == RD_OK)
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_proc.c b/usr/src/cmd/mdb/common/mdb/mdb_proc.c
index 2fd564d122..af4a6eac23 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_proc.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_proc.c
@@ -4681,7 +4681,7 @@ pt_auxv(mdb_tgt_t *t, const auxv_t **auxvp)
static const mdb_tgt_ops_t proc_ops = {
pt_setflags, /* t_setflags */
- (int (*)()) mdb_tgt_notsup, /* t_setcontext */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_setcontext */
pt_activate, /* t_activate */
pt_deactivate, /* t_deactivate */
pt_periodic, /* t_periodic */
@@ -4701,7 +4701,7 @@ static const mdb_tgt_ops_t proc_ops = {
pt_fwrite, /* t_fwrite */
(ssize_t (*)()) mdb_tgt_notsup, /* t_ioread */
(ssize_t (*)()) mdb_tgt_notsup, /* t_iowrite */
- (int (*)()) mdb_tgt_notsup, /* t_vtop */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_vtop */
pt_lookup_by_name, /* t_lookup_by_name */
pt_lookup_by_addr, /* t_lookup_by_addr */
pt_symbol_iter, /* t_symbol_iter */
@@ -4720,9 +4720,9 @@ static const mdb_tgt_ops_t proc_ops = {
pt_signal, /* t_signal */
pt_add_vbrkpt, /* t_add_vbrkpt */
pt_add_sbrkpt, /* t_add_sbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_pwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_pwapt */
pt_add_vwapt, /* t_add_vwapt */
- (int (*)()) mdb_tgt_null, /* t_add_iowapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_iowapt */
pt_add_sysenter, /* t_add_sysenter */
pt_add_sysexit, /* t_add_sysexit */
pt_add_signal, /* t_add_signal */
@@ -4848,8 +4848,8 @@ pt_lwp_setfpregs(mdb_tgt_t *t, void *tap, mdb_tgt_tid_t tid,
}
static const pt_ptl_ops_t proc_lwp_ops = {
- (int (*)()) mdb_tgt_nop,
- (void (*)()) mdb_tgt_nop,
+ (int (*)())(uintptr_t) mdb_tgt_nop,
+ (void (*)())(uintptr_t) mdb_tgt_nop,
pt_lwp_tid,
pt_lwp_iter,
pt_lwp_getregs,
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_rawfile.c b/usr/src/cmd/mdb/common/mdb/mdb_rawfile.c
index 529b71a581..d21ad0f38a 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_rawfile.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_rawfile.c
@@ -361,16 +361,16 @@ rf_deactivate(mdb_tgt_t *t)
static const mdb_tgt_ops_t rawfile_ops = {
rf_setflags, /* t_setflags */
- (int (*)()) mdb_tgt_notsup, /* t_setcontext */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_setcontext */
rf_activate, /* t_activate */
rf_deactivate, /* t_deactivate */
- (void (*)()) mdb_tgt_nop, /* t_periodic */
+ (void (*)())(uintptr_t) mdb_tgt_nop, /* t_periodic */
rf_destroy, /* t_destroy */
rf_name, /* t_name */
(const char *(*)()) mdb_conf_isa, /* t_isa */
(const char *(*)()) mdb_conf_platform, /* t_platform */
- (int (*)()) mdb_tgt_notsup, /* t_uname */
- (int (*)()) mdb_tgt_notsup, /* t_dmodel */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_uname */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_dmodel */
rf_aread, /* t_aread */
rf_awrite, /* t_awrite */
rf_vread, /* t_vread */
@@ -381,10 +381,10 @@ static const mdb_tgt_ops_t rawfile_ops = {
rf_fwrite, /* t_fwrite */
(ssize_t (*)()) mdb_tgt_notsup, /* t_ioread */
(ssize_t (*)()) mdb_tgt_notsup, /* t_iowrite */
- (int (*)()) mdb_tgt_notsup, /* t_vtop */
- (int (*)()) mdb_tgt_notsup, /* t_lookup_by_name */
- (int (*)()) mdb_tgt_notsup, /* t_lookup_by_addr */
- (int (*)()) mdb_tgt_notsup, /* t_symbol_iter */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_vtop */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_lookup_by_name */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_lookup_by_addr */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_symbol_iter */
rf_mapping_iter, /* t_mapping_iter */
rf_mapping_iter, /* t_object_iter */
(const mdb_map_t *(*)()) mdb_tgt_null, /* t_addr_to_map */
@@ -392,25 +392,25 @@ static const mdb_tgt_ops_t rawfile_ops = {
(struct ctf_file *(*)()) mdb_tgt_null, /* t_addr_to_ctf */
(struct ctf_file *(*)()) mdb_tgt_null, /* t_name_to_ctf */
rf_status, /* t_status */
- (int (*)()) mdb_tgt_notsup, /* t_run */
- (int (*)()) mdb_tgt_notsup, /* t_step */
- (int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_next */
- (int (*)()) mdb_tgt_notsup, /* t_cont */
- (int (*)()) mdb_tgt_notsup, /* t_signal */
- (int (*)()) mdb_tgt_null, /* t_add_vbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_sbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_pwapt */
- (int (*)()) mdb_tgt_null, /* t_add_vwapt */
- (int (*)()) mdb_tgt_null, /* t_add_iowapt */
- (int (*)()) mdb_tgt_null, /* t_add_sysenter */
- (int (*)()) mdb_tgt_null, /* t_add_sysexit */
- (int (*)()) mdb_tgt_null, /* t_add_signal */
- (int (*)()) mdb_tgt_null, /* t_add_fault */
- (int (*)()) mdb_tgt_notsup, /* t_getareg */
- (int (*)()) mdb_tgt_notsup, /* t_putareg */
- (int (*)()) mdb_tgt_notsup, /* t_stack_iter */
- (int (*)()) mdb_tgt_notsup /* t_auxv */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_run */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_step */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_step_out */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_next */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_cont */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_pwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_iowapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysenter */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysexit */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_fault */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_getareg */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_putareg */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_stack_iter */
+ (int (*)())(uintptr_t) mdb_tgt_notsup /* t_auxv */
};
int
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_value.c b/usr/src/cmd/mdb/common/mdb/mdb_value.c
index c50d971a49..26fd503b29 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_value.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_value.c
@@ -107,17 +107,17 @@ value_write(mdb_tgt_t *t, const void *buf, size_t nbytes, uintptr_t addr)
}
static const mdb_tgt_ops_t value_ops = {
- (int (*)()) mdb_tgt_notsup, /* t_setflags */
- (int (*)()) mdb_tgt_notsup, /* t_setcontext */
- (void (*)()) mdb_tgt_nop, /* t_activate */
- (void (*)()) mdb_tgt_nop, /* t_deactivate */
- (void (*)()) mdb_tgt_nop, /* t_periodic */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_setflags */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_setcontext */
+ (void (*)())(uintptr_t) mdb_tgt_nop, /* t_activate */
+ (void (*)())(uintptr_t) mdb_tgt_nop, /* t_deactivate */
+ (void (*)())(uintptr_t) mdb_tgt_nop, /* t_periodic */
mdb_value_tgt_destroy, /* t_destroy */
(const char *(*)()) mdb_tgt_null, /* t_name */
(const char *(*)()) mdb_conf_isa, /* t_isa */
(const char *(*)()) mdb_conf_platform, /* t_platform */
- (int (*)()) mdb_tgt_notsup, /* t_uname */
- (int (*)()) mdb_tgt_notsup, /* t_dmodel */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_uname */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_dmodel */
(ssize_t (*)()) mdb_tgt_notsup, /* t_aread */
(ssize_t (*)()) mdb_tgt_notsup, /* t_awrite */
value_read, /* t_vread */
@@ -128,36 +128,36 @@ static const mdb_tgt_ops_t value_ops = {
value_write, /* t_fwrite */
value_read, /* t_ioread */
value_write, /* t_iowrite */
- (int (*)()) mdb_tgt_notsup, /* t_vtop */
- (int (*)()) mdb_tgt_notsup, /* t_lookup_by_name */
- (int (*)()) mdb_tgt_notsup, /* t_lookup_by_addr */
- (int (*)()) mdb_tgt_notsup, /* t_symbol_iter */
- (int (*)()) mdb_tgt_notsup, /* t_mapping_iter */
- (int (*)()) mdb_tgt_notsup, /* t_object_iter */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_vtop */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_lookup_by_name */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_lookup_by_addr */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_symbol_iter */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_mapping_iter */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_object_iter */
(const mdb_map_t *(*)()) mdb_tgt_null, /* t_addr_to_map */
(const mdb_map_t *(*)()) mdb_tgt_null, /* t_name_to_map */
(struct ctf_file *(*)()) mdb_tgt_null, /* t_addr_to_ctf */
(struct ctf_file *(*)()) mdb_tgt_null, /* t_name_to_ctf */
- (int (*)()) mdb_tgt_notsup, /* t_status */
- (int (*)()) mdb_tgt_notsup, /* t_run */
- (int (*)()) mdb_tgt_notsup, /* t_step */
- (int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_next */
- (int (*)()) mdb_tgt_notsup, /* t_cont */
- (int (*)()) mdb_tgt_notsup, /* t_signal */
- (int (*)()) mdb_tgt_null, /* t_add_vbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_sbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_pwapt */
- (int (*)()) mdb_tgt_null, /* t_add_vwapt */
- (int (*)()) mdb_tgt_null, /* t_add_iowapt */
- (int (*)()) mdb_tgt_null, /* t_add_sysenter */
- (int (*)()) mdb_tgt_null, /* t_add_sysexit */
- (int (*)()) mdb_tgt_null, /* t_add_signal */
- (int (*)()) mdb_tgt_null, /* t_add_fault */
- (int (*)()) mdb_tgt_notsup, /* t_getareg */
- (int (*)()) mdb_tgt_notsup, /* t_putareg */
- (int (*)()) mdb_tgt_nop, /* t_stack_iter */
- (int (*)()) mdb_tgt_notsup /* t_auxv */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_status */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_run */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_step */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_step_out */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_next */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_cont */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_pwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_iowapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysenter */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysexit */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_fault */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_getareg */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_putareg */
+ (int (*)())(uintptr_t) mdb_tgt_nop, /* t_stack_iter */
+ (int (*)())(uintptr_t) mdb_tgt_notsup /* t_auxv */
};
int
diff --git a/usr/src/cmd/mdb/common/modules/crypto/impl.c b/usr/src/cmd/mdb/common/modules/crypto/impl.c
index 0d6cc436a1..058548fe0d 100644
--- a/usr/src/cmd/mdb/common/modules/crypto/impl.c
+++ b/usr/src/cmd/mdb/common/modules/crypto/impl.c
@@ -410,7 +410,7 @@ soft_conf_walk_init(mdb_walk_state_t *wsp)
}
wsp->walk_addr = (uintptr_t)soft;
wsp->walk_data = mdb_alloc(sizeof (kcf_soft_conf_entry_t), UM_SLEEP);
- wsp->walk_callback = (mdb_walk_cb_t)prt_soft_conf_entry;
+ wsp->walk_callback = (mdb_walk_cb_t)(uintptr_t)prt_soft_conf_entry;
return (WALK_NEXT);
}
diff --git a/usr/src/cmd/mdb/common/modules/genunix/memory.c b/usr/src/cmd/mdb/common/modules/genunix/memory.c
index c645b04a25..d5ffa1537a 100644
--- a/usr/src/cmd/mdb/common/modules/genunix/memory.c
+++ b/usr/src/cmd/mdb/common/modules/genunix/memory.c
@@ -565,7 +565,7 @@ memstat(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
stats.ms_unused_vp = (struct vnode *)(uintptr_t)sym.st_value;
/* walk all pages, collect statistics */
- if (mdb_walk("allpages", (mdb_walk_cb_t)memstat_callback,
+ if (mdb_walk("allpages", (mdb_walk_cb_t)(uintptr_t)memstat_callback,
&stats) == -1) {
mdb_warn("can't walk memseg");
return (DCMD_ERR);
diff --git a/usr/src/cmd/mdb/common/modules/genunix/tsd.c b/usr/src/cmd/mdb/common/modules/genunix/tsd.c
index 829244eab7..5bd30496be 100644
--- a/usr/src/cmd/mdb/common/modules/genunix/tsd.c
+++ b/usr/src/cmd/mdb/common/modules/genunix/tsd.c
@@ -143,7 +143,8 @@ tsdtot(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
if (addr == 0 || argc != 0)
return (DCMD_USAGE);
- if (mdb_walk("thread", (mdb_walk_cb_t)tsdthr_match, (void *)addr) == -1)
+ if (mdb_walk("thread", (mdb_walk_cb_t)(uintptr_t)tsdthr_match,
+ (void *)addr) == -1)
return (DCMD_ERR);
return (DCMD_OK);
}
diff --git a/usr/src/cmd/mdb/common/modules/ufs/ufs.c b/usr/src/cmd/mdb/common/modules/ufs/ufs.c
index 422048adc2..b81da1e97d 100644
--- a/usr/src/cmd/mdb/common/modules/ufs/ufs.c
+++ b/usr/src/cmd/mdb/common/modules/ufs/ufs.c
@@ -196,7 +196,8 @@ inode_cache(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
"ADDR", "INUMBER", "DEVICE", "CHAIN");
}
- if (mdb_walk("inode_cache", (mdb_walk_cb_t)inode_cache_cb, &id) == -1) {
+ if (mdb_walk("inode_cache", (mdb_walk_cb_t)(uintptr_t)inode_cache_cb,
+ &id) == -1) {
mdb_warn("can't walk inode cache");
return (DCMD_ERR);
}
diff --git a/usr/src/cmd/mdb/common/modules/ufs/ufs_log.c b/usr/src/cmd/mdb/common/modules/ufs/ufs_log.c
index fc3d97a736..f8de1d811c 100644
--- a/usr/src/cmd/mdb/common/modules/ufs/ufs_log.c
+++ b/usr/src/cmd/mdb/common/modules/ufs/ufs_log.c
@@ -214,7 +214,8 @@ mapstats_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
msp = mdb_zalloc(sizeof (mapstats_t), UM_SLEEP | UM_GC);
msp->transdiff = FALSE;
- if (mdb_pwalk("ufslogmap", (mdb_walk_cb_t)mapadd, msp, addr) == -1) {
+ if (mdb_pwalk("ufslogmap", (mdb_walk_cb_t)(uintptr_t)mapadd,
+ msp, addr) == -1) {
mdb_warn("can't walk ufslogmap for stats");
return (DCMD_ERR);
}
diff --git a/usr/src/cmd/mdb/common/modules/usba/prtusb.c b/usr/src/cmd/mdb/common/modules/usba/prtusb.c
index 9f6ffc4177..aed8bf8001 100644
--- a/usr/src/cmd/mdb/common/modules/usba/prtusb.c
+++ b/usr/src/cmd/mdb/common/modules/usba/prtusb.c
@@ -22,12 +22,12 @@
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
- * Copyright 2016 Joyent, Inc.
+ * Copyright 2019 Joyent, Inc.
*/
#include <sys/mdb_modapi.h>
-
+#include <sys/sysmacros.h>
#include <sys/usb/usba.h>
#include <sys/usb/usba/usba_types.h>
@@ -484,6 +484,32 @@ static usb_descr_item_t usb_vs_format_dv_descr[] = {
};
static uint_t usb_vs_format_dv_item = 6;
+static usb_descr_item_t usb_ccid_descr[] = {
+ {1, "bLength"},
+ {1, "bDescriptorType"},
+ {2, "bcdCCID"},
+ {1, "bMaxSlotIndex"},
+ {1, "bVoltageSupport"},
+ {4, "dwProtocols"},
+ {4, "dwDefaultClock"},
+ {4, "dwMaximumClock"},
+ {1, "bNumClockSupported"},
+ {4, "dwDataRate"},
+ {4, "dwMaxDataRate"},
+ {1, "bNumDataRatesSupported"},
+ {4, "dwMaxIFSD"},
+ {4, "dwSyncProtocols"},
+ {4, "dwMechanical"},
+ {4, "dwFeatures"},
+ {4, "dwMaxCCIDMessageLength"},
+ {1, "bClassGetResponse"},
+ {1, "bClassEnvelope"},
+ {2, "wLcdLayout"},
+ {1, "bPinSupport"},
+ {1, "bMaxCCIDBusySlots"}
+};
+static uint_t usb_ccid_item = ARRAY_SIZE(usb_ccid_descr);
+
/* ****************************************************************** */
@@ -1131,6 +1157,11 @@ prt_usb_desc(uintptr_t usb_cfg, uint_t cfg_len)
mdb_printf("WA Descriptor\n");
print_descr(paddr, nlen, usb_wa_descr,
usb_wa_item);
+ } else if (usb_if.bInterfaceClass == USB_CLASS_CCID &&
+ usb_if.bInterfaceSubClass == 0x0) {
+ mdb_printf("CCID Descriptor\n");
+ print_descr(paddr, nlen, usb_ccid_descr,
+ usb_ccid_item);
} else {
mdb_printf("HID Descriptor\n");
print_descr(paddr, nlen, usb_hid_descr,
diff --git a/usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c b/usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c
index 985da328dc..0382c7e0fb 100644
--- a/usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c
+++ b/usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c
@@ -108,7 +108,7 @@ const mdb_tgt_ops_t kt_amd64_ops = {
kt_setcontext, /* t_setcontext */
kt_activate, /* t_activate */
kt_deactivate, /* t_deactivate */
- (void (*)()) mdb_tgt_nop, /* t_periodic */
+ (void (*)())(uintptr_t) mdb_tgt_nop, /* t_periodic */
kt_destroy, /* t_destroy */
kt_name, /* t_name */
(const char *(*)()) mdb_conf_isa, /* t_isa */
@@ -136,25 +136,25 @@ const mdb_tgt_ops_t kt_amd64_ops = {
kt_addr_to_ctf, /* t_addr_to_ctf */
kt_name_to_ctf, /* t_name_to_ctf */
kt_status, /* t_status */
- (int (*)()) mdb_tgt_notsup, /* t_run */
- (int (*)()) mdb_tgt_notsup, /* t_step */
- (int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_next */
- (int (*)()) mdb_tgt_notsup, /* t_cont */
- (int (*)()) mdb_tgt_notsup, /* t_signal */
- (int (*)()) mdb_tgt_null, /* t_add_vbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_sbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_pwapt */
- (int (*)()) mdb_tgt_null, /* t_add_vwapt */
- (int (*)()) mdb_tgt_null, /* t_add_iowapt */
- (int (*)()) mdb_tgt_null, /* t_add_sysenter */
- (int (*)()) mdb_tgt_null, /* t_add_sysexit */
- (int (*)()) mdb_tgt_null, /* t_add_signal */
- (int (*)()) mdb_tgt_null, /* t_add_fault */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_run */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_step */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_step_out */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_next */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_cont */
+ (int (*)())(uintptr_t) mdb_tgt_notsup, /* t_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_pwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_iowapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysenter */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysexit */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_fault */
kt_getareg, /* t_getareg */
kt_putareg, /* t_putareg */
mdb_amd64_kvm_stack_iter, /* t_stack_iter */
- (int (*)()) mdb_tgt_notsup /* t_auxv */
+ (int (*)())(uintptr_t) mdb_tgt_notsup /* t_auxv */
};
void
diff --git a/usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c b/usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c
index 7cd9195f29..7a6ecaeb6b 100644
--- a/usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c
+++ b/usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c
@@ -108,7 +108,7 @@ const mdb_tgt_ops_t kt_ia32_ops = {
kt_setcontext, /* t_setcontext */
kt_activate, /* t_activate */
kt_deactivate, /* t_deactivate */
- (void (*)()) mdb_tgt_nop, /* t_periodic */
+ (void (*)())(uintptr_t) mdb_tgt_nop, /* t_periodic */
kt_destroy, /* t_destroy */
kt_name, /* t_name */
(const char *(*)()) mdb_conf_isa, /* t_isa */
@@ -142,15 +142,15 @@ const mdb_tgt_ops_t kt_ia32_ops = {
(int (*)()) mdb_tgt_notsup, /* t_next */
(int (*)()) mdb_tgt_notsup, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */
- (int (*)()) mdb_tgt_null, /* t_add_vbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_sbrkpt */
- (int (*)()) mdb_tgt_null, /* t_add_pwapt */
- (int (*)()) mdb_tgt_null, /* t_add_vwapt */
- (int (*)()) mdb_tgt_null, /* t_add_iowapt */
- (int (*)()) mdb_tgt_null, /* t_add_sysenter */
- (int (*)()) mdb_tgt_null, /* t_add_sysexit */
- (int (*)()) mdb_tgt_null, /* t_add_signal */
- (int (*)()) mdb_tgt_null, /* t_add_fault */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sbrkpt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_pwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_vwapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_iowapt */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysenter */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_sysexit */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_signal */
+ (int (*)())(uintptr_t) mdb_tgt_null, /* t_add_fault */
kt_getareg, /* t_getareg */
kt_putareg, /* t_putareg */
mdb_ia32_kvm_stack_iter, /* t_stack_iter */
diff --git a/usr/src/cmd/picl/plugins/common/devtree/picldevtree.c b/usr/src/cmd/picl/plugins/common/devtree/picldevtree.c
index 798a2c89c0..c74c5f85a7 100644
--- a/usr/src/cmd/picl/plugins/common/devtree/picldevtree.c
+++ b/usr/src/cmd/picl/plugins/common/devtree/picldevtree.c
@@ -37,7 +37,6 @@
#include <limits.h>
#include <stdlib.h>
#include <assert.h>
-#include <alloca.h>
#include <unistd.h>
#include <stropts.h>
#include <syslog.h>
@@ -668,7 +667,7 @@ add_string_list_prop(picl_nodehdl_t nodeh, char *name, char *strlist,
if (err != PICL_SUCCESS)
return (err);
- proprow = alloca(sizeof (picl_prophdl_t) * nrows);
+ proprow = calloc(nrows, sizeof (picl_prophdl_t));
if (proprow == NULL) {
(void) ptree_destroy_prop(proph);
return (PICL_FAILURE);
@@ -696,10 +695,10 @@ add_string_list_prop(picl_nodehdl_t nodeh, char *name, char *strlist,
(void) ptree_destroy_prop(proprow[i]);
(void) ptree_delete_prop(proph);
(void) ptree_destroy_prop(proph);
- return (err);
}
- return (PICL_SUCCESS);
+ free(proprow);
+ return (err);
}
/*
@@ -714,6 +713,7 @@ compare_string_propval(picl_nodehdl_t nodeh, const char *pname,
int len;
ptree_propinfo_t pinfo;
picl_prophdl_t proph;
+ int rv;
err = ptree_get_prop_by_name(nodeh, pname, &proph);
if (err != PICL_SUCCESS) /* prop doesn't exist */
@@ -725,15 +725,18 @@ compare_string_propval(picl_nodehdl_t nodeh, const char *pname,
len = strlen(pval) + 1;
- pvalbuf = alloca(len);
+ pvalbuf = malloc(len);
if (pvalbuf == NULL)
return (0);
err = ptree_get_propval(proph, pvalbuf, len);
if ((err == PICL_SUCCESS) && (strcmp(pvalbuf, pval) == 0))
- return (1); /* prop match */
+ rv = 1; /* prop match */
+ else
+ rv = 0;
- return (0);
+ free(pvalbuf);
+ return (rv);
}
/*
@@ -846,14 +849,19 @@ process_charstring_data(picl_nodehdl_t nodeh, char *pname, unsigned char *pdata,
* no null terminator
*/
if (pdata[retval - 1] != '\0') {
- strdat = alloca(retval + 1);
- (void) memcpy(strdat, pdata, retval);
- strdat[retval] = '\0';
- retval++;
+ strdat = malloc(retval + 1);
+ if (strdat != NULL) {
+ (void) memcpy(strdat, pdata, retval);
+ strdat[retval] = '\0';
+ retval++;
+ }
} else {
- strdat = alloca(retval);
- (void) memcpy(strdat, pdata, retval);
+ strdat = malloc(retval);
+ if (strdat != NULL)
+ (void) memcpy(strdat, pdata, retval);
}
+ if (strdat == NULL)
+ return (PICL_FAILURE);
/*
* If it's a string list, create a table prop
@@ -862,18 +870,24 @@ process_charstring_data(picl_nodehdl_t nodeh, char *pname, unsigned char *pdata,
if (strcount > 1) {
err = add_string_list_prop(nodeh, pname,
strdat, strcount);
- if (err != PICL_SUCCESS)
+ if (err != PICL_SUCCESS) {
+ free(strdat);
return (err);
+ }
} else {
err = ptree_init_propinfo(&propinfo, PTREE_PROPINFO_VERSION,
PICL_PTYPE_CHARSTRING, PICL_READ,
strlen(strdat) + 1, pname, NULL,
NULL);
- if (err != PICL_SUCCESS)
+ if (err != PICL_SUCCESS) {
+ free(strdat);
return (err);
+ }
(void) ptree_create_and_add_prop(nodeh, &propinfo,
strdat, NULL);
}
+
+ free(strdat);
return (PICL_SUCCESS);
}
@@ -2959,14 +2973,14 @@ get_first_reg_word(picl_nodehdl_t nodeh, uint32_t *regval)
return (err);
if (pinfo.piclinfo.size < sizeof (uint32_t)) /* too small */
return (PICL_FAILURE);
- regbuf = alloca(pinfo.piclinfo.size);
+ regbuf = malloc(pinfo.piclinfo.size);
if (regbuf == NULL)
return (PICL_FAILURE);
err = ptree_get_propval(regh, regbuf, pinfo.piclinfo.size);
- if (err != PICL_SUCCESS)
- return (err);
- *regval = *regbuf; /* get first 32-bit value */
- return (PICL_SUCCESS);
+ if (err == PICL_SUCCESS)
+ *regval = *regbuf; /* get first 32-bit value */
+ free(regbuf);
+ return (err);
}
/*
@@ -3324,7 +3338,7 @@ add_unitaddr_prop(picl_nodehdl_t nodeh, unitaddr_map_t *uamap, uint_t addrcells)
return (PICL_FAILURE);
regproplen = pinfo.piclinfo.size;
- regbuf = alloca(regproplen);
+ regbuf = malloc(regproplen);
if (regbuf == NULL)
return (PICL_FAILURE);
@@ -3333,6 +3347,7 @@ add_unitaddr_prop(picl_nodehdl_t nodeh, unitaddr_map_t *uamap, uint_t addrcells)
(uamap->addrcellcnt && uamap->addrcellcnt != addrcells) ||
(uamap->func)(unitaddr, sizeof (unitaddr), regbuf,
addrcells) != 0) {
+ free(regbuf);
return (PICL_FAILURE);
}
@@ -3342,6 +3357,7 @@ add_unitaddr_prop(picl_nodehdl_t nodeh, unitaddr_map_t *uamap, uint_t addrcells)
if (err == PICL_SUCCESS)
err = ptree_create_and_add_prop(nodeh, &pinfo, unitaddr, NULL);
+ free(regbuf);
return (err);
}
@@ -3374,7 +3390,7 @@ get_unitaddr(picl_nodehdl_t parh, picl_nodehdl_t nodeh, char *unitaddr,
return (PICL_FAILURE);
regproplen = pinfo.piclinfo.size;
- regbuf = alloca(regproplen);
+ regbuf = malloc(regproplen);
if (regbuf == NULL)
return (PICL_FAILURE);
@@ -3382,8 +3398,10 @@ get_unitaddr(picl_nodehdl_t parh, picl_nodehdl_t nodeh, char *unitaddr,
if (err != PICL_SUCCESS || uamap->func == NULL ||
(uamap->addrcellcnt && uamap->addrcellcnt != addrcells) ||
(uamap->func)(unitaddr, ualen, regbuf, addrcells) != 0) {
+ free(regbuf);
return (PICL_FAILURE);
}
+ free(regbuf);
return (PICL_SUCCESS);
}
@@ -3465,13 +3483,15 @@ update_memory_size_prop(picl_nodehdl_t plafh)
if (err != PICL_SUCCESS)
return (err);
- regbuf = alloca(pinfo.piclinfo.size);
+ regbuf = malloc(pinfo.piclinfo.size);
if (regbuf == NULL)
return (PICL_FAILURE);
err = ptree_get_propval(proph, regbuf, pinfo.piclinfo.size);
- if (err != PICL_SUCCESS)
+ if (err != PICL_SUCCESS) {
+ free(regbuf);
return (err);
+ }
mspecs = (memspecs_t *)regbuf;
nspecs = pinfo.piclinfo.size / sizeof (memspecs_t);
@@ -3483,6 +3503,7 @@ update_memory_size_prop(picl_nodehdl_t plafh)
err = ptree_get_prop_by_name(memh, PICL_PROP_SIZE, &proph);
if (err == PICL_SUCCESS) {
err = ptree_update_propval(proph, &memsize, sizeof (memsize));
+ free(regbuf);
return (err);
}
@@ -3493,6 +3514,7 @@ update_memory_size_prop(picl_nodehdl_t plafh)
PICL_PTYPE_UNSIGNED_INT, PICL_READ, sizeof (memsize),
PICL_PROP_SIZE, NULL, NULL);
err = ptree_create_and_add_prop(memh, &pinfo, &memsize, NULL);
+ free(regbuf);
return (err);
}
diff --git a/usr/src/cmd/power/Makefile b/usr/src/cmd/power/Makefile
index 77c3699bb9..0b77a62513 100644
--- a/usr/src/cmd/power/Makefile
+++ b/usr/src/cmd/power/Makefile
@@ -27,14 +27,14 @@
DAEMON_SRCS = powerd.c sysstat.c
DAEMON_OBJS = $(DAEMON_SRCS:%.c=%.o)
DAEMON = powerd
-PMCFG_SRCS = conf.c parse.c handlers.c
+PMCFG_SRCS = conf.c parse.c handlers.c
PMCFG_OBJS = $(PMCFG_SRCS:%.c=%.o)
-PMCFG = pmconfig
-SUSPEND_SRCS = sys-suspend.c pm_pam_conv.c
+PMCFG = pmconfig
+SUSPEND_SRCS = sys-suspend.c pm_pam_conv.c
SUSPEND_OBJS = $(SUSPEND_SRCS:%.c=%.o)
-SUSPEND = sys-suspend
-SRCS = $(DAEMON_SRCS) $(PMCFG_SRCS) $(SUSPEND_SRCS)
-OBJS = $(SRCS:%.c=%.o)
+SUSPEND = sys-suspend
+SRCS = $(DAEMON_SRCS) $(PMCFG_SRCS) $(SUSPEND_SRCS)
+OBJS = $(SRCS:%.c=%.o)
PROG = $(DAEMON) $(PMCFG) $(SUSPEND)
POWERCONF= power.conf
ETCFILES = $(POWERCONF)
@@ -99,7 +99,7 @@ $(DAEMON_OBJS): $(DAEMON_SRCS)
$(PROCESS_COMMENT) $@
$(DAEMON): $(DAEMON_OBJS)
- $(CC) -o $@ $(DAEMON_OBJS) $(LDFLAGS) $(DAEMON_LDLIBS)
+ $(LINK.c) -o $@ $(DAEMON_OBJS) $(DAEMON_LDLIBS)
$(POST_PROCESS)
$(PMCFG_OBJS): pmconfig.h
diff --git a/usr/src/cmd/praudit/Makefile b/usr/src/cmd/praudit/Makefile
index 9ae3e01a8b..0749cada9a 100644
--- a/usr/src/cmd/praudit/Makefile
+++ b/usr/src/cmd/praudit/Makefile
@@ -56,7 +56,7 @@ all: $(PROG)
install: all $(ROOTUSRSBINPROG)
$(PROG): $(OBJS)
- $(CC) -o $(PROG) $(OBJS) $(LDFLAGS) $(LDLIBS)
+ $(LINK.c) -o $(PROG) $(OBJS) $(LDLIBS)
$(POST_PROCESS)
adt_xlate.o: $(XLATEDIR)/adt_xlate.c
diff --git a/usr/src/cmd/sleep/Makefile b/usr/src/cmd/sleep/Makefile
new file mode 100644
index 0000000000..556e4b60ee
--- /dev/null
+++ b/usr/src/cmd/sleep/Makefile
@@ -0,0 +1,29 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2019 Robert Mustacchi
+#
+
+PROG = sleep
+
+include ../Makefile.cmd
+
+CSTD = $(CSTD_GNU99)
+LDLIBS += -lm
+
+all: $(PROG)
+
+install: all $(ROOTPROG)
+
+clean:
+
+include ../Makefile.targ
diff --git a/usr/src/cmd/sleep/sleep.c b/usr/src/cmd/sleep/sleep.c
new file mode 100644
index 0000000000..bd1420a69b
--- /dev/null
+++ b/usr/src/cmd/sleep/sleep.c
@@ -0,0 +1,168 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2019 Robert Mustacchi
+ */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <err.h>
+#include <errno.h>
+#include <math.h>
+#include <limits.h>
+#include <time.h>
+#include <libintl.h>
+
+/*
+ * This implements the sleep(1) command. It allows for a number of extensions
+ * that match both the GNU implementation and parts of what ksh93 used to
+ * provide. Mainly:
+ *
+ * o Fractional seconds
+ * o Suffixes that change the amount of time
+ */
+
+typedef struct {
+ char sm_char;
+ uint64_t sm_adj;
+} sleep_map_t;
+
+static const sleep_map_t sleep_map[] = {
+ { 's', 1 },
+ { 'm', 60 },
+ { 'h', 60 * 60 },
+ { 'd', 60 * 60 * 24 },
+ { 'w', 60 * 60 * 24 * 7 },
+ { 'y', 60 * 60 * 24 * 365 },
+ { '\0', 0 }
+};
+
+static void
+sleep_sigalrm(int sig)
+{
+ /*
+ * Note, the normal exit(2) function is not Async-Signal-Safe.
+ */
+ _exit(0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int c;
+ long double d, sec, frac;
+ char *eptr;
+
+ (void) setlocale(LC_ALL, "");
+#if !defined(TEXT_DOMAIN)
+#define TEXT_DOMAIN "SYS_TEST"
+#endif
+ (void) textdomain(TEXT_DOMAIN);
+
+ (void) signal(SIGALRM, sleep_sigalrm);
+
+ while ((c = getopt(argc, argv, ":")) != -1) {
+ switch (c) {
+ case '?':
+ warnx(gettext("illegal option -- %c"), optopt);
+ (void) fprintf(stderr,
+ gettext("Usage: sleep time[suffix]\n"));
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1) {
+ warnx(gettext("only one operand is supported"));
+ (void) fprintf(stderr, gettext("Usage: sleep time[suffix]\n"));
+ exit(EXIT_FAILURE);
+ }
+
+ errno = 0;
+ d = strtold(argv[0], &eptr);
+ if (errno != 0 || (eptr[0] != '\0' && eptr[1] != '\0') ||
+ eptr == argv[0] || d == NAN) {
+ errx(EXIT_FAILURE, gettext("failed to parse time '%s'"),
+ argv[0]);
+ }
+
+ if (d < 0.0) {
+ errx(EXIT_FAILURE,
+ gettext("time interval '%s', cannot be negative"), argv[0]);
+ }
+
+ if (eptr[0] != '\0') {
+ int i;
+ for (i = 0; sleep_map[i].sm_char != '\0'; i++) {
+ if (sleep_map[i].sm_char == eptr[0]) {
+ d *= sleep_map[i].sm_adj;
+ break;
+ }
+ }
+
+ if (sleep_map[i].sm_char == '\0') {
+ errx(EXIT_FAILURE, gettext("failed to parse time %s"),
+ argv[0]);
+ }
+ }
+
+ /*
+ * If we have no time, then we're done. Short circuit.
+ */
+ if (d == 0) {
+ exit(EXIT_SUCCESS);
+ }
+
+ /*
+ * Split this apart into the fractional and seconds parts to make it
+ * easier to work with.
+ */
+ frac = modfl(d, &sec);
+
+ /*
+ * We may have a rather large double value. Chop it up in units of
+ * INT_MAX.
+ */
+ while (sec > 0 || frac != 0) {
+ struct timespec ts;
+
+ if (frac != 0) {
+ frac *= NANOSEC;
+ ts.tv_nsec = (long)frac;
+ frac = 0;
+ } else {
+ ts.tv_nsec = 0;
+ }
+
+ /*
+ * We have a floating point number of fractional seconds. We
+ * need to convert that to nanoseconds.
+ */
+ if (sec > (float)INT_MAX) {
+ ts.tv_sec = INT_MAX;
+ } else {
+ ts.tv_sec = (time_t)sec;
+ }
+ sec -= ts.tv_sec;
+
+ if (nanosleep(&ts, NULL) != 0) {
+ err(EXIT_FAILURE, gettext("nanosleep failed"));
+ }
+ }
+
+ return (0);
+}
diff --git a/usr/src/cmd/smbios/Makefile b/usr/src/cmd/smbios/Makefile
index ead08c39ac..391fe3e53f 100644
--- a/usr/src/cmd/smbios/Makefile
+++ b/usr/src/cmd/smbios/Makefile
@@ -52,6 +52,4 @@ clean:
install: $(ROOTUSRSBINPROG)
-lint: lint_SRCS
-
include ../Makefile.targ
diff --git a/usr/src/cmd/smbios/smbios.c b/usr/src/cmd/smbios/smbios.c
index a07a42e45b..703c278132 100644
--- a/usr/src/cmd/smbios/smbios.c
+++ b/usr/src/cmd/smbios/smbios.c
@@ -187,6 +187,21 @@ jedec_print(FILE *fp, const char *desc, uint_t id)
}
}
+/*
+ * Print a 128-bit data as a series of 16 hex digits.
+ */
+static void
+u128_print(FILE *fp, const char *desc, const uint8_t *data)
+{
+ uint_t i;
+
+ oprintf(fp, "%s: ", desc);
+ for (i = 0; i < 16; i++) {
+ oprintf(fp, " %02x", data[i]);
+ }
+ oprintf(fp, "\n");
+}
+
static int
check_oem(smbios_hdl_t *shp)
{
@@ -505,10 +520,6 @@ print_processor(smbios_hdl_t *shp, id_t id, FILE *fp)
desc_printf(smbios_processor_family_desc(p.smbp_family),
fp, " Family: %u", p.smbp_family);
- if (p.smbp_family2 != 0)
- desc_printf(smbios_processor_family_desc(p.smbp_family2),
- fp, " Family Ext: %u", p.smbp_family2);
-
oprintf(fp, " CPUID: 0x%llx\n", (u_longlong_t)p.smbp_cpuid);
desc_printf(smbios_processor_type_desc(p.smbp_type),
@@ -544,34 +555,19 @@ print_processor(smbios_hdl_t *shp, id_t id, FILE *fp)
}
if (p.smbp_corecount != 0) {
- if (p.smbp_corecount != 0xff || p.smbp_corecount2 == 0)
- oprintf(fp, " Core Count: %u\n", p.smbp_corecount);
- else
- oprintf(fp, " Core Count: %u\n", p.smbp_corecount2);
+ oprintf(fp, " Core Count: %u\n", p.smbp_corecount);
} else {
oprintf(fp, " Core Count: Unknown\n");
}
if (p.smbp_coresenabled != 0) {
- if (p.smbp_coresenabled != 0xff || p.smbp_coresenabled2 == 0) {
- oprintf(fp, " Cores Enabled: %u\n",
- p.smbp_coresenabled);
- } else {
- oprintf(fp, " Cores Enabled: %u\n",
- p.smbp_coresenabled2);
- }
+ oprintf(fp, " Cores Enabled: %u\n", p.smbp_coresenabled);
} else {
oprintf(fp, " Cores Enabled: Unknown\n");
}
if (p.smbp_threadcount != 0) {
- if (p.smbp_threadcount != 0xff || p.smbp_threadcount2 == 0) {
- oprintf(fp, " Thread Count: %u\n",
- p.smbp_threadcount);
- } else {
- oprintf(fp, " Thread Count: %u\n",
- p.smbp_threadcount2);
- }
+ oprintf(fp, " Thread Count: %u\n", p.smbp_threadcount);
} else {
oprintf(fp, " Thread Count: Unknown\n");
}
@@ -975,15 +971,18 @@ print_memdevice(smbios_hdl_t *shp, id_t id, FILE *fp)
flag_printf(fp, "Flags", md.smbmd_flags, sizeof (md.smbmd_flags) * NBBY,
smbios_memdevice_flag_name, smbios_memdevice_flag_desc);
- if (md.smbmd_speed != 0)
- oprintf(fp, " Speed: %u MT/s\n", md.smbmd_speed);
- else
+ if (md.smbmd_extspeed != 0) {
+ oprintf(fp, " Speed: %" PRIu64 " MT/s\n", md.smbmd_extspeed);
+ } else {
oprintf(fp, " Speed: Unknown\n");
+ }
- if (md.smbmd_clkspeed != 0)
- oprintf(fp, " Configured Speed: %u MT/s\n", md.smbmd_clkspeed);
- else
+ if (md.smbmd_extclkspeed != 0) {
+ oprintf(fp, " Configured Speed: %" PRIu64 " MT/s\n",
+ md.smbmd_extclkspeed);
+ } else {
oprintf(fp, " Configured Speed: Unknown\n");
+ }
oprintf(fp, " Device Locator: %s\n", md.smbmd_dloc);
oprintf(fp, " Bank Locator: %s\n", md.smbmd_bloc);
@@ -1423,6 +1422,88 @@ print_powersup(smbios_hdl_t *shp, id_t id, FILE *fp)
}
static void
+print_processor_info_riscv(smbios_hdl_t *shp, id_t id, FILE *fp)
+{
+ smbios_processor_info_riscv_t rv;
+
+ if (smbios_info_processor_riscv(shp, id, &rv) != 0) {
+ smbios_warn(shp, "failed to read RISC-V specific processor "
+ "information");
+ return;
+ }
+
+ if (rv.smbpirv_boothart != 0) {
+ oprintf(fp, " Boot Hart\n");
+ }
+ u128_print(fp, " Hart ID", rv.smbpirv_hartid);
+ u128_print(fp, " Vendor ID", rv.smbpirv_vendid);
+ u128_print(fp, " Architecture ID", rv.smbpirv_archid);
+ u128_print(fp, " Implementation ID", rv.smbpirv_machid);
+ flag64_printf(fp, " ISA", rv.smbpirv_isa,
+ sizeof (rv.smbpirv_isa) * NBBY, smbios_riscv_isa_name,
+ smbios_riscv_isa_desc);
+ flag_printf(fp, " Privilege Levels", rv.smbpirv_privlvl,
+ sizeof (rv.smbpirv_privlvl) * NBBY, smbios_riscv_priv_name,
+ smbios_riscv_priv_desc);
+ u128_print(fp, " Machine Exception Trap Delegation",
+ rv.smbpirv_metdi);
+ u128_print(fp, " Machine Interrupt Trap Delegation",
+ rv.smbpirv_mitdi);
+ desc_printf(smbios_riscv_width_desc(rv.smbpirv_xlen),
+ fp, " Register Width: 0x%x", rv.smbpirv_xlen);
+ desc_printf(smbios_riscv_width_desc(rv.smbpirv_mxlen),
+ fp, " M-Mode Register Width: 0x%x", rv.smbpirv_mxlen);
+ desc_printf(smbios_riscv_width_desc(rv.smbpirv_sxlen),
+ fp, " S-Mode Register Width: 0x%x", rv.smbpirv_sxlen);
+ desc_printf(smbios_riscv_width_desc(rv.smbpirv_uxlen),
+ fp, " U-Mode Register Width: 0x%x", rv.smbpirv_uxlen);
+}
+
+static void
+print_processor_info(smbios_hdl_t *shp, id_t id, FILE *fp)
+{
+ smbios_processor_info_t p;
+
+ if (smbios_info_processor_info(shp, id, &p) != 0) {
+ smbios_warn(shp, "failed to read processor additional "
+ "information");
+ return;
+ }
+
+ id_printf(fp, " Processor Handle: ", p.smbpi_processor);
+ desc_printf(smbios_processor_info_type_desc(p.smbpi_ptype),
+ fp, " Processor Type: %u", p.smbpi_ptype);
+
+ switch (p.smbpi_ptype) {
+ case SMB_PROCINFO_T_RV32:
+ case SMB_PROCINFO_T_RV64:
+ case SMB_PROCINFO_T_RV128:
+ oprintf(fp, " RISC-V Additional Processor Information:\n");
+ print_processor_info_riscv(shp, id, fp);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+print_pointdev(smbios_hdl_t *shp, id_t id, FILE *fp)
+{
+ smbios_pointdev_t pd;
+
+ if (smbios_info_pointdev(shp, id, &pd) != 0) {
+ smbios_warn(shp, "failed to read pointer device information");
+ return;
+ }
+
+ desc_printf(smbios_pointdev_type_desc(pd.smbpd_type),
+ fp, " Type: %u", pd.smbpd_type);
+ desc_printf(smbios_pointdev_iface_desc(pd.smbpd_iface),
+ fp, " Interface: %u", pd.smbpd_iface);
+ oprintf(fp, " Buttons: %u\n", pd.smbpd_nbuttons);
+}
+
+static void
print_extprocessor(smbios_hdl_t *shp, id_t id, FILE *fp)
{
int i;
@@ -1617,6 +1698,10 @@ print_struct(smbios_hdl_t *shp, const smbios_struct_t *sp, void *fp)
oprintf(fp, "\n");
print_memdevmap(shp, sp->smbstr_id, fp);
break;
+ case SMB_TYPE_POINTDEV:
+ oprintf(fp, "\n");
+ print_pointdev(shp, sp->smbstr_id, fp);
+ break;
case SMB_TYPE_SECURITY:
oprintf(fp, "\n");
print_hwsec(shp, fp);
@@ -1653,6 +1738,10 @@ print_struct(smbios_hdl_t *shp, const smbios_struct_t *sp, void *fp)
oprintf(fp, "\n");
print_obdevs_ext(shp, sp->smbstr_id, fp);
break;
+ case SMB_TYPE_PROCESSOR_INFO:
+ oprintf(fp, "\n");
+ print_processor_info(shp, sp->smbstr_id, fp);
+ break;
case SUN_OEM_EXT_PROCESSOR:
oprintf(fp, "\n");
print_extprocessor(shp, sp->smbstr_id, fp);
diff --git a/usr/src/cmd/sort/common/initialize.c b/usr/src/cmd/sort/common/initialize.c
index 376fac5b04..bb0089ac72 100644
--- a/usr/src/cmd/sort/common/initialize.c
+++ b/usr/src/cmd/sort/common/initialize.c
@@ -24,8 +24,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include "initialize.h"
#ifndef TEXT_DOMAIN
@@ -109,6 +107,18 @@ initialize_pre(sort_t *S)
set_signal_jmp();
}
+static int
+strcoll_cmp(void *s1, void *s2, flag_t f __unused)
+{
+ return (strcoll(s1, s2));
+}
+
+static int
+wcscoll_cmp(void *s1, void *s2, flag_t f __unused)
+{
+ return (wcscoll(s1, s2));
+}
+
void
initialize_post(sort_t *S)
{
@@ -124,7 +134,7 @@ initialize_post(sort_t *S)
field_initialize(S);
if (S->m_single_byte_locale) {
- S->m_compare_fn = (cmp_fcn_t)strcoll;
+ S->m_compare_fn = strcoll_cmp;
S->m_coll_convert = field_convert;
F = S->m_fields_head;
@@ -153,7 +163,7 @@ initialize_post(sort_t *S)
F = F->f_next;
}
} else {
- S->m_compare_fn = (cmp_fcn_t)wcscoll;
+ S->m_compare_fn = wcscoll_cmp;
S->m_coll_convert = field_convert_wide;
F = S->m_fields_head;
diff --git a/usr/src/cmd/truss/print.c b/usr/src/cmd/truss/print.c
index b0cf21d346..c679988bd5 100644
--- a/usr/src/cmd/truss/print.c
+++ b/usr/src/cmd/truss/print.c
@@ -21,7 +21,7 @@
/*
* Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2017, Joyent, Inc. All rights reserved.
+ * Copyright 2020 Joyent, Inc.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
@@ -1635,9 +1635,12 @@ prt_psflags(private_t *pri, secflagset_t val)
secflag_clear(&val, PROC_SEC_NOEXECSTACK);
}
- len = strlen(str);
- ptr = str + len;
- (void) snprintf(ptr, sizeof (str) - len, "|%#x", val);
+ if (val != 0) {
+ len = strlen(str);
+ ptr = str + len;
+ (void) snprintf(ptr, sizeof (str) - len, "|%#x", val);
+ }
+
outstring(pri, str + 1);
}
diff --git a/usr/src/cmd/vgrind/Makefile b/usr/src/cmd/vgrind/Makefile
index 1a1eb08217..b873dedafb 100644
--- a/usr/src/cmd/vgrind/Makefile
+++ b/usr/src/cmd/vgrind/Makefile
@@ -28,7 +28,7 @@
# These are the objects associated with the overall vgrind command.
#
VFONTEDPR= vfontedpr
-RETEST= retest
+RETEST= retest
MACROS= tmac.vgrind
LANGDEFS= vgrindefs
KSHPROG= vgrind
@@ -41,8 +41,8 @@ KSHPROG= vgrind
# installed. We omit it here, so that the NSE doesn't spend cycles
# on it when acquiring and reconciling.
#
-PROG= $(KSHPROG)
-LIBPROG= $(VFONTEDPR) $(LANGDEFS)
+PROG= $(KSHPROG)
+LIBPROG= $(VFONTEDPR) $(LANGDEFS)
TMACPROG= $(MACROS)
VFONTEDPROBJS= vfontedpr.o vgrindefs.o regexp.o
@@ -91,8 +91,8 @@ ROOTTMACPROG= $(TMACPROG:%=$(ROOTTMAC)/%)
#
# Conditional assignments pertinent to installation.
#
-$(ROOTLIB)/$(LANGDEFS) := FILEMODE= $(LIBFILEMODE)
-$(ROOTTMACPROG) := FILEMODE= 0644
+$(ROOTLIB)/$(LANGDEFS) := FILEMODE= $(LIBFILEMODE)
+$(ROOTTMACPROG) := FILEMODE= 0644
#
# The standard set of rules doesn't know about installing into
@@ -116,14 +116,14 @@ $(POFILE): $(POFILES) $(POFILE_KSH)
cat $(POFILES) $(POFILE_KSH) > $@
$(VFONTEDPR): $(VFONTEDPROBJS)
- $(CC) -o $@ $(VFONTEDPROBJS) $(LDFLAGS) $(LDLIBS)
+ $(LINK.c) -o $@ $(VFONTEDPROBJS) $(LDLIBS)
$(POST_PROCESS)
$(LANGDEFS): $(LANGDEFS).src
$(CP) $? $@
$(RETEST): $(RETESTOBJS)
- $(CC) -o $@ $(RETESTOBJS) $(LDFLAGS) $(LDLIBS)
+ $(LINK.c) -o $@ $(RETESTOBJS) $(LDLIBS)
$(POST_PROCESS)
#
@@ -131,7 +131,7 @@ $(RETEST): $(RETESTOBJS)
# matching rules see everything they should. (This is a safety net.)
#
# XXX: ROOTTMAC shouldn't appear as a dependent; it's here as a
-# bandaid(TM) until /usr/lib/tmac becomes a symlink to
+# bandaid(TM) until /usr/lib/tmac becomes a symlink to
# /usr/share/lib/tmac.
#
install: all $(ROOTTMAC) $(ROOTPROG) $(ROOTLIBPROG) $(ROOTTMACPROG)