Merge from head
This commit is contained in:
commit
cc3f4b9965
29
Makefile
29
Makefile
@ -139,11 +139,7 @@ _MAKEOBJDIRPREFIX!= /usr/bin/env -i PATH=${PATH} ${MAKE} \
|
||||
# Choices add to complexity though.
|
||||
# We cannot blindly use a make which may not be the one we want
|
||||
# so be exlicit - until all choice is removed.
|
||||
.if !defined(WITHOUT_BMAKE)
|
||||
WANT_MAKE= bmake
|
||||
.else
|
||||
WANT_MAKE= fmake
|
||||
.endif
|
||||
MYMAKE= ${MAKEOBJDIRPREFIX}${.CURDIR}/make.${MACHINE}/${WANT_MAKE}
|
||||
.if defined(.PARSEDIR)
|
||||
HAVE_MAKE= bmake
|
||||
@ -152,7 +148,7 @@ HAVE_MAKE= fmake
|
||||
.endif
|
||||
.if exists(${MYMAKE})
|
||||
SUB_MAKE:= ${MYMAKE} -m ${.CURDIR}/share/mk
|
||||
.elif ${WANT_MAKE} != ${HAVE_MAKE} || ${WANT_MAKE} != "bmake"
|
||||
.elif ${WANT_MAKE} != ${HAVE_MAKE}
|
||||
# It may not exist yet but we may cause it to.
|
||||
# In the case of fmake, upgrade_checks may cause a newer version to be built.
|
||||
SUB_MAKE= `test -x ${MYMAKE} && echo ${MYMAKE} || echo ${MAKE}` \
|
||||
@ -238,8 +234,17 @@ tinderbox toolchains kernel-toolchains: .MAKE
|
||||
${TGTS}:
|
||||
${_+_}@cd ${.CURDIR}; ${_MAKE} ${.TARGET}
|
||||
|
||||
# Set a reasonable default
|
||||
.MAIN: all
|
||||
# The historic default "all" target creates files which may cause stale
|
||||
# or (in the cross build case) unlinkable results. Fail with an error
|
||||
# when no target is given. The users can explicitly specify "all"
|
||||
# if they want the historic behavior.
|
||||
.MAIN: _guard
|
||||
|
||||
_guard:
|
||||
@echo
|
||||
@echo "Explicit target required (use \"all\" for historic behavior)"
|
||||
@echo
|
||||
@false
|
||||
|
||||
STARTTIME!= LC_ALL=C date
|
||||
CHECK_TIME!= find ${.CURDIR}/sys/sys/param.h -mtime -0s ; echo
|
||||
@ -342,7 +347,7 @@ make bmake: .PHONY
|
||||
${MMAKE} obj && \
|
||||
${MMAKE} depend && \
|
||||
${MMAKE} all && \
|
||||
${MMAKE} install DESTDIR=${MYMAKE:H} BINDIR=
|
||||
${MMAKE} install DESTDIR=${MYMAKE:H} BINDIR= NO_MAN=t
|
||||
|
||||
tinderbox toolchains kernel-toolchains: upgrade_checks
|
||||
|
||||
@ -449,9 +454,15 @@ universe_kernels: universe_kernconfs
|
||||
.if !defined(TARGET)
|
||||
TARGET!= uname -m
|
||||
.endif
|
||||
.if defined(MAKE_ALL_KERNELS)
|
||||
_THINNER=cat
|
||||
.else
|
||||
_THINNER=xargs grep -L "^.NO_UNIVERSE"
|
||||
.endif
|
||||
KERNCONFS!= cd ${KERNSRCDIR}/${TARGET}/conf && \
|
||||
find [A-Z0-9]*[A-Z0-9] -type f -maxdepth 0 \
|
||||
! -name DEFAULTS ! -name NOTES
|
||||
! -name DEFAULTS ! -name NOTES | \
|
||||
${_THINNER}
|
||||
universe_kernconfs:
|
||||
.for kernel in ${KERNCONFS}
|
||||
TARGET_ARCH_${kernel}!= cd ${KERNSRCDIR}/${TARGET}/conf && \
|
||||
|
@ -45,7 +45,7 @@
|
||||
.error "Both TARGET and TARGET_ARCH must be defined."
|
||||
.endif
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include "share/mk/src.opts.mk"
|
||||
.include <bsd.arch.inc.mk>
|
||||
.include <bsd.compiler.mk>
|
||||
|
||||
@ -1001,7 +1001,7 @@ buildkernel:
|
||||
cd ${KRNLCONFDIR}; \
|
||||
PATH=${TMPPATH} \
|
||||
config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
|
||||
-I ${KERNCONFDIR} ${KERNCONFDIR}/${_kernel}
|
||||
-I '${KERNCONFDIR}' '${KERNCONFDIR}/${_kernel}'
|
||||
.endif
|
||||
.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
|
||||
@echo
|
||||
@ -1480,6 +1480,7 @@ _prebuild_libs= ${_kerberos5_lib_libasn1} \
|
||||
${_secure_lib_libssh} ${_secure_lib_libssl}
|
||||
.if ${MK_GNUCXX} != "no" && ${MK_CXX} != "no"
|
||||
_prebuild_libs+= gnu/lib/libstdc++ gnu/lib/libsupc++
|
||||
gnu/lib/libstdc++__L: lib/msun__L
|
||||
.endif
|
||||
|
||||
.if defined(WITH_ATF) || ${MK_TESTS} != "no"
|
||||
@ -1807,7 +1808,7 @@ check-old: check-old-files check-old-libs check-old-dirs
|
||||
# showconfig - show build configuration.
|
||||
#
|
||||
showconfig:
|
||||
@${MAKE} -n -f bsd.own.mk -V dummy -dg1 2>&1 | grep ^MK_ | sort
|
||||
@${MAKE} -n -f src.opts.mk -V dummy -dg1 2>&1 | grep ^MK_ | sort
|
||||
|
||||
.if !empty(KRNLOBJDIR) && !empty(KERNCONF)
|
||||
DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/
|
||||
@ -1815,7 +1816,7 @@ DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/
|
||||
.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE)
|
||||
.if exists(${KERNCONFDIR}/${KERNCONF})
|
||||
FDT_DTS_FILE!= awk 'BEGIN {FS="="} /^makeoptions[[:space:]]+FDT_DTS_FILE/ {print $$2}' \
|
||||
${KERNCONFDIR}/${KERNCONF} ; echo
|
||||
'${KERNCONFDIR}/${KERNCONF}' ; echo
|
||||
.endif
|
||||
.endif
|
||||
|
||||
@ -1829,24 +1830,9 @@ DTBOUTPUTPATH= ${.CURDIR}
|
||||
# Build 'standalone' Device Tree Blob
|
||||
#
|
||||
builddtb:
|
||||
@if [ "${FDT_DTS_FILE}" = "" ]; then \
|
||||
echo "ERROR: FDT_DTS_FILE must be specified!"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [ ! -f ${.CURDIR}/sys/boot/fdt/dts/${TARGET}/${FDT_DTS_FILE} ]; then \
|
||||
echo "ERROR: Specified DTS file (${FDT_DTS_FILE}) does not \
|
||||
exist!"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [ "${DTBOUTPUTPATH}" = "${.CURDIR}" ]; then \
|
||||
echo "WARNING: DTB will be placed in the current working \
|
||||
directory"; \
|
||||
fi
|
||||
@PATH=${TMPPATH} \
|
||||
MACHINE=${TARGET} \
|
||||
@PATH=${TMPPATH} MACHINE=${TARGET} \
|
||||
${.CURDIR}/sys/tools/fdt/make_dtb.sh ${.CURDIR}/sys \
|
||||
${FDT_DTS_FILE} \
|
||||
${DTBOUTPUTPATH}/`basename ${FDT_DTS_FILE} .dts`
|
||||
"${FDT_DTS_FILE}" ${DTBOUTPUTPATH}
|
||||
|
||||
###############
|
||||
|
||||
|
@ -38,6 +38,14 @@
|
||||
# xargs -n1 | sort | uniq -d;
|
||||
# done
|
||||
|
||||
# 20140505: Bogusly installing src.opts.mk
|
||||
OLD_FILES+=usr/share/mk/src.opts.mk
|
||||
# 20140505: Reject PR kern/187551
|
||||
OLD_DIRS+=usr/tests/sbin/ifconfig
|
||||
OLD_FILES+=usr/tests/sbin/ifconfig/Kyuafile
|
||||
OLD_FILES+=usr/tests/sbin/ifconfig/fibs_test
|
||||
# 20140502: Removal of lindev(4)
|
||||
OLD_FILES+=usr/share/man/man4/lindev.4.gz
|
||||
# 20140314: AppleTalk
|
||||
OLD_DIRS+=usr/include/netatalk
|
||||
OLD_FILES+=usr/include/netatalk/aarp.h
|
||||
@ -49,7 +57,6 @@ OLD_FILES+=usr/include/netatalk/ddp_pcb.h
|
||||
OLD_FILES+=usr/include/netatalk/ddp_var.h
|
||||
OLD_FILES+=usr/include/netatalk/endian.h
|
||||
OLD_FILES+=usr/include/netatalk/phase2.h
|
||||
|
||||
# 20140314: Remove IPX/SPX
|
||||
OLD_LIBS+=lib/libipx.so.5
|
||||
OLD_FILES+=usr/include/netipx/ipx.h
|
||||
|
@ -1,7 +1,7 @@
|
||||
# From: @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= cat \
|
||||
chflags \
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile.inc 8.1 (Berkeley) 5/31/93
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
BINDIR?= /bin
|
||||
WARNS?= 6
|
||||
|
@ -6,7 +6,7 @@
|
||||
#
|
||||
# To profile, put -DPROF in DEFS and -pg in CFLAGS, and recompile.
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
TCSHDIR= ${.CURDIR}/../../contrib/tcsh
|
||||
.PATH: ${TCSHDIR}
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
PROG= date
|
||||
SRCS= date.c netdate.c vary.c
|
||||
|
@ -74,7 +74,7 @@ def(void)
|
||||
dd_out(0);
|
||||
|
||||
/*
|
||||
* Ddout copies the leftover output to the beginning of
|
||||
* dd_out copies the leftover output to the beginning of
|
||||
* the buffer and resets the output buffer. Reset the
|
||||
* input buffer to match it.
|
||||
*/
|
||||
|
74
bin/dd/dd.c
74
bin/dd/dd.c
@ -50,8 +50,8 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/conf.h>
|
||||
#include <sys/disklabel.h>
|
||||
#include <sys/filio.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dd.h"
|
||||
@ -76,6 +77,7 @@ STAT st; /* statistics */
|
||||
void (*cfunc)(void); /* conversion function */
|
||||
uintmax_t cpy_cnt; /* # of blocks to copy */
|
||||
static off_t pending = 0; /* pending seek if sparse */
|
||||
static off_t last_sp = 0; /* size of last added sparse block */
|
||||
u_int ddflags = 0; /* conversion options */
|
||||
size_t cbsz; /* conversion block size */
|
||||
uintmax_t files_cnt = 1; /* # of files to copy */
|
||||
@ -123,7 +125,6 @@ static void
|
||||
setup(void)
|
||||
{
|
||||
u_int cnt;
|
||||
struct timeval tv;
|
||||
|
||||
if (in.name == NULL) {
|
||||
in.name = "stdin";
|
||||
@ -173,6 +174,8 @@ setup(void)
|
||||
} else if ((in.db = malloc(MAX(in.dbsz, cbsz) + cbsz)) == NULL ||
|
||||
(out.db = malloc(out.dbsz + cbsz)) == NULL)
|
||||
err(1, "output buffer");
|
||||
|
||||
/* dbp is the first free position in each buffer. */
|
||||
in.dbp = in.db;
|
||||
out.dbp = out.db;
|
||||
|
||||
@ -240,8 +243,8 @@ setup(void)
|
||||
ctab = casetab;
|
||||
}
|
||||
|
||||
(void)gettimeofday(&tv, NULL);
|
||||
st.start = tv.tv_sec + tv.tv_usec * 1e-6;
|
||||
if (clock_gettime(CLOCK_MONOTONIC, &st.start))
|
||||
err(1, "clock_gettime");
|
||||
}
|
||||
|
||||
static void
|
||||
@ -434,8 +437,15 @@ dd_out(int force)
|
||||
* we play games with the buffer size, and it's usually a partial write.
|
||||
*/
|
||||
outp = out.db;
|
||||
|
||||
/*
|
||||
* If force, first try to write all pending data, else try to write
|
||||
* just one block. Subsequently always write data one full block at
|
||||
* a time at most.
|
||||
*/
|
||||
for (n = force ? out.dbcnt : out.dbsz;; n = out.dbsz) {
|
||||
for (cnt = n;; cnt -= nw) {
|
||||
cnt = n;
|
||||
do {
|
||||
sparse = 0;
|
||||
if (ddflags & C_SPARSE) {
|
||||
sparse = 1; /* Is buffer sparse? */
|
||||
@ -447,18 +457,24 @@ dd_out(int force)
|
||||
}
|
||||
if (sparse && !force) {
|
||||
pending += cnt;
|
||||
last_sp = cnt;
|
||||
nw = cnt;
|
||||
} else {
|
||||
if (pending != 0) {
|
||||
if (force)
|
||||
pending--;
|
||||
/* If forced to write, and we have no
|
||||
* data left, we need to write the last
|
||||
* sparse block explicitly.
|
||||
*/
|
||||
if (force && cnt == 0) {
|
||||
pending -= last_sp;
|
||||
assert(outp == out.db);
|
||||
memset(outp, 0, cnt);
|
||||
}
|
||||
if (lseek(out.fd, pending, SEEK_CUR) ==
|
||||
-1)
|
||||
err(2, "%s: seek error creating sparse file",
|
||||
out.name);
|
||||
if (force)
|
||||
write(out.fd, outp, 1);
|
||||
pending = 0;
|
||||
pending = last_sp = 0;
|
||||
}
|
||||
if (cnt)
|
||||
nw = write(out.fd, outp, cnt);
|
||||
@ -473,27 +489,29 @@ dd_out(int force)
|
||||
err(1, "%s", out.name);
|
||||
nw = 0;
|
||||
}
|
||||
|
||||
outp += nw;
|
||||
st.bytes += nw;
|
||||
if ((size_t)nw == n) {
|
||||
if (n != out.dbsz)
|
||||
++st.out_part;
|
||||
else
|
||||
++st.out_full;
|
||||
break;
|
||||
|
||||
if ((size_t)nw == n && n == out.dbsz)
|
||||
++st.out_full;
|
||||
else
|
||||
++st.out_part;
|
||||
|
||||
if ((size_t) nw != cnt) {
|
||||
if (out.flags & ISTAPE)
|
||||
errx(1, "%s: short write on tape device",
|
||||
out.name);
|
||||
if (out.flags & ISCHR && !warned) {
|
||||
warned = 1;
|
||||
warnx("%s: short write on character device",
|
||||
out.name);
|
||||
}
|
||||
}
|
||||
++st.out_part;
|
||||
if ((size_t)nw == cnt)
|
||||
break;
|
||||
if (out.flags & ISTAPE)
|
||||
errx(1, "%s: short write on tape device",
|
||||
out.name);
|
||||
if (out.flags & ISCHR && !warned) {
|
||||
warned = 1;
|
||||
warnx("%s: short write on character device",
|
||||
out.name);
|
||||
}
|
||||
}
|
||||
|
||||
cnt -= nw;
|
||||
} while (cnt != 0);
|
||||
|
||||
if ((out.dbcnt -= n) < out.dbsz)
|
||||
break;
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ typedef struct {
|
||||
/* XXX ssize_t? */
|
||||
size_t dbcnt; /* current buffer byte count */
|
||||
size_t dbrcnt; /* last read byte count */
|
||||
size_t dbsz; /* buffer size */
|
||||
size_t dbsz; /* block size */
|
||||
|
||||
#define ISCHR 0x01 /* character device (warn on short) */
|
||||
#define ISPIPE 0x02 /* pipe-like (see position.c) */
|
||||
@ -64,7 +64,7 @@ typedef struct {
|
||||
uintmax_t trunc; /* # of truncated records */
|
||||
uintmax_t swab; /* # of odd-length swab blocks */
|
||||
uintmax_t bytes; /* # of bytes written */
|
||||
double start; /* start time of dd */
|
||||
struct timespec start; /* start time of dd */
|
||||
} STAT;
|
||||
|
||||
/* Flags (in ddflags). */
|
||||
|
@ -40,14 +40,15 @@ static char sccsid[] = "@(#)misc.c 8.3 (Berkeley) 4/2/94";
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <inttypes.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dd.h"
|
||||
@ -56,16 +57,21 @@ __FBSDID("$FreeBSD$");
|
||||
void
|
||||
summary(void)
|
||||
{
|
||||
struct timeval tv;
|
||||
double secs;
|
||||
struct timespec end, ts_res;
|
||||
double secs, res;
|
||||
|
||||
if (ddflags & C_NOINFO)
|
||||
return;
|
||||
|
||||
(void)gettimeofday(&tv, NULL);
|
||||
secs = tv.tv_sec + tv.tv_usec * 1e-6 - st.start;
|
||||
if (secs < 1e-6)
|
||||
secs = 1e-6;
|
||||
if (clock_gettime(CLOCK_MONOTONIC, &end))
|
||||
err(1, "clock_gettime");
|
||||
if (clock_getres(CLOCK_MONOTONIC, &ts_res))
|
||||
err(1, "clock_getres");
|
||||
secs = (end.tv_sec - st.start.tv_sec) + \
|
||||
(end.tv_nsec - st.start.tv_nsec) * 1e-9;
|
||||
res = ts_res.tv_sec + ts_res.tv_nsec * 1e-9;
|
||||
if (secs < res)
|
||||
secs = res;
|
||||
(void)fprintf(stderr,
|
||||
"%ju+%ju records in\n%ju+%ju records out\n",
|
||||
st.in_full, st.in_part, st.out_full, st.out_part);
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
PROG= ed
|
||||
SRCS= buf.c cbc.c glbl.c io.c main.c re.c sub.c undo.c
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 6/2/93
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
PROG= ls
|
||||
SRCS= cmp.c ls.c print.c util.c
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 8.2 (Berkeley) 4/2/94
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
PROG= mv
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
# To install on versions prior to BSD 4.4 the following may have to be
|
||||
# defined with CFLAGS +=
|
||||
|
@ -1,7 +1,7 @@
|
||||
# $NetBSD: Makefile,v 1.1 2002/03/01 11:21:58 ad Exp $
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
PROG= pkill
|
||||
|
||||
|
@ -11,7 +11,7 @@ SRCS= fmt.c keyword.c nlist.c print.c ps.c
|
||||
# on large systems.
|
||||
#
|
||||
CFLAGS+=-DLAZY_PS
|
||||
DPADD= ${LIBM} ${LIBKVM}
|
||||
LDADD= -lm -lkvm
|
||||
DPADD= ${LIBM} ${LIBKVM} ${LIBJAIL}
|
||||
LDADD= -lm -lkvm -ljail
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
19
bin/ps/ps.1
19
bin/ps/ps.1
@ -29,7 +29,7 @@
|
||||
.\" @(#)ps.1 8.3 (Berkeley) 4/18/94
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd December 27, 2013
|
||||
.Dd May 2, 2014
|
||||
.Dt PS 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -40,6 +40,7 @@
|
||||
.Op Fl aCcdefHhjlmrSTuvwXxZ
|
||||
.Op Fl O Ar fmt | Fl o Ar fmt
|
||||
.Op Fl G Ar gid Ns Op , Ns Ar gid Ns Ar ...
|
||||
.Op Fl J Ar jid Ns Op , Ns Ar jid Ns Ar ...
|
||||
.Op Fl M Ar core
|
||||
.Op Fl N Ar system
|
||||
.Op Fl p Ar pid Ns Op , Ns Ar pid Ns Ar ...
|
||||
@ -62,7 +63,7 @@ will also display processes that do not have controlling terminals.
|
||||
.Pp
|
||||
A different set of processes can be selected for display by using any
|
||||
combination of the
|
||||
.Fl a , G , p , T , t ,
|
||||
.Fl a , G , J , p , T , t ,
|
||||
and
|
||||
.Fl U
|
||||
options.
|
||||
@ -152,6 +153,20 @@ Print information associated with the following keywords:
|
||||
.Cm user , pid , ppid , pgid , sid , jobc , state , tt , time ,
|
||||
and
|
||||
.Cm command .
|
||||
.It Fl J
|
||||
Display information about processes which match the specified jail IDs.
|
||||
This may be either the
|
||||
.Cm jid
|
||||
or
|
||||
.Cm name
|
||||
of the jail.
|
||||
Use
|
||||
.Fl J
|
||||
.Sy 0
|
||||
to display only host processes.
|
||||
This flag implies
|
||||
.Fl x
|
||||
by default.
|
||||
.It Fl L
|
||||
List the set of keywords available for the
|
||||
.Fl O
|
||||
|
46
bin/ps/ps.c
46
bin/ps/ps.c
@ -50,6 +50,7 @@ static char sccsid[] = "@(#)ps.c 8.4 (Berkeley) 4/2/94";
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/jail.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/user.h>
|
||||
#include <sys/stat.h>
|
||||
@ -62,6 +63,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <grp.h>
|
||||
#include <jail.h>
|
||||
#include <kvm.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
@ -124,6 +126,7 @@ struct listinfo {
|
||||
const char *lname;
|
||||
union {
|
||||
gid_t *gids;
|
||||
int *jids;
|
||||
pid_t *pids;
|
||||
dev_t *ttys;
|
||||
uid_t *uids;
|
||||
@ -132,6 +135,7 @@ struct listinfo {
|
||||
};
|
||||
|
||||
static int addelem_gid(struct listinfo *, const char *);
|
||||
static int addelem_jid(struct listinfo *, const char *);
|
||||
static int addelem_pid(struct listinfo *, const char *);
|
||||
static int addelem_tty(struct listinfo *, const char *);
|
||||
static int addelem_uid(struct listinfo *, const char *);
|
||||
@ -163,12 +167,12 @@ static char vfmt[] = "pid,state,time,sl,re,pagein,vsz,rss,lim,tsiz,"
|
||||
"%cpu,%mem,command";
|
||||
static char Zfmt[] = "label";
|
||||
|
||||
#define PS_ARGS "AaCcde" OPT_LAZY_f "G:gHhjLlM:mN:O:o:p:rSTt:U:uvwXxZ"
|
||||
#define PS_ARGS "AaCcde" OPT_LAZY_f "G:gHhjJ:LlM:mN:O:o:p:rSTt:U:uvwXxZ"
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct listinfo gidlist, pgrplist, pidlist;
|
||||
struct listinfo gidlist, jidlist, pgrplist, pidlist;
|
||||
struct listinfo ruidlist, sesslist, ttylist, uidlist;
|
||||
struct kinfo_proc *kp;
|
||||
KINFO *kinfo = NULL, *next_KINFO;
|
||||
@ -208,6 +212,7 @@ main(int argc, char *argv[])
|
||||
prtheader = showthreads = wflag = xkeep_implied = 0;
|
||||
xkeep = -1; /* Neither -x nor -X. */
|
||||
init_list(&gidlist, addelem_gid, sizeof(gid_t), "group");
|
||||
init_list(&jidlist, addelem_jid, sizeof(int), "jail id");
|
||||
init_list(&pgrplist, addelem_pid, sizeof(pid_t), "process group");
|
||||
init_list(&pidlist, addelem_pid, sizeof(pid_t), "process id");
|
||||
init_list(&ruidlist, addelem_uid, sizeof(uid_t), "ruser");
|
||||
@ -275,6 +280,11 @@ main(int argc, char *argv[])
|
||||
case 'h':
|
||||
prtheader = ws.ws_row > 5 ? ws.ws_row : 22;
|
||||
break;
|
||||
case 'J':
|
||||
add_list(&jidlist, optarg);
|
||||
xkeep_implied = 1;
|
||||
nselectors++;
|
||||
break;
|
||||
case 'j':
|
||||
parsefmt(jfmt, 0);
|
||||
_fmt = 1;
|
||||
@ -538,6 +548,11 @@ main(int argc, char *argv[])
|
||||
if (kp->ki_rgid == gidlist.l.gids[elem])
|
||||
goto keepit;
|
||||
}
|
||||
if (jidlist.count > 0) {
|
||||
for (elem = 0; elem < jidlist.count; elem++)
|
||||
if (kp->ki_jid == jidlist.l.jids[elem])
|
||||
goto keepit;
|
||||
}
|
||||
if (pgrplist.count > 0) {
|
||||
for (elem = 0; elem < pgrplist.count; elem++)
|
||||
if (kp->ki_pgid ==
|
||||
@ -666,6 +681,7 @@ main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
free_list(&gidlist);
|
||||
free_list(&jidlist);
|
||||
free_list(&pidlist);
|
||||
free_list(&pgrplist);
|
||||
free_list(&ruidlist);
|
||||
@ -726,6 +742,30 @@ addelem_gid(struct listinfo *inf, const char *elem)
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int
|
||||
addelem_jid(struct listinfo *inf, const char *elem)
|
||||
{
|
||||
int tempid;
|
||||
|
||||
if (*elem == '\0') {
|
||||
warnx("Invalid (zero-length) jail id");
|
||||
optfatal = 1;
|
||||
return (0); /* Do not add this value. */
|
||||
}
|
||||
|
||||
tempid = jail_getid(elem);
|
||||
if (tempid < 0) {
|
||||
warnx("Invalid %s: %s", inf->lname, elem);
|
||||
optfatal = 1;
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (inf->count >= inf->maxcount)
|
||||
expand_list(inf);
|
||||
inf->l.jids[(inf->count)++] = tempid;
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int
|
||||
addelem_pid(struct listinfo *inf, const char *elem)
|
||||
{
|
||||
@ -1373,7 +1413,7 @@ usage(void)
|
||||
|
||||
(void)fprintf(stderr, "%s\n%s\n%s\n%s\n",
|
||||
"usage: ps " SINGLE_OPTS " [-O fmt | -o fmt] [-G gid[,gid...]]",
|
||||
" [-M core] [-N system]",
|
||||
" [-J jid[,jid...]] [-M core] [-N system]",
|
||||
" [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]",
|
||||
" ps [-L]");
|
||||
exit(1);
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 8.4 (Berkeley) 5/5/95
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
PROG= sh
|
||||
INSTALLFLAGS= -S
|
||||
|
@ -80,6 +80,9 @@ FILES+= for2.0
|
||||
FILES+= for3.0
|
||||
FILES+= getopts1.0 getopts1.0.stdout
|
||||
FILES+= getopts2.0 getopts2.0.stdout
|
||||
FILES+= getopts3.0
|
||||
FILES+= getopts4.0
|
||||
FILES+= getopts5.0
|
||||
FILES+= hash1.0 hash1.0.stdout
|
||||
FILES+= hash2.0 hash2.0.stdout
|
||||
FILES+= hash3.0 hash3.0.stdout
|
||||
|
6
bin/sh/tests/builtins/getopts3.0
Normal file
6
bin/sh/tests/builtins/getopts3.0
Normal file
@ -0,0 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
shift $#
|
||||
getopts x opt
|
||||
r=$?
|
||||
[ "$r" != 0 ] && [ "$OPTIND" = 1 ]
|
10
bin/sh/tests/builtins/getopts4.0
Normal file
10
bin/sh/tests/builtins/getopts4.0
Normal file
@ -0,0 +1,10 @@
|
||||
# $FreeBSD$
|
||||
|
||||
set -- -x
|
||||
opt=not
|
||||
getopts x opt
|
||||
r1=$? OPTIND1=$OPTIND opt1=$opt
|
||||
getopts x opt
|
||||
r2=$? OPTIND2=$OPTIND
|
||||
[ "$r1" = 0 ] && [ "$OPTIND1" = 2 ] && [ "$opt1" = x ] && [ "$r2" != 0 ] &&
|
||||
[ "$OPTIND2" = 2 ]
|
10
bin/sh/tests/builtins/getopts5.0
Normal file
10
bin/sh/tests/builtins/getopts5.0
Normal file
@ -0,0 +1,10 @@
|
||||
# $FreeBSD$
|
||||
|
||||
set -- -x arg
|
||||
opt=not
|
||||
getopts x opt
|
||||
r1=$? OPTIND1=$OPTIND opt1=$opt
|
||||
getopts x opt
|
||||
r2=$? OPTIND2=$OPTIND
|
||||
[ "$r1" = 0 ] && [ "$OPTIND1" = 2 ] && [ "$opt1" = x ] && [ "$r2" != 0 ] &&
|
||||
[ "$OPTIND2" = 2 ]
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
PROG= test
|
||||
LINKS= ${BINDIR}/test ${BINDIR}/[
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= lib sbin usr.bin usr.sbin
|
||||
|
||||
|
@ -1,39 +1,78 @@
|
||||
/*-
|
||||
* Copyright (c) 2010 Pawel Jakub Dawidek <pjd@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _OPENSOLARIS_THREAD_POOL_H_
|
||||
#define _OPENSOLARIS_THREAD_POOL_H_
|
||||
#ifndef _THREAD_POOL_H_
|
||||
#define _THREAD_POOL_H_
|
||||
|
||||
typedef int tpool_t;
|
||||
#pragma ident "%Z%%M% %I% %E% SMI"
|
||||
|
||||
#define tpool_create(a, b, c, d) (0)
|
||||
#define tpool_dispatch(pool, func, arg) func(arg)
|
||||
#define tpool_wait(pool) do { } while (0)
|
||||
#define tpool_destroy(pool) do { } while (0)
|
||||
#include <sys/types.h>
|
||||
#include <thread.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#endif /* !_OPENSOLARIS_THREAD_POOL_H_ */
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct tpool tpool_t; /* opaque thread pool descriptor */
|
||||
|
||||
#if defined(__STDC__)
|
||||
|
||||
extern tpool_t *tpool_create(uint_t min_threads, uint_t max_threads,
|
||||
uint_t linger, pthread_attr_t *attr);
|
||||
extern int tpool_dispatch(tpool_t *tpool,
|
||||
void (*func)(void *), void *arg);
|
||||
extern void tpool_destroy(tpool_t *tpool);
|
||||
extern void tpool_abandon(tpool_t *tpool);
|
||||
extern void tpool_wait(tpool_t *tpool);
|
||||
extern void tpool_suspend(tpool_t *tpool);
|
||||
extern int tpool_suspended(tpool_t *tpool);
|
||||
extern void tpool_resume(tpool_t *tpool);
|
||||
extern int tpool_member(tpool_t *tpool);
|
||||
|
||||
#else /* Non ANSI */
|
||||
|
||||
extern tpool_t *tpool_create();
|
||||
extern int tpool_dispatch();
|
||||
extern void tpool_destroy();
|
||||
extern void tpool_abandon();
|
||||
extern void tpool_wait();
|
||||
extern void tpool_suspend();
|
||||
extern int tpool_suspended();
|
||||
extern void tpool_resume();
|
||||
extern int tpool_member();
|
||||
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _THREAD_POOL_H_ */
|
||||
|
430
cddl/compat/opensolaris/misc/thread_pool.c
Normal file
430
cddl/compat/opensolaris/misc/thread_pool.c
Normal file
@ -0,0 +1,430 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#pragma ident "%Z%%M% %I% %E% SMI"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include "thread_pool_impl.h"
|
||||
|
||||
typedef void (*_Voidfp)(void*); /* pointer to extern "C" function */
|
||||
|
||||
static void
|
||||
delete_pool(tpool_t *tpool)
|
||||
{
|
||||
tpool_job_t *job;
|
||||
|
||||
/*
|
||||
* There should be no pending jobs, but just in case...
|
||||
*/
|
||||
for (job = tpool->tp_head; job != NULL; job = tpool->tp_head) {
|
||||
tpool->tp_head = job->tpj_next;
|
||||
free(job);
|
||||
}
|
||||
(void) pthread_attr_destroy(&tpool->tp_attr);
|
||||
free(tpool);
|
||||
}
|
||||
|
||||
/*
|
||||
* Worker thread is terminating.
|
||||
*/
|
||||
static void
|
||||
worker_cleanup(void *arg)
|
||||
{
|
||||
tpool_t *tpool = arg;
|
||||
|
||||
if (--tpool->tp_current == 0 &&
|
||||
(tpool->tp_flags & (TP_DESTROY | TP_ABANDON))) {
|
||||
if (tpool->tp_flags & TP_ABANDON) {
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
delete_pool(tpool);
|
||||
return;
|
||||
}
|
||||
if (tpool->tp_flags & TP_DESTROY)
|
||||
(void) pthread_cond_broadcast(&tpool->tp_busycv);
|
||||
}
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
}
|
||||
|
||||
static void
|
||||
notify_waiters(tpool_t *tpool)
|
||||
{
|
||||
if (tpool->tp_head == NULL && tpool->tp_active == NULL) {
|
||||
tpool->tp_flags &= ~TP_WAIT;
|
||||
(void) pthread_cond_broadcast(&tpool->tp_waitcv);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Called by a worker thread on return from a tpool_dispatch()d job.
|
||||
*/
|
||||
static void
|
||||
job_cleanup(void *arg)
|
||||
{
|
||||
tpool_t *tpool = arg;
|
||||
pthread_t my_tid = pthread_self();
|
||||
tpool_active_t *activep;
|
||||
tpool_active_t **activepp;
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
/* CSTYLED */
|
||||
for (activepp = &tpool->tp_active;; activepp = &activep->tpa_next) {
|
||||
activep = *activepp;
|
||||
if (activep->tpa_tid == my_tid) {
|
||||
*activepp = activep->tpa_next;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (tpool->tp_flags & TP_WAIT)
|
||||
notify_waiters(tpool);
|
||||
}
|
||||
|
||||
static void *
|
||||
tpool_worker(void *arg)
|
||||
{
|
||||
tpool_t *tpool = (tpool_t *)arg;
|
||||
int elapsed;
|
||||
tpool_job_t *job;
|
||||
void (*func)(void *);
|
||||
tpool_active_t active;
|
||||
sigset_t maskset;
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
pthread_cleanup_push(worker_cleanup, tpool);
|
||||
|
||||
/*
|
||||
* This is the worker's main loop.
|
||||
* It will only be left if a timeout or an error has occured.
|
||||
*/
|
||||
active.tpa_tid = pthread_self();
|
||||
for (;;) {
|
||||
elapsed = 0;
|
||||
tpool->tp_idle++;
|
||||
if (tpool->tp_flags & TP_WAIT)
|
||||
notify_waiters(tpool);
|
||||
while ((tpool->tp_head == NULL ||
|
||||
(tpool->tp_flags & TP_SUSPEND)) &&
|
||||
!(tpool->tp_flags & (TP_DESTROY | TP_ABANDON))) {
|
||||
if (tpool->tp_current <= tpool->tp_minimum ||
|
||||
tpool->tp_linger == 0) {
|
||||
(void) pthread_cond_wait(&tpool->tp_workcv,
|
||||
&tpool->tp_mutex);
|
||||
} else {
|
||||
struct timespec timeout;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &timeout);
|
||||
timeout.tv_sec += tpool->tp_linger;
|
||||
if (pthread_cond_timedwait(&tpool->tp_workcv,
|
||||
&tpool->tp_mutex, &timeout) != 0) {
|
||||
elapsed = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
tpool->tp_idle--;
|
||||
if (tpool->tp_flags & TP_DESTROY)
|
||||
break;
|
||||
if (tpool->tp_flags & TP_ABANDON) {
|
||||
/* can't abandon a suspended pool */
|
||||
if (tpool->tp_flags & TP_SUSPEND) {
|
||||
tpool->tp_flags &= ~TP_SUSPEND;
|
||||
(void) pthread_cond_broadcast(&tpool->tp_workcv);
|
||||
}
|
||||
if (tpool->tp_head == NULL)
|
||||
break;
|
||||
}
|
||||
if ((job = tpool->tp_head) != NULL &&
|
||||
!(tpool->tp_flags & TP_SUSPEND)) {
|
||||
elapsed = 0;
|
||||
func = job->tpj_func;
|
||||
arg = job->tpj_arg;
|
||||
tpool->tp_head = job->tpj_next;
|
||||
if (job == tpool->tp_tail)
|
||||
tpool->tp_tail = NULL;
|
||||
tpool->tp_njobs--;
|
||||
active.tpa_next = tpool->tp_active;
|
||||
tpool->tp_active = &active;
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
pthread_cleanup_push(job_cleanup, tpool);
|
||||
free(job);
|
||||
/*
|
||||
* Call the specified function.
|
||||
*/
|
||||
func(arg);
|
||||
/*
|
||||
* We don't know what this thread has been doing,
|
||||
* so we reset its signal mask and cancellation
|
||||
* state back to the initial values.
|
||||
*/
|
||||
sigfillset(&maskset);
|
||||
(void) pthread_sigmask(SIG_SETMASK, &maskset, NULL);
|
||||
(void) pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,
|
||||
NULL);
|
||||
(void) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,
|
||||
NULL);
|
||||
pthread_cleanup_pop(1);
|
||||
}
|
||||
if (elapsed && tpool->tp_current > tpool->tp_minimum) {
|
||||
/*
|
||||
* We timed out and there is no work to be done
|
||||
* and the number of workers exceeds the minimum.
|
||||
* Exit now to reduce the size of the pool.
|
||||
*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
pthread_cleanup_pop(1);
|
||||
return (arg);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a worker thread, with all signals blocked.
|
||||
*/
|
||||
static int
|
||||
create_worker(tpool_t *tpool)
|
||||
{
|
||||
sigset_t maskset, oset;
|
||||
pthread_t thread;
|
||||
int error;
|
||||
|
||||
sigfillset(&maskset);
|
||||
(void) pthread_sigmask(SIG_SETMASK, &maskset, &oset);
|
||||
error = pthread_create(&thread, &tpool->tp_attr, tpool_worker, tpool);
|
||||
(void) pthread_sigmask(SIG_SETMASK, &oset, NULL);
|
||||
return (error);
|
||||
}
|
||||
|
||||
tpool_t *
|
||||
tpool_create(uint_t min_threads, uint_t max_threads, uint_t linger,
|
||||
pthread_attr_t *attr)
|
||||
{
|
||||
tpool_t *tpool;
|
||||
int error;
|
||||
|
||||
if (min_threads > max_threads || max_threads < 1) {
|
||||
errno = EINVAL;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
tpool = malloc(sizeof (*tpool));
|
||||
if (tpool == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (NULL);
|
||||
}
|
||||
bzero(tpool, sizeof(*tpool));
|
||||
(void) pthread_mutex_init(&tpool->tp_mutex, NULL);
|
||||
(void) pthread_cond_init(&tpool->tp_busycv, NULL);
|
||||
(void) pthread_cond_init(&tpool->tp_workcv, NULL);
|
||||
(void) pthread_cond_init(&tpool->tp_waitcv, NULL);
|
||||
tpool->tp_minimum = min_threads;
|
||||
tpool->tp_maximum = max_threads;
|
||||
tpool->tp_linger = linger;
|
||||
|
||||
/* make all pool threads be detached daemon threads */
|
||||
(void) pthread_attr_init(&tpool->tp_attr);
|
||||
(void) pthread_attr_setdetachstate(&tpool->tp_attr,
|
||||
PTHREAD_CREATE_DETACHED);
|
||||
|
||||
return (tpool);
|
||||
}
|
||||
|
||||
/*
|
||||
* Dispatch a work request to the thread pool.
|
||||
* If there are idle workers, awaken one.
|
||||
* Else, if the maximum number of workers has
|
||||
* not been reached, spawn a new worker thread.
|
||||
* Else just return with the job added to the queue.
|
||||
*/
|
||||
int
|
||||
tpool_dispatch(tpool_t *tpool, void (*func)(void *), void *arg)
|
||||
{
|
||||
tpool_job_t *job;
|
||||
|
||||
if ((job = malloc(sizeof (*job))) == NULL)
|
||||
return (-1);
|
||||
bzero(job, sizeof(*job));
|
||||
job->tpj_next = NULL;
|
||||
job->tpj_func = func;
|
||||
job->tpj_arg = arg;
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
|
||||
if (tpool->tp_head == NULL)
|
||||
tpool->tp_head = job;
|
||||
else
|
||||
tpool->tp_tail->tpj_next = job;
|
||||
tpool->tp_tail = job;
|
||||
tpool->tp_njobs++;
|
||||
|
||||
if (!(tpool->tp_flags & TP_SUSPEND)) {
|
||||
if (tpool->tp_idle > 0)
|
||||
(void) pthread_cond_signal(&tpool->tp_workcv);
|
||||
else if (tpool->tp_current < tpool->tp_maximum &&
|
||||
create_worker(tpool) == 0)
|
||||
tpool->tp_current++;
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Assumes: by the time tpool_destroy() is called no one will use this
|
||||
* thread pool in any way and no one will try to dispatch entries to it.
|
||||
* Calling tpool_destroy() from a job in the pool will cause deadlock.
|
||||
*/
|
||||
void
|
||||
tpool_destroy(tpool_t *tpool)
|
||||
{
|
||||
tpool_active_t *activep;
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
pthread_cleanup_push((_Voidfp)pthread_mutex_unlock, &tpool->tp_mutex);
|
||||
|
||||
/* mark the pool as being destroyed; wakeup idle workers */
|
||||
tpool->tp_flags |= TP_DESTROY;
|
||||
tpool->tp_flags &= ~TP_SUSPEND;
|
||||
(void) pthread_cond_broadcast(&tpool->tp_workcv);
|
||||
|
||||
/* cancel all active workers */
|
||||
for (activep = tpool->tp_active; activep; activep = activep->tpa_next)
|
||||
(void) pthread_cancel(activep->tpa_tid);
|
||||
|
||||
/* wait for all active workers to finish */
|
||||
while (tpool->tp_active != NULL) {
|
||||
tpool->tp_flags |= TP_WAIT;
|
||||
(void) pthread_cond_wait(&tpool->tp_waitcv, &tpool->tp_mutex);
|
||||
}
|
||||
|
||||
/* the last worker to terminate will wake us up */
|
||||
while (tpool->tp_current != 0)
|
||||
(void) pthread_cond_wait(&tpool->tp_busycv, &tpool->tp_mutex);
|
||||
|
||||
pthread_cleanup_pop(1); /* pthread_mutex_unlock(&tpool->tp_mutex); */
|
||||
delete_pool(tpool);
|
||||
}
|
||||
|
||||
/*
|
||||
* Like tpool_destroy(), but don't cancel workers or wait for them to finish.
|
||||
* The last worker to terminate will delete the pool.
|
||||
*/
|
||||
void
|
||||
tpool_abandon(tpool_t *tpool)
|
||||
{
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
if (tpool->tp_current == 0) {
|
||||
/* no workers, just delete the pool */
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
delete_pool(tpool);
|
||||
} else {
|
||||
/* wake up all workers, last one will delete the pool */
|
||||
tpool->tp_flags |= TP_ABANDON;
|
||||
tpool->tp_flags &= ~TP_SUSPEND;
|
||||
(void) pthread_cond_broadcast(&tpool->tp_workcv);
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Wait for all jobs to complete.
|
||||
* Calling tpool_wait() from a job in the pool will cause deadlock.
|
||||
*/
|
||||
void
|
||||
tpool_wait(tpool_t *tpool)
|
||||
{
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
pthread_cleanup_push((_Voidfp)pthread_mutex_unlock, &tpool->tp_mutex);
|
||||
while (tpool->tp_head != NULL || tpool->tp_active != NULL) {
|
||||
tpool->tp_flags |= TP_WAIT;
|
||||
(void) pthread_cond_wait(&tpool->tp_waitcv, &tpool->tp_mutex);
|
||||
}
|
||||
pthread_cleanup_pop(1); /* pthread_mutex_unlock(&tpool->tp_mutex); */
|
||||
}
|
||||
|
||||
void
|
||||
tpool_suspend(tpool_t *tpool)
|
||||
{
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
tpool->tp_flags |= TP_SUSPEND;
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
}
|
||||
|
||||
int
|
||||
tpool_suspended(tpool_t *tpool)
|
||||
{
|
||||
int suspended;
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
suspended = (tpool->tp_flags & TP_SUSPEND) != 0;
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
|
||||
return (suspended);
|
||||
}
|
||||
|
||||
void
|
||||
tpool_resume(tpool_t *tpool)
|
||||
{
|
||||
int excess;
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
if (!(tpool->tp_flags & TP_SUSPEND)) {
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
return;
|
||||
}
|
||||
tpool->tp_flags &= ~TP_SUSPEND;
|
||||
(void) pthread_cond_broadcast(&tpool->tp_workcv);
|
||||
excess = tpool->tp_njobs - tpool->tp_idle;
|
||||
while (excess-- > 0 && tpool->tp_current < tpool->tp_maximum) {
|
||||
if (create_worker(tpool) != 0)
|
||||
break; /* pthread_create() failed */
|
||||
tpool->tp_current++;
|
||||
}
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
}
|
||||
|
||||
int
|
||||
tpool_member(tpool_t *tpool)
|
||||
{
|
||||
pthread_t my_tid = pthread_self();
|
||||
tpool_active_t *activep;
|
||||
|
||||
pthread_mutex_lock(&tpool->tp_mutex);
|
||||
for (activep = tpool->tp_active; activep; activep = activep->tpa_next) {
|
||||
if (activep->tpa_tid == my_tid) {
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&tpool->tp_mutex);
|
||||
return (0);
|
||||
}
|
99
cddl/compat/opensolaris/misc/thread_pool_impl.h
Normal file
99
cddl/compat/opensolaris/misc/thread_pool_impl.h
Normal file
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _THREAD_POOL_IMPL_H
|
||||
#define _THREAD_POOL_IMPL_H
|
||||
|
||||
#pragma ident "%Z%%M% %I% %E% SMI"
|
||||
|
||||
#include <thread_pool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Thread pool implementation definitions.
|
||||
* See <thread_pool.h> for interface declarations.
|
||||
*/
|
||||
|
||||
/*
|
||||
* FIFO queued job
|
||||
*/
|
||||
typedef struct tpool_job tpool_job_t;
|
||||
struct tpool_job {
|
||||
tpool_job_t *tpj_next; /* list of jobs */
|
||||
void (*tpj_func)(void *); /* function to call */
|
||||
void *tpj_arg; /* its argument */
|
||||
};
|
||||
|
||||
/*
|
||||
* List of active threads, linked through their stacks.
|
||||
*/
|
||||
typedef struct tpool_active tpool_active_t;
|
||||
struct tpool_active {
|
||||
tpool_active_t *tpa_next; /* list of active threads */
|
||||
pthread_t tpa_tid; /* active thread id */
|
||||
};
|
||||
|
||||
/*
|
||||
* The thread pool.
|
||||
*/
|
||||
struct tpool {
|
||||
tpool_t *tp_forw; /* circular list of all thread pools */
|
||||
tpool_t *tp_back;
|
||||
mutex_t tp_mutex; /* protects the pool data */
|
||||
cond_t tp_busycv; /* synchronization in tpool_dispatch */
|
||||
cond_t tp_workcv; /* synchronization with workers */
|
||||
cond_t tp_waitcv; /* synchronization in tpool_wait() */
|
||||
tpool_active_t *tp_active; /* threads performing work */
|
||||
tpool_job_t *tp_head; /* FIFO job queue */
|
||||
tpool_job_t *tp_tail;
|
||||
pthread_attr_t tp_attr; /* attributes of the workers */
|
||||
int tp_flags; /* see below */
|
||||
uint_t tp_linger; /* seconds before idle workers exit */
|
||||
int tp_njobs; /* number of jobs in job queue */
|
||||
int tp_minimum; /* minimum number of worker threads */
|
||||
int tp_maximum; /* maximum number of worker threads */
|
||||
int tp_current; /* current number of worker threads */
|
||||
int tp_idle; /* number of idle workers */
|
||||
};
|
||||
|
||||
/* tp_flags */
|
||||
#define TP_WAIT 0x01 /* waiting in tpool_wait() */
|
||||
#define TP_SUSPEND 0x02 /* pool is being suspended */
|
||||
#define TP_DESTROY 0x04 /* pool is being destroyed */
|
||||
#define TP_ABANDON 0x08 /* pool is abandoned (auto-destroy) */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _THREAD_POOL_IMPL_H */
|
@ -1138,7 +1138,7 @@ dt_vopen(int version, int flags, int *errp,
|
||||
#if defined(sun)
|
||||
dtp->dt_prcmode = DT_PROC_STOP_PREINIT;
|
||||
#else
|
||||
dtp->dt_prcmode = DT_PROC_STOP_MAIN;
|
||||
dtp->dt_prcmode = DT_PROC_STOP_POSTINIT;
|
||||
#endif
|
||||
dtp->dt_linkmode = DT_LINK_KERNEL;
|
||||
dtp->dt_linktype = DT_LTYP_ELF;
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= ${_drti} \
|
||||
libavl \
|
||||
|
@ -54,7 +54,6 @@
|
||||
#define Psetbkpt proc_bkptset
|
||||
#define Psetflags proc_setflags
|
||||
#define Pstate proc_state
|
||||
#define Pstate proc_state
|
||||
#define Psymbol_iter_by_addr proc_iter_symbyaddr
|
||||
#define Punsetflags proc_clearflags
|
||||
#define Pupdate_maps(p) do { } while (0)
|
||||
|
@ -14,6 +14,7 @@ SRCS= deviceid.c \
|
||||
fsshare.c \
|
||||
mkdirp.c \
|
||||
mnttab.c \
|
||||
thread_pool.c \
|
||||
zmount.c \
|
||||
zone.c
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= ${_tests} ${_zfs} ${_zpool}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= \
|
||||
ctfconvert \
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= ${_dtrace} \
|
||||
${_dtruss} \
|
||||
|
@ -14408,7 +14408,7 @@ ix86_local_alignment (tree type, int align)
|
||||
if (AGGREGATE_TYPE_P (type)
|
||||
&& TYPE_SIZE (type)
|
||||
&& TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
|
||||
&& (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 16
|
||||
&& (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 128
|
||||
|| TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 128)
|
||||
return 128;
|
||||
}
|
||||
|
@ -185,7 +185,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD)
|
||||
template <typename _InputIterator>
|
||||
multimap(_InputIterator __first, _InputIterator __last)
|
||||
: _M_t()
|
||||
{ _M_t._M_insert_unique(__first, __last); }
|
||||
{ _M_t._M_insert_equal(__first, __last); }
|
||||
|
||||
/**
|
||||
* @brief Builds a %multimap from a range.
|
||||
|
@ -549,8 +549,6 @@ def finstrument_functions : Flag<["-"], "finstrument-functions">, Group<f_Group>
|
||||
def fkeep_inline_functions : Flag<["-"], "fkeep-inline-functions">, Group<clang_ignored_f_Group>;
|
||||
def flat__namespace : Flag<["-"], "flat_namespace">;
|
||||
def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">, Group<f_Group>;
|
||||
def flimit_debug_info : Flag<["-"], "flimit-debug-info">, Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Limit debug information produced to reduce size of debug binary">;
|
||||
def flimited_precision_EQ : Joined<["-"], "flimited-precision=">, Group<f_Group>;
|
||||
def flto : Flag<["-"], "flto">, Group<f_Group>;
|
||||
def fno_lto : Flag<["-"], "fno-lto">, Group<f_Group>;
|
||||
@ -645,8 +643,6 @@ def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, Flags<[CC1Opti
|
||||
def fno_keep_inline_functions : Flag<["-"], "fno-keep-inline-functions">, Group<clang_ignored_f_Group>;
|
||||
def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>,
|
||||
HelpText<"Disallow implicit conversions between vectors with a different number of elements or different element types">, Flags<[CC1Option]>;
|
||||
def fno_limit_debug_info : Flag<["-"], "fno-limit-debug-info">, Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Do not limit debug information produced to reduce size of debug binary">;
|
||||
def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>,
|
||||
Flags<[CC1Option]>, HelpText<"Disallow merging of constants">;
|
||||
def fno_modules : Flag <["-"], "fno-modules">, Group<f_Group>,
|
||||
@ -774,6 +770,12 @@ def fno_signed_char : Flag<["-"], "fno-signed-char">, Flags<[CC1Option]>,
|
||||
def fsplit_stack : Flag<["-"], "fsplit-stack">, Group<f_Group>;
|
||||
def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group<f_Group>;
|
||||
def fstack_protector : Flag<["-"], "fstack-protector">, Group<f_Group>;
|
||||
def fstandalone_debug : Flag<["-"], "fstandalone-debug">, Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Emit full debug info for all types used by the program">;
|
||||
def fno_standalone_debug : Flag<["-"], "fno-standalone-debug">, Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Limit debug information produced to reduce size of debug binary">;
|
||||
def flimit_debug_info : Flag<["-"], "flimit-debug-info">, Alias<fno_standalone_debug>;
|
||||
def fno_limit_debug_info : Flag<["-"], "fno-limit-debug-info">, Alias<fstandalone_debug>;
|
||||
def fstrict_aliasing : Flag<["-"], "fstrict-aliasing">, Group<f_Group>;
|
||||
def fstrict_enums : Flag<["-"], "fstrict-enums">, Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Enable optimizations based on the strict definition of an enum's "
|
||||
|
@ -50,12 +50,20 @@ class CodeGenOptions : public CodeGenOptionsBase {
|
||||
};
|
||||
|
||||
enum DebugInfoKind {
|
||||
NoDebugInfo, // Don't generate debug info.
|
||||
DebugLineTablesOnly, // Emit only debug info necessary for generating
|
||||
// line number tables (-gline-tables-only).
|
||||
LimitedDebugInfo, // Limit generated debug info to reduce size
|
||||
// (-flimit-debug-info).
|
||||
FullDebugInfo // Generate complete debug info.
|
||||
NoDebugInfo, /// Don't generate debug info.
|
||||
|
||||
DebugLineTablesOnly, /// Emit only debug info necessary for generating
|
||||
/// line number tables (-gline-tables-only).
|
||||
|
||||
LimitedDebugInfo, /// Limit generated debug info to reduce size
|
||||
/// (-fno-standalone-debug). This emits
|
||||
/// forward decls for types that could be
|
||||
/// replaced with forward decls in the source
|
||||
/// code. For dynamic C++ classes type info
|
||||
/// is only emitted int the module that
|
||||
/// contains the classe's vtable.
|
||||
|
||||
FullDebugInfo /// Generate complete debug info.
|
||||
};
|
||||
|
||||
enum TLSModel {
|
||||
|
@ -1456,13 +1456,13 @@ llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty) {
|
||||
// declaration. The completeType, completeRequiredType, and completeClassData
|
||||
// callbacks will handle promoting the declaration to a definition.
|
||||
if (T ||
|
||||
// Under -flimit-debug-info:
|
||||
(DebugKind <= CodeGenOptions::LimitedDebugInfo &&
|
||||
// Under -flimit-debug-info, emit only a declaration unless the type is
|
||||
// required to be complete.
|
||||
!RD->isCompleteDefinitionRequired() && CGM.getLangOpts().CPlusPlus) ||
|
||||
// If the class is dynamic, only emit a declaration. A definition will be
|
||||
// emitted whenever the vtable is emitted.
|
||||
(CXXDecl && CXXDecl->hasDefinition() && CXXDecl->isDynamicClass()) || T) {
|
||||
// Emit only a forward declaration unless the type is required.
|
||||
((!RD->isCompleteDefinitionRequired() && CGM.getLangOpts().CPlusPlus) ||
|
||||
// If the class is dynamic, only emit a declaration. A definition will be
|
||||
// emitted whenever the vtable is emitted.
|
||||
(CXXDecl && CXXDecl->hasDefinition() && CXXDecl->isDynamicClass())))) {
|
||||
llvm::DIDescriptor FDContext =
|
||||
getContextDescriptor(cast<Decl>(RD->getDeclContext()));
|
||||
if (!T)
|
||||
|
@ -3002,8 +3002,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fformat_extensions);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_flimit_debug_info);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fno_limit_debug_info);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fstandalone_debug);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fno_standalone_debug);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fno_operator_names);
|
||||
// AltiVec language extensions aren't relevant for assembling.
|
||||
if (!isa<PreprocessJobAction>(JA) ||
|
||||
|
@ -295,7 +295,8 @@ static void ParseCommentArgs(CommentOptions &Opts, ArgList &Args) {
|
||||
}
|
||||
|
||||
static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||
DiagnosticsEngine &Diags) {
|
||||
DiagnosticsEngine &Diags,
|
||||
const TargetOptions &TargetOpts) {
|
||||
using namespace options;
|
||||
bool Success = true;
|
||||
|
||||
@ -322,10 +323,16 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||
Opts.setDebugInfo(CodeGenOptions::DebugLineTablesOnly);
|
||||
} else if (Args.hasArg(OPT_g_Flag) || Args.hasArg(OPT_gdwarf_2) ||
|
||||
Args.hasArg(OPT_gdwarf_3) || Args.hasArg(OPT_gdwarf_4)) {
|
||||
if (Args.hasFlag(OPT_flimit_debug_info, OPT_fno_limit_debug_info, true))
|
||||
Opts.setDebugInfo(CodeGenOptions::LimitedDebugInfo);
|
||||
else
|
||||
bool Default = false;
|
||||
// Until dtrace (via CTF) can deal with distributed debug info,
|
||||
// Darwin defaults to standalone/full debug info.
|
||||
if (llvm::Triple(TargetOpts.Triple).isOSDarwin())
|
||||
Default = true;
|
||||
|
||||
if (Args.hasFlag(OPT_fstandalone_debug, OPT_fno_standalone_debug, Default))
|
||||
Opts.setDebugInfo(CodeGenOptions::FullDebugInfo);
|
||||
else
|
||||
Opts.setDebugInfo(CodeGenOptions::LimitedDebugInfo);
|
||||
}
|
||||
Opts.DebugColumnInfo = Args.hasArg(OPT_dwarf_column_info);
|
||||
Opts.SplitDwarfFile = Args.getLastArgValue(OPT_split_dwarf_file);
|
||||
@ -1657,8 +1664,9 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
|
||||
ParseFileSystemArgs(Res.getFileSystemOpts(), *Args);
|
||||
// FIXME: We shouldn't have to pass the DashX option around here
|
||||
InputKind DashX = ParseFrontendArgs(Res.getFrontendOpts(), *Args, Diags);
|
||||
Success = ParseCodeGenArgs(Res.getCodeGenOpts(), *Args, DashX, Diags)
|
||||
&& Success;
|
||||
ParseTargetArgs(Res.getTargetOpts(), *Args);
|
||||
Success = ParseCodeGenArgs(Res.getCodeGenOpts(), *Args, DashX, Diags,
|
||||
Res.getTargetOpts()) && Success;
|
||||
ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), *Args);
|
||||
if (DashX != IK_AST && DashX != IK_LLVM_IR) {
|
||||
ParseLangArgs(*Res.getLangOpts(), *Args, DashX, Diags);
|
||||
@ -1673,8 +1681,6 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
|
||||
ParsePreprocessorArgs(Res.getPreprocessorOpts(), *Args, FileMgr, Diags);
|
||||
ParsePreprocessorOutputArgs(Res.getPreprocessorOutputOpts(), *Args,
|
||||
Res.getFrontendOpts().ProgramAction);
|
||||
ParseTargetArgs(Res.getTargetOpts(), *Args);
|
||||
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
@ -1920,7 +1920,6 @@ mon_getlist_0(
|
||||
printf("wants monitor 0 list\n");
|
||||
#endif
|
||||
if (!mon_enabled) {
|
||||
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
|
||||
return;
|
||||
}
|
||||
im = (struct info_monitor *)prepare_pkt(srcadr, inter, inpkt,
|
||||
@ -1965,7 +1964,6 @@ mon_getlist_1(
|
||||
extern int mon_enabled;
|
||||
|
||||
if (!mon_enabled) {
|
||||
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
|
||||
return;
|
||||
}
|
||||
im = (struct info_monitor_1 *)prepare_pkt(srcadr, inter, inpkt,
|
||||
|
@ -74,6 +74,7 @@ e - list errors generated by last \"kill\" or \"renice\" command\n\
|
||||
H - toggle the displaying of threads\n\
|
||||
i or I - toggle the displaying of idle processes\n\
|
||||
j - toggle the displaying of jail ID\n\
|
||||
J - display processes for only one jail (+ selects all jails)\n\
|
||||
k - kill processes; send a signal to a list of processes\n\
|
||||
m - toggle the display between 'cpu' and 'io' modes\n\
|
||||
n or # - change number of processes to display\n", stdout);
|
||||
|
@ -66,6 +66,7 @@ struct process_select
|
||||
int thread; /* show threads */
|
||||
int uid; /* only this uid (unless uid == -1) */
|
||||
int wcpu; /* show weighted cpu */
|
||||
int jid; /* only this jid (unless jid == -1) */
|
||||
int jail; /* show jail ID */
|
||||
int kidle; /* show per-CPU idle threads */
|
||||
char *command; /* only this command (unless == NULL) */
|
||||
|
@ -20,6 +20,8 @@ top \- display and update information about the top cpu processes
|
||||
] [
|
||||
.BI \-s time
|
||||
] [
|
||||
.BI \-J jail
|
||||
] [
|
||||
.BI \-U username
|
||||
] [
|
||||
.I number
|
||||
@ -171,6 +173,21 @@ values are \*(lqcpu\*(rq, \*(lqsize\*(rq, \*(lqres\*(rq, and \*(lqtime\*(rq,
|
||||
but may vary on different operating systems. Note that
|
||||
not all operating systems support this option.
|
||||
.TP
|
||||
.BI \-J jail
|
||||
Show only those processes owned by
|
||||
.IR jail .
|
||||
This may be either the
|
||||
.B jid
|
||||
or
|
||||
.B name
|
||||
of the jail.
|
||||
Use
|
||||
.B 0
|
||||
to limit to host processes.
|
||||
Using this option implies the
|
||||
.B \-j
|
||||
flag.
|
||||
.PP
|
||||
.BI \-U username
|
||||
Show only those processes owned by
|
||||
.IR username .
|
||||
@ -315,6 +332,12 @@ Toggle the display of
|
||||
.IR jail (8)
|
||||
ID.
|
||||
.TP
|
||||
.B J
|
||||
Display only processes owned by a specific jail (prompt for jail).
|
||||
If the jail specified is simply \*(lq+\*(rq, then processes belonging
|
||||
to all jails and the host will be displayed.
|
||||
This will also enable the display of JID.
|
||||
.TP
|
||||
.B P
|
||||
Toggle the display of per-CPU statistics.
|
||||
.TP
|
||||
|
@ -38,7 +38,9 @@ char *copyright =
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/jail.h>
|
||||
#include <sys/time.h>
|
||||
#include <jail.h>
|
||||
|
||||
/* includes specific to top */
|
||||
#include "display.h" /* interface to display package */
|
||||
@ -198,9 +200,9 @@ char *argv[];
|
||||
fd_set readfds;
|
||||
|
||||
#ifdef ORDER
|
||||
static char command_chars[] = "\f qh?en#sdkriIutHmSCajzPo";
|
||||
static char command_chars[] = "\f qh?en#sdkriIutHmSCajzPJo";
|
||||
#else
|
||||
static char command_chars[] = "\f qh?en#sdkriIutHmSCajzP";
|
||||
static char command_chars[] = "\f qh?en#sdkriIutHmSCajzPJ";
|
||||
#endif
|
||||
/* these defines enumerate the "strchr"s of the commands in command_chars */
|
||||
#define CMD_redraw 0
|
||||
@ -228,8 +230,9 @@ char *argv[];
|
||||
#define CMD_jidtog 21
|
||||
#define CMD_kidletog 22
|
||||
#define CMD_pcputog 23
|
||||
#define CMD_jail 24
|
||||
#ifdef ORDER
|
||||
#define CMD_order 24
|
||||
#define CMD_order 25
|
||||
#endif
|
||||
|
||||
/* set the buffer for stdout */
|
||||
@ -261,6 +264,7 @@ char *argv[];
|
||||
ps.uid = -1;
|
||||
ps.thread = No;
|
||||
ps.wcpu = 1;
|
||||
ps.jid = -1;
|
||||
ps.jail = No;
|
||||
ps.kidle = Yes;
|
||||
ps.command = NULL;
|
||||
@ -288,7 +292,7 @@ char *argv[];
|
||||
optind = 1;
|
||||
}
|
||||
|
||||
while ((i = getopt(ac, av, "CSIHPabijnquvzs:d:U:m:o:t")) != EOF)
|
||||
while ((i = getopt(ac, av, "CSIHPabijJ:nquvzs:d:U:m:o:t")) != EOF)
|
||||
{
|
||||
switch(i)
|
||||
{
|
||||
@ -413,6 +417,15 @@ char *argv[];
|
||||
ps.jail = !ps.jail;
|
||||
break;
|
||||
|
||||
case 'J': /* display only jail's processes */
|
||||
if ((ps.jid = jail_getid(optarg)) == -1)
|
||||
{
|
||||
fprintf(stderr, "%s: unknown jail\n", optarg);
|
||||
exit(1);
|
||||
}
|
||||
ps.jail = 1;
|
||||
break;
|
||||
|
||||
case 'P':
|
||||
pcpu_stats = !pcpu_stats;
|
||||
break;
|
||||
@ -425,7 +438,7 @@ char *argv[];
|
||||
fprintf(stderr,
|
||||
"Top version %s\n"
|
||||
"Usage: %s [-abCHIijnPqStuvz] [-d count] [-m io | cpu] [-o field] [-s time]\n"
|
||||
" [-U username] [number]\n",
|
||||
" [-J jail] [-U username] [number]\n",
|
||||
version_string(), myname);
|
||||
exit(1);
|
||||
}
|
||||
@ -994,7 +1007,7 @@ char *argv[];
|
||||
|
||||
case CMD_user:
|
||||
new_message(MT_standout,
|
||||
"Username to show: ");
|
||||
"Username to show (+ for all): ");
|
||||
if (readline(tempbuf2, sizeof(tempbuf2), No) > 0)
|
||||
{
|
||||
if (tempbuf2[0] == '+' &&
|
||||
@ -1085,6 +1098,44 @@ char *argv[];
|
||||
reset_display();
|
||||
putchar('\r');
|
||||
break;
|
||||
|
||||
case CMD_jail:
|
||||
new_message(MT_standout,
|
||||
"Jail to show (+ for all): ");
|
||||
if (readline(tempbuf2, sizeof(tempbuf2), No) > 0)
|
||||
{
|
||||
if (tempbuf2[0] == '+' &&
|
||||
tempbuf2[1] == '\0')
|
||||
{
|
||||
ps.jid = -1;
|
||||
}
|
||||
else if ((i = jail_getid(tempbuf2)) == -1)
|
||||
{
|
||||
new_message(MT_standout,
|
||||
" %s: unknown jail", tempbuf2);
|
||||
no_command = Yes;
|
||||
}
|
||||
else
|
||||
{
|
||||
ps.jid = i;
|
||||
}
|
||||
if (ps.jail == 0) {
|
||||
ps.jail = 1;
|
||||
new_message(MT_standout |
|
||||
MT_delayed, " Displaying jail "
|
||||
"ID.");
|
||||
header_text =
|
||||
format_header(uname_field);
|
||||
reset_display();
|
||||
}
|
||||
putchar('\r');
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_message();
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_kidletog:
|
||||
ps.kidle = !ps.kidle;
|
||||
new_message(MT_standout | MT_delayed,
|
||||
|
@ -1055,7 +1055,7 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek)
|
||||
{
|
||||
s->rstate=SSL_ST_READ_HEADER;
|
||||
rr->off=0;
|
||||
if (s->mode & SSL_MODE_RELEASE_BUFFERS)
|
||||
if (s->mode & SSL_MODE_RELEASE_BUFFERS && s->s3->rbuf.left == 0)
|
||||
ssl3_release_read_buffer(s);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
# from: @(#)Makefile 5.11 (Berkeley) 5/21/91
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.if ${MK_SENDMAIL} != "no"
|
||||
SUBDIR= sendmail
|
||||
|
@ -641,10 +641,10 @@ devfs_rulesets="/etc/defaults/devfs.rules /etc/devfs.rules" # Files containing
|
||||
devfs_system_ruleset="" # The name (NOT number) of a ruleset to apply to /dev
|
||||
devfs_set_rulesets="" # A list of /mount/dev=ruleset_name settings to
|
||||
# apply (must be mounted already, i.e. fstab(5))
|
||||
devfs_load_rulesets="NO" # Enable to always load the default rulesets
|
||||
performance_cx_lowest="HIGH" # Online CPU idle state
|
||||
devfs_load_rulesets="YES" # Enable to always load the default rulesets
|
||||
performance_cx_lowest="Cmax" # Online CPU idle state
|
||||
performance_cpu_freq="NONE" # Online CPU frequency
|
||||
economy_cx_lowest="HIGH" # Offline CPU idle state
|
||||
economy_cx_lowest="Cmax" # Offline CPU idle state
|
||||
economy_cpu_freq="NONE" # Offline CPU frequency
|
||||
virecover_enable="YES" # Perform housekeeping for the vi(1) editor
|
||||
ugidfw_enable="NO" # Load mac_bsdextended(4) rules on boot
|
||||
|
@ -97,8 +97,6 @@
|
||||
..
|
||||
growfs
|
||||
..
|
||||
ifconfig
|
||||
..
|
||||
mdconfig
|
||||
..
|
||||
..
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
FILES= ${_BSD.debug.dist} \
|
||||
BSD.include.dist \
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
FILES= 100.clean-disks \
|
||||
110.clean-tmps \
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
FILES= 450.status-security \
|
||||
999.local
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
FILES= 100.chksetuid \
|
||||
110.neggrpperm \
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
FILES= 340.noid \
|
||||
450.status-security \
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
FILES= DAEMON \
|
||||
FILESYSTEMS \
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= \
|
||||
bcd \
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
PROG= factor
|
||||
SRCS= factor.c pr_tbl.c
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 5.33.1.1 (Berkeley) 5/6/91
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= lib ${_tests} usr.bin
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= csu libgcc libgcov libdialog libgomp libregex libreadline
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
MK_SSP= no
|
||||
|
||||
GCCDIR= ${.CURDIR}/../../../contrib/gcc
|
||||
|
@ -6,7 +6,7 @@ GCCLIB= ${.CURDIR}/../../../contrib/gcclibs
|
||||
SHLIB_NAME= libgcc_s.so.1
|
||||
SHLIBDIR?= /lib
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
#
|
||||
# libgcc is linked in last and thus cannot depend on ssp symbols coming
|
||||
# from earlier libraries. Disable stack protection for this library.
|
||||
|
@ -3,7 +3,7 @@
|
||||
MK_PROFILE= no
|
||||
MK_SSP= no
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
.include "${.CURDIR}/../../usr.bin/cc/Makefile.tgt"
|
||||
|
||||
GCCDIR= ${.CURDIR}/../../../contrib/gcc
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
GCCVER= 4.2
|
||||
GCCDIR= ${.CURDIR}/../../../contrib/gcc
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
GCCVER= 4.2
|
||||
GCCDIR= ${.CURDIR}/../../../contrib/gcc
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= ${_binutils} \
|
||||
${_cc} \
|
||||
|
@ -4,7 +4,7 @@
|
||||
# BINDIR
|
||||
.include "${.CURDIR}/../../Makefile.inc"
|
||||
.include "${.CURDIR}/../Makefile.inc0"
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.PATH: ${SRCDIR}/gas ${SRCDIR}/gas/config
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include "../Makefile.inc0"
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.PATH: ${SRCDIR}/ld
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
# The order of some of these are rather important. Some depend on previous
|
||||
# subdirs.
|
||||
|
@ -1,5 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <src.opts.mk>
|
||||
.include "../Makefile.inc"
|
||||
|
||||
# Sometimes this is .include'd several times...
|
||||
|
@ -1,7 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
MAN=
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
.include "../Makefile.fe"
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
.include "../Makefile.fe"
|
||||
|
@ -1,7 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
MAN=
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
MAN=
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
CFLAGS+= -I.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.include "../Makefile.inc"
|
||||
.include "../Makefile.fe"
|
||||
|
@ -10,7 +10,7 @@ CFLAGS+= -I${.CURDIR} -I${DIALOG}
|
||||
|
||||
WARNS?= 6
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.if ${MK_NCURSESW} == "no"
|
||||
DPADD+= ${LIBNCURSES}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
GREP_LIBZ=YES
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Doing a "make install" builds /usr/include.
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
CLEANFILES= osreldate.h version vers.c
|
||||
SUBDIR= arpa gssapi protocols rpcsvc rpc xlocale
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
INCS= ftp.h inet.h nameser.h nameser_compat.h telnet.h tftp.h
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
NO_LINT=
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 6/4/93
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
# To satisfy shared library or ELF linkage when only the libraries being
|
||||
# built are visible:
|
||||
|
@ -25,7 +25,7 @@
|
||||
#
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
SUBDIR= libatf-c \
|
||||
libatf-c++ \
|
||||
|
@ -25,6 +25,7 @@
|
||||
#
|
||||
# $FreeBSD$
|
||||
|
||||
.include <src.opts.mk>
|
||||
.include <bsd.init.mk>
|
||||
|
||||
LIB= atf-c++
|
||||
|
@ -25,6 +25,7 @@
|
||||
#
|
||||
# $FreeBSD$
|
||||
|
||||
.include <src.opts.mk>
|
||||
.include <bsd.init.mk>
|
||||
|
||||
LIB= atf-c
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
.if !make(install)
|
||||
.if !defined(EARLY_BUILD)
|
||||
|
@ -1,5 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <src.opts.mk>
|
||||
|
||||
CLANG_SRCS= ${LLVM_SRCS}/tools/clang
|
||||
|
||||
CFLAGS+= -I${LLVM_SRCS}/include -I${CLANG_SRCS}/include \
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIB= llvmanalysis
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIB= llvmipa
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIB= llvmipo
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIB= llvmmc
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIB= llvmscalaropts
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIB= llvmsupport
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIB= llvmtransformutils
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIB= llvmx86disassembler
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# $FreeBSD$
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
LIBARCHIVEDIR= ${.CURDIR}/../../contrib/libarchive
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Author: Harti Brandt <harti@freebsd.org>
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include <src.opts.mk>
|
||||
|
||||
CONTRIB= ${.CURDIR}/../../../contrib/bsnmp/lib
|
||||
.PATH: ${CONTRIB}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user