Sync to HEAD@r272516.
This commit is contained in:
commit
1ce4b35740
36
Makefile
36
Makefile
@ -1,42 +1,6 @@
|
|||||||
#
|
#
|
||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
#
|
#
|
||||||
# Copyright (c) 2014 Kevin Lo. All rights reserved.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
S= ${.CURDIR}/../../..
|
|
||||||
|
|
||||||
.PATH: $S/dev/usb/misc
|
|
||||||
|
|
||||||
KMOD= uled
|
|
||||||
SRCS= opt_bus.h opt_usb.h device_if.h bus_if.h usb_if.h vnode_if.h usbdevs.h \
|
|
||||||
uled.c
|
|
||||||
|
|
||||||
.include <bsd.kmod.mk>
|
|
||||||
#
|
|
||||||
# $FreeBSD$
|
|
||||||
#
|
|
||||||
# The user-driven targets are:
|
# The user-driven targets are:
|
||||||
#
|
#
|
||||||
# universe - *Really* build *everything* (buildworld and
|
# universe - *Really* build *everything* (buildworld and
|
||||||
|
@ -336,11 +336,11 @@ XFLAGS+= -B${CROSS_BINUTILS_PREFIX}
|
|||||||
.else
|
.else
|
||||||
XFLAGS+= -B${WORLDTMP}/usr/bin
|
XFLAGS+= -B${WORLDTMP}/usr/bin
|
||||||
.endif
|
.endif
|
||||||
.if ${TARGET} == "arm" && ${MK_ARM_EABI} != "no"
|
.if ${TARGET} == "arm"
|
||||||
.if ${TARGET_ARCH:M*eb*} == ""
|
.if ${TARGET_ARCH:M*hf*} != ""
|
||||||
TARGET_ABI= gnueabi
|
|
||||||
.elif ${TARGET_ARCH} == "armv6hf"
|
|
||||||
TARGET_ABI= gnueabihf
|
TARGET_ABI= gnueabihf
|
||||||
|
.else
|
||||||
|
TARGET_ABI= gnueabi
|
||||||
.endif
|
.endif
|
||||||
.endif
|
.endif
|
||||||
TARGET_ABI?= unknown
|
TARGET_ABI?= unknown
|
||||||
@ -352,6 +352,7 @@ WMAKE= ${WMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 DESTDIR=${WORLDTMP}
|
|||||||
|
|
||||||
.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "powerpc64"
|
.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "powerpc64"
|
||||||
# 32 bit world
|
# 32 bit world
|
||||||
|
LIB32_OBJTREE= ${OBJTREE}${.CURDIR}/world32
|
||||||
LIB32TMP= ${OBJTREE}${.CURDIR}/lib32
|
LIB32TMP= ${OBJTREE}${.CURDIR}/lib32
|
||||||
|
|
||||||
.if ${TARGET_ARCH} == "amd64"
|
.if ${TARGET_ARCH} == "amd64"
|
||||||
@ -387,7 +388,7 @@ LIB32FLAGS+= --sysroot=${WORLDTMP}
|
|||||||
.endif
|
.endif
|
||||||
|
|
||||||
# Yes, the flags are redundant.
|
# Yes, the flags are redundant.
|
||||||
LIB32WMAKEENV+= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
|
LIB32WMAKEENV+= MAKEOBJDIRPREFIX=${LIB32_OBJTREE} \
|
||||||
_SHLIBDIRPREFIX=${LIB32TMP} \
|
_SHLIBDIRPREFIX=${LIB32TMP} \
|
||||||
_LDSCRIPTROOT=${LIB32TMP} \
|
_LDSCRIPTROOT=${LIB32TMP} \
|
||||||
VERSION="${VERSION}" \
|
VERSION="${VERSION}" \
|
||||||
@ -611,7 +612,7 @@ build32:
|
|||||||
cd ${.CURDIR}/${_dir}; \
|
cd ${.CURDIR}/${_dir}; \
|
||||||
WORLDTMP=${WORLDTMP} \
|
WORLDTMP=${WORLDTMP} \
|
||||||
MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" \
|
MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" \
|
||||||
MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} SSP_CFLAGS= DESTDIR= \
|
MAKEOBJDIRPREFIX=${LIB32_OBJTREE} ${MAKE} SSP_CFLAGS= DESTDIR= \
|
||||||
DIRPRFX=${_dir}/ -DNO_LINT -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \
|
DIRPRFX=${_dir}/ -DNO_LINT -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \
|
||||||
build-tools
|
build-tools
|
||||||
.endfor
|
.endfor
|
||||||
@ -910,7 +911,7 @@ packageworld:
|
|||||||
# and do a 'make reinstall' on the *client* to install new binaries from the
|
# and do a 'make reinstall' on the *client* to install new binaries from the
|
||||||
# most recent server build.
|
# most recent server build.
|
||||||
#
|
#
|
||||||
reinstall:
|
reinstall: .MAKE
|
||||||
@echo "--------------------------------------------------------------"
|
@echo "--------------------------------------------------------------"
|
||||||
@echo ">>> Making hierarchy"
|
@echo ">>> Making hierarchy"
|
||||||
@echo "--------------------------------------------------------------"
|
@echo "--------------------------------------------------------------"
|
||||||
@ -925,7 +926,7 @@ reinstall:
|
|||||||
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
|
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
redistribute:
|
redistribute: .MAKE
|
||||||
@echo "--------------------------------------------------------------"
|
@echo "--------------------------------------------------------------"
|
||||||
@echo ">>> Distributing everything"
|
@echo ">>> Distributing everything"
|
||||||
@echo "--------------------------------------------------------------"
|
@echo "--------------------------------------------------------------"
|
||||||
@ -935,7 +936,7 @@ redistribute:
|
|||||||
DISTRIBUTION=lib32
|
DISTRIBUTION=lib32
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
distrib-dirs distribution:
|
distrib-dirs distribution: .MAKE
|
||||||
cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
|
cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
|
||||||
${IMAKE_INSTALL} ${IMAKE_MTREE} METALOG=${METALOG} ${.TARGET}
|
${IMAKE_INSTALL} ${IMAKE_MTREE} METALOG=${METALOG} ${.TARGET}
|
||||||
|
|
||||||
@ -1463,7 +1464,7 @@ native-xtools: .MAKE
|
|||||||
#
|
#
|
||||||
# hierarchy - ensure that all the needed directories are present
|
# hierarchy - ensure that all the needed directories are present
|
||||||
#
|
#
|
||||||
hierarchy hier:
|
hierarchy hier: .MAKE
|
||||||
cd ${.CURDIR}/etc && ${HMAKE} distrib-dirs
|
cd ${.CURDIR}/etc && ${HMAKE} distrib-dirs
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1530,7 +1531,9 @@ _prebuild_libs= ${_kerberos5_lib_libasn1} \
|
|||||||
lib/ncurses/ncurses lib/ncurses/ncursesw \
|
lib/ncurses/ncurses lib/ncurses/ncursesw \
|
||||||
lib/libopie lib/libpam ${_lib_libthr} \
|
lib/libopie lib/libpam ${_lib_libthr} \
|
||||||
lib/libradius lib/libsbuf lib/libtacplus \
|
lib/libradius lib/libsbuf lib/libtacplus \
|
||||||
|
lib/libgeom \
|
||||||
${_cddl_lib_libumem} ${_cddl_lib_libnvpair} \
|
${_cddl_lib_libumem} ${_cddl_lib_libnvpair} \
|
||||||
|
${_cddl_lib_libuutil} \
|
||||||
${_cddl_lib_libavl} \
|
${_cddl_lib_libavl} \
|
||||||
${_cddl_lib_libzfs_core} \
|
${_cddl_lib_libzfs_core} \
|
||||||
lib/libutil lib/libpjdlog ${_lib_libypclnt} lib/libz lib/msun \
|
lib/libutil lib/libpjdlog ${_lib_libypclnt} lib/libz lib/msun \
|
||||||
@ -1542,6 +1545,8 @@ gnu/lib/libstdc++__L: lib/msun__L
|
|||||||
gnu/lib/libsupc++__L: gnu/lib/libstdc++__L
|
gnu/lib/libsupc++__L: gnu/lib/libstdc++__L
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
lib/libgeom__L: lib/libexpat__L
|
||||||
|
|
||||||
.if defined(WITH_ATF) || ${MK_TESTS} != "no"
|
.if defined(WITH_ATF) || ${MK_TESTS} != "no"
|
||||||
.if !defined(WITH_ATF)
|
.if !defined(WITH_ATF)
|
||||||
# Ensure that the ATF libraries will be built during make libraries, even
|
# Ensure that the ATF libraries will be built during make libraries, even
|
||||||
@ -1579,9 +1584,11 @@ lib/libopie__L lib/libtacplus__L: lib/libmd__L
|
|||||||
_cddl_lib_libumem= cddl/lib/libumem
|
_cddl_lib_libumem= cddl/lib/libumem
|
||||||
_cddl_lib_libnvpair= cddl/lib/libnvpair
|
_cddl_lib_libnvpair= cddl/lib/libnvpair
|
||||||
_cddl_lib_libavl= cddl/lib/libavl
|
_cddl_lib_libavl= cddl/lib/libavl
|
||||||
|
_cddl_lib_libuutil= cddl/lib/libuutil
|
||||||
_cddl_lib_libzfs_core= cddl/lib/libzfs_core
|
_cddl_lib_libzfs_core= cddl/lib/libzfs_core
|
||||||
_cddl_lib= cddl/lib
|
_cddl_lib= cddl/lib
|
||||||
cddl/lib/libzfs_core__L: cddl/lib/libnvpair__L
|
cddl/lib/libzfs_core__L: cddl/lib/libnvpair__L
|
||||||
|
cddl/lib/libzfs__L: lib/libgeom__L
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if ${MK_CRYPT} != "no"
|
.if ${MK_CRYPT} != "no"
|
||||||
|
@ -38,6 +38,14 @@
|
|||||||
# xargs -n1 | sort | uniq -d;
|
# xargs -n1 | sort | uniq -d;
|
||||||
# done
|
# done
|
||||||
|
|
||||||
|
# 20140922: sleepq_calc_signal_retval.9 and sleepq_catch_signals.9 removed
|
||||||
|
OLD_FILES+=usr/share/man/man9/sleepq_calc_signal_retval.9.gz
|
||||||
|
OLD_FILES+=usr/share/man/man9/sleepq_catch_signals.9.gz
|
||||||
|
# 20140917: hv_kvpd rc.d script removed in favor of devd configuration
|
||||||
|
OLD_FILES+=etc/rc.d/hv_kvpd
|
||||||
|
# 20140917: libnv was accidentally being installed to /usr/lib instead of /lib
|
||||||
|
OLD_LIBS+=usr/lib/libnv.a
|
||||||
|
OLD_LIBS+=usr/lib/libnv.so.0
|
||||||
# 20140814: libopie version bump
|
# 20140814: libopie version bump
|
||||||
OLD_LIBS+=usr/lib/libopie.so.7
|
OLD_LIBS+=usr/lib/libopie.so.7
|
||||||
OLD_LIBS+=usr/lib32/libopie.so.7
|
OLD_LIBS+=usr/lib32/libopie.so.7
|
||||||
@ -1488,6 +1496,7 @@ OLD_LIBS+=usr/lib/libpanel.so.4
|
|||||||
OLD_LIBS+=usr/lib/libpanelw.so.4
|
OLD_LIBS+=usr/lib/libpanelw.so.4
|
||||||
OLD_LIBS+=usr/lib/libpmc.so.4
|
OLD_LIBS+=usr/lib/libpmc.so.4
|
||||||
OLD_LIBS+=usr/lib/libproc.so.1
|
OLD_LIBS+=usr/lib/libproc.so.1
|
||||||
|
OLD_LIBS+=usr/lib/libproc.so.2
|
||||||
OLD_LIBS+=usr/lib/libradius.so.3
|
OLD_LIBS+=usr/lib/libradius.so.3
|
||||||
OLD_LIBS+=usr/lib/librpcsvc.so.4
|
OLD_LIBS+=usr/lib/librpcsvc.so.4
|
||||||
OLD_LIBS+=usr/lib/libsdp.so.3
|
OLD_LIBS+=usr/lib/libsdp.so.3
|
||||||
|
12
UPDATING
12
UPDATING
@ -31,6 +31,18 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11.x IS SLOW:
|
|||||||
disable the most expensive debugging functionality run
|
disable the most expensive debugging functionality run
|
||||||
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
||||||
|
|
||||||
|
20140923:
|
||||||
|
pjdfstest has been moved from tools/regression/pjdfstest to
|
||||||
|
contrib/pjdfstest .
|
||||||
|
|
||||||
|
20140922:
|
||||||
|
At svn r271982, The default linux compat kernel ABI has been adjusted
|
||||||
|
to 2.6.18 in support of the linux-c6 compat ports infrastructure
|
||||||
|
update. If you wish to continue using the linux-f10 compat ports,
|
||||||
|
add compat.linux.osrelease=2.6.16 to your local sysctl.conf. Users are
|
||||||
|
encouraged to update their linux-compat packages to linux-c6 during
|
||||||
|
their next update cycle.
|
||||||
|
|
||||||
20140729:
|
20140729:
|
||||||
The ofwfb driver, used to provide a graphics console on PowerPC when
|
The ofwfb driver, used to provide a graphics console on PowerPC when
|
||||||
using vt(4), no longer allows mmap() of all of physical memory. This
|
using vt(4), no longer allows mmap() of all of physical memory. This
|
||||||
|
@ -94,7 +94,7 @@ GENHDRS+= iconv.h
|
|||||||
SRCS+= iconv_stub.c
|
SRCS+= iconv_stub.c
|
||||||
|
|
||||||
iconv.h: ${.CURDIR}/iconv_stub.h
|
iconv.h: ${.CURDIR}/iconv_stub.h
|
||||||
cp ${.CURDIR}/iconv_stub.h ${.TARGET}
|
cp -f ${.CURDIR}/iconv_stub.h ${.TARGET}
|
||||||
.endif
|
.endif
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
@ -1,7 +1,23 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
|
||||||
base=`basename $0`
|
jail_name_to_jid()
|
||||||
|
{
|
||||||
|
local check_name="$1"
|
||||||
|
(
|
||||||
|
line="$(jls -n 2> /dev/null | grep name=$check_name )"
|
||||||
|
for nv in $line; do
|
||||||
|
local name="${nv%=*}"
|
||||||
|
if [ "${name}" = "jid" ]; then
|
||||||
|
eval $nv
|
||||||
|
echo $jid
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
base=pgrep_j_test
|
||||||
|
|
||||||
echo "1..3"
|
echo "1..3"
|
||||||
|
|
||||||
@ -9,21 +25,25 @@ name="pgrep -j <jid>"
|
|||||||
if [ `id -u` -eq 0 ]; then
|
if [ `id -u` -eq 0 ]; then
|
||||||
sleep=$(pwd)/sleep.txt
|
sleep=$(pwd)/sleep.txt
|
||||||
ln -sf /bin/sleep $sleep
|
ln -sf /bin/sleep $sleep
|
||||||
jail / $base-1 127.0.0.1 $sleep 5 &
|
jail -c path=/ name=${base}_1_1 ip4.addr=127.0.0.1 \
|
||||||
chpid=$!
|
command=daemon -p ${PWD}/${base}_1_1.pid $sleep 5 &
|
||||||
jail / $base-2 127.0.0.1 $sleep 5 &
|
|
||||||
chpid2=$!
|
jail -c path=/ name=${base}_1_2 ip4.addr=127.0.0.1 \
|
||||||
$sleep 5 &
|
command=daemon -p ${PWD}/${base}_1_2.pid $sleep 5 &
|
||||||
chpid3=$!
|
|
||||||
sleep 0.5
|
jid1=$(jail_name_to_jid ${base}_1_1)
|
||||||
jid=`jls | awk "/127\\.0\\.0\\.1.*${base}-1/ {print \$1}"`
|
jid2=$(jail_name_to_jid ${base}_1_2)
|
||||||
pid=`pgrep -f -j $jid $sleep`
|
jid="${jid1},${jid2}"
|
||||||
if [ "$pid" = "$chpid" ]; then
|
pid1="$(pgrep -f -x -j $jid "$sleep 5" | sort)"
|
||||||
|
pid2=$(printf "%s\n%s" "$(cat ${PWD}/${base}_1_1.pid)" \
|
||||||
|
$(cat ${PWD}/${base}_1_2.pid) | sort)
|
||||||
|
if [ "$pid1" = "$pid2" ]; then
|
||||||
echo "ok 1 - $name"
|
echo "ok 1 - $name"
|
||||||
else
|
else
|
||||||
echo "not ok 1 - $name"
|
echo "not ok 1 - $name"
|
||||||
fi
|
fi
|
||||||
kill $chpid $chpid2 $chpid3
|
[ -f ${PWD}/${base}_1_1.pid ] && kill $(cat ${PWD}/${base}_1_1.pid)
|
||||||
|
[ -f ${PWD}/${base}_1_2.pid ] && kill $(cat ${PWD}/${base}_1_2.pid)
|
||||||
rm -f $sleep
|
rm -f $sleep
|
||||||
else
|
else
|
||||||
echo "ok 1 - $name # skip Test needs uid 0."
|
echo "ok 1 - $name # skip Test needs uid 0."
|
||||||
@ -33,21 +53,23 @@ name="pgrep -j any"
|
|||||||
if [ `id -u` -eq 0 ]; then
|
if [ `id -u` -eq 0 ]; then
|
||||||
sleep=$(pwd)/sleep.txt
|
sleep=$(pwd)/sleep.txt
|
||||||
ln -sf /bin/sleep $sleep
|
ln -sf /bin/sleep $sleep
|
||||||
jail / $base-1 127.0.0.1 $sleep 5 &
|
jail -c path=/ name=${base}_2_1 ip4.addr=127.0.0.1 \
|
||||||
chpid=$!
|
command=daemon -p ${PWD}/${base}_2_1.pid $sleep 5 &
|
||||||
jail / $base-2 127.0.0.1 $sleep 5 &
|
|
||||||
chpid2=$!
|
jail -c path=/ name=${base}_2_2 ip4.addr=127.0.0.1 \
|
||||||
$sleep 5 &
|
command=daemon -p ${PWD}/${base}_2_2.pid $sleep 5 &
|
||||||
chpid3=$!
|
|
||||||
sleep 0.5
|
sleep 2
|
||||||
pids=`pgrep -f -j any $sleep | sort`
|
pid1="$(pgrep -f -x -j any "$sleep 5" | sort)"
|
||||||
refpids=`{ echo $chpid; echo $chpid2; } | sort`
|
pid2=$(printf "%s\n%s" "$(cat ${PWD}/${base}_2_1.pid)" \
|
||||||
if [ "$pids" = "$refpids" ]; then
|
$(cat ${PWD}/${base}_2_2.pid) | sort)
|
||||||
|
if [ "$pid1" = "$pid2" ]; then
|
||||||
echo "ok 2 - $name"
|
echo "ok 2 - $name"
|
||||||
else
|
else
|
||||||
echo "not ok 2 - $name"
|
echo "not ok 2 - $name"
|
||||||
fi
|
fi
|
||||||
kill $chpid $chpid2 $chpid3
|
[ -f ${PWD}/${base}_2_1.pid ] && kill $(cat ${PWD}/${base}_2_1.pid)
|
||||||
|
[ -f ${PWD}/${base}_2_2.pid ] && kill $(cat ${PWD}/${base}_2_2.pid)
|
||||||
rm -f $sleep
|
rm -f $sleep
|
||||||
else
|
else
|
||||||
echo "ok 2 - $name # skip Test needs uid 0."
|
echo "ok 2 - $name # skip Test needs uid 0."
|
||||||
@ -57,19 +79,19 @@ name="pgrep -j none"
|
|||||||
if [ `id -u` -eq 0 ]; then
|
if [ `id -u` -eq 0 ]; then
|
||||||
sleep=$(pwd)/sleep.txt
|
sleep=$(pwd)/sleep.txt
|
||||||
ln -sf /bin/sleep $sleep
|
ln -sf /bin/sleep $sleep
|
||||||
$sleep 5 &
|
daemon -p ${PWD}/${base}_3_1.pid $sleep 5 &
|
||||||
chpid=$!
|
jail -c path=/ name=${base}_3_2 ip4.addr=127.0.0.1 \
|
||||||
jail / $base 127.0.0.1 $sleep 5 &
|
command=daemon -p ${PWD}/${base}_3_2.pid $sleep 5 &
|
||||||
chpid2=$!
|
sleep 2
|
||||||
sleep 0.5
|
pid="$(pgrep -f -x -j none "$sleep 5")"
|
||||||
pid=`pgrep -f -j none $sleep`
|
if [ "$pid" = "$(cat ${PWD}/${base}_3_1.pid)" ]; then
|
||||||
if [ "$pid" = "$chpid" ]; then
|
|
||||||
echo "ok 3 - $name"
|
echo "ok 3 - $name"
|
||||||
else
|
else
|
||||||
echo "not ok 3 - $name"
|
echo "not ok 3 - $name"
|
||||||
fi
|
fi
|
||||||
kill $chpid $chpid2
|
|
||||||
rm -f $sleep
|
rm -f $sleep
|
||||||
|
[ -f ${PWD}/${base}_3_1.pid ] && kill $(cat $PWD/${base}_3_1.pid)
|
||||||
|
[ -f ${PWD}/${base}_3_2.pid ] && kill $(cat $PWD/${base}_3_2.pid)
|
||||||
else
|
else
|
||||||
echo "ok 3 - $name # skip Test needs uid 0."
|
echo "ok 3 - $name # skip Test needs uid 0."
|
||||||
fi
|
fi
|
||||||
|
@ -1,7 +1,23 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
|
||||||
base=`basename $0`
|
jail_name_to_jid()
|
||||||
|
{
|
||||||
|
local check_name="$1"
|
||||||
|
(
|
||||||
|
line="$(jls -n 2> /dev/null | grep name=$check_name )"
|
||||||
|
for nv in $line; do
|
||||||
|
local name="${nv%=*}"
|
||||||
|
if [ "${name}" = "jid" ]; then
|
||||||
|
eval $nv
|
||||||
|
echo $jid
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
base=pkill_j_test
|
||||||
|
|
||||||
echo "1..3"
|
echo "1..3"
|
||||||
|
|
||||||
@ -9,21 +25,28 @@ name="pkill -j <jid>"
|
|||||||
if [ `id -u` -eq 0 ]; then
|
if [ `id -u` -eq 0 ]; then
|
||||||
sleep=$(pwd)/sleep.txt
|
sleep=$(pwd)/sleep.txt
|
||||||
ln -sf /bin/sleep $sleep
|
ln -sf /bin/sleep $sleep
|
||||||
jail / $base-1 127.0.0.1 $sleep 5 &
|
jail -c path=/ name=${base}_1_1 ip4.addr=127.0.0.1 \
|
||||||
chpid=$!
|
command=daemon -p ${PWD}/${base}_1_1.pid $sleep 5 &
|
||||||
jail / $base-2 127.0.0.1 $sleep 5 &
|
|
||||||
chpid2=$!
|
jail -c path=/ name=${base}_1_2 ip4.addr=127.0.0.1 \
|
||||||
|
command=daemon -p ${PWD}/${base}_1_2.pid $sleep 5 &
|
||||||
|
|
||||||
$sleep 5 &
|
$sleep 5 &
|
||||||
chpid3=$!
|
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
jid=`jls | awk "/127\\.0\\.0\\.1.*${base}-1/ {print \$1}"`
|
jid1=$(jail_name_to_jid ${base}_1_1)
|
||||||
if pkill -f -j $jid $sleep && sleep 0.5 &&
|
jid2=$(jail_name_to_jid ${base}_1_2)
|
||||||
! kill $chpid && kill $chpid2 $chpid3; then
|
jid="${jid1},${jid2}"
|
||||||
|
if pkill -f -j "$jid" $sleep && sleep 0.5 &&
|
||||||
|
! -f ${PWD}/${base}_1_1.pid &&
|
||||||
|
! -f ${PWD}/${base}_1_2.pid ; then
|
||||||
echo "ok 1 - $name"
|
echo "ok 1 - $name"
|
||||||
else
|
else
|
||||||
echo "not ok 1 - $name"
|
echo "not ok 1 - $name"
|
||||||
fi 2>/dev/null
|
fi 2>/dev/null
|
||||||
rm -f $sleep
|
rm -f $sleep
|
||||||
|
[ -f ${PWD}/${base}_1_1.pid ] && kill $(cat ${PWD}/${base}_1_1.pid)
|
||||||
|
[ -f ${PWD}/${base}_1_2.pid ] && kill $(cat ${PWD}/${base}_1_2.pid)
|
||||||
|
wait
|
||||||
else
|
else
|
||||||
echo "ok 1 - $name # skip Test needs uid 0."
|
echo "ok 1 - $name # skip Test needs uid 0."
|
||||||
fi
|
fi
|
||||||
@ -32,20 +55,26 @@ name="pkill -j any"
|
|||||||
if [ `id -u` -eq 0 ]; then
|
if [ `id -u` -eq 0 ]; then
|
||||||
sleep=$(pwd)/sleep.txt
|
sleep=$(pwd)/sleep.txt
|
||||||
ln -sf /bin/sleep $sleep
|
ln -sf /bin/sleep $sleep
|
||||||
jail / $base-1 127.0.0.1 $sleep 5 &
|
jail -c path=/ name=${base}_2_1 ip4.addr=127.0.0.1 \
|
||||||
chpid=$!
|
command=daemon -p ${PWD}/${base}_2_1.pid $sleep 5 &
|
||||||
jail / $base-2 127.0.0.1 $sleep 5 &
|
|
||||||
chpid2=$!
|
jail -c path=/ name=${base}_2_2 ip4.addr=127.0.0.1 \
|
||||||
|
command=daemon -p ${PWD}/${base}_2_2.pid $sleep 5 &
|
||||||
|
|
||||||
$sleep 5 &
|
$sleep 5 &
|
||||||
chpid3=$!
|
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
|
chpid3=$!
|
||||||
if pkill -f -j any $sleep && sleep 0.5 &&
|
if pkill -f -j any $sleep && sleep 0.5 &&
|
||||||
! kill $chpid && ! kill $chpid2 && kill $chpid3; then
|
[ ! -f ${PWD}/${base}_2_1.pid -a
|
||||||
|
! -f ${PWD}/${base}_2_2.pid ] && kill $chpid3; then
|
||||||
echo "ok 2 - $name"
|
echo "ok 2 - $name"
|
||||||
else
|
else
|
||||||
echo "not ok 2 - $name"
|
echo "not ok 2 - $name"
|
||||||
fi 2>/dev/null
|
fi 2>/dev/null
|
||||||
rm -f $sleep
|
rm -f $sleep
|
||||||
|
[ -f ${PWD}/${base}_2_1.pid ] && kill $(cat ${PWD}/${base}_2_1.pid)
|
||||||
|
[ -f ${PWD}/${base}_2_2.pid ] && kill $(cat ${PWD}/${base}_2_2.pid)
|
||||||
|
wait
|
||||||
else
|
else
|
||||||
echo "ok 2 - $name # skip Test needs uid 0."
|
echo "ok 2 - $name # skip Test needs uid 0."
|
||||||
fi
|
fi
|
||||||
@ -54,18 +83,20 @@ name="pkill -j none"
|
|||||||
if [ `id -u` -eq 0 ]; then
|
if [ `id -u` -eq 0 ]; then
|
||||||
sleep=$(pwd)/sleep.txt
|
sleep=$(pwd)/sleep.txt
|
||||||
ln -sf /bin/sleep $sleep
|
ln -sf /bin/sleep $sleep
|
||||||
$sleep 5 &
|
daemon -p ${PWD}/${base}_3_1.pid $sleep 5
|
||||||
chpid=$!
|
jail -c path=/ name=${base}_3_2 ip4.addr=127.0.0.1 \
|
||||||
jail / $base 127.0.0.1 $sleep 5 &
|
command=daemon -p ${PWD}/${base}_3_2.pid $sleep 5 &
|
||||||
chpid2=$!
|
sleep 1
|
||||||
sleep 0.5
|
if pkill -f -j none "$sleep 5" && sleep 1 &&
|
||||||
if pkill -f -j none $sleep && sleep 0.5 &&
|
[ ! -f ${PWD}/${base}_3_1.pid -a -f ${PWD}/${base}_3_2.pid ] ; then
|
||||||
! kill $chpid && kill $chpid2; then
|
|
||||||
echo "ok 3 - $name"
|
echo "ok 3 - $name"
|
||||||
else
|
else
|
||||||
|
ls ${PWD}/*.pid
|
||||||
echo "not ok 3 - $name"
|
echo "not ok 3 - $name"
|
||||||
fi 2>/dev/null
|
fi 2>/dev/null
|
||||||
rm -f $sleep
|
rm -f $sleep
|
||||||
|
[ -f ${PWD}/${base}_3_1.pid ] && kill $(cat ${base}_3_1.pid)
|
||||||
|
[ -f ${PWD}/${base}_3_2.pid ] && kill $(cat ${base}_3_2.pid)
|
||||||
else
|
else
|
||||||
echo "ok 3 - $name # skip Test needs uid 0."
|
echo "ok 3 - $name # skip Test needs uid 0."
|
||||||
fi
|
fi
|
||||||
|
@ -116,33 +116,6 @@ resetinput(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read a line from the script.
|
|
||||||
*/
|
|
||||||
|
|
||||||
char *
|
|
||||||
pfgets(char *line, int len)
|
|
||||||
{
|
|
||||||
char *p = line;
|
|
||||||
int nleft = len;
|
|
||||||
int c;
|
|
||||||
|
|
||||||
while (--nleft > 0) {
|
|
||||||
c = pgetc_macro();
|
|
||||||
if (c == PEOF) {
|
|
||||||
if (p == line)
|
|
||||||
return NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*p++ = c;
|
|
||||||
if (c == '\n')
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*p = '\0';
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read a character from the script, returning PEOF on end of file.
|
* Read a character from the script, returning PEOF on end of file.
|
||||||
@ -338,7 +311,7 @@ pungetc(void)
|
|||||||
* We handle aliases this way.
|
* We handle aliases this way.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
pushstring(char *s, int len, struct alias *ap)
|
pushstring(const char *s, int len, struct alias *ap)
|
||||||
{
|
{
|
||||||
struct strpush *sp;
|
struct strpush *sp;
|
||||||
|
|
||||||
|
@ -48,12 +48,11 @@ struct alias;
|
|||||||
struct parsefile;
|
struct parsefile;
|
||||||
|
|
||||||
void resetinput(void);
|
void resetinput(void);
|
||||||
char *pfgets(char *, int);
|
|
||||||
int pgetc(void);
|
int pgetc(void);
|
||||||
int preadbuffer(void);
|
int preadbuffer(void);
|
||||||
int preadateof(void);
|
int preadateof(void);
|
||||||
void pungetc(void);
|
void pungetc(void);
|
||||||
void pushstring(char *, int, struct alias *);
|
void pushstring(const char *, int, struct alias *);
|
||||||
void setinputfile(const char *, int);
|
void setinputfile(const char *, int);
|
||||||
void setinputfd(int, int);
|
void setinputfd(int, int);
|
||||||
void setinputstring(const char *, int);
|
void setinputstring(const char *, int);
|
||||||
|
@ -66,7 +66,6 @@ __FBSDID("$FreeBSD$");
|
|||||||
* Shell command parser.
|
* Shell command parser.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define EOFMARKLEN 79
|
|
||||||
#define PROMPTLEN 128
|
#define PROMPTLEN 128
|
||||||
|
|
||||||
/* values of checkkwd variable */
|
/* values of checkkwd variable */
|
||||||
@ -718,7 +717,6 @@ parsefname(void)
|
|||||||
if (n->type == NHERE) {
|
if (n->type == NHERE) {
|
||||||
struct heredoc *here = heredoc;
|
struct heredoc *here = heredoc;
|
||||||
struct heredoc *p;
|
struct heredoc *p;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (quoteflag == 0)
|
if (quoteflag == 0)
|
||||||
n->type = NXHERE;
|
n->type = NXHERE;
|
||||||
@ -727,7 +725,7 @@ parsefname(void)
|
|||||||
while (*wordtext == '\t')
|
while (*wordtext == '\t')
|
||||||
wordtext++;
|
wordtext++;
|
||||||
}
|
}
|
||||||
if (! noexpand(wordtext) || (i = strlen(wordtext)) == 0 || i > EOFMARKLEN)
|
if (! noexpand(wordtext))
|
||||||
synerror("Illegal eof marker for << redirection");
|
synerror("Illegal eof marker for << redirection");
|
||||||
rmescapes(wordtext);
|
rmescapes(wordtext);
|
||||||
here->eofmark = wordtext;
|
here->eofmark = wordtext;
|
||||||
@ -945,6 +943,41 @@ struct tokenstate
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check to see whether we are at the end of the here document. When this
|
||||||
|
* is called, c is set to the first character of the next input line. If
|
||||||
|
* we are at the end of the here document, this routine sets the c to PEOF.
|
||||||
|
* The new value of c is returned.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
checkend(int c, const char *eofmark, int striptabs)
|
||||||
|
{
|
||||||
|
if (striptabs) {
|
||||||
|
while (c == '\t')
|
||||||
|
c = pgetc();
|
||||||
|
}
|
||||||
|
if (c == *eofmark) {
|
||||||
|
int c2;
|
||||||
|
const char *q;
|
||||||
|
|
||||||
|
for (q = eofmark + 1; c2 = pgetc(), *q != '\0' && c2 == *q; q++)
|
||||||
|
;
|
||||||
|
if ((c2 == PEOF || c2 == '\n') && *q == '\0') {
|
||||||
|
c = PEOF;
|
||||||
|
if (c2 == '\n') {
|
||||||
|
plinno++;
|
||||||
|
needprompt = doprompt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pungetc();
|
||||||
|
pushstring(eofmark + 1, q - (eofmark + 1), NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (c);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called to parse command substitutions.
|
* Called to parse command substitutions.
|
||||||
*/
|
*/
|
||||||
@ -1246,6 +1279,13 @@ readcstyleesc(char *out)
|
|||||||
c = pgetc();
|
c = pgetc();
|
||||||
if (c == PEOF)
|
if (c == PEOF)
|
||||||
synerror("Unterminated quoted string");
|
synerror("Unterminated quoted string");
|
||||||
|
if (c == '\n') {
|
||||||
|
plinno++;
|
||||||
|
if (doprompt)
|
||||||
|
setprompt(2);
|
||||||
|
else
|
||||||
|
setprompt(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pungetc();
|
pungetc();
|
||||||
return out;
|
return out;
|
||||||
@ -1269,7 +1309,6 @@ readcstyleesc(char *out)
|
|||||||
* will run code that appears at the end of readtoken1.
|
* will run code that appears at the end of readtoken1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CHECKEND() {goto checkend; checkend_return:;}
|
|
||||||
#define PARSEREDIR() {goto parseredir; parseredir_return:;}
|
#define PARSEREDIR() {goto parseredir; parseredir_return:;}
|
||||||
#define PARSESUB() {goto parsesub; parsesub_return:;}
|
#define PARSESUB() {goto parsesub; parsesub_return:;}
|
||||||
#define PARSEARITH() {goto parsearith; parsearith_return:;}
|
#define PARSEARITH() {goto parsearith; parsearith_return:;}
|
||||||
@ -1281,7 +1320,6 @@ readtoken1(int firstc, char const *initialsyntax, const char *eofmark,
|
|||||||
int c = firstc;
|
int c = firstc;
|
||||||
char *out;
|
char *out;
|
||||||
int len;
|
int len;
|
||||||
char line[EOFMARKLEN + 1];
|
|
||||||
struct nodelist *bqlist;
|
struct nodelist *bqlist;
|
||||||
int quotef;
|
int quotef;
|
||||||
int newvarnest;
|
int newvarnest;
|
||||||
@ -1303,7 +1341,9 @@ readtoken1(int firstc, char const *initialsyntax, const char *eofmark,
|
|||||||
|
|
||||||
STARTSTACKSTR(out);
|
STARTSTACKSTR(out);
|
||||||
loop: { /* for each line, until end of word */
|
loop: { /* for each line, until end of word */
|
||||||
CHECKEND(); /* set c to PEOF if at end of here document */
|
if (eofmark)
|
||||||
|
/* set c to PEOF if at end of here document */
|
||||||
|
c = checkend(c, eofmark, striptabs);
|
||||||
for (;;) { /* until end of line or end of word */
|
for (;;) { /* until end of line or end of word */
|
||||||
CHECKSTRSPACE(4, out); /* permit 4 calls to USTPUTC */
|
CHECKSTRSPACE(4, out); /* permit 4 calls to USTPUTC */
|
||||||
|
|
||||||
@ -1483,40 +1523,6 @@ readtoken1(int firstc, char const *initialsyntax, const char *eofmark,
|
|||||||
/* end of readtoken routine */
|
/* end of readtoken routine */
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check to see whether we are at the end of the here document. When this
|
|
||||||
* is called, c is set to the first character of the next input line. If
|
|
||||||
* we are at the end of the here document, this routine sets the c to PEOF.
|
|
||||||
*/
|
|
||||||
|
|
||||||
checkend: {
|
|
||||||
if (eofmark) {
|
|
||||||
if (striptabs) {
|
|
||||||
while (c == '\t')
|
|
||||||
c = pgetc();
|
|
||||||
}
|
|
||||||
if (c == *eofmark) {
|
|
||||||
if (pfgets(line, sizeof line) != NULL) {
|
|
||||||
const char *p, *q;
|
|
||||||
|
|
||||||
p = line;
|
|
||||||
for (q = eofmark + 1 ; *q && *p == *q ; p++, q++);
|
|
||||||
if ((*p == '\0' || *p == '\n') && *q == '\0') {
|
|
||||||
c = PEOF;
|
|
||||||
if (*p == '\n') {
|
|
||||||
plinno++;
|
|
||||||
needprompt = doprompt;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
pushstring(line, strlen(line), NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
goto checkend_return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse a redirection operator. The variable "out" points to a string
|
* Parse a redirection operator. The variable "out" points to a string
|
||||||
* specifying the fd to be redirected. The variable "c" contains the
|
* specifying the fd to be redirected. The variable "c" contains the
|
||||||
@ -1915,7 +1921,7 @@ char *
|
|||||||
getprompt(void *unused __unused)
|
getprompt(void *unused __unused)
|
||||||
{
|
{
|
||||||
static char ps[PROMPTLEN];
|
static char ps[PROMPTLEN];
|
||||||
char *fmt;
|
const char *fmt;
|
||||||
const char *pwd;
|
const char *pwd;
|
||||||
int i, trim;
|
int i, trim;
|
||||||
static char internal_error[] = "??";
|
static char internal_error[] = "??";
|
||||||
@ -2029,7 +2035,7 @@ expandstr(const char *ps)
|
|||||||
parser_temp = NULL;
|
parser_temp = NULL;
|
||||||
setinputstring(ps, 1);
|
setinputstring(ps, 1);
|
||||||
doprompt = 0;
|
doprompt = 0;
|
||||||
readtoken1(pgetc(), DQSYNTAX, "\n\n", 0);
|
readtoken1(pgetc(), DQSYNTAX, "", 0);
|
||||||
if (backquotelist != NULL)
|
if (backquotelist != NULL)
|
||||||
error("Command substitution not allowed here");
|
error("Command substitution not allowed here");
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
|
.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd September 4, 2014
|
.Dd September 21, 2014
|
||||||
.Dt SH 1
|
.Dt SH 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -590,7 +590,8 @@ the following actions:
|
|||||||
Leading words of the form
|
Leading words of the form
|
||||||
.Dq Li name=value
|
.Dq Li name=value
|
||||||
are stripped off and assigned to the environment of
|
are stripped off and assigned to the environment of
|
||||||
the simple command.
|
the simple command
|
||||||
|
(they do not affect expansions).
|
||||||
Redirection operators and
|
Redirection operators and
|
||||||
their arguments (as described below) are stripped
|
their arguments (as described below) are stripped
|
||||||
off and saved for processing.
|
off and saved for processing.
|
||||||
|
@ -100,6 +100,7 @@ FILES+= jobid2.0
|
|||||||
FILES+= kill1.0 kill2.0
|
FILES+= kill1.0 kill2.0
|
||||||
FILES+= lineno.0 lineno.0.stdout
|
FILES+= lineno.0 lineno.0.stdout
|
||||||
FILES+= lineno2.0
|
FILES+= lineno2.0
|
||||||
|
FILES+= lineno3.0 lineno3.0.stdout
|
||||||
FILES+= local1.0
|
FILES+= local1.0
|
||||||
FILES+= local2.0
|
FILES+= local2.0
|
||||||
FILES+= local3.0
|
FILES+= local3.0
|
||||||
|
6
bin/sh/tests/builtins/lineno3.0
Normal file
6
bin/sh/tests/builtins/lineno3.0
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# $FreeBSD$
|
||||||
|
|
||||||
|
echo before: $LINENO
|
||||||
|
dummy=$'a\0
|
||||||
|
'
|
||||||
|
echo after: $LINENO
|
2
bin/sh/tests/builtins/lineno3.0.stdout
Normal file
2
bin/sh/tests/builtins/lineno3.0.stdout
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
before: 3
|
||||||
|
after: 6
|
@ -54,6 +54,7 @@ FILES+= heredoc8.0
|
|||||||
FILES+= heredoc9.0
|
FILES+= heredoc9.0
|
||||||
FILES+= heredoc10.0
|
FILES+= heredoc10.0
|
||||||
FILES+= heredoc11.0
|
FILES+= heredoc11.0
|
||||||
|
FILES+= heredoc12.0
|
||||||
FILES+= no-space1.0
|
FILES+= no-space1.0
|
||||||
FILES+= no-space2.0
|
FILES+= no-space2.0
|
||||||
FILES+= only-redir1.0
|
FILES+= only-redir1.0
|
||||||
|
47
bin/sh/tests/parser/heredoc12.0
Normal file
47
bin/sh/tests/parser/heredoc12.0
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# $FreeBSD$
|
||||||
|
|
||||||
|
failures=0
|
||||||
|
|
||||||
|
check() {
|
||||||
|
if ! eval "[ $* ]"; then
|
||||||
|
echo "Failed: $*"
|
||||||
|
: $((failures += 1))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
longmark=`printf %01000d 4`
|
||||||
|
longmarkstripped=`printf %0999d 0`
|
||||||
|
|
||||||
|
check '"$(cat <<'"$longmark
|
||||||
|
$longmark"'
|
||||||
|
echo yes)" = "yes"'
|
||||||
|
|
||||||
|
check '"$(cat <<\'"$longmark
|
||||||
|
$longmark"'
|
||||||
|
echo yes)" = "yes"'
|
||||||
|
|
||||||
|
check '"$(cat <<'"$longmark
|
||||||
|
yes
|
||||||
|
$longmark"'
|
||||||
|
)" = "yes"'
|
||||||
|
|
||||||
|
check '"$(cat <<\'"$longmark
|
||||||
|
yes
|
||||||
|
$longmark"'
|
||||||
|
)" = "yes"'
|
||||||
|
|
||||||
|
check '"$(cat <<'"$longmark
|
||||||
|
$longmarkstripped
|
||||||
|
$longmark.
|
||||||
|
$longmark"'
|
||||||
|
)" = "'"$longmarkstripped
|
||||||
|
$longmark."'"'
|
||||||
|
|
||||||
|
check '"$(cat <<\'"$longmark
|
||||||
|
$longmarkstripped
|
||||||
|
$longmark.
|
||||||
|
$longmark"'
|
||||||
|
)" = "'"$longmarkstripped
|
||||||
|
$longmark."'"'
|
||||||
|
|
||||||
|
exit $((failures != 0))
|
@ -277,6 +277,19 @@ Generate a header file containing macros that correspond to probes in the
|
|||||||
specified provider definitions.
|
specified provider definitions.
|
||||||
This option should be used to generate a header file that is included by other
|
This option should be used to generate a header file that is included by other
|
||||||
source files for later use with the
|
source files for later use with the
|
||||||
|
.Fl G
|
||||||
|
option.
|
||||||
|
If the
|
||||||
|
.Fl o
|
||||||
|
option is present, the header file is saved using the pathname specified as the
|
||||||
|
argument for that option.
|
||||||
|
If the
|
||||||
|
.Fl o
|
||||||
|
option is not present and the DTrace program is contained within a file whose
|
||||||
|
name is
|
||||||
|
.Ar filename.d ,
|
||||||
|
then the header file is saved using the name
|
||||||
|
.Ar filename.h .
|
||||||
.It Fl H
|
.It Fl H
|
||||||
Print the pathnames of included files when invoking
|
Print the pathnames of included files when invoking
|
||||||
.Xr cpp 1
|
.Xr cpp 1
|
||||||
@ -289,20 +302,6 @@ option to each
|
|||||||
.Xr cpp 1
|
.Xr cpp 1
|
||||||
invocation, causing it to display the list of pathnames, one for each line, to
|
invocation, causing it to display the list of pathnames, one for each line, to
|
||||||
standard error.
|
standard error.
|
||||||
.Fl G
|
|
||||||
option.
|
|
||||||
If the
|
|
||||||
.Fl o
|
|
||||||
option
|
|
||||||
is present, the header file is saved using the pathname specified as the
|
|
||||||
argument for that option.
|
|
||||||
If the
|
|
||||||
.Fl o
|
|
||||||
option is not present and the DTrace program is contained with a file whose
|
|
||||||
name is
|
|
||||||
.Ar filename.d ,
|
|
||||||
then the header file is saved using the name
|
|
||||||
.Ar filename.h .
|
|
||||||
.It Fl i Ar probe-id Op Oo Ar predicate Oc Ar action
|
.It Fl i Ar probe-id Op Oo Ar predicate Oc Ar action
|
||||||
Specify probe identifier
|
Specify probe identifier
|
||||||
.Ar ( probe-id )
|
.Ar ( probe-id )
|
||||||
|
@ -710,6 +710,9 @@ list_probe(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp, void *arg)
|
|||||||
if (g_verbose && dtrace_probe_info(dtp, pdp, &p) == 0)
|
if (g_verbose && dtrace_probe_info(dtp, pdp, &p) == 0)
|
||||||
print_probe_info(&p);
|
print_probe_info(&p);
|
||||||
|
|
||||||
|
if (g_intr != 0)
|
||||||
|
return (1);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1220,11 +1223,34 @@ intr(int signo)
|
|||||||
g_impatient = 1;
|
g_impatient = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
installsighands(void)
|
||||||
|
{
|
||||||
|
struct sigaction act, oact;
|
||||||
|
|
||||||
|
(void) sigemptyset(&act.sa_mask);
|
||||||
|
act.sa_flags = 0;
|
||||||
|
act.sa_handler = intr;
|
||||||
|
|
||||||
|
if (sigaction(SIGINT, NULL, &oact) == 0 && oact.sa_handler != SIG_IGN)
|
||||||
|
(void) sigaction(SIGINT, &act, NULL);
|
||||||
|
|
||||||
|
if (sigaction(SIGTERM, NULL, &oact) == 0 && oact.sa_handler != SIG_IGN)
|
||||||
|
(void) sigaction(SIGTERM, &act, NULL);
|
||||||
|
|
||||||
|
#if !defined(sun)
|
||||||
|
if (sigaction(SIGPIPE, NULL, &oact) == 0 && oact.sa_handler != SIG_IGN)
|
||||||
|
(void) sigaction(SIGPIPE, &act, NULL);
|
||||||
|
|
||||||
|
if (sigaction(SIGUSR1, NULL, &oact) == 0 && oact.sa_handler != SIG_IGN)
|
||||||
|
(void) sigaction(SIGUSR1, &act, NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
dtrace_bufdesc_t buf;
|
dtrace_bufdesc_t buf;
|
||||||
struct sigaction act, oact;
|
|
||||||
dtrace_status_t status[2];
|
dtrace_status_t status[2];
|
||||||
dtrace_optval_t opt;
|
dtrace_optval_t opt;
|
||||||
dtrace_cmd_t *dcp;
|
dtrace_cmd_t *dcp;
|
||||||
@ -1776,6 +1802,8 @@ main(int argc, char *argv[])
|
|||||||
if (g_ofile != NULL && (g_ofp = fopen(g_ofile, "a")) == NULL)
|
if (g_ofile != NULL && (g_ofp = fopen(g_ofile, "a")) == NULL)
|
||||||
fatal("failed to open output file '%s'", g_ofile);
|
fatal("failed to open output file '%s'", g_ofile);
|
||||||
|
|
||||||
|
installsighands();
|
||||||
|
|
||||||
oprintf("%5s %10s %17s %33s %s\n",
|
oprintf("%5s %10s %17s %33s %s\n",
|
||||||
"ID", "PROVIDER", "MODULE", "FUNCTION", "NAME");
|
"ID", "PROVIDER", "MODULE", "FUNCTION", "NAME");
|
||||||
|
|
||||||
@ -1861,20 +1889,7 @@ main(int argc, char *argv[])
|
|||||||
if (opt != DTRACEOPT_UNSET)
|
if (opt != DTRACEOPT_UNSET)
|
||||||
notice("allowing destructive actions\n");
|
notice("allowing destructive actions\n");
|
||||||
|
|
||||||
(void) sigemptyset(&act.sa_mask);
|
installsighands();
|
||||||
act.sa_flags = 0;
|
|
||||||
act.sa_handler = intr;
|
|
||||||
|
|
||||||
if (sigaction(SIGINT, NULL, &oact) == 0 && oact.sa_handler != SIG_IGN)
|
|
||||||
(void) sigaction(SIGINT, &act, NULL);
|
|
||||||
|
|
||||||
if (sigaction(SIGTERM, NULL, &oact) == 0 && oact.sa_handler != SIG_IGN)
|
|
||||||
(void) sigaction(SIGTERM, &act, NULL);
|
|
||||||
|
|
||||||
#if !defined(sun)
|
|
||||||
if (sigaction(SIGUSR1, NULL, &oact) == 0 && oact.sa_handler != SIG_IGN)
|
|
||||||
(void) sigaction(SIGUSR1, &act, NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now that tracing is active and we are ready to consume trace data,
|
* Now that tracing is active and we are ready to consume trace data,
|
||||||
|
@ -34,14 +34,14 @@
|
|||||||
* leading underscores.
|
* leading underscores.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma weak _go = go
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
go(int a)
|
go(int a)
|
||||||
{
|
{
|
||||||
return (a + 1);
|
return (a + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma weak _go = go
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle(int sig)
|
handle(int sig)
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@ dtrace=$1
|
|||||||
t="season_8_mountain_of_madness_t"
|
t="season_8_mountain_of_madness_t"
|
||||||
pid=$$
|
pid=$$
|
||||||
|
|
||||||
rc=`$dtrace -n "BEGIN{ trace(pid$pid`$t)0); }"`
|
$dtrace -n "BEGIN{ trace(pid$pid\`$t)0); }"
|
||||||
|
rc=$?
|
||||||
|
|
||||||
exit $rc
|
exit $rc
|
||||||
|
@ -30,6 +30,7 @@ dtrace=$1
|
|||||||
t="season_8_mountain_of_madness_t"
|
t="season_8_mountain_of_madness_t"
|
||||||
pid=$$
|
pid=$$
|
||||||
|
|
||||||
rc=`$dtrace -n "BEGIN{ trace(pid`$t)0); }"` -p $pid
|
$dtrace -n "BEGIN{ trace(pid$pid\`$t)0); }" -p $pid
|
||||||
|
rc=$?
|
||||||
|
|
||||||
exit $rc
|
exit $rc
|
||||||
|
@ -31,7 +31,7 @@ dtrace=$1
|
|||||||
t="zelda_info_t"
|
t="zelda_info_t"
|
||||||
exe="tst.chasestrings.exe"
|
exe="tst.chasestrings.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -25,10 +25,10 @@ if [ $# != 1 ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dtrace=$1
|
dtrace=$1
|
||||||
t="season_7_lisa_the_vegetrian_t *"
|
t="season_7_lisa_the_vegetarian_t *"
|
||||||
exe="tst.aouttype.exe"
|
exe="tst.aouttype.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
@ -37,7 +37,8 @@ fi
|
|||||||
./$exe &
|
./$exe &
|
||||||
pid=$!
|
pid=$!
|
||||||
|
|
||||||
rc=`$dtrace -n "BEGIN{ trace((pid$pid\`$t)0); exit(0); }"`
|
$dtrace -n "BEGIN{ trace((pid$pid\`$t)0); exit(0); }"
|
||||||
|
rc=$?
|
||||||
|
|
||||||
kill -9 $pid
|
kill -9 $pid
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ dtrace=$1
|
|||||||
t="zelda_info_t"
|
t="zelda_info_t"
|
||||||
exe="tst.chasestrings.exe"
|
exe="tst.chasestrings.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -29,7 +29,7 @@ dtrace=$1
|
|||||||
t="int"
|
t="int"
|
||||||
exe="tst.libtype.exe"
|
exe="tst.libtype.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -eq 0 ]]; then
|
if [[ $? -eq 0 ]]; then
|
||||||
echo "CTF exists in $exe, that's a bug" >&2
|
echo "CTF exists in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
@ -38,7 +38,8 @@ fi
|
|||||||
./$exe &
|
./$exe &
|
||||||
pid=$!
|
pid=$!
|
||||||
|
|
||||||
rc=`$dtrace -n "BEGIN{ trace((pid$pid\`$t)0); exit(0); }"`
|
$dtrace -n "BEGIN{ trace((pid$pid\`$t)0); exit(0); }"
|
||||||
|
rc=$?
|
||||||
|
|
||||||
kill -9 $pid
|
kill -9 $pid
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ dtrace=$1
|
|||||||
t="final_fantasy_info_t"
|
t="final_fantasy_info_t"
|
||||||
exe="tst.printtype.exe"
|
exe="tst.printtype.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -29,7 +29,7 @@ dtrace=$1
|
|||||||
t="final_fantasy_info_t"
|
t="final_fantasy_info_t"
|
||||||
exe="tst.printtype.exe"
|
exe="tst.printtype.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -28,7 +28,7 @@ dtrace=$1
|
|||||||
t="final_fantasy_info_t"
|
t="final_fantasy_info_t"
|
||||||
exe="tst.printtype.exe"
|
exe="tst.printtype.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -29,7 +29,7 @@ dtrace=$1
|
|||||||
t="final_fantasy_info_t"
|
t="final_fantasy_info_t"
|
||||||
exe="tst.printtype.exe"
|
exe="tst.printtype.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -29,7 +29,7 @@ dtrace=$1
|
|||||||
t="zelda_info_t"
|
t="zelda_info_t"
|
||||||
exe="tst.chasestrings.exe"
|
exe="tst.chasestrings.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
@ -38,7 +38,7 @@ fi
|
|||||||
./$exe &
|
./$exe &
|
||||||
pid=$!
|
pid=$!
|
||||||
|
|
||||||
$dtrace -32 -qs /dev/stdin <<EOF
|
$dtrace -qs /dev/stdin <<EOF
|
||||||
typedef struct info {
|
typedef struct info {
|
||||||
char *zi_gamename;
|
char *zi_gamename;
|
||||||
int zi_ndungeons;
|
int zi_ndungeons;
|
||||||
|
@ -28,7 +28,7 @@ fi
|
|||||||
dtrace=$1
|
dtrace=$1
|
||||||
exe="tst.chasestrings.exe"
|
exe="tst.chasestrings.exe"
|
||||||
|
|
||||||
elfdump "./$exe" | grep -q '.SUNW_ctf'
|
elfdump -c "./$exe" | grep -Fq 'sh_name: .SUNW_ctf'
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
echo "CTF does not exist in $exe, that's a bug" >&2
|
echo "CTF does not exist in $exe, that's a bug" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -414,7 +414,7 @@ or smaller can take advantage of this feature.
|
|||||||
When this feature is enabled, the contents of highly-compressible blocks are
|
When this feature is enabled, the contents of highly-compressible blocks are
|
||||||
stored in the block "pointer" itself
|
stored in the block "pointer" itself
|
||||||
.Po a misnomer in this case, as it contains
|
.Po a misnomer in this case, as it contains
|
||||||
the compresseed data, rather than a pointer to its location on disk
|
the compressed data, rather than a pointer to its location on disk
|
||||||
.Pc .
|
.Pc .
|
||||||
Thus
|
Thus
|
||||||
the space of the block
|
the space of the block
|
||||||
|
@ -2857,10 +2857,7 @@ print_pool(zpool_handle_t *zhp, list_cbdata_t *cb)
|
|||||||
|
|
||||||
right_justify = B_FALSE;
|
right_justify = B_FALSE;
|
||||||
if (pl->pl_prop != ZPROP_INVAL) {
|
if (pl->pl_prop != ZPROP_INVAL) {
|
||||||
if (pl->pl_prop == ZPOOL_PROP_EXPANDSZ &&
|
if (zpool_get_prop(zhp, pl->pl_prop, property,
|
||||||
zpool_get_prop_int(zhp, pl->pl_prop, NULL) == 0)
|
|
||||||
propstr = "-";
|
|
||||||
else if (zpool_get_prop(zhp, pl->pl_prop, property,
|
|
||||||
sizeof (property), NULL, cb->cb_literal) != 0)
|
sizeof (property), NULL, cb->cb_literal) != 0)
|
||||||
propstr = "-";
|
propstr = "-";
|
||||||
else
|
else
|
||||||
@ -2894,21 +2891,37 @@ print_pool(zpool_handle_t *zhp, list_cbdata_t *cb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_one_column(zpool_prop_t prop, uint64_t value, boolean_t scripted)
|
print_one_column(zpool_prop_t prop, uint64_t value, boolean_t scripted,
|
||||||
|
boolean_t valid)
|
||||||
{
|
{
|
||||||
char propval[64];
|
char propval[64];
|
||||||
boolean_t fixed;
|
boolean_t fixed;
|
||||||
size_t width = zprop_width(prop, &fixed, ZFS_TYPE_POOL);
|
size_t width = zprop_width(prop, &fixed, ZFS_TYPE_POOL);
|
||||||
|
|
||||||
|
switch (prop) {
|
||||||
if (prop == ZPOOL_PROP_EXPANDSZ && value == 0)
|
case ZPOOL_PROP_EXPANDSZ:
|
||||||
(void) strlcpy(propval, "-", sizeof (propval));
|
if (value == 0)
|
||||||
else if (prop == ZPOOL_PROP_FRAGMENTATION && value == ZFS_FRAG_INVALID)
|
(void) strlcpy(propval, "-", sizeof (propval));
|
||||||
(void) strlcpy(propval, "-", sizeof (propval));
|
else
|
||||||
else if (prop == ZPOOL_PROP_FRAGMENTATION)
|
zfs_nicenum(value, propval, sizeof (propval));
|
||||||
|
break;
|
||||||
|
case ZPOOL_PROP_FRAGMENTATION:
|
||||||
|
if (value == ZFS_FRAG_INVALID) {
|
||||||
|
(void) strlcpy(propval, "-", sizeof (propval));
|
||||||
|
} else {
|
||||||
|
(void) snprintf(propval, sizeof (propval), "%llu%%",
|
||||||
|
value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ZPOOL_PROP_CAPACITY:
|
||||||
(void) snprintf(propval, sizeof (propval), "%llu%%", value);
|
(void) snprintf(propval, sizeof (propval), "%llu%%", value);
|
||||||
else
|
break;
|
||||||
|
default:
|
||||||
zfs_nicenum(value, propval, sizeof (propval));
|
zfs_nicenum(value, propval, sizeof (propval));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!valid)
|
||||||
|
(void) strlcpy(propval, "-", sizeof (propval));
|
||||||
|
|
||||||
if (scripted)
|
if (scripted)
|
||||||
(void) printf("\t%s", propval);
|
(void) printf("\t%s", propval);
|
||||||
@ -2930,6 +2943,9 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
|
|||||||
(uint64_t **)&vs, &c) == 0);
|
(uint64_t **)&vs, &c) == 0);
|
||||||
|
|
||||||
if (name != NULL) {
|
if (name != NULL) {
|
||||||
|
boolean_t toplevel = (vs->vs_space != 0);
|
||||||
|
uint64_t cap;
|
||||||
|
|
||||||
if (scripted)
|
if (scripted)
|
||||||
(void) printf("\t%s", name);
|
(void) printf("\t%s", name);
|
||||||
else if (strlen(name) + depth > cb->cb_namewidth)
|
else if (strlen(name) + depth > cb->cb_namewidth)
|
||||||
@ -2938,24 +2954,26 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
|
|||||||
(void) printf("%*s%s%*s", depth, "", name,
|
(void) printf("%*s%s%*s", depth, "", name,
|
||||||
(int)(cb->cb_namewidth - strlen(name) - depth), "");
|
(int)(cb->cb_namewidth - strlen(name) - depth), "");
|
||||||
|
|
||||||
/* only toplevel vdevs have capacity stats */
|
/*
|
||||||
if (vs->vs_space == 0) {
|
* Print the properties for the individual vdevs. Some
|
||||||
if (scripted)
|
* properties are only applicable to toplevel vdevs. The
|
||||||
(void) printf("\t-\t-\t-\t-");
|
* 'toplevel' boolean value is passed to the print_one_column()
|
||||||
else
|
* to indicate that the value is valid.
|
||||||
(void) printf(" - - - -");
|
*/
|
||||||
} else {
|
print_one_column(ZPOOL_PROP_SIZE, vs->vs_space, scripted,
|
||||||
print_one_column(ZPOOL_PROP_SIZE, vs->vs_space,
|
toplevel);
|
||||||
scripted);
|
print_one_column(ZPOOL_PROP_ALLOCATED, vs->vs_alloc, scripted,
|
||||||
print_one_column(ZPOOL_PROP_CAPACITY, vs->vs_alloc,
|
toplevel);
|
||||||
scripted);
|
print_one_column(ZPOOL_PROP_FREE, vs->vs_space - vs->vs_alloc,
|
||||||
print_one_column(ZPOOL_PROP_FREE,
|
scripted, toplevel);
|
||||||
vs->vs_space - vs->vs_alloc, scripted);
|
print_one_column(ZPOOL_PROP_EXPANDSZ, vs->vs_esize, scripted,
|
||||||
print_one_column(ZPOOL_PROP_FRAGMENTATION,
|
B_TRUE);
|
||||||
vs->vs_fragmentation, scripted);
|
print_one_column(ZPOOL_PROP_FRAGMENTATION,
|
||||||
}
|
vs->vs_fragmentation, scripted,
|
||||||
print_one_column(ZPOOL_PROP_EXPANDSZ, vs->vs_esize,
|
(vs->vs_fragmentation != ZFS_FRAG_INVALID && toplevel));
|
||||||
scripted);
|
cap = (vs->vs_space == 0) ? 0 :
|
||||||
|
(vs->vs_alloc * 100 / vs->vs_space);
|
||||||
|
print_one_column(ZPOOL_PROP_CAPACITY, cap, scripted, toplevel);
|
||||||
(void) printf("\n");
|
(void) printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3024,7 +3042,8 @@ list_callback(zpool_handle_t *zhp, void *data)
|
|||||||
* -H Scripted mode. Don't display headers, and separate properties
|
* -H Scripted mode. Don't display headers, and separate properties
|
||||||
* by a single tab.
|
* by a single tab.
|
||||||
* -o List of properties to display. Defaults to
|
* -o List of properties to display. Defaults to
|
||||||
* "name,size,allocated,free,capacity,health,altroot"
|
* "name,size,allocated,free,expandsize,fragmentation,capacity,"
|
||||||
|
* "dedupratio,health,altroot"
|
||||||
* -p Diplay values in parsable (exact) format.
|
* -p Diplay values in parsable (exact) format.
|
||||||
* -T Display a timestamp in date(1) or Unix format
|
* -T Display a timestamp in date(1) or Unix format
|
||||||
*
|
*
|
||||||
@ -3038,7 +3057,7 @@ zpool_do_list(int argc, char **argv)
|
|||||||
int ret;
|
int ret;
|
||||||
list_cbdata_t cb = { 0 };
|
list_cbdata_t cb = { 0 };
|
||||||
static char default_props[] =
|
static char default_props[] =
|
||||||
"name,size,allocated,free,fragmentation,expandsize,capacity,"
|
"name,size,allocated,free,expandsize,fragmentation,capacity,"
|
||||||
"dedupratio,health,altroot";
|
"dedupratio,health,altroot";
|
||||||
char *props = default_props;
|
char *props = default_props;
|
||||||
unsigned long interval = 0, count = 0;
|
unsigned long interval = 0, count = 0;
|
||||||
@ -4524,7 +4543,8 @@ is_root_pool(zpool_handle_t *zhp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
root_pool_upgrade_check(zpool_handle_t *zhp, char *poolname, int size) {
|
root_pool_upgrade_check(zpool_handle_t *zhp, char *poolname, int size)
|
||||||
|
{
|
||||||
|
|
||||||
if (poolname[0] == '\0' && is_root_pool(zhp))
|
if (poolname[0] == '\0' && is_root_pool(zhp))
|
||||||
(void) strlcpy(poolname, zpool_get_name(zhp), size);
|
(void) strlcpy(poolname, zpool_get_name(zhp), size);
|
||||||
@ -4623,7 +4643,7 @@ upgrade_cb(zpool_handle_t *zhp, void *arg)
|
|||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
root_pool_upgrade_check(zhp, cbp->cb_poolname,
|
root_pool_upgrade_check(zhp, cbp->cb_poolname,
|
||||||
sizeof(cbp->cb_poolname));
|
sizeof(cbp->cb_poolname));
|
||||||
#endif /* ___FreeBSD__ */
|
#endif /* __FreeBSD__ */
|
||||||
printnl = B_TRUE;
|
printnl = B_TRUE;
|
||||||
|
|
||||||
#ifdef illumos
|
#ifdef illumos
|
||||||
@ -4647,6 +4667,10 @@ upgrade_cb(zpool_handle_t *zhp, void *arg)
|
|||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
cbp->cb_first = B_FALSE;
|
cbp->cb_first = B_FALSE;
|
||||||
printnl = B_TRUE;
|
printnl = B_TRUE;
|
||||||
|
#ifdef __FreeBSD__
|
||||||
|
root_pool_upgrade_check(zhp, cbp->cb_poolname,
|
||||||
|
sizeof(cbp->cb_poolname));
|
||||||
|
#endif /* __FreeBSD__ */
|
||||||
/*
|
/*
|
||||||
* If they did "zpool upgrade -a", then we could
|
* If they did "zpool upgrade -a", then we could
|
||||||
* be doing ioctls to different pools. We need
|
* be doing ioctls to different pools. We need
|
||||||
@ -4788,7 +4812,7 @@ upgrade_one(zpool_handle_t *zhp, void *data)
|
|||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
root_pool_upgrade_check(zhp, cbp->cb_poolname,
|
root_pool_upgrade_check(zhp, cbp->cb_poolname,
|
||||||
sizeof(cbp->cb_poolname));
|
sizeof(cbp->cb_poolname));
|
||||||
#endif /* ___FreeBSD__ */
|
#endif /* __FreeBSD__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cbp->cb_version >= SPA_VERSION_FEATURES) {
|
if (cbp->cb_version >= SPA_VERSION_FEATURES) {
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* Copyright (c) 2013 by Delphix. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -652,6 +653,7 @@ get_replication(nvlist_t *nvroot, boolean_t fatal)
|
|||||||
dontreport = 0;
|
dontreport = 0;
|
||||||
vdev_size = -1ULL;
|
vdev_size = -1ULL;
|
||||||
for (c = 0; c < children; c++) {
|
for (c = 0; c < children; c++) {
|
||||||
|
boolean_t is_replacing, is_spare;
|
||||||
nvlist_t *cnv = child[c];
|
nvlist_t *cnv = child[c];
|
||||||
char *path;
|
char *path;
|
||||||
struct stat64 statbuf;
|
struct stat64 statbuf;
|
||||||
@ -668,16 +670,19 @@ get_replication(nvlist_t *nvroot, boolean_t fatal)
|
|||||||
* If this is a replacing or spare vdev, then
|
* If this is a replacing or spare vdev, then
|
||||||
* get the real first child of the vdev.
|
* get the real first child of the vdev.
|
||||||
*/
|
*/
|
||||||
if (strcmp(childtype,
|
is_replacing = strcmp(childtype,
|
||||||
VDEV_TYPE_REPLACING) == 0 ||
|
VDEV_TYPE_REPLACING) == 0;
|
||||||
strcmp(childtype, VDEV_TYPE_SPARE) == 0) {
|
is_spare = strcmp(childtype,
|
||||||
|
VDEV_TYPE_SPARE) == 0;
|
||||||
|
if (is_replacing || is_spare) {
|
||||||
nvlist_t **rchild;
|
nvlist_t **rchild;
|
||||||
uint_t rchildren;
|
uint_t rchildren;
|
||||||
|
|
||||||
verify(nvlist_lookup_nvlist_array(cnv,
|
verify(nvlist_lookup_nvlist_array(cnv,
|
||||||
ZPOOL_CONFIG_CHILDREN, &rchild,
|
ZPOOL_CONFIG_CHILDREN, &rchild,
|
||||||
&rchildren) == 0);
|
&rchildren) == 0);
|
||||||
assert(rchildren == 2);
|
assert((is_replacing && rchildren == 2)
|
||||||
|
|| (is_spare && rchildren >= 2));
|
||||||
cnv = rchild[0];
|
cnv = rchild[0];
|
||||||
|
|
||||||
verify(nvlist_lookup_string(cnv,
|
verify(nvlist_lookup_string(cnv,
|
||||||
@ -1068,8 +1073,8 @@ is_spare(nvlist_t *config, const char *path)
|
|||||||
* Go through and find any devices that are in use. We rely on libdiskmgt for
|
* Go through and find any devices that are in use. We rely on libdiskmgt for
|
||||||
* the majority of this task.
|
* the majority of this task.
|
||||||
*/
|
*/
|
||||||
static int
|
static boolean_t
|
||||||
check_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
|
is_device_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
|
||||||
boolean_t replacing, boolean_t isspare)
|
boolean_t replacing, boolean_t isspare)
|
||||||
{
|
{
|
||||||
nvlist_t **child;
|
nvlist_t **child;
|
||||||
@ -1078,6 +1083,7 @@ check_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
|
|||||||
int ret;
|
int ret;
|
||||||
char buf[MAXPATHLEN];
|
char buf[MAXPATHLEN];
|
||||||
uint64_t wholedisk;
|
uint64_t wholedisk;
|
||||||
|
boolean_t anyinuse = B_FALSE;
|
||||||
|
|
||||||
verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) == 0);
|
verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) == 0);
|
||||||
|
|
||||||
@ -1102,38 +1108,37 @@ check_in_use(nvlist_t *config, nvlist_t *nv, boolean_t force,
|
|||||||
(void) strlcpy(buf, path, sizeof (buf));
|
(void) strlcpy(buf, path, sizeof (buf));
|
||||||
|
|
||||||
if (is_spare(config, buf))
|
if (is_spare(config, buf))
|
||||||
return (0);
|
return (B_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(type, VDEV_TYPE_DISK) == 0)
|
if (strcmp(type, VDEV_TYPE_DISK) == 0)
|
||||||
ret = check_device(path, force, isspare);
|
ret = check_device(path, force, isspare);
|
||||||
|
else if (strcmp(type, VDEV_TYPE_FILE) == 0)
|
||||||
if (strcmp(type, VDEV_TYPE_FILE) == 0)
|
|
||||||
ret = check_file(path, force, isspare);
|
ret = check_file(path, force, isspare);
|
||||||
|
|
||||||
return (ret);
|
return (ret != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (c = 0; c < children; c++)
|
for (c = 0; c < children; c++)
|
||||||
if ((ret = check_in_use(config, child[c], force,
|
if (is_device_in_use(config, child[c], force, replacing,
|
||||||
replacing, B_FALSE)) != 0)
|
B_FALSE))
|
||||||
return (ret);
|
anyinuse = B_TRUE;
|
||||||
|
|
||||||
if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_SPARES,
|
if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_SPARES,
|
||||||
&child, &children) == 0)
|
&child, &children) == 0)
|
||||||
for (c = 0; c < children; c++)
|
for (c = 0; c < children; c++)
|
||||||
if ((ret = check_in_use(config, child[c], force,
|
if (is_device_in_use(config, child[c], force, replacing,
|
||||||
replacing, B_TRUE)) != 0)
|
B_TRUE))
|
||||||
return (ret);
|
anyinuse = B_TRUE;
|
||||||
|
|
||||||
if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_L2CACHE,
|
if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_L2CACHE,
|
||||||
&child, &children) == 0)
|
&child, &children) == 0)
|
||||||
for (c = 0; c < children; c++)
|
for (c = 0; c < children; c++)
|
||||||
if ((ret = check_in_use(config, child[c], force,
|
if (is_device_in_use(config, child[c], force, replacing,
|
||||||
replacing, B_FALSE)) != 0)
|
B_FALSE))
|
||||||
return (ret);
|
anyinuse = B_TRUE;
|
||||||
|
|
||||||
return (0);
|
return (anyinuse);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
@ -1487,7 +1492,7 @@ make_root_vdev(zpool_handle_t *zhp, int force, int check_rep,
|
|||||||
* uses (such as a dedicated dump device) that even '-f' cannot
|
* uses (such as a dedicated dump device) that even '-f' cannot
|
||||||
* override.
|
* override.
|
||||||
*/
|
*/
|
||||||
if (check_in_use(poolconfig, newroot, force, replacing, B_FALSE) != 0) {
|
if (is_device_in_use(poolconfig, newroot, force, replacing, B_FALSE)) {
|
||||||
nvlist_free(newroot);
|
nvlist_free(newroot);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
@ -274,7 +274,7 @@ ctf_fdopen(int fd, int *errp)
|
|||||||
*/
|
*/
|
||||||
if (nbytes >= (ssize_t) sizeof (Elf32_Ehdr) &&
|
if (nbytes >= (ssize_t) sizeof (Elf32_Ehdr) &&
|
||||||
bcmp(&hdr.e32.e_ident[EI_MAG0], ELFMAG, SELFMAG) == 0) {
|
bcmp(&hdr.e32.e_ident[EI_MAG0], ELFMAG, SELFMAG) == 0) {
|
||||||
#ifdef _BIG_ENDIAN
|
#if BYTE_ORDER == _BIG_ENDIAN
|
||||||
uchar_t order = ELFDATA2MSB;
|
uchar_t order = ELFDATA2MSB;
|
||||||
#else
|
#else
|
||||||
uchar_t order = ELFDATA2LSB;
|
uchar_t order = ELFDATA2LSB;
|
||||||
|
@ -90,36 +90,6 @@ dprintf(int debug, const char *fmt, ...)
|
|||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(sun)
|
|
||||||
static void
|
|
||||||
fixsymbol(Elf *e, Elf_Data *data, size_t idx, int nprobes, char *buf,
|
|
||||||
dof_sec_t *sec, int *fixedprobes, char *dofstrtab)
|
|
||||||
{
|
|
||||||
GElf_Sym sym;
|
|
||||||
char *s;
|
|
||||||
unsigned char *funcname;
|
|
||||||
dof_probe_t *prb;
|
|
||||||
int j = 0;
|
|
||||||
int ndx;
|
|
||||||
|
|
||||||
while (gelf_getsym(data, j++, &sym) != NULL) {
|
|
||||||
prb = (dof_probe_t *)(void *)(buf + sec->dofs_offset);
|
|
||||||
|
|
||||||
for (ndx = nprobes; ndx; ndx--, prb += 1) {
|
|
||||||
funcname = dofstrtab + prb->dofpr_func;
|
|
||||||
s = elf_strptr(e, idx, sym.st_name);
|
|
||||||
if (strcmp(s, funcname) == 0) {
|
|
||||||
dprintf(1, "fixing %s() symbol\n", s);
|
|
||||||
prb->dofpr_addr = sym.st_value;
|
|
||||||
(*fixedprobes)++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (*fixedprobes == nprobes)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(sun)
|
#if defined(sun)
|
||||||
#pragma init(dtrace_dof_init)
|
#pragma init(dtrace_dof_init)
|
||||||
#else
|
#else
|
||||||
@ -145,24 +115,18 @@ dtrace_dof_init(void)
|
|||||||
Lmid_t lmid;
|
Lmid_t lmid;
|
||||||
#else
|
#else
|
||||||
u_long lmid = 0;
|
u_long lmid = 0;
|
||||||
dof_sec_t *sec, *secstart, *dofstrtab, *dofprobes;
|
|
||||||
dof_provider_t *dofprovider;
|
|
||||||
size_t i;
|
|
||||||
#endif
|
#endif
|
||||||
int fd;
|
int fd;
|
||||||
const char *p;
|
const char *p;
|
||||||
#if !defined(sun)
|
#if !defined(sun)
|
||||||
Elf *e;
|
Elf *e;
|
||||||
Elf_Scn *scn = NULL;
|
Elf_Scn *scn = NULL;
|
||||||
Elf_Data *symtabdata = NULL, *dynsymdata = NULL, *dofdata = NULL;
|
Elf_Data *dofdata = NULL;
|
||||||
dof_hdr_t *dof_next = NULL;
|
dof_hdr_t *dof_next = NULL;
|
||||||
GElf_Shdr shdr;
|
GElf_Shdr shdr;
|
||||||
int efd, nprobes;
|
int efd;
|
||||||
char *s;
|
char *s;
|
||||||
char *dofstrtabraw;
|
size_t shstridx;
|
||||||
size_t shstridx, symtabidx = 0, dynsymidx = 0;
|
|
||||||
unsigned char *buf;
|
|
||||||
int fixedprobes;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (getenv("DTRACE_DOF_INIT_DISABLE") != NULL)
|
if (getenv("DTRACE_DOF_INIT_DISABLE") != NULL)
|
||||||
@ -183,7 +147,6 @@ dtrace_dof_init(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if ((modname = strrchr(lmp->l_name, '/')) == NULL)
|
if ((modname = strrchr(lmp->l_name, '/')) == NULL)
|
||||||
modname = lmp->l_name;
|
modname = lmp->l_name;
|
||||||
else
|
else
|
||||||
@ -203,15 +166,9 @@ dtrace_dof_init(void)
|
|||||||
dof = NULL;
|
dof = NULL;
|
||||||
while ((scn = elf_nextscn(e, scn)) != NULL) {
|
while ((scn = elf_nextscn(e, scn)) != NULL) {
|
||||||
gelf_getshdr(scn, &shdr);
|
gelf_getshdr(scn, &shdr);
|
||||||
if (shdr.sh_type == SHT_SYMTAB) {
|
if (shdr.sh_type == SHT_SUNW_dof) {
|
||||||
symtabidx = shdr.sh_link;
|
|
||||||
symtabdata = elf_getdata(scn, NULL);
|
|
||||||
} else if (shdr.sh_type == SHT_DYNSYM) {
|
|
||||||
dynsymidx = shdr.sh_link;
|
|
||||||
dynsymdata = elf_getdata(scn, NULL);
|
|
||||||
} else if (shdr.sh_type == SHT_PROGBITS) {
|
|
||||||
s = elf_strptr(e, shstridx, shdr.sh_name);
|
s = elf_strptr(e, shstridx, shdr.sh_name);
|
||||||
if (s && strcmp(s, ".SUNW_dof") == 0) {
|
if (s != NULL && strcmp(s, ".SUNW_dof") == 0) {
|
||||||
dofdata = elf_getdata(scn, NULL);
|
dofdata = elf_getdata(scn, NULL);
|
||||||
dof = dofdata->d_buf;
|
dof = dofdata->d_buf;
|
||||||
}
|
}
|
||||||
@ -225,7 +182,6 @@ dtrace_dof_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while ((char *) dof < (char *) dofdata->d_buf + dofdata->d_size) {
|
while ((char *) dof < (char *) dofdata->d_buf + dofdata->d_size) {
|
||||||
fixedprobes = 0;
|
|
||||||
dof_next = (void *) ((char *) dof + dof->dofh_filesz);
|
dof_next = (void *) ((char *) dof + dof->dofh_filesz);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -273,76 +229,6 @@ dtrace_dof_init(void)
|
|||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#if !defined(sun)
|
|
||||||
/*
|
|
||||||
* We need to fix the base address of each probe since this wasn't
|
|
||||||
* done by ld(1). (ld(1) needs to grow support for parsing the
|
|
||||||
* SUNW_dof section).
|
|
||||||
*
|
|
||||||
* The complexity of this is not that great. The first for loop
|
|
||||||
* iterates over the sections inside the DOF file. There are usually
|
|
||||||
* 10 sections here. We asume the STRTAB section comes first and the
|
|
||||||
* PROBES section comes after. Since we are only interested in fixing
|
|
||||||
* data inside the PROBES section we quit the for loop after processing
|
|
||||||
* the PROBES section. It's usually the case that the first section
|
|
||||||
* is the STRTAB section and the second section is the PROBES section,
|
|
||||||
* so this for loop is not meaningful when doing complexity analysis.
|
|
||||||
*
|
|
||||||
* After finding the probes section, we iterate over the symbols
|
|
||||||
* in the symtab section. When we find a symbol name that matches
|
|
||||||
* the probe function name, we fix it. If we have fixed all the
|
|
||||||
* probes, we exit all the loops and we are done.
|
|
||||||
* The number of probes is given by the variable 'nprobes' and this
|
|
||||||
* depends entirely on the user, but some optimizations were done.
|
|
||||||
*
|
|
||||||
* We are assuming the number of probes is less than the number of
|
|
||||||
* symbols (libc can have 4k symbols, for example).
|
|
||||||
*/
|
|
||||||
secstart = sec = (dof_sec_t *)(dof + 1);
|
|
||||||
buf = (char *)dof;
|
|
||||||
for (i = 0; i < dof->dofh_secnum; i++, sec++) {
|
|
||||||
if (sec->dofs_type != DOF_SECT_PROVIDER)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
dofprovider = (void *) (buf + sec->dofs_offset);
|
|
||||||
dofstrtab = secstart + dofprovider->dofpv_strtab;
|
|
||||||
dofprobes = secstart + dofprovider->dofpv_probes;
|
|
||||||
|
|
||||||
if (dofstrtab->dofs_type != DOF_SECT_STRTAB) {
|
|
||||||
fprintf(stderr, "WARNING: expected STRTAB section, but got %d\n",
|
|
||||||
dofstrtab->dofs_type);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (dofprobes->dofs_type != DOF_SECT_PROBES) {
|
|
||||||
fprintf(stderr, "WARNING: expected PROBES section, but got %d\n",
|
|
||||||
dofprobes->dofs_type);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dprintf(1, "found provider %p\n", dofprovider);
|
|
||||||
dofstrtabraw = (char *)(buf + dofstrtab->dofs_offset);
|
|
||||||
nprobes = dofprobes->dofs_size / dofprobes->dofs_entsize;
|
|
||||||
fixsymbol(e, symtabdata, symtabidx, nprobes, buf, dofprobes, &fixedprobes,
|
|
||||||
dofstrtabraw);
|
|
||||||
if (fixedprobes != nprobes) {
|
|
||||||
/*
|
|
||||||
* If we haven't fixed all the probes using the
|
|
||||||
* symtab section, look inside the dynsym
|
|
||||||
* section.
|
|
||||||
*/
|
|
||||||
fixsymbol(e, dynsymdata, dynsymidx, nprobes, buf, dofprobes,
|
|
||||||
&fixedprobes, dofstrtabraw);
|
|
||||||
}
|
|
||||||
if (fixedprobes != nprobes) {
|
|
||||||
fprintf(stderr, "WARNING: number of probes "
|
|
||||||
"fixed does not match the number of "
|
|
||||||
"defined probes (%d != %d, "
|
|
||||||
"respectively)\n", fixedprobes, nprobes);
|
|
||||||
fprintf(stderr, "WARNING: some probes might "
|
|
||||||
"not fire or your program might crash\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if ((gen = ioctl(fd, DTRACEHIOC_ADDDOF, &dh)) == -1)
|
if ((gen = ioctl(fd, DTRACEHIOC_ADDDOF, &dh)) == -1)
|
||||||
dprintf(1, "DTrace ioctl failed for DOF at %p", dof);
|
dprintf(1, "DTrace ioctl failed for DOF at %p", dof);
|
||||||
else {
|
else {
|
||||||
|
@ -322,7 +322,11 @@ prepare_elf64(dtrace_hdl_t *dtp, const dof_hdr_t *dof, dof_elf64_t *dep)
|
|||||||
char *strtab;
|
char *strtab;
|
||||||
int i, j, nrel;
|
int i, j, nrel;
|
||||||
size_t strtabsz = 1;
|
size_t strtabsz = 1;
|
||||||
|
#if defined(sun)
|
||||||
uint32_t count = 0;
|
uint32_t count = 0;
|
||||||
|
#else
|
||||||
|
uint64_t count = 0;
|
||||||
|
#endif
|
||||||
size_t base;
|
size_t base;
|
||||||
Elf64_Sym *sym;
|
Elf64_Sym *sym;
|
||||||
Elf64_Rela *rel;
|
Elf64_Rela *rel;
|
||||||
@ -418,7 +422,6 @@ prepare_elf64(dtrace_hdl_t *dtp, const dof_hdr_t *dof, dof_elf64_t *dep)
|
|||||||
s = &dofs[dofrh->dofr_tgtsec];
|
s = &dofs[dofrh->dofr_tgtsec];
|
||||||
|
|
||||||
for (j = 0; j < nrel; j++) {
|
for (j = 0; j < nrel; j++) {
|
||||||
#ifdef DOODAD
|
|
||||||
#if defined(__arm__)
|
#if defined(__arm__)
|
||||||
/* XXX */
|
/* XXX */
|
||||||
#elif defined(__mips__)
|
#elif defined(__mips__)
|
||||||
@ -431,8 +434,13 @@ prepare_elf64(dtrace_hdl_t *dtp, const dof_hdr_t *dof, dof_elf64_t *dep)
|
|||||||
#elif defined(__i386) || defined(__amd64)
|
#elif defined(__i386) || defined(__amd64)
|
||||||
rel->r_offset = s->dofs_offset +
|
rel->r_offset = s->dofs_offset +
|
||||||
dofr[j].dofr_offset;
|
dofr[j].dofr_offset;
|
||||||
|
#if defined(sun)
|
||||||
rel->r_info = ELF64_R_INFO(count + dep->de_global,
|
rel->r_info = ELF64_R_INFO(count + dep->de_global,
|
||||||
R_AMD64_64);
|
R_AMD64_64);
|
||||||
|
#else
|
||||||
|
rel->r_info = ELF64_R_INFO(count + dep->de_global,
|
||||||
|
R_X86_64_RELATIVE);
|
||||||
|
#endif
|
||||||
#elif defined(__sparc)
|
#elif defined(__sparc)
|
||||||
rel->r_offset = s->dofs_offset +
|
rel->r_offset = s->dofs_offset +
|
||||||
dofr[j].dofr_offset;
|
dofr[j].dofr_offset;
|
||||||
@ -440,7 +448,6 @@ prepare_elf64(dtrace_hdl_t *dtp, const dof_hdr_t *dof, dof_elf64_t *dep)
|
|||||||
R_SPARC_64);
|
R_SPARC_64);
|
||||||
#else
|
#else
|
||||||
#error unknown ISA
|
#error unknown ISA
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sym->st_name = base + dofr[j].dofr_name - 1;
|
sym->st_name = base + dofr[j].dofr_name - 1;
|
||||||
@ -704,7 +711,11 @@ dump_elf64(dtrace_hdl_t *dtp, const dof_hdr_t *dof, int fd)
|
|||||||
|
|
||||||
shp = &elf_file.shdr[ESHDR_DOF];
|
shp = &elf_file.shdr[ESHDR_DOF];
|
||||||
shp->sh_name = 11; /* DTRACE_SHSTRTAB64[11] = ".SUNW_dof" */
|
shp->sh_name = 11; /* DTRACE_SHSTRTAB64[11] = ".SUNW_dof" */
|
||||||
|
#if defined(sun)
|
||||||
shp->sh_flags = SHF_ALLOC;
|
shp->sh_flags = SHF_ALLOC;
|
||||||
|
#else
|
||||||
|
shp->sh_flags = SHF_WRITE | SHF_ALLOC;
|
||||||
|
#endif
|
||||||
shp->sh_type = SHT_SUNW_dof;
|
shp->sh_type = SHT_SUNW_dof;
|
||||||
shp->sh_offset = off;
|
shp->sh_offset = off;
|
||||||
shp->sh_size = dof->dofh_filesz;
|
shp->sh_size = dof->dofh_filesz;
|
||||||
@ -1662,19 +1673,6 @@ dtrace_program_link(dtrace_hdl_t *dtp, dtrace_prog_t *pgp, uint_t dflags,
|
|||||||
{
|
{
|
||||||
#if !defined(sun)
|
#if !defined(sun)
|
||||||
char tfile[PATH_MAX];
|
char tfile[PATH_MAX];
|
||||||
Elf *e;
|
|
||||||
Elf_Scn *scn;
|
|
||||||
Elf_Data *data;
|
|
||||||
GElf_Shdr shdr;
|
|
||||||
int efd;
|
|
||||||
size_t stridx;
|
|
||||||
unsigned char *buf;
|
|
||||||
char *s;
|
|
||||||
int loc;
|
|
||||||
GElf_Ehdr ehdr;
|
|
||||||
Elf_Scn *scn0;
|
|
||||||
GElf_Shdr shdr0;
|
|
||||||
uint64_t off, rc;
|
|
||||||
#endif
|
#endif
|
||||||
char drti[PATH_MAX];
|
char drti[PATH_MAX];
|
||||||
dof_hdr_t *dof;
|
dof_hdr_t *dof;
|
||||||
@ -1810,21 +1808,21 @@ dtrace_program_link(dtrace_hdl_t *dtp, dtrace_prog_t *pgp, uint_t dflags,
|
|||||||
(void) unlink(file);
|
(void) unlink(file);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(sun)
|
|
||||||
if (dtp->dt_oflags & DTRACE_O_LP64)
|
if (dtp->dt_oflags & DTRACE_O_LP64)
|
||||||
status = dump_elf64(dtp, dof, fd);
|
status = dump_elf64(dtp, dof, fd);
|
||||||
else
|
else
|
||||||
status = dump_elf32(dtp, dof, fd);
|
status = dump_elf32(dtp, dof, fd);
|
||||||
|
|
||||||
|
#if defined(sun)
|
||||||
if (status != 0 || lseek(fd, 0, SEEK_SET) != 0) {
|
if (status != 0 || lseek(fd, 0, SEEK_SET) != 0) {
|
||||||
return (dt_link_error(dtp, NULL, -1, NULL,
|
return (dt_link_error(dtp, NULL, -1, NULL,
|
||||||
"failed to write %s: %s", file, strerror(errno)));
|
"failed to write %s: %s", file, strerror(errno)));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* We don't write the ELF header, just the DOF section */
|
if (status != 0)
|
||||||
if (dt_write(dtp, fd, dof, dof->dofh_filesz) < dof->dofh_filesz)
|
|
||||||
return (dt_link_error(dtp, NULL, -1, NULL,
|
return (dt_link_error(dtp, NULL, -1, NULL,
|
||||||
"failed to write %s: %s", tfile, strerror(errno)));
|
"failed to write %s: %s", tfile,
|
||||||
|
strerror(dtrace_errno(dtp))));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!dtp->dt_lazyload) {
|
if (!dtp->dt_lazyload) {
|
||||||
@ -1846,7 +1844,7 @@ dtrace_program_link(dtrace_hdl_t *dtp, dtrace_prog_t *pgp, uint_t dflags,
|
|||||||
|
|
||||||
(void) snprintf(cmd, len, fmt, dtp->dt_ld_path, file, fd, drti);
|
(void) snprintf(cmd, len, fmt, dtp->dt_ld_path, file, fd, drti);
|
||||||
#else
|
#else
|
||||||
const char *fmt = "%s -o %s -r %s";
|
const char *fmt = "%s -o %s -r %s %s";
|
||||||
|
|
||||||
#if defined(__amd64__)
|
#if defined(__amd64__)
|
||||||
/*
|
/*
|
||||||
@ -1868,10 +1866,9 @@ dtrace_program_link(dtrace_hdl_t *dtp, dtrace_prog_t *pgp, uint_t dflags,
|
|||||||
len = snprintf(&tmp, 1, fmt, dtp->dt_ld_path, file, tfile,
|
len = snprintf(&tmp, 1, fmt, dtp->dt_ld_path, file, tfile,
|
||||||
drti) + 1;
|
drti) + 1;
|
||||||
|
|
||||||
len *= 2;
|
|
||||||
cmd = alloca(len);
|
cmd = alloca(len);
|
||||||
|
|
||||||
(void) snprintf(cmd, len, fmt, dtp->dt_ld_path, file,
|
(void) snprintf(cmd, len, fmt, dtp->dt_ld_path, file, tfile,
|
||||||
drti);
|
drti);
|
||||||
#endif
|
#endif
|
||||||
if ((status = system(cmd)) == -1) {
|
if ((status = system(cmd)) == -1) {
|
||||||
@ -1894,85 +1891,6 @@ dtrace_program_link(dtrace_hdl_t *dtp, dtrace_prog_t *pgp, uint_t dflags,
|
|||||||
file, dtp->dt_ld_path, WEXITSTATUS(status));
|
file, dtp->dt_ld_path, WEXITSTATUS(status));
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
#if !defined(sun)
|
|
||||||
/*
|
|
||||||
* FreeBSD's ld(1) is not instructed to interpret and add
|
|
||||||
* correctly the SUNW_dof section present in tfile.
|
|
||||||
* We use libelf to add this section manually and hope the next
|
|
||||||
* ld invocation won't remove it.
|
|
||||||
*/
|
|
||||||
elf_version(EV_CURRENT);
|
|
||||||
if ((efd = open(file, O_RDWR, 0)) < 0) {
|
|
||||||
ret = dt_link_error(dtp, NULL, -1, NULL,
|
|
||||||
"failed to open file %s: %s",
|
|
||||||
file, strerror(errno));
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
if ((e = elf_begin(efd, ELF_C_RDWR, NULL)) == NULL) {
|
|
||||||
close(efd);
|
|
||||||
ret = dt_link_error(dtp, NULL, -1, NULL,
|
|
||||||
"failed to open elf file: %s",
|
|
||||||
elf_errmsg(elf_errno()));
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Add the string '.SUWN_dof' to the shstrtab section.
|
|
||||||
*/
|
|
||||||
elf_getshdrstrndx(e, &stridx);
|
|
||||||
scn = elf_getscn(e, stridx);
|
|
||||||
gelf_getshdr(scn, &shdr);
|
|
||||||
data = elf_newdata(scn);
|
|
||||||
data->d_off = shdr.sh_size;
|
|
||||||
data->d_buf = ".SUNW_dof";
|
|
||||||
data->d_size = 10;
|
|
||||||
data->d_type = ELF_T_BYTE;
|
|
||||||
loc = shdr.sh_size;
|
|
||||||
shdr.sh_size += data->d_size;
|
|
||||||
gelf_update_shdr(scn, &shdr);
|
|
||||||
/*
|
|
||||||
* Construct the .SUNW_dof section.
|
|
||||||
*/
|
|
||||||
scn = elf_newscn(e);
|
|
||||||
data = elf_newdata(scn);
|
|
||||||
buf = mmap(NULL, dof->dofh_filesz, PROT_READ, MAP_SHARED,
|
|
||||||
fd, 0);
|
|
||||||
if (buf == MAP_FAILED) {
|
|
||||||
ret = dt_link_error(dtp, NULL, -1, NULL,
|
|
||||||
"failed to mmap buffer %s", strerror(errno));
|
|
||||||
elf_end(e);
|
|
||||||
close(efd);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
data->d_buf = buf;
|
|
||||||
data->d_align = 4;
|
|
||||||
data->d_size = dof->dofh_filesz;
|
|
||||||
data->d_version = EV_CURRENT;
|
|
||||||
gelf_getshdr(scn, &shdr);
|
|
||||||
shdr.sh_name = loc;
|
|
||||||
shdr.sh_flags = SHF_ALLOC;
|
|
||||||
/*
|
|
||||||
* Actually this should be SHT_SUNW_dof, but FreeBSD's ld(1)
|
|
||||||
* will remove this 'unknown' section when we try to create an
|
|
||||||
* executable using the object we are modifying, so we stop
|
|
||||||
* playing by the rules and use SHT_PROGBITS.
|
|
||||||
* Also, note that our drti has modifications to handle this.
|
|
||||||
*/
|
|
||||||
shdr.sh_type = SHT_PROGBITS;
|
|
||||||
shdr.sh_addralign = 4;
|
|
||||||
gelf_update_shdr(scn, &shdr);
|
|
||||||
if (elf_update(e, ELF_C_WRITE) < 0) {
|
|
||||||
ret = dt_link_error(dtp, NULL, -1, NULL,
|
|
||||||
"failed to add the SUNW_dof section: %s",
|
|
||||||
elf_errmsg(elf_errno()));
|
|
||||||
munmap(buf, dof->dofh_filesz);
|
|
||||||
elf_end(e);
|
|
||||||
close(efd);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
munmap(buf, dof->dofh_filesz);
|
|
||||||
elf_end(e);
|
|
||||||
close(efd);
|
|
||||||
#endif
|
|
||||||
(void) close(fd); /* release temporary file */
|
(void) close(fd); /* release temporary file */
|
||||||
} else {
|
} else {
|
||||||
(void) close(fd);
|
(void) close(fd);
|
||||||
|
@ -434,15 +434,10 @@ static const prmap_t *
|
|||||||
dt_pid_fix_mod(dtrace_probedesc_t *pdp, struct ps_prochandle *P)
|
dt_pid_fix_mod(dtrace_probedesc_t *pdp, struct ps_prochandle *P)
|
||||||
{
|
{
|
||||||
char m[MAXPATHLEN];
|
char m[MAXPATHLEN];
|
||||||
#if defined(sun)
|
|
||||||
Lmid_t lmid = PR_LMID_EVERY;
|
Lmid_t lmid = PR_LMID_EVERY;
|
||||||
#else
|
|
||||||
Lmid_t lmid = 0;
|
|
||||||
#endif
|
|
||||||
const char *obj;
|
const char *obj;
|
||||||
const prmap_t *pmp;
|
const prmap_t *pmp;
|
||||||
|
|
||||||
#if defined(sun)
|
|
||||||
/*
|
/*
|
||||||
* Pick apart the link map from the library name.
|
* Pick apart the link map from the library name.
|
||||||
*/
|
*/
|
||||||
@ -463,20 +458,17 @@ dt_pid_fix_mod(dtrace_probedesc_t *pdp, struct ps_prochandle *P)
|
|||||||
} else {
|
} else {
|
||||||
obj = pdp->dtpd_mod;
|
obj = pdp->dtpd_mod;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
obj = pdp->dtpd_mod;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((pmp = Plmid_to_map(P, lmid, obj)) == NULL)
|
if ((pmp = Plmid_to_map(P, lmid, obj)) == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
#if defined(sun)
|
|
||||||
(void) Pobjname(P, pmp->pr_vaddr, m, sizeof (m));
|
(void) Pobjname(P, pmp->pr_vaddr, m, sizeof (m));
|
||||||
if ((obj = strrchr(m, '/')) == NULL)
|
if ((obj = strrchr(m, '/')) == NULL)
|
||||||
obj = &m[0];
|
obj = &m[0];
|
||||||
else
|
else
|
||||||
obj++;
|
obj++;
|
||||||
|
|
||||||
|
#if defined(sun)
|
||||||
(void) Plmid(P, pmp->pr_vaddr, &lmid);
|
(void) Plmid(P, pmp->pr_vaddr, &lmid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -571,9 +563,7 @@ dt_pid_usdt_mapping(void *data, const prmap_t *pmp, const char *oname)
|
|||||||
{
|
{
|
||||||
struct ps_prochandle *P = data;
|
struct ps_prochandle *P = data;
|
||||||
GElf_Sym sym;
|
GElf_Sym sym;
|
||||||
#if defined(sun)
|
|
||||||
prsyminfo_t sip;
|
prsyminfo_t sip;
|
||||||
#endif
|
|
||||||
dof_helper_t dh;
|
dof_helper_t dh;
|
||||||
GElf_Half e_type;
|
GElf_Half e_type;
|
||||||
const char *mname;
|
const char *mname;
|
||||||
@ -852,11 +842,7 @@ dt_pid_get_types(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp,
|
|||||||
ctf_funcinfo_t f;
|
ctf_funcinfo_t f;
|
||||||
ctf_id_t argv[32];
|
ctf_id_t argv[32];
|
||||||
GElf_Sym sym;
|
GElf_Sym sym;
|
||||||
#if defined(sun)
|
|
||||||
prsyminfo_t si;
|
prsyminfo_t si;
|
||||||
#else
|
|
||||||
void *si;
|
|
||||||
#endif
|
|
||||||
struct ps_prochandle *p;
|
struct ps_prochandle *p;
|
||||||
int i, args;
|
int i, args;
|
||||||
char buf[DTRACE_ARGTYPELEN];
|
char buf[DTRACE_ARGTYPELEN];
|
||||||
@ -941,13 +927,11 @@ dt_pid_get_types(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp,
|
|||||||
pdp->dtpd_func, pdp->dtpd_provider, pdp->dtpd_mod);
|
pdp->dtpd_func, pdp->dtpd_provider, pdp->dtpd_mod);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
#if defined(sun)
|
|
||||||
if (ctf_func_info(fp, si.prs_id, &f) == CTF_ERR) {
|
if (ctf_func_info(fp, si.prs_id, &f) == CTF_ERR) {
|
||||||
dt_dprintf("failed to get ctf information for %s in %s`%s\n",
|
dt_dprintf("failed to get ctf information for %s in %s`%s\n",
|
||||||
pdp->dtpd_func, pdp->dtpd_provider, pdp->dtpd_mod);
|
pdp->dtpd_func, pdp->dtpd_provider, pdp->dtpd_mod);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
(void) snprintf(buf, sizeof (buf), "%s`%s", pdp->dtpd_provider,
|
(void) snprintf(buf, sizeof (buf), "%s`%s", pdp->dtpd_provider,
|
||||||
pdp->dtpd_mod);
|
pdp->dtpd_mod);
|
||||||
@ -977,7 +961,6 @@ dt_pid_get_types(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp,
|
|||||||
(void) ctf_type_qname(fp, f.ctc_return, adp->dtargd_native +
|
(void) ctf_type_qname(fp, f.ctc_return, adp->dtargd_native +
|
||||||
ret, DTRACE_ARGTYPELEN - ret, buf);
|
ret, DTRACE_ARGTYPELEN - ret, buf);
|
||||||
*nargs = 2;
|
*nargs = 2;
|
||||||
#if defined(sun)
|
|
||||||
} else {
|
} else {
|
||||||
if (ctf_func_args(fp, si.prs_id, argc, argv) == CTF_ERR)
|
if (ctf_func_args(fp, si.prs_id, argc, argv) == CTF_ERR)
|
||||||
goto out;
|
goto out;
|
||||||
@ -993,7 +976,6 @@ dt_pid_get_types(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp,
|
|||||||
(void) ctf_type_qname(fp, argv[i], adp->dtargd_native +
|
(void) ctf_type_qname(fp, argv[i], adp->dtargd_native +
|
||||||
ret, DTRACE_ARGTYPELEN - ret, buf);
|
ret, DTRACE_ARGTYPELEN - ret, buf);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
dt_proc_unlock(dtp, p);
|
dt_proc_unlock(dtp, p);
|
||||||
|
@ -167,7 +167,7 @@ print_bitfield(dt_printarg_t *pap, ulong_t off, ctf_encoding_t *ep)
|
|||||||
* to the lowest 'size' bytes in 'value', and we need to shift based on
|
* to the lowest 'size' bytes in 'value', and we need to shift based on
|
||||||
* the offset from the end of the data, not the offset of the start.
|
* the offset from the end of the data, not the offset of the start.
|
||||||
*/
|
*/
|
||||||
#ifdef _BIG_ENDIAN
|
#if BYTE_ORDER == _BIG_ENDIAN
|
||||||
buf += sizeof (value) - size;
|
buf += sizeof (value) - size;
|
||||||
off += ep->cte_bits;
|
off += ep->cte_bits;
|
||||||
#endif
|
#endif
|
||||||
@ -178,7 +178,7 @@ print_bitfield(dt_printarg_t *pap, ulong_t off, ctf_encoding_t *ep)
|
|||||||
* Offsets are counted from opposite ends on little- and
|
* Offsets are counted from opposite ends on little- and
|
||||||
* big-endian machines.
|
* big-endian machines.
|
||||||
*/
|
*/
|
||||||
#ifdef _BIG_ENDIAN
|
#if BYTE_ORDER == _BIG_ENDIAN
|
||||||
shift = NBBY - shift;
|
shift = NBBY - shift;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1457,6 +1457,12 @@ zfs_setprop_error(libzfs_handle_t *hdl, zfs_prop_t prop, int err,
|
|||||||
(void) zfs_error(hdl, EZFS_DSREADONLY, errbuf);
|
(void) zfs_error(hdl, EZFS_DSREADONLY, errbuf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case E2BIG:
|
||||||
|
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
|
||||||
|
"property value too long"));
|
||||||
|
(void) zfs_error(hdl, EZFS_BADPROP, errbuf);
|
||||||
|
break;
|
||||||
|
|
||||||
case ENOTSUP:
|
case ENOTSUP:
|
||||||
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
|
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
|
||||||
"pool and or dataset must be upgraded to set this "
|
"pool and or dataset must be upgraded to set this "
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2012 by Delphix. All rights reserved.
|
* Copyright (c) 2013 by Delphix. All rights reserved.
|
||||||
* Copyright 2014 Nexenta Systems, Inc. All rights reserved.
|
* Copyright 2014 Nexenta Systems, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -1426,21 +1426,15 @@ zpool_find_import_cached(libzfs_handle_t *hdl, const char *cachefile,
|
|||||||
|
|
||||||
elem = NULL;
|
elem = NULL;
|
||||||
while ((elem = nvlist_next_nvpair(raw, elem)) != NULL) {
|
while ((elem = nvlist_next_nvpair(raw, elem)) != NULL) {
|
||||||
verify(nvpair_value_nvlist(elem, &src) == 0);
|
src = fnvpair_value_nvlist(elem);
|
||||||
|
|
||||||
verify(nvlist_lookup_string(src, ZPOOL_CONFIG_POOL_NAME,
|
name = fnvlist_lookup_string(src, ZPOOL_CONFIG_POOL_NAME);
|
||||||
&name) == 0);
|
|
||||||
if (poolname != NULL && strcmp(poolname, name) != 0)
|
if (poolname != NULL && strcmp(poolname, name) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
verify(nvlist_lookup_uint64(src, ZPOOL_CONFIG_POOL_GUID,
|
this_guid = fnvlist_lookup_uint64(src, ZPOOL_CONFIG_POOL_GUID);
|
||||||
&this_guid) == 0);
|
if (guid != 0 && guid != this_guid)
|
||||||
if (guid != 0) {
|
continue;
|
||||||
verify(nvlist_lookup_uint64(src, ZPOOL_CONFIG_POOL_GUID,
|
|
||||||
&this_guid) == 0);
|
|
||||||
if (guid != this_guid)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pool_active(hdl, name, this_guid, &active) != 0) {
|
if (pool_active(hdl, name, this_guid, &active) != 0) {
|
||||||
nvlist_free(raw);
|
nvlist_free(raw);
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
|
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
|
||||||
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
|
* Copyright (c) 2011, 2014 by Delphix. All rights reserved.
|
||||||
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
|
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -304,7 +304,6 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, size_t len,
|
|||||||
case ZPOOL_PROP_FREE:
|
case ZPOOL_PROP_FREE:
|
||||||
case ZPOOL_PROP_FREEING:
|
case ZPOOL_PROP_FREEING:
|
||||||
case ZPOOL_PROP_LEAKED:
|
case ZPOOL_PROP_LEAKED:
|
||||||
case ZPOOL_PROP_EXPANDSZ:
|
|
||||||
if (literal) {
|
if (literal) {
|
||||||
(void) snprintf(buf, len, "%llu",
|
(void) snprintf(buf, len, "%llu",
|
||||||
(u_longlong_t)intval);
|
(u_longlong_t)intval);
|
||||||
@ -312,7 +311,16 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, size_t len,
|
|||||||
(void) zfs_nicenum(intval, buf, len);
|
(void) zfs_nicenum(intval, buf, len);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ZPOOL_PROP_EXPANDSZ:
|
||||||
|
if (intval == 0) {
|
||||||
|
(void) strlcpy(buf, "-", len);
|
||||||
|
} else if (literal) {
|
||||||
|
(void) snprintf(buf, len, "%llu",
|
||||||
|
(u_longlong_t)intval);
|
||||||
|
} else {
|
||||||
|
(void) zfs_nicenum(intval, buf, len);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ZPOOL_PROP_CAPACITY:
|
case ZPOOL_PROP_CAPACITY:
|
||||||
if (literal) {
|
if (literal) {
|
||||||
(void) snprintf(buf, len, "%llu",
|
(void) snprintf(buf, len, "%llu",
|
||||||
@ -330,13 +338,11 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, size_t len,
|
|||||||
(u_longlong_t)intval);
|
(u_longlong_t)intval);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ZPOOL_PROP_DEDUPRATIO:
|
case ZPOOL_PROP_DEDUPRATIO:
|
||||||
(void) snprintf(buf, len, "%llu.%02llux",
|
(void) snprintf(buf, len, "%llu.%02llux",
|
||||||
(u_longlong_t)(intval / 100),
|
(u_longlong_t)(intval / 100),
|
||||||
(u_longlong_t)(intval % 100));
|
(u_longlong_t)(intval % 100));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ZPOOL_PROP_HEALTH:
|
case ZPOOL_PROP_HEALTH:
|
||||||
verify(nvlist_lookup_nvlist(zpool_get_config(zhp, NULL),
|
verify(nvlist_lookup_nvlist(zpool_get_config(zhp, NULL),
|
||||||
ZPOOL_CONFIG_VDEV_TREE, &nvroot) == 0);
|
ZPOOL_CONFIG_VDEV_TREE, &nvroot) == 0);
|
||||||
|
@ -650,6 +650,9 @@ dprintf_setup(int *argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
if (dprintf_find_string("on"))
|
if (dprintf_find_string("on"))
|
||||||
dprintf_print_all = 1;
|
dprintf_print_all = 1;
|
||||||
|
|
||||||
|
if (dprintf_string != NULL)
|
||||||
|
zfs_flags |= ZFS_DEBUG_DPRINTF;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#define Pxlookup_by_addr(p, a, n, s, sym, i) \
|
#define Pxlookup_by_addr(p, a, n, s, sym, i) \
|
||||||
proc_addr2sym(p, a, n, s, sym)
|
proc_addr2sym(p, a, n, s, sym)
|
||||||
#define Pxlookup_by_name(p, l, s1, s2, sym, a) \
|
#define Pxlookup_by_name(p, l, s1, s2, sym, a) \
|
||||||
proc_name2sym((p), (s1), (s2), (sym))
|
proc_name2sym(p, s1, s2, sym, a)
|
||||||
#define Paddr_to_map proc_addr2map
|
#define Paddr_to_map proc_addr2map
|
||||||
#define Pcreate_error strerror
|
#define Pcreate_error strerror
|
||||||
#define Pdelbkpt proc_bkptdel
|
#define Pdelbkpt proc_bkptdel
|
||||||
@ -46,10 +46,10 @@
|
|||||||
#define Plmid(p, a, l) (-1)
|
#define Plmid(p, a, l) (-1)
|
||||||
#define Plmid_to_map(p, l, o) proc_obj2map((p), (o))
|
#define Plmid_to_map(p, l, o) proc_obj2map((p), (o))
|
||||||
#define Plookup_by_addr proc_addr2sym
|
#define Plookup_by_addr proc_addr2sym
|
||||||
#define Pname_to_ctf(p, obj) NULL
|
#define Pname_to_ctf(p, obj) (ctf_file_t *)proc_name2ctf(p, obj)
|
||||||
#define Pname_to_map proc_name2map
|
#define Pname_to_map proc_name2map
|
||||||
#define Pobject_iter proc_iter_objs
|
#define Pobject_iter proc_iter_objs
|
||||||
#define Pobject_iter_resolved(p, f, arg) 1
|
#define Pobject_iter_resolved(p, f, arg) proc_iter_objs(p, f, arg)
|
||||||
#define Pobjname proc_objname
|
#define Pobjname proc_objname
|
||||||
#define Pread proc_read
|
#define Pread proc_read
|
||||||
#define Prd_agent proc_rdagent
|
#define Prd_agent proc_rdagent
|
||||||
|
@ -7,8 +7,11 @@
|
|||||||
|
|
||||||
LIB= zfs
|
LIB= zfs
|
||||||
DPADD= ${LIBMD} ${LIBPTHREAD} ${LIBUMEM} ${LIBUTIL} ${LIBM} ${LIBNVPAIR} \
|
DPADD= ${LIBMD} ${LIBPTHREAD} ${LIBUMEM} ${LIBUTIL} ${LIBM} ${LIBNVPAIR} \
|
||||||
${LIBAVL} ${LIBZFS_CORE}
|
${LIBAVL} ${LIBZFS_CORE} ${LIBUUTIL} ${LIBBSDXML} ${LIBGEOM} \
|
||||||
LDADD= -lmd -lpthread -lumem -lutil -lm -lnvpair -lavl -lzfs_core
|
${LIBNVPAIR}
|
||||||
|
|
||||||
|
LDADD= -lmd -lpthread -lumem -lutil -luutil -lm -lnvpair -lavl \
|
||||||
|
-lbsdxml -lgeom -lnvpair -lzfs_core
|
||||||
|
|
||||||
SRCS= deviceid.c \
|
SRCS= deviceid.c \
|
||||||
fsshare.c \
|
fsshare.c \
|
||||||
|
@ -56,8 +56,9 @@ CFLAGS+= -I${.CURDIR}/../../../lib/libpthread/thread
|
|||||||
CFLAGS+= -I${.CURDIR}/../../../lib/libpthread/sys
|
CFLAGS+= -I${.CURDIR}/../../../lib/libpthread/sys
|
||||||
CFLAGS+= -I${.CURDIR}/../../../lib/libthr/arch/${MACHINE_CPUARCH}/include
|
CFLAGS+= -I${.CURDIR}/../../../lib/libthr/arch/${MACHINE_CPUARCH}/include
|
||||||
|
|
||||||
DPADD= ${LIBMD} ${LIBPTHREAD} ${LIBZ}
|
DPADD= ${LIBMD} ${LIBPTHREAD} ${LIBZ} ${LIBNVPAIR} \
|
||||||
LDADD= -lmd -lpthread -lz
|
${LIBAVL} ${LIBUMEM}
|
||||||
|
LDADD= -lmd -lpthread -lz -lnvpair -lavl -lumem
|
||||||
|
|
||||||
# atomic.S doesn't like profiling.
|
# atomic.S doesn't like profiling.
|
||||||
MK_PROFILE= no
|
MK_PROFILE= no
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
SUBDIR= ${_dtrace} \
|
SUBDIR= ${_dtrace} \
|
||||||
${_dtruss} \
|
${_dtruss} \
|
||||||
${_lockstat} \
|
${_lockstat} \
|
||||||
|
${_plockstat} \
|
||||||
${_tests} \
|
${_tests} \
|
||||||
${_zdb} \
|
${_zdb} \
|
||||||
${_zhack}
|
${_zhack}
|
||||||
@ -24,6 +25,9 @@ _zhack= zhack
|
|||||||
_dtrace= dtrace
|
_dtrace= dtrace
|
||||||
_dtruss= dtruss
|
_dtruss= dtruss
|
||||||
_lockstat= lockstat
|
_lockstat= lockstat
|
||||||
|
.if defined(WITH_PLOCKSTAT)
|
||||||
|
_plockstat= plockstat
|
||||||
|
.endif
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if ${MACHINE_CPUARCH} == "mips"
|
.if ${MACHINE_CPUARCH} == "mips"
|
||||||
|
@ -1,4 +1,30 @@
|
|||||||
-*- coding: utf-8 -*-
|
-*- coding: utf-8 -*-
|
||||||
|
Changes with APR-util 1.5.4
|
||||||
|
|
||||||
|
*) MySQL driver: Fix incorrect handling of bad parameter in the
|
||||||
|
driver support for apr_dbd_transaction_end(). PR 56330.
|
||||||
|
[Weiqiang Li <weiqiang_li hotmail.com>]
|
||||||
|
|
||||||
|
*) apr_crypto_get_driver(): Fix invalid storage reference on error path.
|
||||||
|
[Philip Martin <philip.martin wandisco.com>]
|
||||||
|
|
||||||
|
*) Fix compile failure for Android. PR 56627. [Fredrik Fornwall
|
||||||
|
<fredrik fornwall.net>, Jeff Trawick]
|
||||||
|
|
||||||
|
*) Fix to let ODBC driver build with MSVC6, which does not have intptr_t
|
||||||
|
[Tom Donovan]
|
||||||
|
|
||||||
|
*) Windows cmake build: Fix incompatiblities with Visual Studio
|
||||||
|
generators with all cmake versions, and the NMake Makefile generator
|
||||||
|
with cmake 2.8.12 and later. PR 56616 and other bugs. [Jeff Trawick,
|
||||||
|
Bert Huijben]
|
||||||
|
|
||||||
|
*) Fix detection of Berkeley DB 6.0. PR 55277.
|
||||||
|
[Lars Wendler <polynomial-c gentoo.org>]
|
||||||
|
|
||||||
|
*) Improve platform detection for bundled expat by updating
|
||||||
|
config.guess and config.sub. [Rainer Jung]
|
||||||
|
|
||||||
Changes with APR-util 1.5.3
|
Changes with APR-util 1.5.3
|
||||||
|
|
||||||
*) Cygwin: Use correct file extension when loading APR DSOs. PR 55587.
|
*) Cygwin: Use correct file extension when loading APR DSOs. PR 55587.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Apache Portable Runtime Utility Library
|
Apache Portable Runtime Utility Library
|
||||||
Copyright (c) 2011 The Apache Software Foundation.
|
Copyright (c) 2000-2014 The Apache Software Foundation.
|
||||||
|
|
||||||
This product includes software developed by
|
This product includes software developed at
|
||||||
The Apache Software Foundation (http://www.apache.org/).
|
The Apache Software Foundation (http://www.apache.org/).
|
||||||
|
|
||||||
Portions of this software were developed at the National Center
|
Portions of this software were developed at the National Center
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
Summary: Apache Portable Runtime Utility library
|
Summary: Apache Portable Runtime Utility library
|
||||||
Name: apr-util
|
Name: apr-util
|
||||||
Version: 1.5.3
|
Version: 1.5.4
|
||||||
Release: 1
|
Release: 1
|
||||||
License: Apache Software License
|
License: Apache Software License
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
|
63
contrib/apr-util/configure
vendored
63
contrib/apr-util/configure
vendored
@ -11608,19 +11608,34 @@ fi
|
|||||||
apu_db_version=0
|
apu_db_version=0
|
||||||
|
|
||||||
# Maximum supported version announced in help string.
|
# Maximum supported version announced in help string.
|
||||||
# Although we search for all versions up to 5.9,
|
# Although we search for all versions up to 6.9,
|
||||||
# we should only include existing versions in our
|
# we should only include existing versions in our
|
||||||
# help string.
|
# help string.
|
||||||
db_max_version=53
|
|
||||||
db_min_version=41
|
|
||||||
dbm_list="sdbm, gdbm, ndbm, db, db1, db185, db2, db3, db4"
|
dbm_list="sdbm, gdbm, ndbm, db, db1, db185, db2, db3, db4"
|
||||||
|
db_max_version=48
|
||||||
|
db_min_version=41
|
||||||
|
db_version="$db_min_version"
|
||||||
|
while [ $db_version -le $db_max_version ]
|
||||||
|
do
|
||||||
|
dbm_list="$dbm_list, db$db_version"
|
||||||
|
db_version=`expr $db_version + 1`
|
||||||
|
done
|
||||||
|
db_max_version=53
|
||||||
|
db_min_version=50
|
||||||
|
db_version="$db_min_version"
|
||||||
|
while [ $db_version -le $db_max_version ]
|
||||||
|
do
|
||||||
|
dbm_list="$dbm_list, db$db_version"
|
||||||
|
db_version=`expr $db_version + 1`
|
||||||
|
done
|
||||||
|
db_max_version=60
|
||||||
|
db_min_version=60
|
||||||
db_version="$db_min_version"
|
db_version="$db_min_version"
|
||||||
while [ $db_version -le $db_max_version ]
|
while [ $db_version -le $db_max_version ]
|
||||||
do
|
do
|
||||||
dbm_list="$dbm_list, db$db_version"
|
dbm_list="$dbm_list, db$db_version"
|
||||||
db_version=`expr $db_version + 1`
|
db_version=`expr $db_version + 1`
|
||||||
done
|
done
|
||||||
dbm_list="$dbm_list, db60"
|
|
||||||
|
|
||||||
|
|
||||||
# Check whether --with-dbm was given.
|
# Check whether --with-dbm was given.
|
||||||
@ -12093,8 +12108,8 @@ if test "${with_berkeley_db+set}" = set; then :
|
|||||||
|
|
||||||
all_places="$check_places"
|
all_places="$check_places"
|
||||||
|
|
||||||
# Start version search at version 5.9
|
# Start version search at version 6.9
|
||||||
db_version=59
|
db_version=69
|
||||||
while [ $db_version -ge 40 ]
|
while [ $db_version -ge 40 ]
|
||||||
do
|
do
|
||||||
db_major=`echo $db_version | sed -e 's/.$//'`
|
db_major=`echo $db_version | sed -e 's/.$//'`
|
||||||
@ -12178,7 +12193,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5"; then
|
if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5" -o ""${db_major}"" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -12580,7 +12595,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "3" = "3" -o "3" = "4" -o "3" = "5"; then
|
if test "3" = "3" -o "3" = "4" -o "3" = "5" -o "3" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -12978,7 +12993,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "2" = "3" -o "2" = "4" -o "2" = "5"; then
|
if test "2" = "3" -o "2" = "4" -o "2" = "5" -o "2" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -13376,7 +13391,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "1" = "3" -o "1" = "4" -o "1" = "5"; then
|
if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -13774,7 +13789,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "1" = "3" -o "1" = "4" -o "1" = "5"; then
|
if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -14186,7 +14201,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "1" = "3" -o "1" = "4" -o "1" = "5"; then
|
if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -14587,7 +14602,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "1" = "3" -o "1" = "4" -o "1" = "5"; then
|
if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -14988,7 +15003,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "2" = "3" -o "2" = "4" -o "2" = "5"; then
|
if test "2" = "3" -o "2" = "4" -o "2" = "5" -o "2" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -15389,7 +15404,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "3" = "3" -o "3" = "4" -o "3" = "5"; then
|
if test "3" = "3" -o "3" = "4" -o "3" = "5" -o "3" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -15794,7 +15809,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5"; then
|
if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5" -o ""${db_major}"" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -16202,7 +16217,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5"; then
|
if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5" -o ""${db_major}"" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -16534,8 +16549,8 @@ fi
|
|||||||
|
|
||||||
all_places="$check_places"
|
all_places="$check_places"
|
||||||
|
|
||||||
# Start version search at version 5.9
|
# Start version search at version 6.9
|
||||||
db_version=59
|
db_version=69
|
||||||
while [ $db_version -ge 40 ]
|
while [ $db_version -ge 40 ]
|
||||||
do
|
do
|
||||||
db_major=`echo $db_version | sed -e 's/.$//'`
|
db_major=`echo $db_version | sed -e 's/.$//'`
|
||||||
@ -16619,7 +16634,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5"; then
|
if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5" -o ""${db_major}"" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -17021,7 +17036,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "3" = "3" -o "3" = "4" -o "3" = "5"; then
|
if test "3" = "3" -o "3" = "4" -o "3" = "5" -o "3" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -17419,7 +17434,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "2" = "3" -o "2" = "4" -o "2" = "5"; then
|
if test "2" = "3" -o "2" = "4" -o "2" = "5" -o "2" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -17817,7 +17832,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "1" = "3" -o "1" = "4" -o "1" = "5"; then
|
if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
@ -18215,7 +18230,7 @@ $as_echo "" >&6; }
|
|||||||
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||||
|
|
||||||
if test "1" = "3" -o "1" = "4" -o "1" = "5"; then
|
if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then
|
||||||
# We generate a separate cache variable for each prefix and libname
|
# We generate a separate cache variable for each prefix and libname
|
||||||
# we search under. That way, we avoid caching information that
|
# we search under. That way, we avoid caching information that
|
||||||
# changes if the user runs `configure' with a different set of
|
# changes if the user runs `configure' with a different set of
|
||||||
|
@ -204,7 +204,7 @@ APU_DECLARE(apr_status_t) apr_crypto_get_driver(
|
|||||||
if (err && buffer) {
|
if (err && buffer) {
|
||||||
apr_dso_error(dso, buffer, ERROR_SIZE - 1);
|
apr_dso_error(dso, buffer, ERROR_SIZE - 1);
|
||||||
err->msg = buffer;
|
err->msg = buffer;
|
||||||
err->reason = modname;
|
err->reason = apr_pstrdup(pool, modname);
|
||||||
*result = err;
|
*result = err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,12 @@ static void crypt_mutex_unlock(void)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WIN32) || defined(BEOS) || defined(NETWARE) || defined(__ANDROID__)
|
||||||
|
#define CRYPT_MISSING 1
|
||||||
|
#else
|
||||||
|
#define CRYPT_MISSING 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Validate a plaintext password against a smashed one. Uses either
|
* Validate a plaintext password against a smashed one. Uses either
|
||||||
* crypt() (if available) or apr_md5_encode() or apr_sha1_base64(), depending
|
* crypt() (if available) or apr_md5_encode() or apr_sha1_base64(), depending
|
||||||
@ -77,7 +83,7 @@ APU_DECLARE(apr_status_t) apr_password_validate(const char *passwd,
|
|||||||
const char *hash)
|
const char *hash)
|
||||||
{
|
{
|
||||||
char sample[200];
|
char sample[200];
|
||||||
#if !defined(WIN32) && !defined(BEOS) && !defined(NETWARE)
|
#if !CRYPT_MISSING
|
||||||
char *crypt_pw;
|
char *crypt_pw;
|
||||||
#endif
|
#endif
|
||||||
if (hash[0] == '$'
|
if (hash[0] == '$'
|
||||||
@ -100,7 +106,7 @@ APU_DECLARE(apr_status_t) apr_password_validate(const char *passwd,
|
|||||||
/*
|
/*
|
||||||
* It's not our algorithm, so feed it to crypt() if possible.
|
* It's not our algorithm, so feed it to crypt() if possible.
|
||||||
*/
|
*/
|
||||||
#if defined(WIN32) || defined(BEOS) || defined(NETWARE)
|
#if CRYPT_MISSING
|
||||||
return (strcmp(passwd, hash) == 0) ? APR_SUCCESS : APR_EMISMATCH;
|
return (strcmp(passwd, hash) == 0) ? APR_SUCCESS : APR_EMISMATCH;
|
||||||
#elif defined(CRYPT_R_CRYPTD)
|
#elif defined(CRYPT_R_CRYPTD)
|
||||||
apr_status_t rv;
|
apr_status_t rv;
|
||||||
|
@ -1050,9 +1050,9 @@ static int dbd_mysql_end_transaction(apr_dbd_transaction_t *trans)
|
|||||||
else {
|
else {
|
||||||
ret = mysql_commit(trans->handle->conn);
|
ret = mysql_commit(trans->handle->conn);
|
||||||
}
|
}
|
||||||
|
ret |= mysql_autocommit(trans->handle->conn, 1);
|
||||||
|
trans->handle->trans = NULL;
|
||||||
}
|
}
|
||||||
ret |= mysql_autocommit(trans->handle->conn, 1);
|
|
||||||
trans->handle->trans = NULL;
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
/* Whether or not transactions work depends on whether the
|
/* Whether or not transactions work depends on whether the
|
||||||
|
@ -47,6 +47,21 @@
|
|||||||
#include <odbc/sqlext.h>
|
#include <odbc/sqlext.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MSVC6 does not support intptr_t (C99)
|
||||||
|
* APR does not have a signed inptr type until 2.0 (r1557720)
|
||||||
|
*/
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER < 1400
|
||||||
|
#if APR_SIZEOF_VOIDP == 8
|
||||||
|
#define ODBC_INTPTR_T apr_int64_t
|
||||||
|
#else
|
||||||
|
#define ODBC_INTPTR_T apr_int32_t
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define ODBC_INTPTR_T intptr_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Driver name is "odbc" and the entry point is 'apr_dbd_odbc_driver'
|
/* Driver name is "odbc" and the entry point is 'apr_dbd_odbc_driver'
|
||||||
* unless ODBC_DRIVER_NAME is defined and it is linked with another db library which
|
* unless ODBC_DRIVER_NAME is defined and it is linked with another db library which
|
||||||
* is ODBC source-compatible. e.g. DB2, Informix, TimesTen, mysql.
|
* is ODBC source-compatible. e.g. DB2, Informix, TimesTen, mysql.
|
||||||
@ -114,9 +129,9 @@ struct apr_dbd_t
|
|||||||
char lastError[MAX_ERROR_STRING];
|
char lastError[MAX_ERROR_STRING];
|
||||||
int defaultBufferSize; /* used for CLOBs in text mode,
|
int defaultBufferSize; /* used for CLOBs in text mode,
|
||||||
* and when fld size is indeterminate */
|
* and when fld size is indeterminate */
|
||||||
intptr_t transaction_mode;
|
ODBC_INTPTR_T transaction_mode;
|
||||||
intptr_t dboptions; /* driver options re SQLGetData */
|
ODBC_INTPTR_T dboptions; /* driver options re SQLGetData */
|
||||||
intptr_t default_transaction_mode;
|
ODBC_INTPTR_T default_transaction_mode;
|
||||||
int can_commit; /* controls end_trans behavior */
|
int can_commit; /* controls end_trans behavior */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -359,7 +374,7 @@ static SQLRETURN odbc_set_result_column(int icol, apr_dbd_results_t *res,
|
|||||||
SQLHANDLE stmt)
|
SQLHANDLE stmt)
|
||||||
{
|
{
|
||||||
SQLRETURN rc;
|
SQLRETURN rc;
|
||||||
intptr_t maxsize, textsize, realsize, type, isunsigned = 1;
|
ODBC_INTPTR_T maxsize, textsize, realsize, type, isunsigned = 1;
|
||||||
|
|
||||||
/* discover the sql type */
|
/* discover the sql type */
|
||||||
rc = SQLColAttribute(stmt, icol + 1, SQL_DESC_UNSIGNED, NULL, 0, NULL,
|
rc = SQLColAttribute(stmt, icol + 1, SQL_DESC_UNSIGNED, NULL, 0, NULL,
|
||||||
@ -747,7 +762,7 @@ static void *odbc_get(const apr_dbd_row_t *row, const int col,
|
|||||||
SQLRETURN rc;
|
SQLRETURN rc;
|
||||||
SQLLEN indicator;
|
SQLLEN indicator;
|
||||||
int state = row->res->colstate[col];
|
int state = row->res->colstate[col];
|
||||||
intptr_t options = row->res->apr_dbd->dboptions;
|
ODBC_INTPTR_T options = row->res->apr_dbd->dboptions;
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case (COL_UNAVAIL):
|
case (COL_UNAVAIL):
|
||||||
@ -817,13 +832,13 @@ static apr_status_t odbc_parse_params(apr_pool_t *pool, const char *params,
|
|||||||
int *connect, SQLCHAR **datasource,
|
int *connect, SQLCHAR **datasource,
|
||||||
SQLCHAR **user, SQLCHAR **password,
|
SQLCHAR **user, SQLCHAR **password,
|
||||||
int *defaultBufferSize, int *nattrs,
|
int *defaultBufferSize, int *nattrs,
|
||||||
int **attrs, intptr_t **attrvals)
|
int **attrs, ODBC_INTPTR_T **attrvals)
|
||||||
{
|
{
|
||||||
char *seps, *last, *next, *name[MAX_PARAMS], *val[MAX_PARAMS];
|
char *seps, *last, *next, *name[MAX_PARAMS], *val[MAX_PARAMS];
|
||||||
int nparams = 0, i, j;
|
int nparams = 0, i, j;
|
||||||
|
|
||||||
*attrs = apr_pcalloc(pool, MAX_PARAMS * sizeof(char *));
|
*attrs = apr_pcalloc(pool, MAX_PARAMS * sizeof(char *));
|
||||||
*attrvals = apr_pcalloc(pool, MAX_PARAMS * sizeof(intptr_t));
|
*attrvals = apr_pcalloc(pool, MAX_PARAMS * sizeof(ODBC_INTPTR_T));
|
||||||
*nattrs = 0;
|
*nattrs = 0;
|
||||||
seps = DEFAULTSEPS;
|
seps = DEFAULTSEPS;
|
||||||
name[nparams] = apr_strtok(apr_pstrdup(pool, params), seps, &last);
|
name[nparams] = apr_strtok(apr_pstrdup(pool, params), seps, &last);
|
||||||
@ -1063,7 +1078,7 @@ static apr_dbd_t *odbc_open(apr_pool_t *pool, const char *params, const char **e
|
|||||||
SQLCHAR *datasource = (SQLCHAR *)"", *user = (SQLCHAR *)"",
|
SQLCHAR *datasource = (SQLCHAR *)"", *user = (SQLCHAR *)"",
|
||||||
*password = (SQLCHAR *)"";
|
*password = (SQLCHAR *)"";
|
||||||
int nattrs = 0, *attrs = NULL, connect = 0;
|
int nattrs = 0, *attrs = NULL, connect = 0;
|
||||||
intptr_t *attrvals = NULL;
|
ODBC_INTPTR_T *attrvals = NULL;
|
||||||
|
|
||||||
err_step = "SQLAllocHandle (SQL_HANDLE_DBC)";
|
err_step = "SQLAllocHandle (SQL_HANDLE_DBC)";
|
||||||
err_htype = SQL_HANDLE_ENV;
|
err_htype = SQL_HANDLE_ENV;
|
||||||
@ -1117,10 +1132,10 @@ static apr_dbd_t *odbc_open(apr_pool_t *pool, const char *params, const char **e
|
|||||||
handle->default_transaction_mode = 0;
|
handle->default_transaction_mode = 0;
|
||||||
handle->can_commit = APR_DBD_TRANSACTION_IGNORE_ERRORS;
|
handle->can_commit = APR_DBD_TRANSACTION_IGNORE_ERRORS;
|
||||||
SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION,
|
SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION,
|
||||||
&(handle->default_transaction_mode), sizeof(intptr_t), NULL);
|
&(handle->default_transaction_mode), sizeof(ODBC_INTPTR_T), NULL);
|
||||||
handle->transaction_mode = handle->default_transaction_mode;
|
handle->transaction_mode = handle->default_transaction_mode;
|
||||||
SQLGetInfo(hdbc, SQL_GETDATA_EXTENSIONS ,&(handle->dboptions),
|
SQLGetInfo(hdbc, SQL_GETDATA_EXTENSIONS ,&(handle->dboptions),
|
||||||
sizeof(intptr_t), NULL);
|
sizeof(ODBC_INTPTR_T), NULL);
|
||||||
apr_pool_cleanup_register(pool, handle, odbc_close_cleanup, apr_pool_cleanup_null);
|
apr_pool_cleanup_register(pool, handle, odbc_close_cleanup, apr_pool_cleanup_null);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
@ -235,7 +235,7 @@ nlms :: libs $(TARGET_nlm)
|
|||||||
# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
|
# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
|
||||||
#
|
#
|
||||||
install :: nlms $(INSTDIRS) FORCE
|
install :: nlms $(INSTDIRS) FORCE
|
||||||
copy $(OBJDIR)\*.nlm $(INSTALLBASE)
|
$(call COPY,$(OBJDIR)/*.nlm,$(INSTALLBASE))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Any specialized rules here
|
# Any specialized rules here
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define APU_COPYRIGHT "Copyright (c) 2013 The Apache Software " \
|
#define APU_COPYRIGHT "Copyright (c) 2000-2014 The Apache Software " \
|
||||||
"Foundation or its licensors, as applicable."
|
"Foundation or its licensors, as applicable."
|
||||||
|
|
||||||
/* The numeric compile-time version constants. These constants are the
|
/* The numeric compile-time version constants. These constants are the
|
||||||
@ -62,7 +62,7 @@
|
|||||||
* The Patch Level never includes API changes, simply bug fixes.
|
* The Patch Level never includes API changes, simply bug fixes.
|
||||||
* Reset to 0 when upgrading APR_MINOR_VERSION
|
* Reset to 0 when upgrading APR_MINOR_VERSION
|
||||||
*/
|
*/
|
||||||
#define APU_PATCH_VERSION 3
|
#define APU_PATCH_VERSION 4
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The symbol APU_IS_DEV_VERSION is only defined for internal,
|
* The symbol APU_IS_DEV_VERSION is only defined for internal,
|
||||||
|
@ -88,6 +88,8 @@ APROUTDIR=$(OUTDIR)
|
|||||||
!IF "$(MODEL)" == "static"
|
!IF "$(MODEL)" == "static"
|
||||||
PROGRAM_DEPENDENCIES = \
|
PROGRAM_DEPENDENCIES = \
|
||||||
$(APR_PATH)\$(APROUTDIR)\apr-1.lib \
|
$(APR_PATH)\$(APROUTDIR)\apr-1.lib \
|
||||||
|
$(API_PATH)\$(OUTDIR)\apriconv-1.lib \
|
||||||
|
..\xml\expat\lib\$(OUTDIR)\xml.lib \
|
||||||
..\$(OUTDIR)\aprutil-1.lib
|
..\$(OUTDIR)\aprutil-1.lib
|
||||||
STATIC_CFLAGS = /D APR_DECLARE_STATIC /D APU_DECLARE_STATIC
|
STATIC_CFLAGS = /D APR_DECLARE_STATIC /D APU_DECLARE_STATIC
|
||||||
STATIC_LIBS = odbc32.lib odbccp32.lib wldap32.lib
|
STATIC_LIBS = odbc32.lib odbccp32.lib wldap32.lib
|
||||||
|
@ -7,10 +7,9 @@ branches and you are supposed to follow those:
|
|||||||
|
|
||||||
http://www.freebsd.org/doc/en/articles/committers-guide/subversion-primer.html
|
http://www.freebsd.org/doc/en/articles/committers-guide/subversion-primer.html
|
||||||
|
|
||||||
The ATF source code is hosted on Google Code as a subcomponent of the
|
The ATF source code is hosted on GitHub:
|
||||||
Kyua project:
|
|
||||||
|
|
||||||
http://code.google.com/p/kyua/downloads/list
|
https://github.com/jmmv/atf
|
||||||
|
|
||||||
and is imported into the atf vendor branch (see base/vendor/atf/).
|
and is imported into the atf vendor branch (see base/vendor/atf/).
|
||||||
|
|
||||||
@ -42,7 +41,7 @@ the vendor branch as you easily risk committing build products into the
|
|||||||
tree.
|
tree.
|
||||||
|
|
||||||
Lastly, with the list of old and new files in this import, make sure
|
Lastly, with the list of old and new files in this import, make sure
|
||||||
to udpate the reachover Makefiles accordingly.
|
to update the reachover Makefiles accordingly.
|
||||||
|
|
||||||
Test the build (keeping in mind the WITH_TESTS/WITHOUT_TESTS knobs) and,
|
Test the build (keeping in mind the WITH_TESTS/WITHOUT_TESTS knobs) and,
|
||||||
if all looks good, you are ready to commit all the changes in one go.
|
if all looks good, you are ready to commit all the changes in one go.
|
||||||
|
@ -14,6 +14,9 @@ the 'tools' directory for your own consumption.
|
|||||||
* Removed the deprecated tools. This includes atf-config, atf-report,
|
* Removed the deprecated tools. This includes atf-config, atf-report,
|
||||||
atf-run and atf-version.
|
atf-run and atf-version.
|
||||||
|
|
||||||
|
* Issue #8: Fixed atf-c/macros_test:use test failures spotted by the clang
|
||||||
|
that ships with FreeBSD 11.0-CURRENT.
|
||||||
|
|
||||||
|
|
||||||
Changes in version 0.19
|
Changes in version 0.19
|
||||||
***********************
|
***********************
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd November 15, 2013
|
.Dd March 2, 2014
|
||||||
.Dt ATF-C++-API 3
|
.Dt ATF-C++-API 3
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -330,9 +330,8 @@ If
|
|||||||
.Va exitcode
|
.Va exitcode
|
||||||
is not
|
is not
|
||||||
.Sq -1 ,
|
.Sq -1 ,
|
||||||
.Xr atf-run 1
|
the runtime engine will validate that the exit code of the test case
|
||||||
will validate that the exit code of the test case matches the one provided
|
matches the one provided in this call.
|
||||||
in this call.
|
|
||||||
Otherwise, the exact value will be ignored.
|
Otherwise, the exact value will be ignored.
|
||||||
.It Fn expect_fail "reason"
|
.It Fn expect_fail "reason"
|
||||||
Any failure (be it fatal or non-fatal) raised in this mode is recorded.
|
Any failure (be it fatal or non-fatal) raised in this mode is recorded.
|
||||||
@ -368,9 +367,8 @@ If
|
|||||||
.Va signo
|
.Va signo
|
||||||
is not
|
is not
|
||||||
.Sq -1 ,
|
.Sq -1 ,
|
||||||
.Xr atf-run 1
|
the runtime engine will validate that the signal that terminated the test
|
||||||
will validate that the signal that terminated the test case matches the one
|
case matches the one provided in this call.
|
||||||
provided in this call.
|
|
||||||
Otherwise, the exact value will be ignored.
|
Otherwise, the exact value will be ignored.
|
||||||
.It Fn expect_timeout "reason"
|
.It Fn expect_timeout "reason"
|
||||||
Expects the test case to execute for longer than its timeout.
|
Expects the test case to execute for longer than its timeout.
|
||||||
@ -631,5 +629,4 @@ ATF_INIT_TEST_CASES(tcs)
|
|||||||
.Ed
|
.Ed
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr atf-test-program 1 ,
|
.Xr atf-test-program 1 ,
|
||||||
.Xr atf-test-case 4 ,
|
.Xr atf-test-case 4
|
||||||
.Xr atf 7
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd November 15, 2013
|
.Dd March 2, 2014
|
||||||
.Dt ATF-C-API 3
|
.Dt ATF-C-API 3
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -409,9 +409,8 @@ If
|
|||||||
.Va exitcode
|
.Va exitcode
|
||||||
is not
|
is not
|
||||||
.Sq -1 ,
|
.Sq -1 ,
|
||||||
.Xr atf-run 1
|
the runtime engine will validate that the exit code of the test case
|
||||||
will validate that the exit code of the test case matches the one provided
|
matches the one provided in this call.
|
||||||
in this call.
|
|
||||||
Otherwise, the exact value will be ignored.
|
Otherwise, the exact value will be ignored.
|
||||||
.It Fn atf_tc_expect_fail "reason" "..."
|
.It Fn atf_tc_expect_fail "reason" "..."
|
||||||
Any failure (be it fatal or non-fatal) raised in this mode is recorded.
|
Any failure (be it fatal or non-fatal) raised in this mode is recorded.
|
||||||
@ -443,9 +442,8 @@ If
|
|||||||
.Va signo
|
.Va signo
|
||||||
is not
|
is not
|
||||||
.Sq -1 ,
|
.Sq -1 ,
|
||||||
.Xr atf-run 1
|
the runtime engine will validate that the signal that terminated the test
|
||||||
will validate that the signal that terminated the test case matches the one
|
case matches the one provided in this call.
|
||||||
provided in this call.
|
|
||||||
Otherwise, the exact value will be ignored.
|
Otherwise, the exact value will be ignored.
|
||||||
.It Fn atf_tc_expect_timeout "reason" "..."
|
.It Fn atf_tc_expect_timeout "reason" "..."
|
||||||
Expects the test case to execute for longer than its timeout.
|
Expects the test case to execute for longer than its timeout.
|
||||||
@ -771,5 +769,4 @@ ATF_TP_ADD_TCS(tp)
|
|||||||
.Ed
|
.Ed
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr atf-test-program 1 ,
|
.Xr atf-test-program 1 ,
|
||||||
.Xr atf-test-case 4 ,
|
.Xr atf-test-case 4
|
||||||
.Xr atf 7
|
|
||||||
|
@ -87,6 +87,7 @@ ATF_TC(TEST_MACRO_1);
|
|||||||
ATF_TC_HEAD(TEST_MACRO_1, tc) { if (tc != NULL) {} }
|
ATF_TC_HEAD(TEST_MACRO_1, tc) { if (tc != NULL) {} }
|
||||||
ATF_TC_BODY(TEST_MACRO_1, tc) { if (tc != NULL) {} }
|
ATF_TC_BODY(TEST_MACRO_1, tc) { if (tc != NULL) {} }
|
||||||
atf_tc_t *test_name_1 = &ATF_TC_NAME(TEST_MACRO_1);
|
atf_tc_t *test_name_1 = &ATF_TC_NAME(TEST_MACRO_1);
|
||||||
|
atf_tc_pack_t *test_pack_1 = &ATF_TC_PACK_NAME(TEST_MACRO_1);
|
||||||
void (*head_1)(atf_tc_t *) = ATF_TC_HEAD_NAME(TEST_MACRO_1);
|
void (*head_1)(atf_tc_t *) = ATF_TC_HEAD_NAME(TEST_MACRO_1);
|
||||||
void (*body_1)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_1);
|
void (*body_1)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_1);
|
||||||
ATF_TC_WITH_CLEANUP(TEST_MACRO_2);
|
ATF_TC_WITH_CLEANUP(TEST_MACRO_2);
|
||||||
@ -94,10 +95,12 @@ ATF_TC_HEAD(TEST_MACRO_2, tc) { if (tc != NULL) {} }
|
|||||||
ATF_TC_BODY(TEST_MACRO_2, tc) { if (tc != NULL) {} }
|
ATF_TC_BODY(TEST_MACRO_2, tc) { if (tc != NULL) {} }
|
||||||
ATF_TC_CLEANUP(TEST_MACRO_2, tc) { if (tc != NULL) {} }
|
ATF_TC_CLEANUP(TEST_MACRO_2, tc) { if (tc != NULL) {} }
|
||||||
atf_tc_t *test_name_2 = &ATF_TC_NAME(TEST_MACRO_2);
|
atf_tc_t *test_name_2 = &ATF_TC_NAME(TEST_MACRO_2);
|
||||||
|
atf_tc_pack_t *test_pack_2 = &ATF_TC_PACK_NAME(TEST_MACRO_2);
|
||||||
void (*head_2)(atf_tc_t *) = ATF_TC_HEAD_NAME(TEST_MACRO_2);
|
void (*head_2)(atf_tc_t *) = ATF_TC_HEAD_NAME(TEST_MACRO_2);
|
||||||
void (*body_2)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_2);
|
void (*body_2)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_2);
|
||||||
void (*cleanup_2)(const atf_tc_t *) = ATF_TC_CLEANUP_NAME(TEST_MACRO_2);
|
void (*cleanup_2)(const atf_tc_t *) = ATF_TC_CLEANUP_NAME(TEST_MACRO_2);
|
||||||
ATF_TC_WITHOUT_HEAD(TEST_MACRO_3);
|
ATF_TC_WITHOUT_HEAD(TEST_MACRO_3);
|
||||||
ATF_TC_BODY(TEST_MACRO_3, tc) { if (tc != NULL) {} }
|
ATF_TC_BODY(TEST_MACRO_3, tc) { if (tc != NULL) {} }
|
||||||
atf_tc_t *test_name_3 = &ATF_TC_NAME(TEST_MACRO_3);
|
atf_tc_t *test_name_3 = &ATF_TC_NAME(TEST_MACRO_3);
|
||||||
|
atf_tc_pack_t *test_pack_3 = &ATF_TC_PACK_NAME(TEST_MACRO_3);
|
||||||
void (*body_3)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_3);
|
void (*body_3)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_3);
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd June 27, 2010
|
.Dd March 2, 2014
|
||||||
.Dt ATF-CHECK 1
|
.Dt ATF-CHECK 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -118,15 +118,20 @@ Analyzes standard error (syntax identical to above)
|
|||||||
Executes
|
Executes
|
||||||
.Ar command
|
.Ar command
|
||||||
as a shell command line, executing it with the system shell defined by
|
as a shell command line, executing it with the system shell defined by
|
||||||
.Va ATF_SHELL
|
.Va ATF_SHELL .
|
||||||
in
|
|
||||||
.Xr atf-config 1 .
|
|
||||||
You should avoid using this flag if at all possible to prevent shell quoting
|
You should avoid using this flag if at all possible to prevent shell quoting
|
||||||
issues.
|
issues.
|
||||||
.El
|
.El
|
||||||
.Sh EXIT STATUS
|
.Sh EXIT STATUS
|
||||||
.Nm
|
.Nm
|
||||||
exits 0 on success, and other (unspecified) value on failure.
|
exits 0 on success, and other (unspecified) value on failure.
|
||||||
|
.Sh ENVIRONMENT
|
||||||
|
.Bl -tag -width ATFXSHELLXX -compact
|
||||||
|
.It Va ATF_SHELL
|
||||||
|
Path to the system shell to be used when the
|
||||||
|
.Fl x
|
||||||
|
is given to run commands.
|
||||||
|
.El
|
||||||
.Sh EXAMPLES
|
.Sh EXAMPLES
|
||||||
.Bd -literal -offset indent
|
.Bd -literal -offset indent
|
||||||
# Exit code 0, nothing on stdout/stderr
|
# Exit code 0, nothing on stdout/stderr
|
||||||
@ -146,6 +151,3 @@ atf-check -s signal:sigsegv my_program
|
|||||||
# Combined checks
|
# Combined checks
|
||||||
atf-check -o match:foo -o not-match:bar echo foo baz
|
atf-check -o match:foo -o not-match:bar echo foo baz
|
||||||
.Ed
|
.Ed
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr atf-config 1 ,
|
|
||||||
.Xr atf 7
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd October 13, 2013
|
.Dd March 2, 2014
|
||||||
.Dt ATF-SH-API 3
|
.Dt ATF-SH-API 3
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -224,9 +224,8 @@ If
|
|||||||
.Va exitcode
|
.Va exitcode
|
||||||
is not
|
is not
|
||||||
.Sq -1 ,
|
.Sq -1 ,
|
||||||
.Xr atf-run 1
|
the runtime engine will validate that the exit code of the test case
|
||||||
will validate that the exit code of the test case matches the one provided
|
matches the one provided in this call.
|
||||||
in this call.
|
|
||||||
Otherwise, the exact value will be ignored.
|
Otherwise, the exact value will be ignored.
|
||||||
.It Fn atf_expect_fail "reason"
|
.It Fn atf_expect_fail "reason"
|
||||||
Any failure raised in this mode is recorded, but such failures do not report
|
Any failure raised in this mode is recorded, but such failures do not report
|
||||||
@ -258,9 +257,8 @@ If
|
|||||||
.Va signo
|
.Va signo
|
||||||
is not
|
is not
|
||||||
.Sq -1 ,
|
.Sq -1 ,
|
||||||
.Xr atf-run 1
|
the runtime engine will validate that the signal that terminated the test
|
||||||
will validate that the signal that terminated the test case matches the one
|
case matches the one provided in this call.
|
||||||
provided in this call.
|
|
||||||
Otherwise, the exact value will be ignored.
|
Otherwise, the exact value will be ignored.
|
||||||
.It Fn atf_expect_timeout "reason" "..."
|
.It Fn atf_expect_timeout "reason" "..."
|
||||||
Expects the test case to execute for longer than its timeout.
|
Expects the test case to execute for longer than its timeout.
|
||||||
@ -339,5 +337,4 @@ atf_check -s exit:0 -o match:"^foo$" -e empty 'ls'
|
|||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr atf-sh 1 ,
|
.Xr atf-sh 1 ,
|
||||||
.Xr atf-test-program 1 ,
|
.Xr atf-test-program 1 ,
|
||||||
.Xr atf-test-case 4 ,
|
.Xr atf-test-case 4
|
||||||
.Xr atf 7
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd October 15, 2013
|
.Dd March 2, 2014
|
||||||
.Dt ATF-SH 1
|
.Dt ATF-SH 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -47,10 +47,8 @@ library.
|
|||||||
.Pp
|
.Pp
|
||||||
.Nm
|
.Nm
|
||||||
is not a real interpreter though: it is just a wrapper around
|
is not a real interpreter though: it is just a wrapper around
|
||||||
the system-wide shell defined by the
|
the system-wide shell defined by
|
||||||
.Sq atf_shell
|
.Va ATF_SHELL .
|
||||||
configuration value in
|
|
||||||
.Xr atf-config 1 .
|
|
||||||
.Nm
|
.Nm
|
||||||
executes the interpreter, loads the
|
executes the interpreter, loads the
|
||||||
.Xr atf-sh-api 3
|
.Xr atf-sh-api 3
|
||||||
@ -68,7 +66,10 @@ The following options are available:
|
|||||||
.It Fl h
|
.It Fl h
|
||||||
Shows a short summary of all available options and their purpose.
|
Shows a short summary of all available options and their purpose.
|
||||||
.El
|
.El
|
||||||
|
.Sh ENVIRONMENT
|
||||||
|
.Bl -tag -width ATFXSHELLXX -compact
|
||||||
|
.It Va ATF_SHELL
|
||||||
|
Path to the system shell to be used in the generated scripts.
|
||||||
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr atf-config 1 ,
|
.Xr atf-sh-api 3
|
||||||
.Xr atf-sh-api 3 ,
|
|
||||||
.Xr atf 7
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd January 13, 2011
|
.Dd March 2, 2014
|
||||||
.Dt ATF-TEST-CASE 4
|
.Dt ATF-TEST-CASE 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -171,9 +171,7 @@ Type: boolean.
|
|||||||
Optional.
|
Optional.
|
||||||
.Pp
|
.Pp
|
||||||
If set to true, specifies that the test case has a cleanup routine that has
|
If set to true, specifies that the test case has a cleanup routine that has
|
||||||
to be executed by
|
to be executed by the runtime engine during the cleanup phase of the execution.
|
||||||
.Xr atf-run 1
|
|
||||||
during the cleanup phase of the execution.
|
|
||||||
This property is automatically set by the framework when defining a test case
|
This property is automatically set by the framework when defining a test case
|
||||||
with a cleanup routine, so it should never be set by hand.
|
with a cleanup routine, so it should never be set by hand.
|
||||||
.It ident
|
.It ident
|
||||||
@ -251,8 +249,7 @@ the test case is
|
|||||||
.Pp
|
.Pp
|
||||||
If the test case is running as root and this property is
|
If the test case is running as root and this property is
|
||||||
.Sq unprivileged ,
|
.Sq unprivileged ,
|
||||||
.Xr atf-run 1
|
the runtime engine will automatically drop the privileges if the
|
||||||
will automatically drop the privileges if the
|
|
||||||
.Sq unprivileged-user
|
.Sq unprivileged-user
|
||||||
configuration property is set; otherwise the test case is
|
configuration property is set; otherwise the test case is
|
||||||
.Em skipped .
|
.Em skipped .
|
||||||
@ -314,7 +311,4 @@ Test cases are always executed with a file creation mode mask (umask) of
|
|||||||
.Sq 0022 .
|
.Sq 0022 .
|
||||||
The test case's code is free to change this during execution.
|
The test case's code is free to change this during execution.
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr atf-run 1 ,
|
.Xr atf-test-program 1
|
||||||
.Xr atf-test-program 1 ,
|
|
||||||
.Xr atf-formats 5 ,
|
|
||||||
.Xr atf 7
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd February 6, 2011
|
.Dd March 2, 2014
|
||||||
.Dt ATF-TEST-PROGRAM 1
|
.Dt ATF-TEST-PROGRAM 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -61,16 +61,17 @@ instead of the test case body; see
|
|||||||
Note that the test case is
|
Note that the test case is
|
||||||
.Em executed without isolation ,
|
.Em executed without isolation ,
|
||||||
so it can and probably will create and modify files in the current directory.
|
so it can and probably will create and modify files in the current directory.
|
||||||
To execute test cases in a controller manner, refer to
|
To execute test cases in a controller manner, you need a runtime engine
|
||||||
.Xr atf-run 1 ,
|
that understands the ATF interface.
|
||||||
which is the preferred way to run test cases.
|
The recommended runtime engine is
|
||||||
|
.Xr kyua 1 .
|
||||||
You should only execute test cases by hand for debugging purposes.
|
You should only execute test cases by hand for debugging purposes.
|
||||||
.Pp
|
.Pp
|
||||||
In the second synopsis form, the test program will list all available
|
In the second synopsis form, the test program will list all available
|
||||||
test cases alongside their meta-data properties in a format that is
|
test cases alongside their meta-data properties in a format that is
|
||||||
machine parseable.
|
machine parseable.
|
||||||
This list is processed by
|
This list is processed by
|
||||||
.Xr atf-run 1
|
.Xr kyua 1
|
||||||
to know how to execute the test cases of a given test program.
|
to know how to execute the test cases of a given test program.
|
||||||
.Pp
|
.Pp
|
||||||
The following options are available:
|
The following options are available:
|
||||||
@ -99,5 +100,4 @@ to the value
|
|||||||
.Ar value .
|
.Ar value .
|
||||||
.El
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr atf-run 1 ,
|
.Xr kyua 1
|
||||||
.Xr atf 7
|
|
||||||
|
@ -4688,6 +4688,23 @@ parse_address_main (char **str, int i, int group_relocations,
|
|||||||
return PARSE_OPERAND_FAIL;
|
return PARSE_OPERAND_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (skip_past_char (&p, ':') == SUCCESS)
|
||||||
|
{
|
||||||
|
/* FIXME: '@' should be used here, but it's filtered out by generic
|
||||||
|
code before we get to see it here. This may be subject to
|
||||||
|
change. */
|
||||||
|
expressionS exp;
|
||||||
|
my_get_expression (&exp, &p, GE_NO_PREFIX);
|
||||||
|
if (exp.X_op != O_constant)
|
||||||
|
{
|
||||||
|
inst.error = _("alignment must be constant");
|
||||||
|
return PARSE_OPERAND_FAIL;
|
||||||
|
}
|
||||||
|
inst.operands[i].imm = exp.X_add_number << 8;
|
||||||
|
inst.operands[i].immisalign = 1;
|
||||||
|
/* Alignments are not pre-indexes. */
|
||||||
|
inst.operands[i].preind = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (skip_past_char (&p, ']') == FAIL)
|
if (skip_past_char (&p, ']') == FAIL)
|
||||||
{
|
{
|
||||||
@ -6571,6 +6588,7 @@ do_barrier (void)
|
|||||||
if (inst.operands[0].present)
|
if (inst.operands[0].present)
|
||||||
{
|
{
|
||||||
constraint ((inst.instruction & 0xf0) != 0x40
|
constraint ((inst.instruction & 0xf0) != 0x40
|
||||||
|
&& (inst.instruction & 0xf0) != 0x50
|
||||||
&& inst.operands[0].imm != 0xf,
|
&& inst.operands[0].imm != 0xf,
|
||||||
"bad barrier type");
|
"bad barrier type");
|
||||||
inst.instruction |= inst.operands[0].imm;
|
inst.instruction |= inst.operands[0].imm;
|
||||||
@ -14694,10 +14712,18 @@ static const struct asm_cond conds[] =
|
|||||||
|
|
||||||
static struct asm_barrier_opt barrier_opt_names[] =
|
static struct asm_barrier_opt barrier_opt_names[] =
|
||||||
{
|
{
|
||||||
{ "sy", 0xf },
|
{ "sy", 0xf },
|
||||||
{ "un", 0x7 },
|
{ "un", 0x7 },
|
||||||
{ "st", 0xe },
|
{ "st", 0xe },
|
||||||
{ "unst", 0x6 }
|
{ "unst", 0x6 },
|
||||||
|
{ "ish", 0xb },
|
||||||
|
{ "sh", 0xb },
|
||||||
|
{ "ishst", 0xa },
|
||||||
|
{ "shst", 0xa },
|
||||||
|
{ "nsh", 0x7 },
|
||||||
|
{ "nshst", 0x6 },
|
||||||
|
{ "osh", 0x3 },
|
||||||
|
{ "oshst", 0x2 }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Table of ARM-format instructions. */
|
/* Table of ARM-format instructions. */
|
||||||
|
68
contrib/hyperv/tools/hv_kvp_daemon.8
Normal file
68
contrib/hyperv/tools/hv_kvp_daemon.8
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
.\" Copyright (c) 2014 Microsoft Corp.
|
||||||
|
.\" All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" 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.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
|
||||||
|
.\"
|
||||||
|
.Dd September 10, 2013
|
||||||
|
.Dt HYPER-V 4
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm hv_kvp_daemon
|
||||||
|
.Nd Hyper-V Key Value Pair Daemon
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
The \fBhv_kvp_daemon\fP daemon provides the ability to store, retrieve, modify and delete
|
||||||
|
Key Value pairs for FreeBSD guest partitions running on Hyper-V.
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
Hyper-V allows administrators to store custom metadata in the form
|
||||||
|
of Key Value pairs inside the FreeBSD guest partition. Administrators can
|
||||||
|
use Windows Powershell scripts to add, read, modify and delete such
|
||||||
|
Key Value pairs.
|
||||||
|
|
||||||
|
The \fBhv_kvp_daemon\fP accepts Key Value pair management requests from the
|
||||||
|
\fBhv_utils\fP driver and performs the actual metadata management on the file-system.
|
||||||
|
|
||||||
|
The same daemon and driver combination is also used to set and get
|
||||||
|
IP addresses from a FreeBSD guest.
|
||||||
|
|
||||||
|
The set functionality is particularly
|
||||||
|
useful when the FreeBSD guest is assigned a static IP address and is failed
|
||||||
|
over from one Hyper-V host to another. After failover, Hyper-V uses the set IP
|
||||||
|
functionality to automatically
|
||||||
|
update the FreeBSD guest's IP address to its original static value.
|
||||||
|
|
||||||
|
On the other hand, the get IP functionality is used to update the guest IP
|
||||||
|
address in the Hyper-V management console window.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr hv_vmbus 4 ,
|
||||||
|
.Xr hv_utils 4 ,
|
||||||
|
.Xr hv_netvsc 4 ,
|
||||||
|
.Xr hv_storvsc 4 ,
|
||||||
|
.Xr hv_ata_pci_disengage 4
|
||||||
|
.Sh HISTORY
|
||||||
|
Support for Hyper-V in the form of ports was first released in September 2013.
|
||||||
|
The daemon was developed through a joint effort between Citrix Inc.,
|
||||||
|
Microsoft Corp. and Network Appliance Inc..
|
||||||
|
.Sh AUTHORS
|
||||||
|
.An -nosplit
|
||||||
|
.Fx
|
||||||
|
support for \fBhv_kvp_daemon\fP was first added by
|
||||||
|
.An Microsoft BSD Integration Services Team Aq bsdic@microsoft.com .
|
1517
contrib/hyperv/tools/hv_kvp_daemon.c
Normal file
1517
contrib/hyperv/tools/hv_kvp_daemon.c
Normal file
File diff suppressed because it is too large
Load Diff
24
contrib/hyperv/tools/scripts/hv_get_dhcp_info
Normal file
24
contrib/hyperv/tools/scripts/hv_get_dhcp_info
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This is the script retrieves the DHCP state of a given interface.
|
||||||
|
# The kvp daemon code invokes this external script to gather
|
||||||
|
# DHCP setting for the specific interface.
|
||||||
|
#
|
||||||
|
# Input: Name of the interface
|
||||||
|
#
|
||||||
|
# Output: The script prints the string "Enabled" to stdout to indicate
|
||||||
|
# that DHCP is enabled on the interface. If DHCP is not enabled,
|
||||||
|
# the script prints the string "Disabled" to stdout.
|
||||||
|
#
|
||||||
|
|
||||||
|
. /etc/rc.subr
|
||||||
|
. /etc/network.subr
|
||||||
|
|
||||||
|
load_rc_config netif
|
||||||
|
|
||||||
|
if dhcpif hn0;
|
||||||
|
then
|
||||||
|
echo "Enabled"
|
||||||
|
else
|
||||||
|
echo "Disabled"
|
||||||
|
fi
|
12
contrib/hyperv/tools/scripts/hv_get_dns_info
Normal file
12
contrib/hyperv/tools/scripts/hv_get_dns_info
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# This script parses /etc/resolv.conf to retrive DNS information.
|
||||||
|
# Khe kvp daemon code invokes this external script to gather
|
||||||
|
# DNS information.
|
||||||
|
# This script is expected to print the nameserver values to stdout.
|
||||||
|
|
||||||
|
#if test -r /etc/resolv.conf
|
||||||
|
#then
|
||||||
|
# awk -- '/^nameserver/ { print $2 }' /etc/resolv.conf
|
||||||
|
#fi
|
||||||
|
cat /etc/resolv.conf 2>/dev/null | awk '/^nameserver/ { print $2 }'
|
||||||
|
|
73
contrib/hyperv/tools/scripts/hv_set_ifconfig
Normal file
73
contrib/hyperv/tools/scripts/hv_set_ifconfig
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This script activates an interface based on the specified
|
||||||
|
# configuration. The kvp daemon code invokes this external script
|
||||||
|
# to configure the interface.
|
||||||
|
#
|
||||||
|
# The only argument to this script is the configuration file that is to
|
||||||
|
# be used to configure the interface.
|
||||||
|
#
|
||||||
|
# Here is the format of the ip configuration file:
|
||||||
|
#
|
||||||
|
# HWADDR=macaddr
|
||||||
|
# IF_NAME=interface name
|
||||||
|
# DHCP=yes (This is optional; if yes, DHCP is configured)
|
||||||
|
#
|
||||||
|
# IPADDR=ipaddr1
|
||||||
|
# IPADDR_1=ipaddr2
|
||||||
|
# IPADDR_x=ipaddry (where y = x + 1)
|
||||||
|
#
|
||||||
|
# NETMASK=netmask1
|
||||||
|
# NETMASK_x=netmasky (where y = x + 1)
|
||||||
|
#
|
||||||
|
# GATEWAY=ipaddr1
|
||||||
|
# GATEWAY_x=ipaddry (where y = x + 1)
|
||||||
|
#
|
||||||
|
# DNSx=ipaddrx (where first DNS address is tagged as DNS1 etc)
|
||||||
|
#
|
||||||
|
# IPV6 addresses will be tagged as IPV6ADDR, IPV6 gateway will be
|
||||||
|
# tagged as IPV6_DEFAULTGW and IPV6 NETMASK will be tagged as
|
||||||
|
# IPV6NETMASK.
|
||||||
|
#
|
||||||
|
# The host can specify multiple ipv4 and ipv6 addresses to be
|
||||||
|
# configured for the interface. Furthermore, the configuration
|
||||||
|
# needs to be persistent. A subsequent GET call on the interface
|
||||||
|
# is expected to return the configuration that is set via the SET
|
||||||
|
# call.
|
||||||
|
#
|
||||||
|
|
||||||
|
. $1
|
||||||
|
|
||||||
|
sed -i".bak" '/ifconfig_hn0="SYNCDHCP"/d' /etc/rc.conf
|
||||||
|
sed -i".bak" '/ifconfig_hn0="DHCP"/d' /etc/rc.conf
|
||||||
|
|
||||||
|
# MAC Address
|
||||||
|
ifconfig $IF_NAME ether $HWADDR
|
||||||
|
|
||||||
|
# IP and Subnet Mask
|
||||||
|
ifconfig $IF_NAME inet $IP_ADDR netmask $SUBNET
|
||||||
|
|
||||||
|
# DNS
|
||||||
|
sed -i".bak" '/nameserver/d' /etc/resolv.conf
|
||||||
|
echo "nameserver" $DNS >> /etc/resolv.conf
|
||||||
|
|
||||||
|
#Gateway
|
||||||
|
# Need to implment if Gateway is not present
|
||||||
|
route flush
|
||||||
|
route add default $GATEWAY
|
||||||
|
#route change default $GATEWAY
|
||||||
|
|
||||||
|
#/etc/rc.d/netif restart
|
||||||
|
#/etc/rc.d/routing restart
|
||||||
|
|
||||||
|
|
||||||
|
# DHCP
|
||||||
|
if [ $DHCP -eq 1 ]
|
||||||
|
then
|
||||||
|
echo ifconfig_hn0=\"DHCP\" >> /etc/rc.conf
|
||||||
|
echo Enabled
|
||||||
|
else
|
||||||
|
echo Disabled DHCP >> /var/log/messages
|
||||||
|
echo Disabled
|
||||||
|
fi
|
||||||
|
echo "Set IP-Injection Success"
|
@ -19,16 +19,17 @@ int gethost(family, name, hostp)
|
|||||||
struct netent *n;
|
struct netent *n;
|
||||||
u_32_t addr;
|
u_32_t addr;
|
||||||
|
|
||||||
|
bzero(hostp, sizeof(*hostp));
|
||||||
if (!strcmp(name, "test.host.dots")) {
|
if (!strcmp(name, "test.host.dots")) {
|
||||||
if (family == AF_INET) {
|
if (family == AF_INET) {
|
||||||
hostp->in4.s_addr = htonl(0xfedcba98);
|
hostp->in4.s_addr = htonl(0xfedcba98);
|
||||||
}
|
}
|
||||||
#ifdef USE_INET6
|
#ifdef USE_INET6
|
||||||
if (family == AF_INET6) {
|
if (family == AF_INET6) {
|
||||||
hostp->i6[0] = 0xfe80aa55;
|
hostp->i6[0] = htonl(0xfe80aa55);
|
||||||
hostp->i6[1] = 0x12345678;
|
hostp->i6[1] = htonl(0x12345678);
|
||||||
hostp->i6[2] = 0x5a5aa5a5;
|
hostp->i6[2] = htonl(0x5a5aa5a5);
|
||||||
hostp->i6[3] = 0xfedcba98;
|
hostp->i6[3] = htonl(0xfedcba98);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -153,7 +153,8 @@ printnat(np, opts)
|
|||||||
|
|
||||||
} else if (np->in_redir & NAT_REWRITE) {
|
} else if (np->in_redir & NAT_REWRITE) {
|
||||||
PRINTF(" -> src ");
|
PRINTF(" -> src ");
|
||||||
if (np->in_nsrc.na_type == IPLT_DSTLIST) {
|
if (np->in_nsrc.na_atype == FRI_LOOKUP &&
|
||||||
|
np->in_nsrc.na_type == IPLT_DSTLIST) {
|
||||||
PRINTF("dstlist/");
|
PRINTF("dstlist/");
|
||||||
if (np->in_nsrc.na_subtype == 0)
|
if (np->in_nsrc.na_subtype == 0)
|
||||||
PRINTF("%d", np->in_nsrc.na_num);
|
PRINTF("%d", np->in_nsrc.na_num);
|
||||||
@ -174,7 +175,8 @@ printnat(np, opts)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
PRINTF(" dst ");
|
PRINTF(" dst ");
|
||||||
if (np->in_ndst.na_type == IPLT_DSTLIST) {
|
if (np->in_ndst.na_atype == FRI_LOOKUP &&
|
||||||
|
np->in_ndst.na_type == IPLT_DSTLIST) {
|
||||||
PRINTF("dstlist/");
|
PRINTF("dstlist/");
|
||||||
if (np->in_ndst.na_subtype == 0)
|
if (np->in_ndst.na_subtype == 0)
|
||||||
PRINTF("%d", np->in_nsrc.na_num);
|
PRINTF("%d", np->in_nsrc.na_num);
|
||||||
|
@ -1020,12 +1020,13 @@ addr: pool '/' YY_NUMBER { pooled = 1;
|
|||||||
yyexpectaddr = 0; }
|
yyexpectaddr = 0; }
|
||||||
;
|
;
|
||||||
|
|
||||||
ipaddr: IPFY_ANY { bzero(&($$), sizeof($$));
|
ipaddr: IPFY_ANY { memset(&($$), 0, sizeof($$));
|
||||||
$$.type = FRI_NORMAL;
|
$$.type = FRI_NORMAL;
|
||||||
$$.ifpos = -1;
|
$$.ifpos = -1;
|
||||||
yyexpectaddr = 0;
|
yyexpectaddr = 0;
|
||||||
}
|
}
|
||||||
| hostname { $$.a = $1.adr;
|
| hostname { memset(&($$), 0, sizeof($$));
|
||||||
|
$$.a = $1.adr;
|
||||||
$$.f = $1.f;
|
$$.f = $1.f;
|
||||||
if ($1.f == AF_INET6)
|
if ($1.f == AF_INET6)
|
||||||
fill6bits(128, $$.m.i6);
|
fill6bits(128, $$.m.i6);
|
||||||
@ -1038,7 +1039,8 @@ ipaddr: IPFY_ANY { bzero(&($$), sizeof($$));
|
|||||||
| hostname { yyresetdict(); }
|
| hostname { yyresetdict(); }
|
||||||
maskspace { yysetdict(maskwords);
|
maskspace { yysetdict(maskwords);
|
||||||
yyexpectaddr = 2; }
|
yyexpectaddr = 2; }
|
||||||
ipmask { ntomask($1.f, $5, $$.m.i6);
|
ipmask { memset(&($$), 0, sizeof($$));
|
||||||
|
ntomask($1.f, $5, $$.m.i6);
|
||||||
$$.a = $1.adr;
|
$$.a = $1.adr;
|
||||||
$$.a.i6[0] &= $$.m.i6[0];
|
$$.a.i6[0] &= $$.m.i6[0];
|
||||||
$$.a.i6[1] &= $$.m.i6[1];
|
$$.a.i6[1] &= $$.m.i6[1];
|
||||||
@ -1060,7 +1062,8 @@ ipaddr: IPFY_ANY { bzero(&($$), sizeof($$));
|
|||||||
yyresetdict();
|
yyresetdict();
|
||||||
yyexpectaddr = 0;
|
yyexpectaddr = 0;
|
||||||
}
|
}
|
||||||
| '(' YY_STR ')' { $$.type = FRI_DYNAMIC;
|
| '(' YY_STR ')' { memset(&($$), 0, sizeof($$));
|
||||||
|
$$.type = FRI_DYNAMIC;
|
||||||
ifpflag = FRI_DYNAMIC;
|
ifpflag = FRI_DYNAMIC;
|
||||||
$$.ifpos = addname(&fr, $2);
|
$$.ifpos = addname(&fr, $2);
|
||||||
$$.lif = 0;
|
$$.lif = 0;
|
||||||
@ -1068,7 +1071,8 @@ ipaddr: IPFY_ANY { bzero(&($$), sizeof($$));
|
|||||||
| '(' YY_STR ')' '/'
|
| '(' YY_STR ')' '/'
|
||||||
{ ifpflag = FRI_DYNAMIC; yysetdict(maskwords); }
|
{ ifpflag = FRI_DYNAMIC; yysetdict(maskwords); }
|
||||||
maskopts
|
maskopts
|
||||||
{ $$.type = ifpflag;
|
{ memset(&($$), 0, sizeof($$));
|
||||||
|
$$.type = ifpflag;
|
||||||
$$.ifpos = addname(&fr, $2);
|
$$.ifpos = addname(&fr, $2);
|
||||||
$$.lif = 0;
|
$$.lif = 0;
|
||||||
if (frc->fr_family == AF_UNSPEC)
|
if (frc->fr_family == AF_UNSPEC)
|
||||||
@ -1083,7 +1087,8 @@ ipaddr: IPFY_ANY { bzero(&($$), sizeof($$));
|
|||||||
| '(' YY_STR ':' YY_NUMBER ')' '/'
|
| '(' YY_STR ':' YY_NUMBER ')' '/'
|
||||||
{ ifpflag = FRI_DYNAMIC; yysetdict(maskwords); }
|
{ ifpflag = FRI_DYNAMIC; yysetdict(maskwords); }
|
||||||
maskopts
|
maskopts
|
||||||
{ $$.type = ifpflag;
|
{ memset(&($$), 0, sizeof($$));
|
||||||
|
$$.type = ifpflag;
|
||||||
$$.ifpos = addname(&fr, $2);
|
$$.ifpos = addname(&fr, $2);
|
||||||
$$.lif = $4;
|
$$.lif = $4;
|
||||||
if (frc->fr_family == AF_UNSPEC)
|
if (frc->fr_family == AF_UNSPEC)
|
||||||
@ -1142,30 +1147,35 @@ maskopts:
|
|||||||
;
|
;
|
||||||
|
|
||||||
hostname:
|
hostname:
|
||||||
ipv4 { $$.adr.in4 = $1;
|
ipv4 { memset(&($$), 0, sizeof($$));
|
||||||
|
$$.adr.in4 = $1;
|
||||||
if (frc->fr_family == AF_INET6)
|
if (frc->fr_family == AF_INET6)
|
||||||
YYERROR;
|
YYERROR;
|
||||||
$$.f = AF_INET;
|
$$.f = AF_INET;
|
||||||
yyexpectaddr = 2;
|
yyexpectaddr = 2;
|
||||||
}
|
}
|
||||||
| YY_NUMBER { if (frc->fr_family == AF_INET6)
|
| YY_NUMBER { memset(&($$), 0, sizeof($$));
|
||||||
|
if (frc->fr_family == AF_INET6)
|
||||||
YYERROR;
|
YYERROR;
|
||||||
$$.adr.in4_addr = $1;
|
$$.adr.in4_addr = $1;
|
||||||
$$.f = AF_INET;
|
$$.f = AF_INET;
|
||||||
yyexpectaddr = 2;
|
yyexpectaddr = 2;
|
||||||
}
|
}
|
||||||
| YY_HEX { if (frc->fr_family == AF_INET6)
|
| YY_HEX { memset(&($$), 0, sizeof($$));
|
||||||
|
if (frc->fr_family == AF_INET6)
|
||||||
YYERROR;
|
YYERROR;
|
||||||
$$.adr.in4_addr = $1;
|
$$.adr.in4_addr = $1;
|
||||||
$$.f = AF_INET;
|
$$.f = AF_INET;
|
||||||
yyexpectaddr = 2;
|
yyexpectaddr = 2;
|
||||||
}
|
}
|
||||||
| YY_STR { if (lookuphost($1, &$$.adr) == 0)
|
| YY_STR { memset(&($$), 0, sizeof($$));
|
||||||
|
if (lookuphost($1, &$$.adr) == 0)
|
||||||
$$.f = AF_INET;
|
$$.f = AF_INET;
|
||||||
free($1);
|
free($1);
|
||||||
yyexpectaddr = 2;
|
yyexpectaddr = 2;
|
||||||
}
|
}
|
||||||
| YY_IPV6 { if (frc->fr_family == AF_INET)
|
| YY_IPV6 { memset(&($$), 0, sizeof($$));
|
||||||
|
if (frc->fr_family == AF_INET)
|
||||||
YYERROR;
|
YYERROR;
|
||||||
$$.adr = $1;
|
$$.adr = $1;
|
||||||
$$.f = AF_INET6;
|
$$.f = AF_INET6;
|
||||||
|
@ -871,9 +871,9 @@ mapport:
|
|||||||
}
|
}
|
||||||
free($2);
|
free($2);
|
||||||
if ($3.p1 < 0 || $3.p1 > 65535)
|
if ($3.p1 < 0 || $3.p1 > 65535)
|
||||||
yyerror("invalid ICMP Id number");
|
yyerror("invalid 1st ICMP Id number");
|
||||||
if ($3.p2 < 0 || $3.p2 > 65535)
|
if ($3.p2 < 0 || $3.p2 > 65535)
|
||||||
yyerror("invalid ICMP Id number");
|
yyerror("invalid 2nd ICMP Id number");
|
||||||
if (strcmp($2, "ipv6-icmp") == 0) {
|
if (strcmp($2, "ipv6-icmp") == 0) {
|
||||||
nat->in_pr[0] = IPPROTO_ICMPV6;
|
nat->in_pr[0] = IPPROTO_ICMPV6;
|
||||||
nat->in_pr[1] = IPPROTO_ICMPV6;
|
nat->in_pr[1] = IPPROTO_ICMPV6;
|
||||||
@ -1058,7 +1058,7 @@ hash: IPNY_HASH { if (!(nat->in_flags & IPN_FILTER)) {
|
|||||||
;
|
;
|
||||||
|
|
||||||
portstuff:
|
portstuff:
|
||||||
compare portspec { $$.pc = $1; $$.p1 = $2; }
|
compare portspec { $$.pc = $1; $$.p1 = $2; $$.p2 = 0; }
|
||||||
| portspec range portspec { $$.pc = $2; $$.p1 = $1; $$.p2 = $3; }
|
| portspec range portspec { $$.pc = $2; $$.p1 = $1; $$.p2 = $3; }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1151,7 +1151,7 @@ proto: YY_NUMBER { $$ = $1;
|
|||||||
| YY_STR { $$ = getproto($1);
|
| YY_STR { $$ = getproto($1);
|
||||||
free($1);
|
free($1);
|
||||||
if ($$ == -1)
|
if ($$ == -1)
|
||||||
yyerror("unknwon protocol");
|
yyerror("unknown protocol");
|
||||||
if ($$ != IPPROTO_TCP &&
|
if ($$ != IPPROTO_TCP &&
|
||||||
$$ != IPPROTO_UDP)
|
$$ != IPPROTO_UDP)
|
||||||
suggest_port = 0;
|
suggest_port = 0;
|
||||||
@ -1164,17 +1164,20 @@ hexnumber:
|
|||||||
|
|
||||||
hostname:
|
hostname:
|
||||||
YY_STR { i6addr_t addr;
|
YY_STR { i6addr_t addr;
|
||||||
|
int family;
|
||||||
|
|
||||||
bzero(&$$, sizeof($$));
|
#ifdef USE_INET6
|
||||||
if (gethost(AF_INET, $1,
|
if (nat->in_v[0] == 6)
|
||||||
|
family = AF_INET6;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
family = AF_INET;
|
||||||
|
memset(&($$), 0, sizeof($$));
|
||||||
|
memset(&addr, 0, sizeof(addr));
|
||||||
|
$$.f = family;
|
||||||
|
if (gethost(family, $1,
|
||||||
&addr) == 0) {
|
&addr) == 0) {
|
||||||
$$.a = addr;
|
$$.a = addr;
|
||||||
$$.f = AF_INET;
|
|
||||||
} else
|
|
||||||
if (gethost(AF_INET6, $1,
|
|
||||||
&addr) == 0) {
|
|
||||||
$$.a = addr;
|
|
||||||
$$.f = AF_INET6;
|
|
||||||
} else {
|
} else {
|
||||||
FPRINTF(stderr,
|
FPRINTF(stderr,
|
||||||
"Unknown host '%s'\n",
|
"Unknown host '%s'\n",
|
||||||
@ -1182,17 +1185,17 @@ hostname:
|
|||||||
}
|
}
|
||||||
free($1);
|
free($1);
|
||||||
}
|
}
|
||||||
| YY_NUMBER { bzero(&$$, sizeof($$));
|
| YY_NUMBER { memset(&($$), 0, sizeof($$));
|
||||||
$$.a.in4.s_addr = htonl($1);
|
$$.a.in4.s_addr = htonl($1);
|
||||||
if ($$.a.in4.s_addr != 0)
|
if ($$.a.in4.s_addr != 0)
|
||||||
$$.f = AF_INET;
|
$$.f = AF_INET;
|
||||||
}
|
}
|
||||||
| ipv4 { $$ = $1; }
|
| ipv4 { $$ = $1; }
|
||||||
| YY_IPV6 { bzero(&$$, sizeof($$));
|
| YY_IPV6 { memset(&($$), 0, sizeof($$));
|
||||||
$$.a = $1;
|
$$.a = $1;
|
||||||
$$.f = AF_INET6;
|
$$.f = AF_INET6;
|
||||||
}
|
}
|
||||||
| YY_NUMBER YY_IPV6 { bzero(&$$, sizeof($$));
|
| YY_NUMBER YY_IPV6 { memset(&($$), 0, sizeof($$));
|
||||||
$$.a = $2;
|
$$.a = $2;
|
||||||
$$.f = AF_INET6;
|
$$.f = AF_INET6;
|
||||||
}
|
}
|
||||||
@ -1427,6 +1430,9 @@ setnatproto(p)
|
|||||||
nat->in_flags |= IPN_UDP;
|
nat->in_flags |= IPN_UDP;
|
||||||
nat->in_flags &= ~IPN_TCP;
|
nat->in_flags &= ~IPN_TCP;
|
||||||
break;
|
break;
|
||||||
|
#ifdef USE_INET6
|
||||||
|
case IPPROTO_ICMPV6 :
|
||||||
|
#endif
|
||||||
case IPPROTO_ICMP :
|
case IPPROTO_ICMP :
|
||||||
nat->in_flags &= ~IPN_TCPUDP;
|
nat->in_flags &= ~IPN_TCPUDP;
|
||||||
if (!(nat->in_flags & IPN_ICMPQUERY) &&
|
if (!(nat->in_flags & IPN_ICMPQUERY) &&
|
||||||
@ -1506,7 +1512,7 @@ ipnat_addrule(fd, ioctlfunc, ptr)
|
|||||||
printnat(ipn, opts);
|
printnat(ipn, opts);
|
||||||
|
|
||||||
if (opts & OPT_DEBUG)
|
if (opts & OPT_DEBUG)
|
||||||
binprint(ipn, sizeof(*ipn));
|
binprint(ipn, ipn->in_size);
|
||||||
|
|
||||||
if ((opts & OPT_ZERORULEST) != 0) {
|
if ((opts & OPT_ZERORULEST) != 0) {
|
||||||
if ((*ioctlfunc)(fd, add, (void *)&obj) == -1) {
|
if ((*ioctlfunc)(fd, add, (void *)&obj) == -1) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: vis.c,v 1.60 2013/02/21 16:21:20 joerg Exp $ */
|
/* $NetBSD: vis.c,v 1.62 2014/09/08 17:35:01 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1989, 1993
|
* Copyright (c) 1989, 1993
|
||||||
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#if defined(LIBC_SCCS) && !defined(lint)
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
__RCSID("$NetBSD: vis.c,v 1.60 2013/02/21 16:21:20 joerg Exp $");
|
__RCSID("$NetBSD: vis.c,v 1.62 2014/09/08 17:35:01 christos Exp $");
|
||||||
#endif /* LIBC_SCCS and not lint */
|
#endif /* LIBC_SCCS and not lint */
|
||||||
#ifdef __FBSDID
|
#ifdef __FBSDID
|
||||||
__FBSDID("$FreeBSD$");
|
__FBSDID("$FreeBSD$");
|
||||||
@ -357,7 +357,7 @@ istrsenvisx(char *mbdst, size_t *dlen, const char *mbsrc, size_t mblength,
|
|||||||
ssize_t mbslength, maxolen;
|
ssize_t mbslength, maxolen;
|
||||||
|
|
||||||
_DIAGASSERT(mbdst != NULL);
|
_DIAGASSERT(mbdst != NULL);
|
||||||
_DIAGASSERT(mbsrc != NULL);
|
_DIAGASSERT(mbsrc != NULL || mblength == 0);
|
||||||
_DIAGASSERT(mbextra != NULL);
|
_DIAGASSERT(mbextra != NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -375,8 +375,6 @@ istrsenvisx(char *mbdst, size_t *dlen, const char *mbsrc, size_t mblength,
|
|||||||
|
|
||||||
/* Allocate space for the wide char strings */
|
/* Allocate space for the wide char strings */
|
||||||
psrc = pdst = extra = NULL;
|
psrc = pdst = extra = NULL;
|
||||||
if (!mblength)
|
|
||||||
mblength = strlen(mbsrc);
|
|
||||||
if ((psrc = calloc(mblength + 1, sizeof(*psrc))) == NULL)
|
if ((psrc = calloc(mblength + 1, sizeof(*psrc))) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if ((pdst = calloc((4 * mblength) + 1, sizeof(*pdst))) == NULL)
|
if ((pdst = calloc((4 * mblength) + 1, sizeof(*pdst))) == NULL)
|
||||||
@ -528,6 +526,15 @@ istrsenvisx(char *mbdst, size_t *dlen, const char *mbsrc, size_t mblength,
|
|||||||
free(psrc);
|
free(psrc);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
istrsenvisxl(char *mbdst, size_t *dlen, const char *mbsrc,
|
||||||
|
int flags, const char *mbextra, int *cerr_ptr)
|
||||||
|
{
|
||||||
|
return istrsenvisx(mbdst, dlen, mbsrc,
|
||||||
|
mbsrc != NULL ? strlen(mbsrc) : 0, flags, mbextra, cerr_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !HAVE_SVIS
|
#if !HAVE_SVIS
|
||||||
@ -571,13 +578,13 @@ snvis(char *mbdst, size_t dlen, int c, int flags, int nextc, const char *mbextra
|
|||||||
int
|
int
|
||||||
strsvis(char *mbdst, const char *mbsrc, int flags, const char *mbextra)
|
strsvis(char *mbdst, const char *mbsrc, int flags, const char *mbextra)
|
||||||
{
|
{
|
||||||
return istrsenvisx(mbdst, NULL, mbsrc, 0, flags, mbextra, NULL);
|
return istrsenvisxl(mbdst, NULL, mbsrc, flags, mbextra, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
strsnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags, const char *mbextra)
|
strsnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags, const char *mbextra)
|
||||||
{
|
{
|
||||||
return istrsenvisx(mbdst, &dlen, mbsrc, 0, flags, mbextra, NULL);
|
return istrsenvisxl(mbdst, &dlen, mbsrc, flags, mbextra, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -646,13 +653,13 @@ nvis(char *mbdst, size_t dlen, int c, int flags, int nextc)
|
|||||||
int
|
int
|
||||||
strvis(char *mbdst, const char *mbsrc, int flags)
|
strvis(char *mbdst, const char *mbsrc, int flags)
|
||||||
{
|
{
|
||||||
return istrsenvisx(mbdst, NULL, mbsrc, 0, flags, "", NULL);
|
return istrsenvisxl(mbdst, NULL, mbsrc, flags, "", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
strnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags)
|
strnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags)
|
||||||
{
|
{
|
||||||
return istrsenvisx(mbdst, &dlen, mbsrc, 0, flags, "", NULL);
|
return istrsenvisxl(mbdst, &dlen, mbsrc, flags, "", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -300,6 +300,8 @@ void X86TargetLowering::resetOperationActions() {
|
|||||||
setTruncStoreAction(MVT::i32, MVT::i8 , Expand);
|
setTruncStoreAction(MVT::i32, MVT::i8 , Expand);
|
||||||
setTruncStoreAction(MVT::i16, MVT::i8, Expand);
|
setTruncStoreAction(MVT::i16, MVT::i8, Expand);
|
||||||
|
|
||||||
|
setTruncStoreAction(MVT::f64, MVT::f32, Expand);
|
||||||
|
|
||||||
// SETOEQ and SETUNE require checking two conditions.
|
// SETOEQ and SETUNE require checking two conditions.
|
||||||
setCondCodeAction(ISD::SETOEQ, MVT::f32, Expand);
|
setCondCodeAction(ISD::SETOEQ, MVT::f32, Expand);
|
||||||
setCondCodeAction(ISD::SETOEQ, MVT::f64, Expand);
|
setCondCodeAction(ISD::SETOEQ, MVT::f64, Expand);
|
||||||
@ -1011,8 +1013,6 @@ void X86TargetLowering::resetOperationActions() {
|
|||||||
AddPromotedToType (ISD::SELECT, VT, MVT::v2i64);
|
AddPromotedToType (ISD::SELECT, VT, MVT::v2i64);
|
||||||
}
|
}
|
||||||
|
|
||||||
setTruncStoreAction(MVT::f64, MVT::f32, Expand);
|
|
||||||
|
|
||||||
// Custom lower v2i64 and v2f64 selects.
|
// Custom lower v2i64 and v2f64 selects.
|
||||||
setOperationAction(ISD::LOAD, MVT::v2f64, Legal);
|
setOperationAction(ISD::LOAD, MVT::v2f64, Legal);
|
||||||
setOperationAction(ISD::LOAD, MVT::v2i64, Legal);
|
setOperationAction(ISD::LOAD, MVT::v2i64, Legal);
|
||||||
|
34
contrib/llvm/patches/patch-r269387-clang-arm-target-cpu.diff
Normal file
34
contrib/llvm/patches/patch-r269387-clang-arm-target-cpu.diff
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
Update the ARMv6 core clang targets to be an arm1176jzf-s. This brings us
|
||||||
|
in line with gcc in base as this makes llvm generate code for the armv6k
|
||||||
|
variant of the instruction set.
|
||||||
|
|
||||||
|
Introduced here: http://svnweb.freebsd.org/changeset/base/269387
|
||||||
|
|
||||||
|
Index: tools/clang/lib/Driver/ToolChain.cpp
|
||||||
|
===================================================================
|
||||||
|
--- tools/clang/lib/Driver/ToolChain.cpp (revision 269386)
|
||||||
|
+++ tools/clang/lib/Driver/ToolChain.cpp (revision 269387)
|
||||||
|
@@ -183,7 +183,8 @@ static const char *getARMTargetCPU(const ArgList &
|
||||||
|
MArch = Triple.getArchName();
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (Triple.getOS() == llvm::Triple::NetBSD) {
|
||||||
|
+ if (Triple.getOS() == llvm::Triple::NetBSD ||
|
||||||
|
+ Triple.getOS() == llvm::Triple::FreeBSD) {
|
||||||
|
if (MArch == "armv6")
|
||||||
|
return "arm1176jzf-s";
|
||||||
|
}
|
||||||
|
Index: tools/clang/lib/Driver/Tools.cpp
|
||||||
|
===================================================================
|
||||||
|
--- tools/clang/lib/Driver/Tools.cpp (revision 269386)
|
||||||
|
+++ tools/clang/lib/Driver/Tools.cpp (revision 269387)
|
||||||
|
@@ -499,7 +499,8 @@ static std::string getARMTargetCPU(const ArgList &
|
||||||
|
MArch = Triple.getArchName();
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (Triple.getOS() == llvm::Triple::NetBSD) {
|
||||||
|
+ if (Triple.getOS() == llvm::Triple::NetBSD ||
|
||||||
|
+ Triple.getOS() == llvm::Triple::FreeBSD) {
|
||||||
|
if (MArch == "armv6")
|
||||||
|
return "arm1176jzf-s";
|
||||||
|
}
|
@ -1,7 +1,31 @@
|
|||||||
Index: contrib/llvm/include/llvm/Support/ELF.h
|
Backport r197824, r213427 and r213960 from LLVM trunk:
|
||||||
|
|
||||||
|
r197824 | rdivacky | 2013-12-20 19:08:54 +0100 (Fri, 20 Dec 2013) | 2 lines
|
||||||
|
|
||||||
|
Implement initial-exec TLS for PPC32.
|
||||||
|
|
||||||
|
r213427 | hfinkel | 2014-07-19 01:29:49 +0200 (Sat, 19 Jul 2014) | 7 lines
|
||||||
|
|
||||||
|
[PowerPC] 32-bit ELF PIC support
|
||||||
|
|
||||||
|
This adds initial support for PPC32 ELF PIC (Position Independent Code; the
|
||||||
|
-fPIC variety), thus rectifying a long-standing deficiency in the PowerPC
|
||||||
|
backend.
|
||||||
|
|
||||||
|
Patch by Justin Hibbits!
|
||||||
|
|
||||||
|
r213960 | hfinkel | 2014-07-25 19:47:22 +0200 (Fri, 25 Jul 2014) | 3 lines
|
||||||
|
|
||||||
|
[PowerPC] Support TLS on PPC32/ELF
|
||||||
|
|
||||||
|
Patch by Justin Hibbits!
|
||||||
|
|
||||||
|
Introduced here: http://svnweb.freebsd.org/changeset/base/270147
|
||||||
|
|
||||||
|
Index: include/llvm/Support/ELF.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/include/llvm/Support/ELF.h (revision 270019)
|
--- include/llvm/Support/ELF.h (revision 270019)
|
||||||
+++ contrib/llvm/include/llvm/Support/ELF.h (working copy)
|
+++ include/llvm/Support/ELF.h (working copy)
|
||||||
@@ -437,6 +437,7 @@
|
@@ -437,6 +437,7 @@
|
||||||
R_PPC_GOT16_LO = 15,
|
R_PPC_GOT16_LO = 15,
|
||||||
R_PPC_GOT16_HI = 16,
|
R_PPC_GOT16_HI = 16,
|
||||||
@ -10,10 +34,10 @@ Index: contrib/llvm/include/llvm/Support/ELF.h
|
|||||||
R_PPC_REL32 = 26,
|
R_PPC_REL32 = 26,
|
||||||
R_PPC_TLS = 67,
|
R_PPC_TLS = 67,
|
||||||
R_PPC_DTPMOD32 = 68,
|
R_PPC_DTPMOD32 = 68,
|
||||||
Index: contrib/llvm/lib/Object/ELF.cpp
|
Index: lib/Object/ELF.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Object/ELF.cpp (revision 270019)
|
--- lib/Object/ELF.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Object/ELF.cpp (working copy)
|
+++ lib/Object/ELF.cpp (working copy)
|
||||||
@@ -507,6 +507,7 @@
|
@@ -507,6 +507,7 @@
|
||||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_GOT16_LO);
|
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_GOT16_LO);
|
||||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_GOT16_HI);
|
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_GOT16_HI);
|
||||||
@ -22,10 +46,10 @@ Index: contrib/llvm/lib/Object/ELF.cpp
|
|||||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_REL32);
|
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_REL32);
|
||||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_TLS);
|
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_TLS);
|
||||||
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_DTPMOD32);
|
LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_PPC_DTPMOD32);
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
|
Index: lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp (revision 270019)
|
--- lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp (working copy)
|
+++ lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp (working copy)
|
||||||
@@ -18,6 +18,7 @@
|
@@ -18,6 +18,7 @@
|
||||||
#include "llvm/MC/MCExpr.h"
|
#include "llvm/MC/MCExpr.h"
|
||||||
#include "llvm/MC/MCInst.h"
|
#include "llvm/MC/MCInst.h"
|
||||||
@ -52,10 +76,10 @@ Index: contrib/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
|
Index: lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp (revision 270019)
|
--- lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp (working copy)
|
+++ lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp (working copy)
|
||||||
@@ -64,7 +64,15 @@
|
@@ -64,7 +64,15 @@
|
||||||
llvm_unreachable("Unimplemented");
|
llvm_unreachable("Unimplemented");
|
||||||
case PPC::fixup_ppc_br24:
|
case PPC::fixup_ppc_br24:
|
||||||
@ -123,10 +147,10 @@ Index: contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPC.h
|
Index: lib/Target/PowerPC/PPC.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPC.h (revision 270019)
|
--- lib/Target/PowerPC/PPC.h (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPC.h (working copy)
|
+++ lib/Target/PowerPC/PPC.h (working copy)
|
||||||
@@ -53,10 +53,11 @@
|
@@ -53,10 +53,11 @@
|
||||||
// PPC Specific MachineOperand flags.
|
// PPC Specific MachineOperand flags.
|
||||||
MO_NO_FLAG,
|
MO_NO_FLAG,
|
||||||
@ -143,10 +167,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPC.h
|
|||||||
|
|
||||||
/// MO_PIC_FLAG - If this bit is set, the symbol reference is relative to
|
/// MO_PIC_FLAG - If this bit is set, the symbol reference is relative to
|
||||||
/// the function's picbase, e.g. lo16(symbol-picbase).
|
/// the function's picbase, e.g. lo16(symbol-picbase).
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
|
Index: lib/Target/PowerPC/PPCAsmPrinter.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp (revision 270019)
|
--- lib/Target/PowerPC/PPCAsmPrinter.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp (working copy)
|
+++ lib/Target/PowerPC/PPCAsmPrinter.cpp (working copy)
|
||||||
@@ -19,6 +19,7 @@
|
@@ -19,6 +19,7 @@
|
||||||
#define DEBUG_TYPE "asmprinter"
|
#define DEBUG_TYPE "asmprinter"
|
||||||
#include "PPC.h"
|
#include "PPC.h"
|
||||||
@ -578,10 +602,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
|
Index: lib/Target/PowerPC/PPCFrameLowering.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp (revision 270019)
|
--- lib/Target/PowerPC/PPCFrameLowering.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp (working copy)
|
+++ lib/Target/PowerPC/PPCFrameLowering.cpp (working copy)
|
||||||
@@ -299,7 +299,7 @@
|
@@ -299,7 +299,7 @@
|
||||||
const PPCRegisterInfo *RegInfo =
|
const PPCRegisterInfo *RegInfo =
|
||||||
static_cast<const PPCRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
static_cast<const PPCRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||||
@ -664,10 +688,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
|
|||||||
// Allocate the frame index for the base pointer save area.
|
// Allocate the frame index for the base pointer save area.
|
||||||
BPSI = MFI->CreateFixedObject(isPPC64? 8 : 4, BPOffset, true);
|
BPSI = MFI->CreateFixedObject(isPPC64? 8 : 4, BPOffset, true);
|
||||||
// Save the result.
|
// Save the result.
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.h
|
Index: lib/Target/PowerPC/PPCFrameLowering.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.h (revision 270019)
|
--- lib/Target/PowerPC/PPCFrameLowering.h (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.h (working copy)
|
+++ lib/Target/PowerPC/PPCFrameLowering.h (working copy)
|
||||||
@@ -96,12 +96,14 @@
|
@@ -96,12 +96,14 @@
|
||||||
|
|
||||||
/// getBasePointerSaveOffset - Return the previous frame offset to save the
|
/// getBasePointerSaveOffset - Return the previous frame offset to save the
|
||||||
@ -685,10 +709,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.h
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// getLinkageSize - Return the size of the PowerPC ABI linkage area.
|
/// getLinkageSize - Return the size of the PowerPC ABI linkage area.
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
|
Index: lib/Target/PowerPC/PPCISelDAGToDAG.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp (revision 270019)
|
--- lib/Target/PowerPC/PPCISelDAGToDAG.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp (working copy)
|
+++ lib/Target/PowerPC/PPCISelDAGToDAG.cpp (working copy)
|
||||||
@@ -15,6 +15,7 @@
|
@@ -15,6 +15,7 @@
|
||||||
#define DEBUG_TYPE "ppc-codegen"
|
#define DEBUG_TYPE "ppc-codegen"
|
||||||
#include "PPC.h"
|
#include "PPC.h"
|
||||||
@ -748,10 +772,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
|
|||||||
case PPCISD::VADD_SPLAT: {
|
case PPCISD::VADD_SPLAT: {
|
||||||
// This expands into one of three sequences, depending on whether
|
// This expands into one of three sequences, depending on whether
|
||||||
// the first operand is odd or even, positive or negative.
|
// the first operand is odd or even, positive or negative.
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
|
Index: lib/Target/PowerPC/PPCISelLowering.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp (revision 270019)
|
--- lib/Target/PowerPC/PPCISelLowering.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp (working copy)
|
+++ lib/Target/PowerPC/PPCISelLowering.cpp (working copy)
|
||||||
@@ -670,6 +670,7 @@
|
@@ -670,6 +670,7 @@
|
||||||
case PPCISD::ADDIS_TOC_HA: return "PPCISD::ADDIS_TOC_HA";
|
case PPCISD::ADDIS_TOC_HA: return "PPCISD::ADDIS_TOC_HA";
|
||||||
case PPCISD::LD_TOC_L: return "PPCISD::LD_TOC_L";
|
case PPCISD::LD_TOC_L: return "PPCISD::LD_TOC_L";
|
||||||
@ -972,10 +996,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
|
|||||||
|
|
||||||
MachineInstrBuilder MIB;
|
MachineInstrBuilder MIB;
|
||||||
|
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCISelLowering.h
|
Index: lib/Target/PowerPC/PPCISelLowering.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCISelLowering.h (revision 270019)
|
--- lib/Target/PowerPC/PPCISelLowering.h (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCISelLowering.h (working copy)
|
+++ lib/Target/PowerPC/PPCISelLowering.h (working copy)
|
||||||
@@ -177,6 +177,12 @@
|
@@ -177,6 +177,12 @@
|
||||||
CR6SET,
|
CR6SET,
|
||||||
CR6UNSET,
|
CR6UNSET,
|
||||||
@ -989,10 +1013,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCISelLowering.h
|
|||||||
/// G8RC = ADDIS_GOT_TPREL_HA %X2, Symbol - Used by the initial-exec
|
/// G8RC = ADDIS_GOT_TPREL_HA %X2, Symbol - Used by the initial-exec
|
||||||
/// TLS model, produces an ADDIS8 instruction that adds the GOT
|
/// TLS model, produces an ADDIS8 instruction that adds the GOT
|
||||||
/// base to sym\@got\@tprel\@ha.
|
/// base to sym\@got\@tprel\@ha.
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCInstr64Bit.td
|
Index: lib/Target/PowerPC/PPCInstr64Bit.td
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCInstr64Bit.td (revision 270019)
|
--- lib/Target/PowerPC/PPCInstr64Bit.td (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCInstr64Bit.td (working copy)
|
+++ lib/Target/PowerPC/PPCInstr64Bit.td (working copy)
|
||||||
@@ -36,10 +36,6 @@
|
@@ -36,10 +36,6 @@
|
||||||
def tocentry : Operand<iPTR> {
|
def tocentry : Operand<iPTR> {
|
||||||
let MIOperandInfo = (ops i64imm:$imm);
|
let MIOperandInfo = (ops i64imm:$imm);
|
||||||
@ -1004,10 +1028,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCInstr64Bit.td
|
|||||||
def tlsreg : Operand<i64> {
|
def tlsreg : Operand<i64> {
|
||||||
let EncoderMethod = "getTLSRegEncoding";
|
let EncoderMethod = "getTLSRegEncoding";
|
||||||
let ParserMatchClass = PPCTLSRegOperand;
|
let ParserMatchClass = PPCTLSRegOperand;
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td
|
Index: lib/Target/PowerPC/PPCInstrInfo.td
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td (revision 270019)
|
--- lib/Target/PowerPC/PPCInstrInfo.td (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td (working copy)
|
+++ lib/Target/PowerPC/PPCInstrInfo.td (working copy)
|
||||||
@@ -57,6 +57,9 @@
|
@@ -57,6 +57,9 @@
|
||||||
SDTCisPtrTy<0>, SDTCisVT<1, i32>
|
SDTCisPtrTy<0>, SDTCisVT<1, i32>
|
||||||
]>;
|
]>;
|
||||||
@ -1130,10 +1154,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td
|
|||||||
// Standard shifts. These are represented separately from the real shifts above
|
// Standard shifts. These are represented separately from the real shifts above
|
||||||
// so that we can distinguish between shifts that allow 5-bit and 6-bit shift
|
// so that we can distinguish between shifts that allow 5-bit and 6-bit shift
|
||||||
// amounts.
|
// amounts.
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
|
Index: lib/Target/PowerPC/PPCMCInstLower.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp (revision 270019)
|
--- lib/Target/PowerPC/PPCMCInstLower.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp (working copy)
|
+++ lib/Target/PowerPC/PPCMCInstLower.cpp (working copy)
|
||||||
@@ -13,6 +13,7 @@
|
@@ -13,6 +13,7 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
@ -1188,10 +1212,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
|
|||||||
const MCExpr *Expr = MCSymbolRefExpr::Create(Symbol, RefKind, Ctx);
|
const MCExpr *Expr = MCSymbolRefExpr::Create(Symbol, RefKind, Ctx);
|
||||||
|
|
||||||
if (!MO.isJTI() && MO.getOffset())
|
if (!MO.isJTI() && MO.getOffset())
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp
|
Index: lib/Target/PowerPC/PPCMachineFunctionInfo.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp (revision 270019)
|
--- lib/Target/PowerPC/PPCMachineFunctionInfo.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp (working copy)
|
+++ lib/Target/PowerPC/PPCMachineFunctionInfo.cpp (working copy)
|
||||||
@@ -8,8 +8,16 @@
|
@@ -8,8 +8,16 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
@ -1209,10 +1233,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp
|
|||||||
+ return MF.getContext().GetOrCreateSymbol(Twine(MAI->getPrivateGlobalPrefix())+
|
+ return MF.getContext().GetOrCreateSymbol(Twine(MAI->getPrivateGlobalPrefix())+
|
||||||
+ Twine(MF.getFunctionNumber())+"$poff");
|
+ Twine(MF.getFunctionNumber())+"$poff");
|
||||||
+}
|
+}
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h
|
Index: lib/Target/PowerPC/PPCMachineFunctionInfo.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h (revision 270019)
|
--- lib/Target/PowerPC/PPCMachineFunctionInfo.h (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h (working copy)
|
+++ lib/Target/PowerPC/PPCMachineFunctionInfo.h (working copy)
|
||||||
@@ -92,6 +92,12 @@
|
@@ -92,6 +92,12 @@
|
||||||
/// 64-bit SVR4 ABI.
|
/// 64-bit SVR4 ABI.
|
||||||
SmallVector<unsigned, 3> MustSaveCRs;
|
SmallVector<unsigned, 3> MustSaveCRs;
|
||||||
@ -1249,10 +1273,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCMachineFunctionInfo.h
|
|||||||
};
|
};
|
||||||
|
|
||||||
} // end of namespace llvm
|
} // end of namespace llvm
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
|
Index: lib/Target/PowerPC/PPCRegisterInfo.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp (revision 270019)
|
--- lib/Target/PowerPC/PPCRegisterInfo.cpp (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp (working copy)
|
+++ lib/Target/PowerPC/PPCRegisterInfo.cpp (working copy)
|
||||||
@@ -199,7 +199,16 @@
|
@@ -199,7 +199,16 @@
|
||||||
if (PPCFI->needsFP(MF))
|
if (PPCFI->needsFP(MF))
|
||||||
Reserved.set(PPC::R31);
|
Reserved.set(PPC::R31);
|
||||||
@ -1287,10 +1311,10 @@ Index: contrib/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool PPCRegisterInfo::hasBasePointer(const MachineFunction &MF) const {
|
bool PPCRegisterInfo::hasBasePointer(const MachineFunction &MF) const {
|
||||||
Index: contrib/llvm/lib/Target/PowerPC/PPCSubtarget.h
|
Index: lib/Target/PowerPC/PPCSubtarget.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- contrib/llvm/lib/Target/PowerPC/PPCSubtarget.h (revision 270019)
|
--- lib/Target/PowerPC/PPCSubtarget.h (revision 270019)
|
||||||
+++ contrib/llvm/lib/Target/PowerPC/PPCSubtarget.h (working copy)
|
+++ lib/Target/PowerPC/PPCSubtarget.h (working copy)
|
||||||
@@ -189,6 +189,9 @@
|
@@ -189,6 +189,9 @@
|
||||||
/// isBGQ - True if this is a BG/Q platform.
|
/// isBGQ - True if this is a BG/Q platform.
|
||||||
bool isBGQ() const { return TargetTriple.getVendor() == Triple::BGQ; }
|
bool isBGQ() const { return TargetTriple.getVendor() == Triple::BGQ; }
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
Index: lib/Target/ARM/ARMInstrInfo.td
|
|
||||||
===================================================================
|
|
||||||
--- lib/Target/ARM/ARMInstrInfo.td (revision 271024)
|
|
||||||
+++ lib/Target/ARM/ARMInstrInfo.td (revision 271026)
|
|
||||||
@@ -3248,7 +3248,8 @@
|
|
||||||
def : ARMPat<(ARMadde GPR:$src, so_imm_not:$imm, CPSR),
|
|
||||||
(SBCri GPR:$src, so_imm_not:$imm)>;
|
|
||||||
def : ARMPat<(ARMadde GPR:$src, imm0_65535_neg:$imm, CPSR),
|
|
||||||
- (SBCrr GPR:$src, (MOVi16 (imm_not_XFORM imm:$imm)))>;
|
|
||||||
+ (SBCrr GPR:$src, (MOVi16 (imm_not_XFORM imm:$imm)))>,
|
|
||||||
+ Requires<[IsARM, HasV6T2]>;
|
|
||||||
|
|
||||||
// Note: These are implemented in C++ code, because they have to generate
|
|
||||||
// ADD/SUBrs instructions, which use a complex pattern that a xform function
|
|
@ -0,0 +1,78 @@
|
|||||||
|
Pull in r216989 from upstream llvm trunk (by Renato Golin):
|
||||||
|
|
||||||
|
MFV: Only emit movw on ARMv6T2+
|
||||||
|
|
||||||
|
Pull in r216990 from upstream llvm trunk (by Renato Golin):
|
||||||
|
|
||||||
|
Missing test from r216989
|
||||||
|
|
||||||
|
Building for the FreeBSD default target ARMv6 was emitting movw ASM on certain
|
||||||
|
test cases (found building qmake4/5 for ARM). Don't do that, moreover, the AS
|
||||||
|
in base doesn't understand this instruction for this target. One would need
|
||||||
|
to use --integrated-as to get this to build if desired.
|
||||||
|
|
||||||
|
Introduced here: http://svnweb.freebsd.org/changeset/base/271025
|
||||||
|
|
||||||
|
Index: lib/Target/ARM/ARMInstrInfo.td
|
||||||
|
===================================================================
|
||||||
|
--- lib/Target/ARM/ARMInstrInfo.td
|
||||||
|
+++ lib/Target/ARM/ARMInstrInfo.td
|
||||||
|
@@ -3248,7 +3248,8 @@
|
||||||
|
def : ARMPat<(ARMadde GPR:$src, so_imm_not:$imm, CPSR),
|
||||||
|
(SBCri GPR:$src, so_imm_not:$imm)>;
|
||||||
|
def : ARMPat<(ARMadde GPR:$src, imm0_65535_neg:$imm, CPSR),
|
||||||
|
- (SBCrr GPR:$src, (MOVi16 (imm_not_XFORM imm:$imm)))>;
|
||||||
|
+ (SBCrr GPR:$src, (MOVi16 (imm_not_XFORM imm:$imm)))>,
|
||||||
|
+ Requires<[IsARM, HasV6T2]>;
|
||||||
|
|
||||||
|
// Note: These are implemented in C++ code, because they have to generate
|
||||||
|
// ADD/SUBrs instructions, which use a complex pattern that a xform function
|
||||||
|
Index: test/CodeGen/ARM/carry.ll
|
||||||
|
===================================================================
|
||||||
|
--- test/CodeGen/ARM/carry.ll
|
||||||
|
+++ test/CodeGen/ARM/carry.ll
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-; RUN: llc < %s -march=arm | FileCheck %s
|
||||||
|
+; RUN: llc < %s -mtriple=armv6t2-eabi | FileCheck %s
|
||||||
|
|
||||||
|
define i64 @f1(i64 %a, i64 %b) {
|
||||||
|
; CHECK-LABEL: f1:
|
||||||
|
Index: test/CodeGen/ARM/pr18364-movw.ll
|
||||||
|
===================================================================
|
||||||
|
--- test/CodeGen/ARM/pr18364-movw.ll
|
||||||
|
+++ test/CodeGen/ARM/pr18364-movw.ll
|
||||||
|
@@ -0,0 +1,34 @@
|
||||||
|
+; RUN: llc < %s -mtriple=armv5te | FileCheck %s --check-prefix=V5
|
||||||
|
+; RUN: llc < %s -mtriple=armv6 | FileCheck %s --check-prefix=V6
|
||||||
|
+; RUN: llc < %s -mtriple=armv6t2 | FileCheck %s --check-prefix=V6T2
|
||||||
|
+; RUN: llc < %s -mtriple=armv7 | FileCheck %s --check-prefix=V7
|
||||||
|
+; PR18364
|
||||||
|
+
|
||||||
|
+define i64 @f() #0 {
|
||||||
|
+entry:
|
||||||
|
+; V5-NOT: movw
|
||||||
|
+; V6-NOT: movw
|
||||||
|
+; V6T2: movw
|
||||||
|
+; V7: movw
|
||||||
|
+ %y = alloca i64, align 8
|
||||||
|
+ %z = alloca i64, align 8
|
||||||
|
+ store i64 1, i64* %y, align 8
|
||||||
|
+ store i64 11579764786944, i64* %z, align 8
|
||||||
|
+ %0 = load i64* %y, align 8
|
||||||
|
+ %1 = load i64* %z, align 8
|
||||||
|
+ %sub = sub i64 %0, %1
|
||||||
|
+ ret i64 %sub
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+define i64 @g(i64 %a, i32 %b) #0 {
|
||||||
|
+entry:
|
||||||
|
+; V5-NOT: movw
|
||||||
|
+; V6-NOT: movw
|
||||||
|
+; V6T2: movw
|
||||||
|
+; V7: movw
|
||||||
|
+ %0 = mul i64 %a, 86400000
|
||||||
|
+ %mul = add i64 %0, -210866803200000
|
||||||
|
+ %conv = sext i32 %b to i64
|
||||||
|
+ %add = add nsw i64 %mul, %conv
|
||||||
|
+ ret i64 %add
|
||||||
|
+}
|
@ -0,0 +1,68 @@
|
|||||||
|
Pull in r200797 from upstream clang trunk (by Adrian Prantl):
|
||||||
|
|
||||||
|
Debug info: fix a crasher when when emitting debug info for
|
||||||
|
not-yet-completed templated types. getTypeSize() needs a complete type.
|
||||||
|
|
||||||
|
rdar://problem/15931354
|
||||||
|
|
||||||
|
Introduced here: http://svnweb.freebsd.org/changeset/base/271282
|
||||||
|
|
||||||
|
Index: tools/clang/lib/CodeGen/CGDebugInfo.cpp
|
||||||
|
===================================================================
|
||||||
|
--- tools/clang/lib/CodeGen/CGDebugInfo.cpp
|
||||||
|
+++ tools/clang/lib/CodeGen/CGDebugInfo.cpp
|
||||||
|
@@ -2251,9 +2251,10 @@ llvm::DICompositeType CGDebugInfo::CreateLimitedTy
|
||||||
|
if (T && (!T.isForwardDecl() || !RD->getDefinition()))
|
||||||
|
return T;
|
||||||
|
|
||||||
|
- // If this is just a forward declaration, construct an appropriately
|
||||||
|
- // marked node and just return it.
|
||||||
|
- if (!RD->getDefinition())
|
||||||
|
+ // If this is just a forward or incomplete declaration, construct an
|
||||||
|
+ // appropriately marked node and just return it.
|
||||||
|
+ const RecordDecl *D = RD->getDefinition();
|
||||||
|
+ if (!D || !D->isCompleteDefinition())
|
||||||
|
return getOrCreateRecordFwdDecl(Ty, RDContext);
|
||||||
|
|
||||||
|
uint64_t Size = CGM.getContext().getTypeSize(Ty);
|
||||||
|
Index: tools/clang/test/CodeGenCXX/debug-info-template-fwd.cpp
|
||||||
|
===================================================================
|
||||||
|
--- tools/clang/test/CodeGenCXX/debug-info-template-fwd.cpp
|
||||||
|
+++ tools/clang/test/CodeGenCXX/debug-info-template-fwd.cpp
|
||||||
|
@@ -0,0 +1,36 @@
|
||||||
|
+// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -g -emit-llvm -o - | FileCheck %s
|
||||||
|
+// This test is for a crash when emitting debug info for not-yet-completed types.
|
||||||
|
+// Test that we don't actually emit a forward decl for the offending class:
|
||||||
|
+// CHECK: [ DW_TAG_class_type ] [Derived<const __CFString, Foo>] {{.*}} [def]
|
||||||
|
+// rdar://problem/15931354
|
||||||
|
+typedef const struct __CFString * CFStringRef;
|
||||||
|
+template <class R> class Returner {};
|
||||||
|
+typedef const __CFString String;
|
||||||
|
+
|
||||||
|
+template <class A, class B> class Derived;
|
||||||
|
+
|
||||||
|
+template <class A, class B>
|
||||||
|
+class Base
|
||||||
|
+{
|
||||||
|
+ static Derived<A, B>* create();
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+template <class A, class B>
|
||||||
|
+class Derived : public Base<A, B> {
|
||||||
|
+public:
|
||||||
|
+ static void foo();
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+class Foo
|
||||||
|
+{
|
||||||
|
+ Foo();
|
||||||
|
+ static Returner<Base<String,Foo> > all();
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+Foo::Foo(){}
|
||||||
|
+
|
||||||
|
+Returner<Base<String,Foo> > Foo::all()
|
||||||
|
+{
|
||||||
|
+ Derived<String,Foo>::foo();
|
||||||
|
+ return Foo::all();
|
||||||
|
+}
|
@ -0,0 +1,43 @@
|
|||||||
|
Pull in r205331 from upstream clang trunk (by Adrian Prantl):
|
||||||
|
|
||||||
|
Debug info: fix a crash when emitting IndirectFieldDecls, which were
|
||||||
|
previously not handled at all.
|
||||||
|
rdar://problem/16348575
|
||||||
|
|
||||||
|
Introduced here: http://svnweb.freebsd.org/changeset/base/271432
|
||||||
|
|
||||||
|
Index: tools/clang/lib/CodeGen/CGDebugInfo.cpp
|
||||||
|
===================================================================
|
||||||
|
--- tools/clang/lib/CodeGen/CGDebugInfo.cpp (revision 205330)
|
||||||
|
+++ tools/clang/lib/CodeGen/CGDebugInfo.cpp (revision 205331)
|
||||||
|
@@ -1252,7 +1252,7 @@ CollectTemplateParams(const TemplateParameterList
|
||||||
|
V = CGM.GetAddrOfFunction(FD);
|
||||||
|
// Member data pointers have special handling too to compute the fixed
|
||||||
|
// offset within the object.
|
||||||
|
- if (isa<FieldDecl>(D)) {
|
||||||
|
+ if (isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D)) {
|
||||||
|
// These five lines (& possibly the above member function pointer
|
||||||
|
// handling) might be able to be refactored to use similar code in
|
||||||
|
// CodeGenModule::getMemberPointerConstant
|
||||||
|
Index: tools/clang/test/CodeGenCXX/debug-info-indirect-field-decl.cpp
|
||||||
|
===================================================================
|
||||||
|
--- tools/clang/test/CodeGenCXX/debug-info-indirect-field-decl.cpp (revision 0)
|
||||||
|
+++ tools/clang/test/CodeGenCXX/debug-info-indirect-field-decl.cpp (revision 205331)
|
||||||
|
@@ -0,0 +1,17 @@
|
||||||
|
+// RUN: %clang_cc1 -emit-llvm -g -triple x86_64-apple-darwin %s -o - | FileCheck %s
|
||||||
|
+//
|
||||||
|
+// Test that indirect field decls are handled gracefully.
|
||||||
|
+// rdar://problem/16348575
|
||||||
|
+//
|
||||||
|
+template <class T, int T::*ptr> class Foo { };
|
||||||
|
+
|
||||||
|
+struct Bar {
|
||||||
|
+ int i1;
|
||||||
|
+ // CHECK: [ DW_TAG_member ] [line [[@LINE+1]], size 32, align 32, offset 32] [from _ZTSN3BarUt_E]
|
||||||
|
+ union {
|
||||||
|
+ // CHECK: [ DW_TAG_member ] [i2] [line [[@LINE+1]], size 32, align 32, offset 0] [from int]
|
||||||
|
+ int i2;
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+Foo<Bar, &Bar::i2> the_foo;
|
@ -0,0 +1,64 @@
|
|||||||
|
Pull in r217410 from upstream llvm trunk (by Bob Wilson):
|
||||||
|
|
||||||
|
Set trunc store action to Expand for all X86 targets.
|
||||||
|
|
||||||
|
When compiling without SSE2, isTruncStoreLegal(F64, F32) would return
|
||||||
|
Legal, whereas with SSE2 it would return Expand. And since the Target
|
||||||
|
doesn't seem to actually handle a truncstore for double -> float, it
|
||||||
|
would just output a store of a full double in the space for a float
|
||||||
|
hence overwriting other bits on the stack.
|
||||||
|
|
||||||
|
Patch by Luqman Aden!
|
||||||
|
|
||||||
|
This should fix clang -O0 on i386 assigning garbage to floats, in
|
||||||
|
certain scenarios.
|
||||||
|
|
||||||
|
Introduced here: http://svnweb.freebsd.org/changeset/base/271597
|
||||||
|
|
||||||
|
Index: lib/Target/X86/X86ISelLowering.cpp
|
||||||
|
===================================================================
|
||||||
|
--- lib/Target/X86/X86ISelLowering.cpp (revision 208032)
|
||||||
|
+++ lib/Target/X86/X86ISelLowering.cpp (working copy)
|
||||||
|
@@ -300,6 +300,8 @@ void X86TargetLowering::resetOperationActions() {
|
||||||
|
setTruncStoreAction(MVT::i32, MVT::i8 , Expand);
|
||||||
|
setTruncStoreAction(MVT::i16, MVT::i8, Expand);
|
||||||
|
|
||||||
|
+ setTruncStoreAction(MVT::f64, MVT::f32, Expand);
|
||||||
|
+
|
||||||
|
// SETOEQ and SETUNE require checking two conditions.
|
||||||
|
setCondCodeAction(ISD::SETOEQ, MVT::f32, Expand);
|
||||||
|
setCondCodeAction(ISD::SETOEQ, MVT::f64, Expand);
|
||||||
|
@@ -1011,8 +1013,6 @@ void X86TargetLowering::resetOperationActions() {
|
||||||
|
AddPromotedToType (ISD::SELECT, VT, MVT::v2i64);
|
||||||
|
}
|
||||||
|
|
||||||
|
- setTruncStoreAction(MVT::f64, MVT::f32, Expand);
|
||||||
|
-
|
||||||
|
// Custom lower v2i64 and v2f64 selects.
|
||||||
|
setOperationAction(ISD::LOAD, MVT::v2f64, Legal);
|
||||||
|
setOperationAction(ISD::LOAD, MVT::v2i64, Legal);
|
||||||
|
Index: test/CodeGen/X86/dont-trunc-store-double-to-float.ll
|
||||||
|
===================================================================
|
||||||
|
--- test/CodeGen/X86/dont-trunc-store-double-to-float.ll (revision 0)
|
||||||
|
+++ test/CodeGen/X86/dont-trunc-store-double-to-float.ll (working copy)
|
||||||
|
@@ -0,0 +1,20 @@
|
||||||
|
+; RUN: llc -march=x86 < %s | FileCheck %s
|
||||||
|
+
|
||||||
|
+; CHECK-LABEL: @bar
|
||||||
|
+; CHECK: movl $1074339512,
|
||||||
|
+; CHECK: movl $1374389535,
|
||||||
|
+; CHECK: movl $1078523331,
|
||||||
|
+define void @bar() unnamed_addr {
|
||||||
|
+entry-block:
|
||||||
|
+ %a = alloca double
|
||||||
|
+ %b = alloca float
|
||||||
|
+
|
||||||
|
+ store double 3.140000e+00, double* %a
|
||||||
|
+ %0 = load double* %a
|
||||||
|
+
|
||||||
|
+ %1 = fptrunc double %0 to float
|
||||||
|
+
|
||||||
|
+ store float %1, float* %b
|
||||||
|
+
|
||||||
|
+ ret void
|
||||||
|
+}
|
@ -1241,7 +1241,7 @@ CollectTemplateParams(const TemplateParameterList *TPList,
|
|||||||
V = CGM.GetAddrOfFunction(FD);
|
V = CGM.GetAddrOfFunction(FD);
|
||||||
// Member data pointers have special handling too to compute the fixed
|
// Member data pointers have special handling too to compute the fixed
|
||||||
// offset within the object.
|
// offset within the object.
|
||||||
if (isa<FieldDecl>(D)) {
|
if (isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D)) {
|
||||||
// These five lines (& possibly the above member function pointer
|
// These five lines (& possibly the above member function pointer
|
||||||
// handling) might be able to be refactored to use similar code in
|
// handling) might be able to be refactored to use similar code in
|
||||||
// CodeGenModule::getMemberPointerConstant
|
// CodeGenModule::getMemberPointerConstant
|
||||||
@ -2235,9 +2235,10 @@ llvm::DICompositeType CGDebugInfo::CreateLimitedType(const RecordType *Ty) {
|
|||||||
if (T && (!T.isForwardDecl() || !RD->getDefinition()))
|
if (T && (!T.isForwardDecl() || !RD->getDefinition()))
|
||||||
return T;
|
return T;
|
||||||
|
|
||||||
// If this is just a forward declaration, construct an appropriately
|
// If this is just a forward or incomplete declaration, construct an
|
||||||
// marked node and just return it.
|
// appropriately marked node and just return it.
|
||||||
if (!RD->getDefinition())
|
const RecordDecl *D = RD->getDefinition();
|
||||||
|
if (!D || !D->isCompleteDefinition())
|
||||||
return getOrCreateRecordFwdDecl(Ty, RDContext);
|
return getOrCreateRecordFwdDecl(Ty, RDContext);
|
||||||
|
|
||||||
uint64_t Size = CGM.getContext().getTypeSize(Ty);
|
uint64_t Size = CGM.getContext().getTypeSize(Ty);
|
||||||
|
38
contrib/netbsd-tests/FREEBSD-upgrade
Normal file
38
contrib/netbsd-tests/FREEBSD-upgrade
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
$FreeBSD$
|
||||||
|
|
||||||
|
This document contains a collection of notes specific to the import
|
||||||
|
of the NetBSD test suite into head. These notes are built on the instructions
|
||||||
|
in the FreeBSD Subversion Primer that detail how to deal with vendor
|
||||||
|
branches and you are supposed to follow those:
|
||||||
|
|
||||||
|
http://www.freebsd.org/doc/en/articles/committers-guide/subversion-primer.html
|
||||||
|
|
||||||
|
The NetBSD test source code was originally obtained via NetBSD anoncvs as
|
||||||
|
described in the NetBSD handbook:
|
||||||
|
|
||||||
|
http://www.netbsd.org/docs/guide/en/chap-fetch.html#chap-fetch-cvs
|
||||||
|
|
||||||
|
and is imported into the NetBSD/tests vendor branch (see
|
||||||
|
base/vendor/NetBSD/tests/).
|
||||||
|
|
||||||
|
The process used to bootstrap the vendor tree was similar to the following:
|
||||||
|
|
||||||
|
/bin/sh
|
||||||
|
export CVSROOT="anoncvs@anoncvs.NetBSD.org:/cvsroot"
|
||||||
|
cvs -z9 co -D "09/30/2014 20:45" -P src/tests
|
||||||
|
mv src/tests/* tests/dist/.
|
||||||
|
|
||||||
|
Please adjust the checkout date spec (the argument passed via -D) to match
|
||||||
|
the desired checkout time.
|
||||||
|
|
||||||
|
To merge the vendor branch into head do something like this:
|
||||||
|
|
||||||
|
cd .../base/head/contrib/netbsd-tests
|
||||||
|
svn merge --accept=postpone \
|
||||||
|
svn+ssh://svn.freebsd.org/base/vendor/NetBSD/tests/dist .
|
||||||
|
find . -name Makefile\* | xargs svn rm --force
|
||||||
|
|
||||||
|
and resolve any conflicts that may arise at this point.
|
||||||
|
|
||||||
|
Lastly, with the list of old and new files in this import, make sure
|
||||||
|
to update the reachover Makefiles accordingly.
|
3
contrib/netbsd-tests/bin/cat/d_align.in
Normal file
3
contrib/netbsd-tests/bin/cat/d_align.in
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
a b c
|
||||||
|
1 2 3
|
||||||
|
x y z
|
3
contrib/netbsd-tests/bin/cat/d_align.out
Normal file
3
contrib/netbsd-tests/bin/cat/d_align.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
1 a b c$
|
||||||
|
2 1 2 3$
|
||||||
|
3 x y z$
|
59
contrib/netbsd-tests/bin/cat/t_cat.sh
Executable file
59
contrib/netbsd-tests/bin/cat/t_cat.sh
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
# $NetBSD: t_cat.sh,v 1.2 2012/03/27 17:57:02 jruoho Exp $
|
||||||
|
#
|
||||||
|
# Copyright (c) 2012 The NetBSD Foundation, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This code is derived from software contributed to The NetBSD Foundation
|
||||||
|
# by Jukka Ruohonen.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
atf_test_case align
|
||||||
|
align_head() {
|
||||||
|
atf_set "descr" "Test that cat(1) aligns the output " \
|
||||||
|
"right with options '-be' (PR bin/4841)"
|
||||||
|
}
|
||||||
|
|
||||||
|
align_body() {
|
||||||
|
|
||||||
|
atf_check -s ignore -o file:$(atf_get_srcdir)/d_align.out \
|
||||||
|
-x "cat -be $(atf_get_srcdir)/d_align.in"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case nonexistent
|
||||||
|
nonexistent_head() {
|
||||||
|
atf_set "descr" "Test that cat(1) doesn't return zero exit " \
|
||||||
|
"status for a nonexistent file (PR bin/3538)"
|
||||||
|
}
|
||||||
|
|
||||||
|
nonexistent_body() {
|
||||||
|
|
||||||
|
atf_check -s not-exit:0 -o empty -e not-empty \
|
||||||
|
-x "cat /some/name/that/does/not/exist"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_init_test_cases()
|
||||||
|
{
|
||||||
|
atf_add_test_case align
|
||||||
|
atf_add_test_case nonexistent
|
||||||
|
}
|
294
contrib/netbsd-tests/bin/cp/t_cp.sh
Executable file
294
contrib/netbsd-tests/bin/cp/t_cp.sh
Executable file
@ -0,0 +1,294 @@
|
|||||||
|
# $NetBSD: t_cp.sh,v 1.1 2012/03/17 16:33:10 jruoho Exp $
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
FILES="file file2 file3 link dir dir2 dirlink target"
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
rm -fr ${FILES}
|
||||||
|
}
|
||||||
|
|
||||||
|
cp_compare() {
|
||||||
|
echo "Ensuring that $2 and $3 are identical"
|
||||||
|
cmp -s $2 $3 || atf_fail "$2 and $3 are different"
|
||||||
|
}
|
||||||
|
|
||||||
|
reset() {
|
||||||
|
cleanup
|
||||||
|
echo "I'm a file" > file
|
||||||
|
echo "I'm a file, 2" > file2
|
||||||
|
echo "I'm a file, 3" > file3
|
||||||
|
ln -s file link
|
||||||
|
mkdir dir
|
||||||
|
ln -s dir dirlink
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case file_to_file
|
||||||
|
file_to_file_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a file to a file"
|
||||||
|
}
|
||||||
|
file_to_file_body() {
|
||||||
|
reset
|
||||||
|
|
||||||
|
file_to_file_simple
|
||||||
|
file_to_file_preserve
|
||||||
|
file_to_file_noflags
|
||||||
|
}
|
||||||
|
|
||||||
|
file_to_file_simple() {
|
||||||
|
rm -f file2
|
||||||
|
umask 022
|
||||||
|
chmod 777 file
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp file file2
|
||||||
|
cp_compare file_to_file_simple file file2
|
||||||
|
if [ `stat -f "%Lp" file2` != "755" ]; then
|
||||||
|
atf_fail "new file not created with umask"
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod 644 file
|
||||||
|
chmod 777 file2
|
||||||
|
cp_compare file_to_file_simple file file2
|
||||||
|
if [ `stat -f "%Lp" file2` != "777" ]; then
|
||||||
|
atf_fail "existing files permissions not retained"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
file_to_file_preserve() {
|
||||||
|
rm file3
|
||||||
|
chmod 644 file
|
||||||
|
chflags nodump file
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -p file file3
|
||||||
|
finfo=`stat -f "%p%u%g%m%z%f" file`
|
||||||
|
f3info=`stat -f "%p%u%g%m%z%f" file3`
|
||||||
|
if [ $finfo != $f3info ]; then
|
||||||
|
atf_fail "attributes not preserved"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
file_to_file_noflags() {
|
||||||
|
rm file3
|
||||||
|
chmod 644 file
|
||||||
|
chflags nodump file
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -p -N file file3
|
||||||
|
finfo=`stat -f "%f" file`
|
||||||
|
f3info=`stat -f "%f" file3`
|
||||||
|
if [ $finfo = $f3info ]; then
|
||||||
|
atf_fail "-p -N preserved file flags"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case file_to_link
|
||||||
|
file_to_link_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a file to a symbolic link"
|
||||||
|
}
|
||||||
|
file_to_link_body() {
|
||||||
|
reset
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp file2 link
|
||||||
|
cp_compare file_to_link file file2
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case link_to_file
|
||||||
|
link_to_file_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a symbolic link to a file"
|
||||||
|
}
|
||||||
|
link_to_file_body() {
|
||||||
|
reset
|
||||||
|
# file and link are identical (not copied).
|
||||||
|
atf_check -s eq:1 -o empty -e ignore cp link file
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp link file2
|
||||||
|
cp_compare link_to_file file file2
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case file_over_link
|
||||||
|
file_over_link_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a file to a symbolic link" \
|
||||||
|
"without following it"
|
||||||
|
}
|
||||||
|
file_over_link_body() {
|
||||||
|
reset
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -P file link
|
||||||
|
cp_compare file_over_link file link
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case link_over_file
|
||||||
|
link_over_file_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a symbolic link to a file" \
|
||||||
|
"without following the former"
|
||||||
|
}
|
||||||
|
link_over_file_body() {
|
||||||
|
reset
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -P link file
|
||||||
|
if [ `readlink link` != `readlink file` ]; then
|
||||||
|
atf_fail "readlink link != readlink file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case files_to_dir
|
||||||
|
files_to_dir_head() {
|
||||||
|
atf_set "descr" "Checks the copy of multiple files into a directory"
|
||||||
|
}
|
||||||
|
files_to_dir_body() {
|
||||||
|
reset
|
||||||
|
# can't copy multiple files to a file
|
||||||
|
atf_check -s eq:1 -o empty -e ignore cp file file2 file3
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp file file2 link dir
|
||||||
|
cp_compare files_to_dir file "dir/file"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case dir_to_file
|
||||||
|
dir_to_file_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a directory onto a file, which" \
|
||||||
|
"should not work"
|
||||||
|
}
|
||||||
|
dir_to_file_body() {
|
||||||
|
reset
|
||||||
|
# can't copy a dir onto a file
|
||||||
|
atf_check -s eq:1 -o empty -e ignore cp dir file
|
||||||
|
atf_check -s eq:1 -o empty -e ignore cp -R dir file
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case file_to_linkdir
|
||||||
|
file_to_linkdir_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a file to a symbolic link that" \
|
||||||
|
"points to a directory"
|
||||||
|
}
|
||||||
|
file_to_linkdir_body() {
|
||||||
|
reset
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp file dirlink
|
||||||
|
cp_compare file_to_linkdir file "dir/file"
|
||||||
|
|
||||||
|
# overwrite the link
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -P file dirlink
|
||||||
|
atf_check -s eq:1 -o empty -e empty readlink dirlink
|
||||||
|
cp_compare file_to_linkdir file dirlink
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case linkdir_to_file
|
||||||
|
linkdir_to_file_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a symbolic link that points to" \
|
||||||
|
"a directory onto a file"
|
||||||
|
}
|
||||||
|
linkdir_to_file_body() {
|
||||||
|
reset
|
||||||
|
# cannot copy a dir onto a file
|
||||||
|
atf_check -s eq:1 -o empty -e ignore cp dirlink file
|
||||||
|
|
||||||
|
# overwrite the link
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -P dirlink file
|
||||||
|
if [ `readlink file` != `readlink dirlink` ]; then
|
||||||
|
atf_fail "readlink link != readlink file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_to_dne_no_R() {
|
||||||
|
atf_check -s eq:1 -o empty -e ignore cp dir dir2
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_to_dne() {
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -R dir dir2
|
||||||
|
cp_compare dir_to_dne "dir/file" "dir2/file"
|
||||||
|
readlink dir2/link >/dev/null
|
||||||
|
if [ $? -gt 0 ]; then
|
||||||
|
atf_fail "-R didn't copy a link as a link"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_to_dir_H() {
|
||||||
|
dir_to_dir_setup
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -R dir dir2
|
||||||
|
|
||||||
|
chmod 777 dir
|
||||||
|
|
||||||
|
# copy a dir into a dir, only command-line links are followed
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -R -H dirlink dir2
|
||||||
|
cp_compare dir_to_dir_H "dir/file" "dir2/dirlink/file"
|
||||||
|
readlink dir2/dirlink/link >/dev/null
|
||||||
|
if [ $? -gt 0 ]; then
|
||||||
|
atf_fail "didn't copy a link as a link"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Created directories have the same mode as the corresponding
|
||||||
|
# source directory, unmodified by the process's umask.
|
||||||
|
if [ `stat -f "%Lp" dir2/dirlink` != "777" ]; then
|
||||||
|
atf_fail "-R modified dir perms with umask"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_to_dir_L() {
|
||||||
|
dir_to_dir_setup
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -R dir dir2
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -R -H dirlink dir2
|
||||||
|
|
||||||
|
# copy a dir into a dir, following all links
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -R -H -L dirlink dir2/dirlink
|
||||||
|
cp_compare dir_to_dir_L "dir/file" "dir2/dirlink/dirlink/file"
|
||||||
|
# fail if -R -L copied a link as a link
|
||||||
|
atf_check -s eq:1 -o ignore -e empty readlink dir2/dirlink/dirlink/link
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_to_dir_subdir_exists() {
|
||||||
|
# recursively copy a dir into another dir, with some subdirs already
|
||||||
|
# existing
|
||||||
|
cleanup
|
||||||
|
|
||||||
|
mkdir -p dir/1 dir/2 dir/3 target/2
|
||||||
|
echo "file" > dir/2/file
|
||||||
|
atf_check -s eq:0 -o empty -e empty cp -R dir/* target
|
||||||
|
cp_compare dir_to_dir_subdir_exists "dir/2/file" "target/2/file"
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_to_dir_setup() {
|
||||||
|
reset
|
||||||
|
umask 077
|
||||||
|
cp -P file file2 file3 link dir
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case dir_to_dir
|
||||||
|
dir_to_dir_head() {
|
||||||
|
atf_set "descr" "Checks the copy of a directory onto another directory"
|
||||||
|
}
|
||||||
|
dir_to_dir_body() {
|
||||||
|
dir_to_dir_setup
|
||||||
|
dir_to_dne_no_R
|
||||||
|
dir_to_dne
|
||||||
|
dir_to_dir_H
|
||||||
|
dir_to_dir_L
|
||||||
|
dir_to_dir_subdir_exists
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_init_test_cases()
|
||||||
|
{
|
||||||
|
atf_add_test_case file_to_file
|
||||||
|
atf_add_test_case file_to_link
|
||||||
|
atf_add_test_case link_to_file
|
||||||
|
atf_add_test_case file_over_link
|
||||||
|
atf_add_test_case link_over_file
|
||||||
|
atf_add_test_case files_to_dir
|
||||||
|
atf_add_test_case file_to_linkdir
|
||||||
|
atf_add_test_case linkdir_to_file
|
||||||
|
atf_add_test_case dir_to_file
|
||||||
|
atf_add_test_case dir_to_dir
|
||||||
|
}
|
130
contrib/netbsd-tests/bin/dd/t_dd.sh
Executable file
130
contrib/netbsd-tests/bin/dd/t_dd.sh
Executable file
@ -0,0 +1,130 @@
|
|||||||
|
# $NetBSD: t_dd.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007 The NetBSD Foundation, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
test_dd_length() {
|
||||||
|
result=$1
|
||||||
|
cmd=$2
|
||||||
|
set -- x `eval $cmd | wc -c`
|
||||||
|
res=$2
|
||||||
|
if [ x"$res" != x"$result" ]; then
|
||||||
|
atf_fail "Expected $result bytes of output, got $res: $cmd"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case length
|
||||||
|
length_head() {
|
||||||
|
# XXX The PR should be stored in a tag.
|
||||||
|
atf_set "descr" "Test for result messages accidentally pumped into" \
|
||||||
|
"the output file if the standard IO descriptors are" \
|
||||||
|
"closed. The last of the three following tests is" \
|
||||||
|
"the one expected to fail. (NetBSD PR bin/8521)"
|
||||||
|
}
|
||||||
|
length_body() {
|
||||||
|
test_dd_length 512 \
|
||||||
|
"dd if=/dev/zero of=/dev/fd/5 count=1 5>&1 >/dev/null 2>/dev/null"
|
||||||
|
test_dd_length 512 \
|
||||||
|
"dd if=/dev/zero of=/dev/fd/5 count=1 5>&1 >&- 2>/dev/null"
|
||||||
|
test_dd_length 512 \
|
||||||
|
"dd if=/dev/zero of=/dev/fd/5 count=1 5>&1 >&- 2>&-"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_dd_io() {
|
||||||
|
res="`echo -n "$2" | eval $1`"
|
||||||
|
if [ x"$res" != x"$3" ]; then
|
||||||
|
atf_fail "Expected \"$3\", got \"$res\": $1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
allbits1="\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
|
||||||
|
|
||||||
|
ebcdicbits1="\000\001\002\003\067\055\056\057\026\005\045\013\014\015\016\017\020\021\022\023\074\075\062\046\030\031\077\047\034\035\036\037\100\132\177\173\133\154\120\175\115\135\134\116\153\140\113\141\360\361\362\363\364\365\366\367\370\371\172\136\114\176\156\157\174\301\302\303\304\305\306\307\310\311\321\322\323\324\325\326\327\330\331\342\343\344\345\346\347\350\351\255\340\275\232\155\171\201\202\203\204\205\206\207\210\211\221\222\223\224\225\226\227\230\231\242\243\244\245\246\247\250\251\300\117\320\137\007\040\041\042\043\044\025\006\027\050\051\052\053\054\011\012\033\060\061\032\063\064\065\066\010\070\071\072\073\004\024\076\341\101\102\103\104\105\106\107\110\111\121\122\123\124\125\126\127\130\131\142\143\144\145\146\147\150\151\160\161\162\163\164\165\166\167\170\200\212\213\214\215\216\217\220\152\233\234\235\236\237\240\252\253\254\112\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\241\276\277\312\313\314\315\316\317\332\333\334\335\336\337\352\353\354\355\356\357\372\373\374\375\376\377"
|
||||||
|
|
||||||
|
allvisbits=`echo -n "$allbits1" | unvis | vis`
|
||||||
|
ebcdicvisbits=`echo -n "$ebcdicbits1" | unvis | vis`
|
||||||
|
|
||||||
|
atf_test_case io
|
||||||
|
io_head() {
|
||||||
|
atf_set "descr" "This checks the combination of bs= with" \
|
||||||
|
"conv=ebcdic. Prior to revision 1.24 of dd's" \
|
||||||
|
"args.c, the conv option would be ignored."
|
||||||
|
}
|
||||||
|
io_body() {
|
||||||
|
test_dd_io "unvis | dd 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$allvisbits"
|
||||||
|
test_dd_io "unvis | dd ibs=1 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$allvisbits"
|
||||||
|
test_dd_io "unvis | dd obs=1 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$allvisbits"
|
||||||
|
test_dd_io "unvis | dd bs=1 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$allvisbits"
|
||||||
|
|
||||||
|
test_dd_io "unvis | dd conv=ebcdic 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$ebcdicvisbits"
|
||||||
|
test_dd_io "unvis | dd conv=ebcdic ibs=512 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$ebcdicvisbits"
|
||||||
|
test_dd_io "unvis | dd conv=ebcdic obs=512 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$ebcdicvisbits"
|
||||||
|
test_dd_io "unvis | dd conv=ebcdic bs=512 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$ebcdicvisbits"
|
||||||
|
|
||||||
|
test_dd_io "unvis | dd conv=ebcdic 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$ebcdicvisbits"
|
||||||
|
test_dd_io "unvis | dd conv=ebcdic ibs=1 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$ebcdicvisbits"
|
||||||
|
test_dd_io "unvis | dd conv=ebcdic obs=1 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$ebcdicvisbits"
|
||||||
|
test_dd_io "unvis | dd conv=ebcdic bs=1 2>/dev/null | vis" \
|
||||||
|
"$allvisbits" "$ebcdicvisbits"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case seek
|
||||||
|
seek_head() {
|
||||||
|
atf_set "descr" "Tests output file seeking"
|
||||||
|
}
|
||||||
|
|
||||||
|
seek_body() {
|
||||||
|
echo TEST1234 > testfile
|
||||||
|
atf_check -s exit:0 -e ignore \
|
||||||
|
dd if=/dev/zero of=testfile seek=1 bs=8k count=1
|
||||||
|
atf_check -s exit:0 -e ignore -o match:'^TEST1234$' dd if=testfile
|
||||||
|
eval $(stat -s testfile)
|
||||||
|
atf_check_equal $st_size $((2*8192))
|
||||||
|
|
||||||
|
echo -n TEST1234 > tf2
|
||||||
|
atf_check -s exit:0 -e ignore -x \
|
||||||
|
'dd bs=4 if=/dev/zero count=1 | tr \\0 \\n | dd of=tf2 bs=4 seek=1'
|
||||||
|
atf_check -s exit:0 -e ignore -o match:'^TEST$' dd if=tf2
|
||||||
|
eval $(stat -s tf2)
|
||||||
|
atf_check_equal $st_size 8
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_init_test_cases()
|
||||||
|
{
|
||||||
|
atf_add_test_case length
|
||||||
|
atf_add_test_case io
|
||||||
|
atf_add_test_case seek
|
||||||
|
}
|
218
contrib/netbsd-tests/bin/df/getmntinfo.c
Normal file
218
contrib/netbsd-tests/bin/df/getmntinfo.c
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
/* $NetBSD: getmntinfo.c,v 1.1 2012/03/17 16:33:11 jruoho Exp $ */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007 The NetBSD Foundation, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/ucred.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
|
||||||
|
#include <err.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define KB * 1024
|
||||||
|
#define MB * 1024 KB
|
||||||
|
#define GB * 1024 MB
|
||||||
|
|
||||||
|
static struct statvfs *getnewstatvfs(void);
|
||||||
|
static void other_variants(const struct statvfs *, const int *, int,
|
||||||
|
const int *, int);
|
||||||
|
static void setup_filer(void);
|
||||||
|
static void setup_ld0g(void);
|
||||||
|
static void setup_strpct(void);
|
||||||
|
|
||||||
|
static struct statvfs *allstatvfs;
|
||||||
|
static int sftotal, sfused;
|
||||||
|
|
||||||
|
struct statvfs *
|
||||||
|
getnewstatvfs(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (sftotal == sfused) {
|
||||||
|
sftotal = sftotal ? sftotal * 2 : 1;
|
||||||
|
allstatvfs = realloc(allstatvfs,
|
||||||
|
sftotal * sizeof(struct statvfs));
|
||||||
|
if (allstatvfs == NULL)
|
||||||
|
err(EXIT_FAILURE, "realloc");
|
||||||
|
}
|
||||||
|
|
||||||
|
return (&allstatvfs[sfused++]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
other_variants(const struct statvfs *tmpl, const int *minfree, int minfreecnt,
|
||||||
|
const int *consumed, int consumedcnt)
|
||||||
|
{
|
||||||
|
int64_t total, used;
|
||||||
|
struct statvfs *sf;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
for (i = 0; i < minfreecnt; i++)
|
||||||
|
for (j = 0; j < consumedcnt; j++) {
|
||||||
|
sf = getnewstatvfs();
|
||||||
|
*sf = *tmpl;
|
||||||
|
total = (int64_t)(u_long)sf->f_blocks * sf->f_bsize;
|
||||||
|
used = total * consumed[j] / 100;
|
||||||
|
sf->f_bfree = (total - used) / sf->f_bsize;
|
||||||
|
sf->f_bavail = (total * (100 - minfree[i]) / 100 -
|
||||||
|
used) / (int)sf->f_bsize;
|
||||||
|
sf->f_bresvd = sf->f_bfree - sf->f_bavail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parameter taken from:
|
||||||
|
* http://mail-index.NetBSD.org/tech-userlevel/2004/03/24/0001.html
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
setup_filer(void)
|
||||||
|
{
|
||||||
|
static const struct statvfs tmpl = {
|
||||||
|
#define BSIZE 512
|
||||||
|
#define TOTAL 1147ULL GB
|
||||||
|
#define USED 132ULL MB
|
||||||
|
.f_bsize = BSIZE,
|
||||||
|
.f_frsize = BSIZE,
|
||||||
|
.f_blocks = TOTAL / BSIZE,
|
||||||
|
.f_bfree = (TOTAL - USED) / BSIZE,
|
||||||
|
.f_bavail = (TOTAL - USED) / BSIZE,
|
||||||
|
.f_bresvd = 0,
|
||||||
|
.f_mntfromname = "filer:/",
|
||||||
|
.f_mntonname = "/filer",
|
||||||
|
#undef USED
|
||||||
|
#undef TOTAL
|
||||||
|
#undef BSIZE
|
||||||
|
};
|
||||||
|
static const int minfree[] = { 0, 5, 10, 15, };
|
||||||
|
static const int consumed[] = { 0, 20, 60, 95, 100 };
|
||||||
|
|
||||||
|
*getnewstatvfs() = tmpl;
|
||||||
|
other_variants(&tmpl, minfree, sizeof(minfree) / sizeof(minfree[0]),
|
||||||
|
consumed, sizeof(consumed) / sizeof(consumed[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parameter taken from:
|
||||||
|
* http://mail-index.NetBSD.org/current-users/2004/03/01/0038.html
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
setup_ld0g(void)
|
||||||
|
{
|
||||||
|
static const struct statvfs tmpl = {
|
||||||
|
#define BSIZE 4096 /* Guess */
|
||||||
|
#define TOTAL 1308726116ULL KB
|
||||||
|
#define USED 17901268ULL KB
|
||||||
|
#define AVAIL 1225388540ULL KB
|
||||||
|
.f_bsize = BSIZE,
|
||||||
|
.f_frsize = BSIZE,
|
||||||
|
.f_blocks = TOTAL / BSIZE,
|
||||||
|
.f_bfree = (TOTAL - USED) / BSIZE,
|
||||||
|
.f_bavail = AVAIL / BSIZE,
|
||||||
|
.f_bresvd = (TOTAL - USED) / BSIZE - AVAIL / BSIZE,
|
||||||
|
.f_mntfromname = "/dev/ld0g",
|
||||||
|
.f_mntonname = "/anon-root",
|
||||||
|
#undef AVAIL
|
||||||
|
#undef USED
|
||||||
|
#undef TOTAL
|
||||||
|
#undef BSIZE
|
||||||
|
};
|
||||||
|
static const int minfree[] = { 0, 5, 10, 15, };
|
||||||
|
static const int consumed[] = { 0, 20, 60, 95, 100 };
|
||||||
|
|
||||||
|
*getnewstatvfs() = tmpl;
|
||||||
|
other_variants(&tmpl, minfree, sizeof(minfree) / sizeof(minfree[0]),
|
||||||
|
consumed, sizeof(consumed) / sizeof(consumed[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test of strpct() with huge number.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
setup_strpct(void)
|
||||||
|
{
|
||||||
|
static const struct statvfs tmpl = {
|
||||||
|
#define BSIZE 4096 /* Guess */
|
||||||
|
#define TOTAL 0x4ffffffffULL KB
|
||||||
|
#define USED (TOTAL / 2)
|
||||||
|
#define AVAIL (TOTAL / 2)
|
||||||
|
.f_bsize = BSIZE,
|
||||||
|
.f_frsize = BSIZE,
|
||||||
|
.f_blocks = TOTAL / BSIZE,
|
||||||
|
.f_bfree = (TOTAL - USED) / BSIZE,
|
||||||
|
.f_bavail = AVAIL / BSIZE,
|
||||||
|
.f_bresvd = (TOTAL - USED) / BSIZE - AVAIL / BSIZE,
|
||||||
|
.f_mntfromname = "/dev/strpct",
|
||||||
|
.f_mntonname = "/strpct",
|
||||||
|
#undef AVAIL
|
||||||
|
#undef USED
|
||||||
|
#undef TOTAL
|
||||||
|
#undef BSIZE
|
||||||
|
};
|
||||||
|
|
||||||
|
*getnewstatvfs() = tmpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parameter taken from:
|
||||||
|
* http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=23600
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setup_pr23600(void)
|
||||||
|
{
|
||||||
|
static const struct statvfs tmpl = {
|
||||||
|
#define BSIZE 512
|
||||||
|
#define TOTAL 20971376ULL
|
||||||
|
#define USED 5719864ULL
|
||||||
|
#define AVAIL 15251512ULL
|
||||||
|
.f_bsize = BSIZE,
|
||||||
|
.f_frsize = BSIZE,
|
||||||
|
.f_blocks = TOTAL,
|
||||||
|
.f_bfree = TOTAL - USED,
|
||||||
|
.f_bavail = AVAIL,
|
||||||
|
.f_bresvd = TOTAL - USED - AVAIL,
|
||||||
|
.f_mntfromname = "/dev/wd0e",
|
||||||
|
.f_mntonname = "/mount/windows/C",
|
||||||
|
#undef AVAIL
|
||||||
|
#undef USED
|
||||||
|
#undef TOTAL
|
||||||
|
#undef BSIZE
|
||||||
|
};
|
||||||
|
|
||||||
|
*getnewstatvfs() = tmpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
getmntinfo(struct statvfs **mntbuf, int flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
setup_filer();
|
||||||
|
setup_ld0g();
|
||||||
|
setup_strpct();
|
||||||
|
setup_pr23600();
|
||||||
|
|
||||||
|
*mntbuf = allstatvfs;
|
||||||
|
return (sfused);
|
||||||
|
}
|
148
contrib/netbsd-tests/bin/df/t_df.sh
Executable file
148
contrib/netbsd-tests/bin/df/t_df.sh
Executable file
@ -0,0 +1,148 @@
|
|||||||
|
# $NetBSD: t_df.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
atf_test_case normal
|
||||||
|
normal_head() {
|
||||||
|
atf_set "descr" "Checks that the output of df without flags is" \
|
||||||
|
"correct according to some already-known, sane" \
|
||||||
|
"output"
|
||||||
|
}
|
||||||
|
normal_body() {
|
||||||
|
cat >expout <<EOF
|
||||||
|
Filesystem 1K-blocks Used Avail %Cap Mounted on
|
||||||
|
filer:/ 1202716672 135168 1202581504 0% /filer
|
||||||
|
filer:/ 1202716672 0 1202716672 0% /filer
|
||||||
|
filer:/ 1202716672 240543334 962173337 20% /filer
|
||||||
|
filer:/ 1202716672 721630003 481086668 60% /filer
|
||||||
|
filer:/ 1202716672 1142580838 60135833 95% /filer
|
||||||
|
filer:/ 1202716672 1202716672 0 100% /filer
|
||||||
|
filer:/ 1202716672 0 1142580838 0% /filer
|
||||||
|
filer:/ 1202716672 240543334 902037504 21% /filer
|
||||||
|
filer:/ 1202716672 721630003 420950835 63% /filer
|
||||||
|
filer:/ 1202716672 1142580838 0 100% /filer
|
||||||
|
filer:/ 1202716672 1202716672 -60135833 105% /filer
|
||||||
|
filer:/ 1202716672 0 1082445004 0% /filer
|
||||||
|
filer:/ 1202716672 240543334 841901670 22% /filer
|
||||||
|
filer:/ 1202716672 721630003 360815001 66% /filer
|
||||||
|
filer:/ 1202716672 1142580838 -60135833 105% /filer
|
||||||
|
filer:/ 1202716672 1202716672 -120271667 111% /filer
|
||||||
|
filer:/ 1202716672 0 1022309171 0% /filer
|
||||||
|
filer:/ 1202716672 240543334 781765836 23% /filer
|
||||||
|
filer:/ 1202716672 721630003 300679168 70% /filer
|
||||||
|
filer:/ 1202716672 1142580838 -120271667 111% /filer
|
||||||
|
filer:/ 1202716672 1202716672 -180407500 117% /filer
|
||||||
|
/dev/ld0g 1308726116 17901268 1225388540 1% /anon-root
|
||||||
|
/dev/ld0g 1308726116 0 1308726116 0% /anon-root
|
||||||
|
/dev/ld0g 1308726116 261745224 1046980892 20% /anon-root
|
||||||
|
/dev/ld0g 1308726116 785235672 523490444 60% /anon-root
|
||||||
|
/dev/ld0g 1308726116 1243289812 65436304 95% /anon-root
|
||||||
|
/dev/ld0g 1308726116 1308726116 0 100% /anon-root
|
||||||
|
/dev/ld0g 1308726116 0 1243289808 0% /anon-root
|
||||||
|
/dev/ld0g 1308726116 261745224 981544584 21% /anon-root
|
||||||
|
/dev/ld0g 1308726116 785235672 458054140 63% /anon-root
|
||||||
|
/dev/ld0g 1308726116 1243289812 0 100% /anon-root
|
||||||
|
/dev/ld0g 1308726116 1308726116 -65436304 105% /anon-root
|
||||||
|
/dev/ld0g 1308726116 0 1177853504 0% /anon-root
|
||||||
|
/dev/ld0g 1308726116 261745224 916108280 22% /anon-root
|
||||||
|
/dev/ld0g 1308726116 785235672 392617832 66% /anon-root
|
||||||
|
/dev/ld0g 1308726116 1243289812 -65436304 105% /anon-root
|
||||||
|
/dev/ld0g 1308726116 1308726116 -130872608 111% /anon-root
|
||||||
|
/dev/ld0g 1308726116 0 1112417196 0% /anon-root
|
||||||
|
/dev/ld0g 1308726116 261745224 850671972 23% /anon-root
|
||||||
|
/dev/ld0g 1308726116 785235672 327181528 70% /anon-root
|
||||||
|
/dev/ld0g 1308726116 1243289812 -130872608 111% /anon-root
|
||||||
|
/dev/ld0g 1308726116 1308726116 -196308916 117% /anon-root
|
||||||
|
/dev/strpct 21474836476 10737418240 10737418236 50% /strpct
|
||||||
|
/dev/wd0e 10485688 2859932 7625756 27% /mount/windows/C
|
||||||
|
EOF
|
||||||
|
atf_check -s eq:0 -o file:expout -e empty \
|
||||||
|
-x "BLOCKSIZE=1k $(atf_get_srcdir)/h_df -n"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case hflag
|
||||||
|
hflag_head() {
|
||||||
|
atf_set "descr" "Checks that the output of df is correct according" \
|
||||||
|
"to some already-known, sane output when using the" \
|
||||||
|
"human readable format"
|
||||||
|
}
|
||||||
|
hflag_body() {
|
||||||
|
cat >expout <<EOF
|
||||||
|
Filesystem Size Used Avail %Cap Mounted on
|
||||||
|
filer:/ 1.1T 132M 1.1T 0% /filer
|
||||||
|
filer:/ 1.1T 0B 1.1T 0% /filer
|
||||||
|
filer:/ 1.1T 229G 918G 20% /filer
|
||||||
|
filer:/ 1.1T 688G 459G 60% /filer
|
||||||
|
filer:/ 1.1T 1.1T 57G 95% /filer
|
||||||
|
filer:/ 1.1T 1.1T 0B 100% /filer
|
||||||
|
filer:/ 1.1T 0B 1.1T 0% /filer
|
||||||
|
filer:/ 1.1T 229G 860G 21% /filer
|
||||||
|
filer:/ 1.1T 688G 401G 63% /filer
|
||||||
|
filer:/ 1.1T 1.1T 0B 100% /filer
|
||||||
|
filer:/ 1.1T 1.1T -57G 105% /filer
|
||||||
|
filer:/ 1.1T 0B 1.0T 0% /filer
|
||||||
|
filer:/ 1.1T 229G 803G 22% /filer
|
||||||
|
filer:/ 1.1T 688G 344G 66% /filer
|
||||||
|
filer:/ 1.1T 1.1T -57G 105% /filer
|
||||||
|
filer:/ 1.1T 1.1T -115G 111% /filer
|
||||||
|
filer:/ 1.1T 0B 975G 0% /filer
|
||||||
|
filer:/ 1.1T 229G 746G 23% /filer
|
||||||
|
filer:/ 1.1T 688G 287G 70% /filer
|
||||||
|
filer:/ 1.1T 1.1T -115G 111% /filer
|
||||||
|
filer:/ 1.1T 1.1T -172G 117% /filer
|
||||||
|
/dev/ld0g 1.2T 17G 1.1T 1% /anon-root
|
||||||
|
/dev/ld0g 1.2T 0B 1.2T 0% /anon-root
|
||||||
|
/dev/ld0g 1.2T 250G 998G 20% /anon-root
|
||||||
|
/dev/ld0g 1.2T 749G 499G 60% /anon-root
|
||||||
|
/dev/ld0g 1.2T 1.2T 62G 95% /anon-root
|
||||||
|
/dev/ld0g 1.2T 1.2T 0B 100% /anon-root
|
||||||
|
/dev/ld0g 1.2T 0B 1.2T 0% /anon-root
|
||||||
|
/dev/ld0g 1.2T 250G 936G 21% /anon-root
|
||||||
|
/dev/ld0g 1.2T 749G 437G 63% /anon-root
|
||||||
|
/dev/ld0g 1.2T 1.2T 0B 100% /anon-root
|
||||||
|
/dev/ld0g 1.2T 1.2T -62G 105% /anon-root
|
||||||
|
/dev/ld0g 1.2T 0B 1.1T 0% /anon-root
|
||||||
|
/dev/ld0g 1.2T 250G 874G 22% /anon-root
|
||||||
|
/dev/ld0g 1.2T 749G 374G 66% /anon-root
|
||||||
|
/dev/ld0g 1.2T 1.2T -62G 105% /anon-root
|
||||||
|
/dev/ld0g 1.2T 1.2T -125G 111% /anon-root
|
||||||
|
/dev/ld0g 1.2T 0B 1.0T 0% /anon-root
|
||||||
|
/dev/ld0g 1.2T 250G 811G 23% /anon-root
|
||||||
|
/dev/ld0g 1.2T 749G 312G 70% /anon-root
|
||||||
|
/dev/ld0g 1.2T 1.2T -125G 111% /anon-root
|
||||||
|
/dev/ld0g 1.2T 1.2T -187G 117% /anon-root
|
||||||
|
/dev/strpct 20T 10T 10T 50% /strpct
|
||||||
|
/dev/wd0e 10G 2.7G 7.3G 27% /mount/windows/C
|
||||||
|
EOF
|
||||||
|
atf_check -s eq:0 -o file:expout -e empty \
|
||||||
|
-x "BLOCKSIZE=1k $(atf_get_srcdir)/h_df -hn"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_init_test_cases()
|
||||||
|
{
|
||||||
|
atf_add_test_case normal
|
||||||
|
atf_add_test_case hflag
|
||||||
|
}
|
228
contrib/netbsd-tests/bin/expr/t_expr.sh
Executable file
228
contrib/netbsd-tests/bin/expr/t_expr.sh
Executable file
@ -0,0 +1,228 @@
|
|||||||
|
# $NetBSD: t_expr.sh,v 1.3 2012/03/27 07:23:06 jruoho Exp $
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007 The NetBSD Foundation, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
# The first arg will get eval'd so escape any meta characters
|
||||||
|
# The 2nd arg is an expected string/response from expr for that op.
|
||||||
|
test_expr() {
|
||||||
|
echo "Expression '${1}', expecting '${2}'"
|
||||||
|
res=`eval expr $1 2>&1`
|
||||||
|
if [ "$res" != "$2" ]; then
|
||||||
|
atf_fail "Expected $2, got $res from expression: " \
|
||||||
|
"`eval echo $1`"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case lang
|
||||||
|
lang_ops_head() {
|
||||||
|
atf_set "descr" "Test that expr(1) works with non-C LANG (PR bin/2486)"
|
||||||
|
}
|
||||||
|
lang_body() {
|
||||||
|
|
||||||
|
export LANG=nonexistent
|
||||||
|
atf_check -s exit:0 -o inline:"21\n" -e empty -x "expr 10 + 11"
|
||||||
|
|
||||||
|
export LANG=ru_RU.KOI8-R
|
||||||
|
atf_check -s exit:0 -o inline:"21\n" -e empty -x "expr 10 + 11"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case overflow
|
||||||
|
overflow_head() {
|
||||||
|
atf_set "descr" "Test overflow cases"
|
||||||
|
}
|
||||||
|
overflow_body() {
|
||||||
|
test_expr '4611686018427387904 + 4611686018427387903' \
|
||||||
|
'9223372036854775807'
|
||||||
|
test_expr '4611686018427387904 + 4611686018427387904' \
|
||||||
|
"expr: integer overflow or underflow occurred for operation '4611686018427387904 + 4611686018427387904'"
|
||||||
|
test_expr '4611686018427387904 - -4611686018427387904' \
|
||||||
|
"expr: integer overflow or underflow occurred for operation '4611686018427387904 - -4611686018427387904'"
|
||||||
|
test_expr '-4611686018427387904 - 4611686018427387903' \
|
||||||
|
'-9223372036854775807'
|
||||||
|
test_expr '-4611686018427387904 - 4611686018427387905' \
|
||||||
|
"expr: integer overflow or underflow occurred for operation '-4611686018427387904 - 4611686018427387905'"
|
||||||
|
test_expr '-4611686018427387904 \* 1' '-4611686018427387904'
|
||||||
|
test_expr '-4611686018427387904 \* -1' '4611686018427387904'
|
||||||
|
test_expr '-4611686018427387904 \* 2' '-9223372036854775808'
|
||||||
|
test_expr '-4611686018427387904 \* 3' \
|
||||||
|
"expr: integer overflow or underflow occurred for operation '-4611686018427387904 * 3'"
|
||||||
|
test_expr '-4611686018427387904 \* -2' \
|
||||||
|
"expr: integer overflow or underflow occurred for operation '-4611686018427387904 * -2'"
|
||||||
|
test_expr '4611686018427387904 \* 1' '4611686018427387904'
|
||||||
|
test_expr '4611686018427387904 \* 2' \
|
||||||
|
"expr: integer overflow or underflow occurred for operation '4611686018427387904 * 2'"
|
||||||
|
test_expr '4611686018427387904 \* 3' \
|
||||||
|
"expr: integer overflow or underflow occurred for operation '4611686018427387904 * 3'"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case gtkmm
|
||||||
|
gtkmm_head() {
|
||||||
|
atf_set "descr" "Test from gtk-- configure that cause problems on old expr"
|
||||||
|
}
|
||||||
|
gtkmm_body() {
|
||||||
|
test_expr '3 \> 3 \| 3 = 3 \& 4 \> 4 \| 3 = 3 \& 4 = 4 \& 5 \>= 5' '1'
|
||||||
|
test_expr '3 \> 3 \| 3 = 3 \& 4 \> 4 \| 3 = 3 \& 4 = 4 \& 5 \>= 6' '0'
|
||||||
|
test_expr '3 \> 3 \| 3 = 3 \& 4 \> 4 \| 3 = 3 \& 4 = 3 \& 5 \>= 5' '0'
|
||||||
|
test_expr '3 \> 3 \| 3 = 3 \& 4 \> 4 \| 3 = 2 \& 4 = 4 \& 5 \>= 5' '0'
|
||||||
|
test_expr '3 \> 2 \| 3 = 3 \& 4 \> 4 \| 3 = 3 \& 4 = 4 \& 5 \>= 6' '1'
|
||||||
|
test_expr '3 \> 3 \| 3 = 3 \& 4 \> 3 \| 3 = 3 \& 4 = 4 \& 5 \>= 5' '1'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case colon_vs_math
|
||||||
|
colon_vs_math_head() {
|
||||||
|
atf_set "descr" "Basic precendence test with the : operator vs. math"
|
||||||
|
}
|
||||||
|
colon_vs_math_body() {
|
||||||
|
test_expr '2 : 4 / 2' '0'
|
||||||
|
test_expr '4 : 4 % 3' '1'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case arithmetic_ops
|
||||||
|
arithmetic_ops_head() {
|
||||||
|
atf_set "descr" "Dangling arithemtic operator"
|
||||||
|
}
|
||||||
|
arithmetic_ops_body() {
|
||||||
|
test_expr '.java_wrapper : /' '0'
|
||||||
|
test_expr '4 : \*' '0'
|
||||||
|
test_expr '4 : +' '0'
|
||||||
|
test_expr '4 : -' '0'
|
||||||
|
test_expr '4 : /' '0'
|
||||||
|
test_expr '4 : %' '0'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case basic_math
|
||||||
|
basic_math_head() {
|
||||||
|
atf_set "descr" "Basic math test"
|
||||||
|
}
|
||||||
|
basic_math_body() {
|
||||||
|
test_expr '2 + 4 \* 5' '22'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case basic_functional
|
||||||
|
basic_functional_head() {
|
||||||
|
atf_set "descr" "Basic functional tests"
|
||||||
|
}
|
||||||
|
basic_functional_body() {
|
||||||
|
test_expr '2' '2'
|
||||||
|
test_expr '-4' '-4'
|
||||||
|
test_expr 'hello' 'hello'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case compare_ops_precedence
|
||||||
|
compare_ops_precedence_head() {
|
||||||
|
atf_set "descr" "Compare operator precendence test"
|
||||||
|
}
|
||||||
|
compare_ops_precedence_body() {
|
||||||
|
test_expr '2 \> 1 \* 17' '0'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case compare_ops
|
||||||
|
compare_ops_head() {
|
||||||
|
atf_set "descr" "Compare operator tests"
|
||||||
|
}
|
||||||
|
compare_ops_body() {
|
||||||
|
test_expr '2 \!= 5' '1'
|
||||||
|
test_expr '2 \!= 2' '0'
|
||||||
|
test_expr '2 \<= 3' '1'
|
||||||
|
test_expr '2 \<= 2' '1'
|
||||||
|
test_expr '2 \<= 1' '0'
|
||||||
|
test_expr '2 \< 3' '1'
|
||||||
|
test_expr '2 \< 2' '0'
|
||||||
|
test_expr '2 = 2' '1'
|
||||||
|
test_expr '2 = 4' '0'
|
||||||
|
test_expr '2 \>= 1' '1'
|
||||||
|
test_expr '2 \>= 2' '1'
|
||||||
|
test_expr '2 \>= 3' '0'
|
||||||
|
test_expr '2 \> 1' '1'
|
||||||
|
test_expr '2 \> 2' '0'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case multiply
|
||||||
|
multiply_head() {
|
||||||
|
atf_set "descr" "Test the multiply operator (PR bin/12838)"
|
||||||
|
}
|
||||||
|
multiply_body() {
|
||||||
|
test_expr '1 \* -1' '-1'
|
||||||
|
test_expr '2 \> 1 \* 17' '0'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case negative
|
||||||
|
negative_head() {
|
||||||
|
atf_set "descr" "Test the additive inverse"
|
||||||
|
}
|
||||||
|
negative_body() {
|
||||||
|
test_expr '-1 + 5' '4'
|
||||||
|
test_expr '- 1 + 5' 'expr: syntax error'
|
||||||
|
|
||||||
|
test_expr '5 + -1' '4'
|
||||||
|
test_expr '5 + - 1' 'expr: syntax error'
|
||||||
|
|
||||||
|
test_expr '1 - -5' '6'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case math_precedence
|
||||||
|
math_precedence_head() {
|
||||||
|
atf_set "descr" "More complex math test for precedence"
|
||||||
|
}
|
||||||
|
math_precedence_body() {
|
||||||
|
test_expr '-3 + -1 \* 4 + 3 / -6' '-7'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case precedence
|
||||||
|
precedence_head() {
|
||||||
|
atf_set "descr" "Test precedence"
|
||||||
|
}
|
||||||
|
precedence_body() {
|
||||||
|
# This is messy but the shell escapes cause that
|
||||||
|
test_expr 'X1/2/3 : X\\\(.\*[^/]\\\)//\*[^/][^/]\*/\*$ \| . : \\\(.\\\)' '1/2'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case regex
|
||||||
|
regex_head() {
|
||||||
|
atf_set "descr" "Test proper () returning \1 from a regex"
|
||||||
|
}
|
||||||
|
regex_body() {
|
||||||
|
# This is messy but the shell escapes cause that
|
||||||
|
test_expr '1/2 : .\*/\\\(.\*\\\)' '2'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_init_test_cases()
|
||||||
|
{
|
||||||
|
atf_add_test_case lang
|
||||||
|
atf_add_test_case overflow
|
||||||
|
atf_add_test_case gtkmm
|
||||||
|
atf_add_test_case colon_vs_math
|
||||||
|
atf_add_test_case arithmetic_ops
|
||||||
|
atf_add_test_case basic_math
|
||||||
|
atf_add_test_case basic_functional
|
||||||
|
atf_add_test_case compare_ops_precedence
|
||||||
|
atf_add_test_case compare_ops
|
||||||
|
atf_add_test_case multiply
|
||||||
|
atf_add_test_case negative
|
||||||
|
atf_add_test_case math_precedence
|
||||||
|
atf_add_test_case precedence
|
||||||
|
atf_add_test_case regex
|
||||||
|
}
|
54
contrib/netbsd-tests/bin/pax/t_pax.sh
Executable file
54
contrib/netbsd-tests/bin/pax/t_pax.sh
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
# $NetBSD: t_pax.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
atf_test_case append
|
||||||
|
append_head() {
|
||||||
|
atf_set "descr" "Ensure that appending a file to an archive" \
|
||||||
|
"produces the same results as if the file" \
|
||||||
|
"had been there during the archive's creation"
|
||||||
|
}
|
||||||
|
append_body() {
|
||||||
|
touch foo bar
|
||||||
|
|
||||||
|
# store both foo and bar into file1.tar
|
||||||
|
atf_check -s eq:0 -o empty -e empty \
|
||||||
|
pax -w -b 512 -x ustar -f file1.tar foo bar
|
||||||
|
|
||||||
|
# store foo into file2.tar, then append bar to file2.tar
|
||||||
|
atf_check -s eq:0 -o empty -e empty \
|
||||||
|
pax -w -b 512 -x ustar -f file2.tar foo
|
||||||
|
atf_check -s eq:0 -o empty -e empty \
|
||||||
|
pax -w -b 512 -x ustar -f file2.tar -a bar
|
||||||
|
|
||||||
|
# ensure that file1.tar and file2.tar are equal
|
||||||
|
atf_check -s eq:0 -o empty -e empty cmp file1.tar file2.tar
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_init_test_cases()
|
||||||
|
{
|
||||||
|
atf_add_test_case append
|
||||||
|
}
|
123
contrib/netbsd-tests/bin/ps/keywords
Normal file
123
contrib/netbsd-tests/bin/ps/keywords
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
# $NetBSD: keywords,v 1.2 2014/01/16 04:16:32 mlelstv Exp $
|
||||||
|
#
|
||||||
|
# Table of keywords for use with ps "-o" option.
|
||||||
|
#
|
||||||
|
# The first column (keyword) is the name of a keyword.
|
||||||
|
#
|
||||||
|
# The second column (header) is the default column header associated
|
||||||
|
# with the keyword, except if the keyword is an alias, in which case the
|
||||||
|
# second column is the name of another keyword.
|
||||||
|
#
|
||||||
|
# The third column (flag) may be blank, "LJUST", or "ALIAS". "ALIAS"
|
||||||
|
# means that the keyword is an alias. "LJUST" means that the keyword
|
||||||
|
# should be displayed in a left-justified column. The default is that
|
||||||
|
# the keyword should be displayed in a right-justified column.
|
||||||
|
#
|
||||||
|
# keyword header flag
|
||||||
|
#
|
||||||
|
ktracep KTRACEP
|
||||||
|
nwchan WCHAN
|
||||||
|
p_ru P_RU
|
||||||
|
paddr PADDR
|
||||||
|
rlink RLINK
|
||||||
|
%cpu %CPU
|
||||||
|
%mem %MEM
|
||||||
|
acflag ACFLG
|
||||||
|
acflg acflag ALIAS
|
||||||
|
args command ALIAS
|
||||||
|
blocked sigmask ALIAS
|
||||||
|
caught sigcatch ALIAS
|
||||||
|
comm COMMAND LJUST
|
||||||
|
command COMMAND LJUST
|
||||||
|
cpu CPU
|
||||||
|
cputime time ALIAS
|
||||||
|
ctime CTIME
|
||||||
|
egid EGID
|
||||||
|
egroup EGROUP LJUST
|
||||||
|
etime ELAPSED
|
||||||
|
euid EUID
|
||||||
|
euser EUSER LJUST
|
||||||
|
f F
|
||||||
|
flags f ALIAS
|
||||||
|
gid GID
|
||||||
|
group GROUP LJUST
|
||||||
|
groupnames GROUPNAMES LJUST
|
||||||
|
groups GROUPS LJUST
|
||||||
|
holdcnt HOLDCNT
|
||||||
|
ignored sigignore ALIAS
|
||||||
|
inblk INBLK
|
||||||
|
inblock inblk ALIAS
|
||||||
|
jobc JOBC
|
||||||
|
ktrace KTRACE
|
||||||
|
laddr LADDR
|
||||||
|
lid LID
|
||||||
|
lim LIM
|
||||||
|
login LOGIN LJUST
|
||||||
|
logname login ALIAS
|
||||||
|
lstart STARTED LJUST
|
||||||
|
lstate STAT LJUST
|
||||||
|
ltime LTIME
|
||||||
|
majflt MAJFLT
|
||||||
|
minflt MINFLT
|
||||||
|
msgrcv MSGRCV
|
||||||
|
msgsnd MSGSND
|
||||||
|
ni nice ALIAS
|
||||||
|
nice NI
|
||||||
|
nivcsw NIVCSW
|
||||||
|
nlwp NLWP
|
||||||
|
nsignals nsigs ALIAS
|
||||||
|
nsigs NSIGS
|
||||||
|
nswap NSWAP
|
||||||
|
nvcsw NVCSW
|
||||||
|
oublk OUBLK
|
||||||
|
oublock oublk ALIAS
|
||||||
|
pagein PAGEIN
|
||||||
|
pcpu %cpu ALIAS
|
||||||
|
pending sig ALIAS
|
||||||
|
pgid PGID
|
||||||
|
pid PID
|
||||||
|
pmem %mem ALIAS
|
||||||
|
ppid PPID
|
||||||
|
pri PRI
|
||||||
|
re RE
|
||||||
|
rgid RGID
|
||||||
|
rgroup RGROUP LJUST
|
||||||
|
rlwp RLWP
|
||||||
|
rss RSS
|
||||||
|
rssize rsz ALIAS
|
||||||
|
rsz RSZ
|
||||||
|
ruid RUID
|
||||||
|
ruser RUSER LJUST
|
||||||
|
sess SESS
|
||||||
|
sid SID
|
||||||
|
sig PENDING
|
||||||
|
sigcatch CAUGHT
|
||||||
|
sigignore IGNORED
|
||||||
|
sigmask BLOCKED
|
||||||
|
sl SL
|
||||||
|
start STARTED
|
||||||
|
stat state ALIAS
|
||||||
|
state STAT LJUST
|
||||||
|
stime STIME
|
||||||
|
svgid SVGID
|
||||||
|
svgroup SVGROUP LJUST
|
||||||
|
svuid SVUID
|
||||||
|
svuser SVUSER LJUST
|
||||||
|
tdev TDEV
|
||||||
|
time TIME
|
||||||
|
tpgid TPGID
|
||||||
|
tsess TSESS
|
||||||
|
tsiz TSIZ
|
||||||
|
tt TTY LJUST
|
||||||
|
tty TTY LJUST
|
||||||
|
uaddr UADDR
|
||||||
|
ucomm UCOMM LJUST
|
||||||
|
uid UID
|
||||||
|
upr UPR
|
||||||
|
user USER LJUST
|
||||||
|
usrpri upr ALIAS
|
||||||
|
utime UTIME
|
||||||
|
vsize vsz ALIAS
|
||||||
|
vsz VSZ
|
||||||
|
wchan WCHAN LJUST
|
||||||
|
xstat XSTAT
|
404
contrib/netbsd-tests/bin/ps/t_ps.sh
Executable file
404
contrib/netbsd-tests/bin/ps/t_ps.sh
Executable file
@ -0,0 +1,404 @@
|
|||||||
|
# $NetBSD: t_ps.sh,v 1.2 2014/01/16 04:16:32 mlelstv Exp $
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007 The NetBSD Foundation, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
# the implementation of "ps" to test
|
||||||
|
: ${TEST_PS:="ps"}
|
||||||
|
# tab and newline characters
|
||||||
|
tab="$(printf '\t')"
|
||||||
|
# nl="$(printf '\n')" doesn't work
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
|
||||||
|
#
|
||||||
|
# Parse the "keywords" file into a load of shell variables
|
||||||
|
#
|
||||||
|
setup_keywords()
|
||||||
|
{
|
||||||
|
# Set variables representing the header text
|
||||||
|
# for all normal keywords (except aliases), and
|
||||||
|
# for regular expressions to match the text in left- or
|
||||||
|
# right-justified columns.
|
||||||
|
# For example, head_text_p_cpu="%CPU" head_regexp_p_cpu=" *%CPU".
|
||||||
|
while read keyword heading flag
|
||||||
|
do
|
||||||
|
case "$keyword" in
|
||||||
|
''|\#*) continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
[ x"$flag" = x"ALIAS" ] && continue
|
||||||
|
kvar="${keyword}"
|
||||||
|
case "${keyword}" in
|
||||||
|
%*) kvar="p_${keyword#%}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
eval head_text_${kvar}=\'"${heading}"\'
|
||||||
|
case "${flag}" in
|
||||||
|
'') # right justified
|
||||||
|
eval head_regexp_${kvar}=\'" *${heading}"\'
|
||||||
|
;;
|
||||||
|
LJUST) # left justified
|
||||||
|
eval head_regexp_${kvar}=\'"${heading} *"\'
|
||||||
|
;;
|
||||||
|
*) atf_fail "unknown flag in keywords"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done <"$(atf_get_srcdir)/keywords"
|
||||||
|
|
||||||
|
# Now do the aliases.
|
||||||
|
while read keyword heading flag
|
||||||
|
do
|
||||||
|
case "$keyword" in
|
||||||
|
''|\#*) continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
[ x"$flag" != x"ALIAS" ] && continue
|
||||||
|
kvar="${keyword}"
|
||||||
|
avar="${heading}"
|
||||||
|
case "${keyword}" in
|
||||||
|
%*) kvar="p_${keyword#%}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
case "${heading}" in
|
||||||
|
%*) avar="p_${heading#%}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
eval head_text_${kvar}=\"\$head_text_${avar}\"
|
||||||
|
eval head_regexp_${kvar}=\"\$head_regexp_${avar}\"
|
||||||
|
done <"$(atf_get_srcdir)/keywords"
|
||||||
|
|
||||||
|
# default sets of keywords
|
||||||
|
default_keywords='pid tty stat time command'
|
||||||
|
j_keywords='user pid ppid pgid sess jobc state tt time command'
|
||||||
|
l_keywords='uid pid ppid cpu pri nice vsz rss wchan state tt time command'
|
||||||
|
s_keywords='uid pid ppid cpu lid nlwp pri nice vsz rss wchan lstate tt ltime command'
|
||||||
|
u_keywords='user pid %cpu %mem vsz rss tt state start time command'
|
||||||
|
v_keywords='pid state time sl re pagein vsz rss lim tsiz %cpu %mem command'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert a list of keywords like "pid comm" to a regexp
|
||||||
|
# like " *PID COMMAND *"
|
||||||
|
heading_keywords_to_regexp()
|
||||||
|
{
|
||||||
|
local keywords="$1"
|
||||||
|
local regexp
|
||||||
|
regexp="$(echo "$keywords" | \
|
||||||
|
sed -E -e 's/\%/p_/g' -e 's/(^| )/\1\$head_regexp_/g')"
|
||||||
|
eval regexp=\""${regexp}"\"
|
||||||
|
regexp="^${regexp}\$"
|
||||||
|
echo "$regexp"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that a string matches a regexp; use the specified id
|
||||||
|
# in error or success messages.
|
||||||
|
#
|
||||||
|
check_regexp() {
|
||||||
|
local id="$1" string="$2" regexp="$3"
|
||||||
|
if ! expr "$string" : "$regexp" >/dev/null
|
||||||
|
then
|
||||||
|
atf_fail "${id}: expected [${regexp}], got [${string}]"
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run "ps $args -p $$"; check that only one line is printed,
|
||||||
|
# without a preceding header line.
|
||||||
|
#
|
||||||
|
check_no_heading_line()
|
||||||
|
{
|
||||||
|
local args="$1"
|
||||||
|
local output="$(eval "${TEST_PS} $args -p $$")"
|
||||||
|
case "$output" in
|
||||||
|
*"$nl"*)
|
||||||
|
local firstline="${output%%${nl}*}"
|
||||||
|
atf_fail "check_no_heading_line [$args] got [$firstline]"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run "ps $args"; check that the heading matches the expected regexp.
|
||||||
|
#
|
||||||
|
check_heading_regexp()
|
||||||
|
{
|
||||||
|
args="$1"
|
||||||
|
regexp="$2"
|
||||||
|
actual="$( eval "${TEST_PS} $args" | sed -e 1q )"
|
||||||
|
check_regexp "heading [$args]" "${actual}" "${regexp}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run "ps $args"; check that the heading matches a regexp constructed
|
||||||
|
# from the specified keywords.
|
||||||
|
#
|
||||||
|
check_heading_keywords()
|
||||||
|
{
|
||||||
|
args="$1"
|
||||||
|
keywords="$2"
|
||||||
|
check_heading_regexp "$args" "$(heading_keywords_to_regexp "$keywords")"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Try several variations on "ps $flag", "ps -$flag", etc.,
|
||||||
|
# and check that the heading always has the correct keywords.
|
||||||
|
#
|
||||||
|
check_heading_variations()
|
||||||
|
{
|
||||||
|
flag="$1"
|
||||||
|
keywords="$2"
|
||||||
|
for args in "$flag" "-$flag" "-$flag$flag -$flag"; do
|
||||||
|
check_heading_keywords "$args" "$keywords"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case default_columns
|
||||||
|
default_columns_head()
|
||||||
|
{
|
||||||
|
atf_set "descr" "Checks that the default set of columns is correct" \
|
||||||
|
"and also check that the columns printed by the -j," \
|
||||||
|
"-l, -s, -u and -v flags alone are correct"
|
||||||
|
}
|
||||||
|
default_columns_body()
|
||||||
|
{
|
||||||
|
setup_keywords
|
||||||
|
check_heading_keywords '' "$default_keywords"
|
||||||
|
check_heading_variations 'j' "$j_keywords"
|
||||||
|
check_heading_variations 'l' "$l_keywords"
|
||||||
|
check_heading_variations 's' "$s_keywords"
|
||||||
|
check_heading_variations 'u' "$u_keywords"
|
||||||
|
check_heading_variations 'v' "$v_keywords"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case minus_O
|
||||||
|
minus_O_head()
|
||||||
|
{
|
||||||
|
atf_set "descr" "Checks that 'ps -O foo' inserts columns just after" \
|
||||||
|
"the pid column"
|
||||||
|
}
|
||||||
|
minus_O_body()
|
||||||
|
{
|
||||||
|
setup_keywords
|
||||||
|
check_heading_keywords '-O %cpu,%mem' \
|
||||||
|
"$(echo "${default_keywords}" | sed -e 's/pid/pid %cpu %mem/')"
|
||||||
|
check_heading_keywords '-O %cpu -O %mem' \
|
||||||
|
"$(echo "${default_keywords}" | sed -e 's/pid/pid %cpu %mem/')"
|
||||||
|
check_heading_keywords '-O%cpu -O%mem' \
|
||||||
|
"$(echo "${default_keywords}" | sed -e 's/pid/pid %cpu %mem/')"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case minus_o
|
||||||
|
minus_o_head()
|
||||||
|
{
|
||||||
|
atf_set "descr" "Checks simple cases of 'ps -o foo' to control which" \
|
||||||
|
"columns are printed; this does not test header" \
|
||||||
|
"overriding via 'ps -o foo=BAR'"
|
||||||
|
}
|
||||||
|
minus_o_body()
|
||||||
|
{
|
||||||
|
setup_keywords
|
||||||
|
# Keywords for "-o name" override the default display
|
||||||
|
check_heading_keywords '-o pid,%cpu,%mem' \
|
||||||
|
"pid %cpu %mem"
|
||||||
|
check_heading_keywords '-o pid -o %cpu,%mem' \
|
||||||
|
"pid %cpu %mem"
|
||||||
|
check_heading_keywords '-opid -o %cpu,%mem' \
|
||||||
|
"pid %cpu %mem"
|
||||||
|
# Space works like comma
|
||||||
|
check_heading_keywords '-opid -o "%cpu %mem"' \
|
||||||
|
"pid %cpu %mem"
|
||||||
|
# Check missing pid
|
||||||
|
check_heading_keywords '-o comm' \
|
||||||
|
"comm"
|
||||||
|
# Check pid present but not first
|
||||||
|
check_heading_keywords '-o comm,pid' \
|
||||||
|
"comm pid"
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case override_heading_simple
|
||||||
|
override_heading_simple_head()
|
||||||
|
{
|
||||||
|
atf_set "descr" "Tests simple uses of header overriding via" \
|
||||||
|
"'ps -o foo=BAR'. This does not test columns " \
|
||||||
|
"with null headings, or headings with embedded" \
|
||||||
|
"space, ',' or '='."
|
||||||
|
}
|
||||||
|
override_heading_simple_body()
|
||||||
|
{
|
||||||
|
setup_keywords
|
||||||
|
check_heading_regexp '-o pid=PPP -o comm' \
|
||||||
|
'^ *PPP '"${head_text_comm}"'$' # no trailing space
|
||||||
|
check_heading_regexp '-o pid=PPP -o comm=CCC' \
|
||||||
|
'^ *PPP CCC$'
|
||||||
|
check_heading_regexp '-o pid,comm=CCC' \
|
||||||
|
'^'"${head_regexp_pid}"' CCC$'
|
||||||
|
check_heading_regexp '-o pid -o comm=CCC' \
|
||||||
|
'^'"${head_regexp_pid}"' CCC$'
|
||||||
|
# Check missing pid
|
||||||
|
check_heading_regexp '-o comm=CCC' \
|
||||||
|
'^CCC$'
|
||||||
|
# Check pid present but not first
|
||||||
|
check_heading_regexp '-o comm=CCC -o pid=PPP' \
|
||||||
|
'^CCC *PPP$'
|
||||||
|
check_heading_regexp '-o comm,pid=PPP' \
|
||||||
|
'^'"${head_regexp_comm}"' *PPP$'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case override_heading_embedded_specials
|
||||||
|
override_heading_embedded_specials_head()
|
||||||
|
{
|
||||||
|
atf_set "descr" "Tests header overriding with embedded space," \
|
||||||
|
"',' or '='. Everything after the first '='" \
|
||||||
|
"is part of the heading."
|
||||||
|
}
|
||||||
|
override_heading_embedded_specials_body()
|
||||||
|
{
|
||||||
|
setup_keywords
|
||||||
|
# Check embedded "," or "=" in override header.
|
||||||
|
check_heading_regexp '-o comm,pid==' \
|
||||||
|
'^'"${head_regexp_comm}"' *=$'
|
||||||
|
check_heading_regexp '-o comm,pid=,' \
|
||||||
|
'^'"${head_regexp_comm}"' *,$'
|
||||||
|
check_heading_regexp '-o pid=PPP,comm' \
|
||||||
|
'^ *PPP,comm$' # not like '-o pid=PPP -o comm'
|
||||||
|
check_heading_regexp '-o pid=PPP,comm=CCC' \
|
||||||
|
'^ *PPP,comm=CCC$' # not like '-o pid=PPP -o comm=CCC'
|
||||||
|
check_heading_regexp '-o comm,pid=PPP,QQQ' \
|
||||||
|
'^'"${head_regexp_comm}"' *PPP,QQQ$'
|
||||||
|
check_heading_regexp '-o comm,pid=ppid,tty=state' \
|
||||||
|
'^'"${head_regexp_comm}"' *ppid,tty=state$'
|
||||||
|
# Check embedded space or tab in override header.
|
||||||
|
check_heading_regexp '-o comm,pid="PPP QQQ"' \
|
||||||
|
'^'"${head_regexp_comm}"' *PPP QQQ$'
|
||||||
|
check_heading_regexp '-o comm,pid="PPP${tab}QQQ"' \
|
||||||
|
'^'"${head_regexp_comm}"' *PPP'"${tab}"'QQQ$'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case override_heading_some_null
|
||||||
|
override_heading_some_null_head()
|
||||||
|
{
|
||||||
|
atf_set "descr" "Tests simple uses of null column headings" \
|
||||||
|
"overriding via 'ps -o foo=BAR -o baz='. This" \
|
||||||
|
"does not test the case where all columns have" \
|
||||||
|
"null headings."
|
||||||
|
}
|
||||||
|
override_heading_some_null_body()
|
||||||
|
{
|
||||||
|
setup_keywords
|
||||||
|
check_heading_regexp '-o pid=PPP -o comm=' \
|
||||||
|
'^ *PPP *$'
|
||||||
|
check_heading_regexp '-o pid= -o comm=CCC' \
|
||||||
|
'^ * CCC$'
|
||||||
|
check_heading_regexp '-o pid -o comm=' \
|
||||||
|
'^'"${head_regexp_pid}"' *$'
|
||||||
|
# Check missing pid
|
||||||
|
check_heading_regexp '-o ppid= -o comm=CCC' \
|
||||||
|
'^ * CCC$'
|
||||||
|
check_heading_regexp '-o ppid=PPP -o comm=' \
|
||||||
|
'^ *PPP *$'
|
||||||
|
# Check pid present but not first
|
||||||
|
check_heading_regexp '-o comm= -o pid=PPP' \
|
||||||
|
'^ * PPP$'
|
||||||
|
check_heading_regexp '-o comm,pid=' \
|
||||||
|
'^'"${head_regexp_comm}"' *$'
|
||||||
|
# A field with a null custom heading retains a minimum width
|
||||||
|
# derived from the default heading. This does not apply
|
||||||
|
# to a field with a very short (non-null) custom heading.
|
||||||
|
#
|
||||||
|
# We choose "holdcnt" as a column whose width is likely to be
|
||||||
|
# determined entirely by the header width, because the values
|
||||||
|
# are likely to be very small.
|
||||||
|
check_heading_regexp '-o holdcnt -o holdcnt -o holdcnt' \
|
||||||
|
'^HOLDCNT HOLDCNT HOLDCNT$'
|
||||||
|
check_heading_regexp '-o holdcnt -o holdcnt= -o holdcnt' \
|
||||||
|
'^HOLDCNT HOLDCNT$'
|
||||||
|
check_heading_regexp '-o holdcnt -o holdcnt=HH -o holdcnt' \
|
||||||
|
'^HOLDCNT HH HOLDCNT$'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case override_heading_all_null
|
||||||
|
override_heading_all_null_head()
|
||||||
|
{
|
||||||
|
atf_set "descr" "Tests the use of 'ps -o foo= -o bar=' (with a" \
|
||||||
|
"null heading for every column). The heading" \
|
||||||
|
"should not be printed at all in this case."
|
||||||
|
}
|
||||||
|
override_heading_all_null_body()
|
||||||
|
{
|
||||||
|
setup_keywords
|
||||||
|
# A heading with a space is not a null heading,
|
||||||
|
# so should not be suppressed
|
||||||
|
check_heading_regexp '-o comm=" "' \
|
||||||
|
'^ *$'
|
||||||
|
# Null headings should be suppressed
|
||||||
|
check_no_heading_line '-o pid= -o comm='
|
||||||
|
check_no_heading_line '-o pid= -o comm='
|
||||||
|
# Check missing pid
|
||||||
|
check_no_heading_line '-o ppid='
|
||||||
|
check_no_heading_line '-o comm='
|
||||||
|
check_no_heading_line '-o command='
|
||||||
|
check_no_heading_line '-o ppid= -o comm='
|
||||||
|
check_no_heading_line '-o comm= -o ppid='
|
||||||
|
# Check pid present but not first
|
||||||
|
check_no_heading_line '-o comm= -o pid='
|
||||||
|
check_no_heading_line '-o ppid= -o pid= -o command='
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_test_case duplicate_column
|
||||||
|
duplicate_column_head()
|
||||||
|
{
|
||||||
|
atf_set "descr" "Tests the use of -o options to display the" \
|
||||||
|
"same column more than once"
|
||||||
|
}
|
||||||
|
duplicate_column_body()
|
||||||
|
{
|
||||||
|
setup_keywords
|
||||||
|
# two custom headers
|
||||||
|
check_heading_regexp '-o pid=PPP -o pid=QQQ' \
|
||||||
|
'^ *PPP *QQQ$'
|
||||||
|
# one custom header, before and after default header
|
||||||
|
check_heading_regexp '-o pid=PPP -o pid' \
|
||||||
|
'^ *PPP '"${head_regexp_pid}"'$'
|
||||||
|
check_heading_regexp '-o pid -o pid=QQQ' \
|
||||||
|
'^'"${head_regexp_pid}"' *QQQ$'
|
||||||
|
# custom headers both before and after default header
|
||||||
|
check_heading_regexp '-o pid=PPP -o pid -o pid=QQQ' \
|
||||||
|
'^ *PPP '"${head_regexp_pid}"' *QQQ$'
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_init_test_cases() {
|
||||||
|
atf_add_test_case default_columns
|
||||||
|
atf_add_test_case minus_O
|
||||||
|
atf_add_test_case minus_o
|
||||||
|
atf_add_test_case override_heading_simple
|
||||||
|
atf_add_test_case override_heading_embedded_specials
|
||||||
|
atf_add_test_case override_heading_some_null
|
||||||
|
atf_add_test_case override_heading_all_null
|
||||||
|
atf_add_test_case duplicate_column
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user