diff options
Diffstat (limited to 'usr/src/cmd')
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) |
