MFHead @349234

Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Alan Somers 2019-06-20 15:56:08 +00:00
commit e532a99901
431 changed files with 11899 additions and 3845 deletions

77
.clang-format Normal file
View File

@ -0,0 +1,77 @@
# $FreeBSD$
# Basic .clang-format
---
BasedOnStyle: WebKit
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: false
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: InlineOnly
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterReturnType: TopLevelDefinitions
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
BinPackArguments: true
BinPackParameters: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: WebKit
BreakBeforeTernaryOperators: false
# TODO: BreakStringLiterals can cause very strange formatting so turn it off?
BreakStringLiterals: false
PenaltyBreakBeforeFirstCallParameter: 1000
CompactNamespaces: true
DerivePointerAlignment: false
DisableFormat: false
ForEachMacros:
- SLIST_FOREACH
- SLIST_FOREACH_SAFE
- LIST_FOREACH
- LIST_FOREACH_SAFE
- STAILQ_FOREACH
- STAILQ_FOREACH_SAFE
- TAILQ_FOREACH
- TAILQ_FOREACH_SAFE
- TAILQ_FOREACH_REVERSE
- TAILQ_FOREACH_REVERSE_SAFE
- RB_FOREACH
- RB_FOREACH_SAFE
- RB_FOREACH_FROM
- RB_FOREACH_REVERSE
- RB_FOREACH_REVERSE_FROM
- RB_FOREACH_REVERSE_SAFE
- FOREACH_THREAD_IN_PROC
- FOREACH_PROC_IN_SYSTEM
- FOREACH_PRISON_CHILD
- FOREACH_PRISON_DESCENDANT
- FOREACH_PRISON_DESCENDANT_LOCKED
- FOREACH_PRISON_DESCENDANT_LOCKED_LEVEL
- MNT_VNODE_FOREACH_ALL
- MNT_VNODE_FOREACH_ACTIVE
IndentCaseLabels: false
IndentPPDirectives: None
Language: Cpp
NamespaceIndentation: None
PointerAlignment: Right
ContinuationIndentWidth: 4
IndentWidth: 8
TabWidth: 8
ColumnLimit: 80
UseTab: Always
SpaceAfterCStyleCast: false
SortIncludes: false
KeepEmptyLinesAtTheStartOfBlocks: true
# The options below will only be supported starting with clang 9.0:
# TODO-CLANG-9: TypenameMacros:
# TODO-CLANG-9: - SLIST_HEAD
# TODO-CLANG-9: - SLIST_ENTRY
# TODO-CLANG-9: - TAILQ_ENTRY
# TODO-CLANG-9: - TAILQ_HEAD
# TODO-CLANG-9: - STAILQ_ENTRY
# TODO-CLANG-9: - STAILQ_HEAD
...

1
.gitattributes vendored
View File

@ -4,3 +4,4 @@
*.hpp diff=cpp *.hpp diff=cpp
*.py diff=python *.py diff=python
. svn-properties=svn:keywords=tools/build/options/WITHOUT_LOADER_ZFS . svn-properties=svn:keywords=tools/build/options/WITHOUT_LOADER_ZFS
.clang-format svn-properties=svn:keywords=FreeBSD=%H

View File

@ -553,16 +553,23 @@ VERSION= FreeBSD ${_REVISION}-${_BRANCH:C/-p[0-9]+$//} ${TARGET_ARCH} ${SRCRELDA
.endif .endif
.if !defined(PKG_VERSION) .if !defined(PKG_VERSION)
.if ${_BRANCH:MSTABLE*} || ${_BRANCH:MCURRENT*} || ${_BRANCH:MALPHA*} .if ${_BRANCH:MSTABLE*} || ${_BRANCH:MCURRENT*}
TIMENOW= %Y%m%d%H%M%S TIMENOW= %Y%m%d%H%M%S
EXTRA_REVISION= .s${TIMENOW:gmtime} EXTRA_REVISION= .s${TIMENOW:gmtime}
.endif .elif ${_BRANCH:MALPHA*}
.if ${_BRANCH:M*-p*} EXTRA_REVISION= _${_BRANCH:C/-ALPHA/.a/}
.elif ${_BRANCH:MBETA*}
EXTRA_REVISION= _${_BRANCH:C/-BETA/.b/}
.elif ${_BRANCH:MRC*}
EXTRA_REVISION= _${_BRANCH:C/-RC/.r/}
.elif ${_BRANCH:MPRERELEASE*}
EXTRA_REVISION= _${_BRANCH:C/-PRERELEASE/.p/}
.elif ${_BRANCH:M*-p*}
EXTRA_REVISION= _${_BRANCH:C/.*-p([0-9]+$)/\1/} EXTRA_REVISION= _${_BRANCH:C/.*-p([0-9]+$)/\1/}
.endif .endif
PKG_VERSION= ${_REVISION}${EXTRA_REVISION} PKG_VERSION= ${_REVISION}${EXTRA_REVISION}
.endif .endif
.endif # !defined(_MKSHOWCONFIG) .endif # !defined(PKG_VERSION)
.if !defined(_MKSHOWCONFIG) .if !defined(_MKSHOWCONFIG)
_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} -f /dev/null \ _CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} -f /dev/null \
@ -2546,6 +2553,7 @@ NXBDIRS+= \
usr.bin/find \ usr.bin/find \
usr.bin/grep \ usr.bin/grep \
usr.bin/gzip \ usr.bin/gzip \
usr.bin/head \
usr.bin/id \ usr.bin/id \
usr.bin/lex \ usr.bin/lex \
usr.bin/limits \ usr.bin/limits \

View File

@ -38,6 +38,161 @@
# xargs -n1 | sort | uniq -d; # xargs -n1 | sort | uniq -d;
# done # done
# 20190618: sys/capability.h removed (sys/capsicum.h is the one to use)
OLD_FILES+=usr/include/sys/capability.h
# 20190615: sys/pwm.h renamed to dev/pwmc.h
OLD_FILES+=usr/include/sys/pwm.h
# 20190612: new clang import which bumps version from 8.0.0 to 8.0.1.
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/allocator_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/asan_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/common_interface_defs.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/coverage_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/dfsan_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/esan_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/hwasan_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/linux_syscall_hooks.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/lsan_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/msan_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/netbsd_syscall_hooks.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/scudo_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/tsan_interface.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sanitizer/tsan_interface_atomic.h
OLD_DIRS+=usr/lib/clang/8.0.0/include/sanitizer
OLD_FILES+=usr/lib/clang/8.0.0/include/__clang_cuda_builtin_vars.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__clang_cuda_cmath.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__clang_cuda_complex_builtins.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__clang_cuda_device_functions.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__clang_cuda_intrinsics.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__clang_cuda_libdevice_declares.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__clang_cuda_math_forward_declares.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__clang_cuda_runtime_wrapper.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__stddef_max_align_t.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__wmmintrin_aes.h
OLD_FILES+=usr/lib/clang/8.0.0/include/__wmmintrin_pclmul.h
OLD_FILES+=usr/lib/clang/8.0.0/include/adxintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/altivec.h
OLD_FILES+=usr/lib/clang/8.0.0/include/ammintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/arm64intr.h
OLD_FILES+=usr/lib/clang/8.0.0/include/arm_acle.h
OLD_FILES+=usr/lib/clang/8.0.0/include/arm_fp16.h
OLD_FILES+=usr/lib/clang/8.0.0/include/arm_neon.h
OLD_FILES+=usr/lib/clang/8.0.0/include/armintr.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx2intrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512bitalgintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512bwintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512cdintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512dqintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512erintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512fintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512ifmaintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512ifmavlintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512pfintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vbmi2intrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vbmiintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vbmivlintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vlbitalgintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vlbwintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vlcdintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vldqintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vlintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vlvbmi2intrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vlvnniintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vnniintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vpopcntdqintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avx512vpopcntdqvlintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/avxintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/bmi2intrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/bmiintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/cetintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/cldemoteintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/clflushoptintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/clwbintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/clzerointrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/cpuid.h
OLD_FILES+=usr/lib/clang/8.0.0/include/emmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/f16cintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/fma4intrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/fmaintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/fxsrintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/gfniintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/htmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/htmxlintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/ia32intrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/immintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/invpcidintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/lwpintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/lzcntintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/mm3dnow.h
OLD_FILES+=usr/lib/clang/8.0.0/include/mm_malloc.h
OLD_FILES+=usr/lib/clang/8.0.0/include/mmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/module.modulemap
OLD_FILES+=usr/lib/clang/8.0.0/include/movdirintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/msa.h
OLD_FILES+=usr/lib/clang/8.0.0/include/mwaitxintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/nmmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/opencl-c.h
OLD_FILES+=usr/lib/clang/8.0.0/include/pconfigintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/pkuintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/pmmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/popcntintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/prfchwintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/ptwriteintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/rdseedintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/rtmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/s390intrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/sgxintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/shaintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/smmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/tbmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/tmmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/vadefs.h
OLD_FILES+=usr/lib/clang/8.0.0/include/vaesintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/vecintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/vpclmulqdqintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/waitpkgintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/wbnoinvdintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/wmmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/x86intrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/xmmintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/xopintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/xsavecintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/xsaveintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/xsaveoptintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/xsavesintrin.h
OLD_FILES+=usr/lib/clang/8.0.0/include/xtestintrin.h
OLD_DIRS+=usr/lib/clang/8.0.0/include
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.asan-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.asan-i386.so
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.asan-preinit-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.asan-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.asan-x86_64.so
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.asan_cxx-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.msan-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.profile-arm.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.profile-armhf.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.profile-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.profile-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.safestack-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.safestack-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.stats-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.stats-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.stats_client-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.stats_client-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.tsan-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
OLD_FILES+=usr/lib/clang/8.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
OLD_DIRS+=usr/lib/clang/8.0.0/lib/freebsd
OLD_DIRS+=usr/lib/clang/8.0.0/lib
OLD_DIRS+=usr/lib/clang/8.0.0
# 20190523: Remove obsolete kgzip and support files # 20190523: Remove obsolete kgzip and support files
OLD_FILES+=usr/sbin/kgzip OLD_FILES+=usr/sbin/kgzip
OLD_FILES+=usr/lib/kgzldr.o OLD_FILES+=usr/lib/kgzldr.o
@ -1409,6 +1564,8 @@ OLD_DIRS+=usr/share/openssl/man/en.ISO8859-1/cat1
OLD_DIRS+=usr/share/openssl/man/en.ISO8859-1/cat3 OLD_DIRS+=usr/share/openssl/man/en.ISO8859-1/cat3
# 20170802: ksyms(4) ioctl interface was removed # 20170802: ksyms(4) ioctl interface was removed
OLD_FILES+=usr/include/sys/ksyms.h OLD_FILES+=usr/include/sys/ksyms.h
# 20170729: the iicbus/pcf8563 driver is replaced with iicbus/nxprtc
OLD_FILES+=usr/include/dev/iicbus/pcf8563reg.h
# 20170722: new clang import which bumps version from 4.0.0 to 5.0.0. # 20170722: new clang import which bumps version from 4.0.0 to 5.0.0.
OLD_FILES+=usr/lib/clang/4.0.0/include/sanitizer/allocator_interface.h OLD_FILES+=usr/lib/clang/4.0.0/include/sanitizer/allocator_interface.h
OLD_FILES+=usr/lib/clang/4.0.0/include/sanitizer/asan_interface.h OLD_FILES+=usr/lib/clang/4.0.0/include/sanitizer/asan_interface.h

View File

@ -31,7 +31,7 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.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".)
20190606: 20190620:
The vfs.fusefs.sync_unmount and vfs.fusefs.init_backgrounded sysctls The vfs.fusefs.sync_unmount and vfs.fusefs.init_backgrounded sysctls
and the "-o sync_unmount" and "-o init_backgrounded" mount options have and the "-o sync_unmount" and "-o init_backgrounded" mount options have
been removed from mount_fusefs(8). You can safely remove them from been removed from mount_fusefs(8). You can safely remove them from
@ -43,6 +43,17 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW:
felt the need to set any of them to a non-default value, please tell felt the need to set any of them to a non-default value, please tell
asomers@FreeBSD.org why. asomers@FreeBSD.org why.
20190612:
Clang, llvm, lld, lldb, compiler-rt, libc++, libunwind and openmp have
been upgraded to 8.0.1. Please see the 20141231 entry below for
information about prerequisites and upgrading, if you are not already
using clang 3.5.0 or higher.
20190608:
A fix was applied to i386 kernel modules to avoid panics with
dpcpu or vnet. Users need to recompile i386 kernel modules
having pcpu or vnet sections or they will refuse to load.
20190513: 20190513:
User-wired pages now have their own counter, User-wired pages now have their own counter,
vm.stats.vm.v_user_wire_count. The vm.max_wired sysctl was renamed vm.stats.vm.v_user_wire_count. The vm.max_wired sysctl was renamed

View File

@ -117,6 +117,7 @@ csh.1: tcsh.man
build-tools: gethost build-tools: gethost
DEPENDOBJS+= gethost
gethost: gethost.c sh.err.h tc.const.h sh.h ${BUILD_TOOLS_META} gethost: gethost.c sh.err.h tc.const.h sh.h ${BUILD_TOOLS_META}
@rm -f ${.TARGET} @rm -f ${.TARGET}
${CC:N${CCACHE_BIN}} -o gethost ${LDFLAGS} ${CFLAGS:C/-DHAVE_ICONV//} \ ${CC:N${CCACHE_BIN}} -o gethost ${LDFLAGS} ${CFLAGS:C/-DHAVE_ICONV//} \

View File

@ -48,6 +48,7 @@ builtins.h: .NOMETA
builtins.c builtins.h: mkbuiltins builtins.def builtins.c builtins.h: mkbuiltins builtins.def
sh ${.CURDIR}/mkbuiltins ${.CURDIR} sh ${.CURDIR}/mkbuiltins ${.CURDIR}
DEPENDOBJS+= mknodes mksyntax
mknodes mksyntax: ${BUILD_TOOLS_META} mknodes mksyntax: ${BUILD_TOOLS_META}
.ORDER: nodes.c nodes.h .ORDER: nodes.c nodes.h

View File

@ -91,6 +91,8 @@ static const struct modes cmodes[] = {
{ "-rtsflow", 0, CRTS_IFLOW }, { "-rtsflow", 0, CRTS_IFLOW },
{ "mdmbuf", MDMBUF, 0 }, { "mdmbuf", MDMBUF, 0 },
{ "-mdmbuf", 0, MDMBUF }, { "-mdmbuf", 0, MDMBUF },
{ "rtsdtr", 0, CNO_RTSDTR },
{ "-rtsdtr", CNO_RTSDTR, 0 },
{ NULL, 0, 0 }, { NULL, 0, 0 },
}; };

View File

@ -184,6 +184,12 @@ print(struct termios *tp, struct winsize *wp, int ldisc, enum FMT fmt)
put("-dsrflow", CDSR_OFLOW, 0); put("-dsrflow", CDSR_OFLOW, 0);
put("-dtrflow", CDTR_IFLOW, 0); put("-dtrflow", CDTR_IFLOW, 0);
put("-mdmbuf", MDMBUF, 0); /* XXX mdmbuf == dtrflow */ put("-mdmbuf", MDMBUF, 0); /* XXX mdmbuf == dtrflow */
if (on(CNO_RTSDTR))
bput("-rtsdtr");
else {
if (fmt >= BSD)
bput("rtsdtr");
}
/* special control characters */ /* special control characters */
cc = tp->c_cc; cc = tp->c_cc;

View File

@ -145,6 +145,8 @@ Assume a line without (with) modem
control. control.
.It Cm crtscts Pq Fl crtscts .It Cm crtscts Pq Fl crtscts
Enable (disable) RTS/CTS flow control. Enable (disable) RTS/CTS flow control.
.It Cm rtsdtr Pq Fl -rtsdtr
Enable (disable) asserting RTS/DTR on open.
.El .El
.Ss Input Modes: .Ss Input Modes:
This corresponds to the c_iflag in the termios structure. This corresponds to the c_iflag in the termios structure.

View File

@ -0,0 +1,9 @@
# $FreeBSD$
TESTSDIR= ${TESTSBASE}/cddl/usr.sbin/dtrace/amd64
TESTS_SUBDIRS+= arrays
.PATH: ${.CURDIR:H:H:H:H:H}/tests
KYUAFILE= YES
.include <bsd.test.mk>

View File

@ -124,7 +124,9 @@
#include <dev/isa/isvio.h> #include <dev/isa/isvio.h>
#include <dev/isa/wtreg.h> #include <dev/isa/wtreg.h>
#include <dev/iscsi/iscsi_ioctl.h> #include <dev/iscsi/iscsi_ioctl.h>
#if 0
#include <dev/nvmm/nvmm_ioctl.h> #include <dev/nvmm/nvmm_ioctl.h>
#endif
#include <dev/ofw/openfirmio.h> #include <dev/ofw/openfirmio.h>
#include <dev/pci/amrio.h> #include <dev/pci/amrio.h>
#include <dev/pci/mlyreg.h> #include <dev/pci/mlyreg.h>

View File

@ -343,17 +343,20 @@ elf_phdr_type_str(unsigned int type)
static char s_type[32]; static char s_type[32];
switch (type) { switch (type) {
case PT_NULL: return "PT_NULL"; case PT_NULL: return "PT_NULL";
case PT_LOAD: return "PT_LOAD"; case PT_LOAD: return "PT_LOAD";
case PT_DYNAMIC: return "PT_DYNAMIC"; case PT_DYNAMIC: return "PT_DYNAMIC";
case PT_INTERP: return "PT_INTERP"; case PT_INTERP: return "PT_INTERP";
case PT_NOTE: return "PT_NOTE"; case PT_NOTE: return "PT_NOTE";
case PT_SHLIB: return "PT_SHLIB"; case PT_SHLIB: return "PT_SHLIB";
case PT_PHDR: return "PT_PHDR"; case PT_PHDR: return "PT_PHDR";
case PT_TLS: return "PT_TLS"; case PT_TLS: return "PT_TLS";
case PT_GNU_EH_FRAME: return "PT_GNU_EH_FRAME"; case PT_GNU_EH_FRAME: return "PT_GNU_EH_FRAME";
case PT_GNU_STACK: return "PT_GNU_STACK"; case PT_GNU_STACK: return "PT_GNU_STACK";
case PT_GNU_RELRO: return "PT_GNU_RELRO"; case PT_GNU_RELRO: return "PT_GNU_RELRO";
case PT_OPENBSD_RANDOMIZE: return "PT_OPENBSD_RANDOMIZE";
case PT_OPENBSD_WXNEEDED: return "PT_OPENBSD_WXNEEDED";
case PT_OPENBSD_BOOTDATA: return "PT_OPENBSD_BOOTDATA";
} }
snprintf(s_type, sizeof(s_type), "<unknown: %#x>", type); snprintf(s_type, sizeof(s_type), "<unknown: %#x>", type);
return (s_type); return (s_type);

View File

@ -674,6 +674,9 @@ phdr_type(unsigned int mach, unsigned int ptype)
case PT_GNU_EH_FRAME: return "GNU_EH_FRAME"; case PT_GNU_EH_FRAME: return "GNU_EH_FRAME";
case PT_GNU_STACK: return "GNU_STACK"; case PT_GNU_STACK: return "GNU_STACK";
case PT_GNU_RELRO: return "GNU_RELRO"; case PT_GNU_RELRO: return "GNU_RELRO";
case PT_OPENBSD_RANDOMIZE: return "OPENBSD_RANDOMIZE";
case PT_OPENBSD_WXNEEDED: return "OPENBSD_WXNEEDED";
case PT_OPENBSD_BOOTDATA: return "OPENBSD_BOOTDATA";
default: default:
if (ptype >= PT_LOOS && ptype <= PT_HIOS) if (ptype >= PT_LOOS && ptype <= PT_HIOS)
snprintf(s_ptype, sizeof(s_ptype), "LOOS+%#x", snprintf(s_ptype, sizeof(s_ptype), "LOOS+%#x",

View File

@ -1,3 +1,7 @@
Jun 11, 2019: libarchive 3.4.0 released
May 18, 2019: Fixes for reading Android APK and JAR archives
Apr 16, 2019: Support for non-recursive list and extract Apr 16, 2019: Support for non-recursive list and extract
Apr 14, 2019: New tar option: --exclude-vcs Apr 14, 2019: New tar option: --exclude-vcs
@ -6,7 +10,7 @@ Mar 27, 2019: Support for file and directory symlinks on Windows
Mar 12, 2019: Important fixes for storing file attributes and flags Mar 12, 2019: Important fixes for storing file attributes and flags
Jan 20, 2019: Support for xz, lzma, ppmd8 and bzip2 compression in zip archives Jan 20, 2019: Support for xz, lzma, ppmd8 and bzip2 decompression in ZIP files
Oct 06, 2018: RAR 5.0 reader Oct 06, 2018: RAR 5.0 reader

View File

@ -81,6 +81,7 @@ Currently, the library automatically detects and reads the following fomats:
* Binary cpio (big-endian or little-endian) * Binary cpio (big-endian or little-endian)
* ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions) * ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
* ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives) * ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives)
* ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries)
* GNU and BSD 'ar' archives * GNU and BSD 'ar' archives
* 'mtree' format * 'mtree' format
* 7-Zip archives * 7-Zip archives

View File

@ -36,7 +36,7 @@
* assert that ARCHIVE_VERSION_NUMBER >= 2012108. * assert that ARCHIVE_VERSION_NUMBER >= 2012108.
*/ */
/* Note: Compiler will complain if this does not match archive_entry.h! */ /* Note: Compiler will complain if this does not match archive_entry.h! */
#define ARCHIVE_VERSION_NUMBER 3003003 #define ARCHIVE_VERSION_NUMBER 3004000
#include <sys/stat.h> #include <sys/stat.h>
#include <stddef.h> /* for wchar_t */ #include <stddef.h> /* for wchar_t */
@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(void);
/* /*
* Textual name/version of the library, useful for version displays. * Textual name/version of the library, useful for version displays.
*/ */
#define ARCHIVE_VERSION_ONLY_STRING "3.3.3" #define ARCHIVE_VERSION_ONLY_STRING "3.4.0"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING #define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void); __LA_DECL const char * archive_version_string(void);

View File

@ -30,7 +30,7 @@
#define ARCHIVE_ENTRY_H_INCLUDED #define ARCHIVE_ENTRY_H_INCLUDED
/* Note: Compiler will complain if this does not match archive.h! */ /* Note: Compiler will complain if this does not match archive.h! */
#define ARCHIVE_VERSION_NUMBER 3003003 #define ARCHIVE_VERSION_NUMBER 3004000
/* /*
* Note: archive_entry.h is for use outside of libarchive; the * Note: archive_entry.h is for use outside of libarchive; the

View File

@ -1027,6 +1027,7 @@ archive_read_format_rar_read_data(struct archive_read *a, const void **buff,
if (ret != ARCHIVE_OK && ret != ARCHIVE_WARN) { if (ret != ARCHIVE_OK && ret != ARCHIVE_WARN) {
__archive_ppmd7_functions.Ppmd7_Free(&rar->ppmd7_context); __archive_ppmd7_functions.Ppmd7_Free(&rar->ppmd7_context);
rar->start_new_table = 1; rar->start_new_table = 1;
rar->ppmd_valid = 0;
} }
break; break;

View File

@ -1125,6 +1125,13 @@ static void init_header(struct archive_read* a) {
a->archive.archive_format_name = "RAR5"; a->archive.archive_format_name = "RAR5";
} }
static void init_window_mask(struct rar5* rar) {
if (rar->cstate.window_size)
rar->cstate.window_mask = rar->cstate.window_size - 1;
else
rar->cstate.window_mask = 0;
}
enum HEADER_FLAGS { enum HEADER_FLAGS {
HFL_EXTRA_DATA = 0x0001, HFL_EXTRA_DATA = 0x0001,
HFL_DATA = 0x0002, HFL_DATA = 0x0002,
@ -1672,6 +1679,7 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
/* Values up to 64M should fit into ssize_t on every /* Values up to 64M should fit into ssize_t on every
* architecture. */ * architecture. */
rar->cstate.window_size = (ssize_t) window_size; rar->cstate.window_size = (ssize_t) window_size;
init_window_mask(rar);
rar->file.solid = (compression_info & SOLID) > 0; rar->file.solid = (compression_info & SOLID) > 0;
rar->file.service = 0; rar->file.service = 0;
@ -2235,10 +2243,7 @@ static int rar5_read_header(struct archive_read *a,
static void init_unpack(struct rar5* rar) { static void init_unpack(struct rar5* rar) {
rar->file.calculated_crc32 = 0; rar->file.calculated_crc32 = 0;
if (rar->cstate.window_size) init_window_mask(rar);
rar->cstate.window_mask = rar->cstate.window_size - 1;
else
rar->cstate.window_mask = 0;
free(rar->cstate.window_buf); free(rar->cstate.window_buf);
free(rar->cstate.filtered_buf); free(rar->cstate.filtered_buf);
@ -2851,7 +2856,7 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
* - Values lower than 256 are just bytes. Those codes * - Values lower than 256 are just bytes. Those codes
* can be stored in the output buffer directly. * can be stored in the output buffer directly.
* *
* - Code 256 defines a new filter, which is later used to * - Code 256 defines a new filter, which is later used to
* ransform the data block accordingly to the filter type. * ransform the data block accordingly to the filter type.
* The data block needs to be fully uncompressed first. * The data block needs to be fully uncompressed first.
* *
@ -3906,7 +3911,7 @@ static int rar5_read_data_skip(struct archive_read *a) {
/* Turn off "skip mode". */ /* Turn off "skip mode". */
rar->skip_mode--; rar->skip_mode--;
if(ret < 0) { if(ret < 0 || ret == ARCHIVE_EOF) {
/* Propagate any potential error conditions /* Propagate any potential error conditions
* to the caller. */ * to the caller. */
return ret; return ret;

View File

@ -60,7 +60,7 @@ static int archive_filter_b64encode_write(struct archive_write_filter *,
const void *, size_t); const void *, size_t);
static int archive_filter_b64encode_close(struct archive_write_filter *); static int archive_filter_b64encode_close(struct archive_write_filter *);
static int archive_filter_b64encode_free(struct archive_write_filter *); static int archive_filter_b64encode_free(struct archive_write_filter *);
static void b64_encode(struct archive_string *, const unsigned char *, size_t); static void la_b64_encode(struct archive_string *, const unsigned char *, size_t);
static int64_t atol8(const char *, size_t); static int64_t atol8(const char *, size_t);
static const char base64[] = { static const char base64[] = {
@ -180,7 +180,7 @@ archive_filter_b64encode_open(struct archive_write_filter *f)
} }
static void static void
b64_encode(struct archive_string *as, const unsigned char *p, size_t len) la_b64_encode(struct archive_string *as, const unsigned char *p, size_t len)
{ {
int c; int c;
@ -234,12 +234,12 @@ archive_filter_b64encode_write(struct archive_write_filter *f, const void *buff,
} }
if (state->hold_len < LBYTES) if (state->hold_len < LBYTES)
return (ret); return (ret);
b64_encode(&state->encoded_buff, state->hold, LBYTES); la_b64_encode(&state->encoded_buff, state->hold, LBYTES);
state->hold_len = 0; state->hold_len = 0;
} }
for (; length >= LBYTES; length -= LBYTES, p += LBYTES) for (; length >= LBYTES; length -= LBYTES, p += LBYTES)
b64_encode(&state->encoded_buff, p, LBYTES); la_b64_encode(&state->encoded_buff, p, LBYTES);
/* Save remaining bytes. */ /* Save remaining bytes. */
if (length > 0) { if (length > 0) {
@ -270,7 +270,7 @@ archive_filter_b64encode_close(struct archive_write_filter *f)
/* Flush remaining bytes. */ /* Flush remaining bytes. */
if (state->hold_len != 0) if (state->hold_len != 0)
b64_encode(&state->encoded_buff, state->hold, state->hold_len); la_b64_encode(&state->encoded_buff, state->hold, state->hold_len);
archive_string_sprintf(&state->encoded_buff, "====\n"); archive_string_sprintf(&state->encoded_buff, "====\n");
/* Write the last block */ /* Write the last block */
archive_write_set_bytes_in_last_block(f->archive, 1); archive_write_set_bytes_in_last_block(f->archive, 1);

View File

@ -165,6 +165,10 @@ __FBSDID("$FreeBSD$");
#define O_NOFOLLOW 0 #define O_NOFOLLOW 0
#endif #endif
#ifndef AT_FDCWD
#define AT_FDCWD -100
#endif
struct fixup_entry { struct fixup_entry {
struct fixup_entry *next; struct fixup_entry *next;
struct archive_acl acl; struct archive_acl acl;
@ -348,6 +352,8 @@ struct archive_write_disk {
#define HFS_BLOCKS(s) ((s) >> 12) #define HFS_BLOCKS(s) ((s) >> 12)
static int la_opendirat(int, const char *);
static void fsobj_error(int *, struct archive_string *, int, const char *, static void fsobj_error(int *, struct archive_string *, int, const char *,
const char *); const char *);
static int check_symlinks_fsobj(char *, int *, struct archive_string *, static int check_symlinks_fsobj(char *, int *, struct archive_string *,
@ -400,6 +406,37 @@ static ssize_t _archive_write_disk_data(struct archive *, const void *,
static ssize_t _archive_write_disk_data_block(struct archive *, const void *, static ssize_t _archive_write_disk_data_block(struct archive *, const void *,
size_t, int64_t); size_t, int64_t);
static int
la_opendirat(int fd, const char *path) {
const int flags = O_CLOEXEC
#if defined(O_BINARY)
| O_BINARY
#endif
#if defined(O_DIRECTORY)
| O_DIRECTORY
#endif
#if defined(O_PATH)
| O_PATH
#elif defined(O_SEARCH)
| O_SEARCH
#elif defined(O_EXEC)
| O_EXEC
#else
| O_RDONLY
#endif
;
#if !defined(HAVE_OPENAT)
if (fd != AT_FDCWD) {
errno = ENOTSUP;
return (-1);
} else
return (open(fd, path, flags));
#else
return (openat(fd, path, flags));
#endif
}
static int static int
lazy_stat(struct archive_write_disk *a) lazy_stat(struct archive_write_disk *a)
{ {
@ -1909,7 +1946,7 @@ edit_deep_directories(struct archive_write_disk *a)
return; return;
/* Try to record our starting dir. */ /* Try to record our starting dir. */
a->restore_pwd = open(".", O_RDONLY | O_BINARY | O_CLOEXEC); a->restore_pwd = la_opendirat(AT_FDCWD, ".");
__archive_ensure_cloexec_flag(a->restore_pwd); __archive_ensure_cloexec_flag(a->restore_pwd);
if (a->restore_pwd < 0) if (a->restore_pwd < 0)
return; return;
@ -2342,7 +2379,7 @@ _archive_write_disk_close(struct archive *_a)
{ {
struct archive_write_disk *a = (struct archive_write_disk *)_a; struct archive_write_disk *a = (struct archive_write_disk *)_a;
struct fixup_entry *next, *p; struct fixup_entry *next, *p;
int ret; int fd, ret;
archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC, archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA, ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
@ -2353,21 +2390,33 @@ _archive_write_disk_close(struct archive *_a)
p = sort_dir_list(a->fixup_list); p = sort_dir_list(a->fixup_list);
while (p != NULL) { while (p != NULL) {
fd = -1;
a->pst = NULL; /* Mark stat cache as out-of-date. */ a->pst = NULL; /* Mark stat cache as out-of-date. */
if (p->fixup &
(TODO_TIMES | TODO_MODE_BASE | TODO_ACLS | TODO_FFLAGS)) {
fd = open(p->name,
O_WRONLY | O_BINARY | O_NOFOLLOW | O_CLOEXEC);
}
if (p->fixup & TODO_TIMES) { if (p->fixup & TODO_TIMES) {
set_times(a, -1, p->mode, p->name, set_times(a, fd, p->mode, p->name,
p->atime, p->atime_nanos, p->atime, p->atime_nanos,
p->birthtime, p->birthtime_nanos, p->birthtime, p->birthtime_nanos,
p->mtime, p->mtime_nanos, p->mtime, p->mtime_nanos,
p->ctime, p->ctime_nanos); p->ctime, p->ctime_nanos);
} }
if (p->fixup & TODO_MODE_BASE) if (p->fixup & TODO_MODE_BASE) {
#ifdef HAVE_FCHMOD
if (fd >= 0)
fchmod(fd, p->mode);
else
#endif
chmod(p->name, p->mode); chmod(p->name, p->mode);
}
if (p->fixup & TODO_ACLS) if (p->fixup & TODO_ACLS)
archive_write_disk_set_acls(&a->archive, -1, p->name, archive_write_disk_set_acls(&a->archive, fd,
&p->acl, p->mode); p->name, &p->acl, p->mode);
if (p->fixup & TODO_FFLAGS) if (p->fixup & TODO_FFLAGS)
set_fflags_platform(a, -1, p->name, set_fflags_platform(a, fd, p->name,
p->mode, p->fflags_set, 0); p->mode, p->fflags_set, 0);
if (p->fixup & TODO_MAC_METADATA) if (p->fixup & TODO_MAC_METADATA)
set_mac_metadata(a, p->name, p->mac_metadata, set_mac_metadata(a, p->name, p->mac_metadata,
@ -2376,6 +2425,8 @@ _archive_write_disk_close(struct archive *_a)
archive_acl_clear(&p->acl); archive_acl_clear(&p->acl);
free(p->mac_metadata); free(p->mac_metadata);
free(p->name); free(p->name);
if (fd >= 0)
close(fd);
free(p); free(p);
p = next; p = next;
} }
@ -2540,8 +2591,6 @@ fsobj_error(int *a_eno, struct archive_string *a_estr,
* scan the path and both can be optimized by comparing against other * scan the path and both can be optimized by comparing against other
* recent paths. * recent paths.
*/ */
/* TODO: Extend this to support symlinks on Windows Vista and later. */
/* /*
* Checks the given path to see if any elements along it are symlinks. Returns * Checks the given path to see if any elements along it are symlinks. Returns
* ARCHIVE_OK if there are none, otherwise puts an error in errmsg. * ARCHIVE_OK if there are none, otherwise puts an error in errmsg.
@ -2550,7 +2599,8 @@ static int
check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr, check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
int flags) int flags)
{ {
#if !defined(HAVE_LSTAT) #if !defined(HAVE_LSTAT) && \
!(defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT))
/* Platform doesn't have lstat, so we can't look for symlinks. */ /* Platform doesn't have lstat, so we can't look for symlinks. */
(void)path; /* UNUSED */ (void)path; /* UNUSED */
(void)error_number; /* UNUSED */ (void)error_number; /* UNUSED */
@ -2565,7 +2615,10 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
char c; char c;
int r; int r;
struct stat st; struct stat st;
int restore_pwd; int chdir_fd;
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
int fd;
#endif
/* Nothing to do here if name is empty */ /* Nothing to do here if name is empty */
if(path[0] == '\0') if(path[0] == '\0')
@ -2586,9 +2639,9 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
* c holds what used to be in *tail * c holds what used to be in *tail
* last is 1 if this is the last tail * last is 1 if this is the last tail
*/ */
restore_pwd = open(".", O_RDONLY | O_BINARY | O_CLOEXEC); chdir_fd = la_opendirat(AT_FDCWD, ".");
__archive_ensure_cloexec_flag(restore_pwd); __archive_ensure_cloexec_flag(chdir_fd);
if (restore_pwd < 0) { if (chdir_fd < 0) {
fsobj_error(a_eno, a_estr, errno, fsobj_error(a_eno, a_estr, errno,
"Could not open ", path); "Could not open ", path);
return (ARCHIVE_FATAL); return (ARCHIVE_FATAL);
@ -2621,7 +2674,11 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
c = tail[0]; c = tail[0];
tail[0] = '\0'; tail[0] = '\0';
/* Check that we haven't hit a symlink. */ /* Check that we haven't hit a symlink. */
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
r = fstatat(chdir_fd, head, &st, AT_SYMLINK_NOFOLLOW);
#else
r = lstat(head, &st); r = lstat(head, &st);
#endif
if (r != 0) { if (r != 0) {
tail[0] = c; tail[0] = c;
/* We've hit a dir that doesn't exist; stop now. */ /* We've hit a dir that doesn't exist; stop now. */
@ -2647,7 +2704,19 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
} }
} else if (S_ISDIR(st.st_mode)) { } else if (S_ISDIR(st.st_mode)) {
if (!last) { if (!last) {
if (chdir(head) != 0) { #if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
fd = la_opendirat(chdir_fd, head);
if (fd < 0)
r = -1;
else {
r = 0;
close(chdir_fd);
chdir_fd = fd;
}
#else
r = chdir(head);
#endif
if (r != 0) {
tail[0] = c; tail[0] = c;
fsobj_error(a_eno, a_estr, errno, fsobj_error(a_eno, a_estr, errno,
"Could not chdir ", path); "Could not chdir ", path);
@ -2664,7 +2733,12 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
* so we can overwrite it with the * so we can overwrite it with the
* item being extracted. * item being extracted.
*/ */
if (unlink(head)) { #if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
r = unlinkat(chdir_fd, head, 0);
#else
r = unlink(head);
#endif
if (r != 0) {
tail[0] = c; tail[0] = c;
fsobj_error(a_eno, a_estr, errno, fsobj_error(a_eno, a_estr, errno,
"Could not remove symlink ", "Could not remove symlink ",
@ -2694,7 +2768,12 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
break; break;
} else if (flags & ARCHIVE_EXTRACT_UNLINK) { } else if (flags & ARCHIVE_EXTRACT_UNLINK) {
/* User asked us to remove problems. */ /* User asked us to remove problems. */
if (unlink(head) != 0) { #if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
r = unlinkat(chdir_fd, head, 0);
#else
r = unlink(head);
#endif
if (r != 0) {
tail[0] = c; tail[0] = c;
fsobj_error(a_eno, a_estr, 0, fsobj_error(a_eno, a_estr, 0,
"Cannot remove intervening " "Cannot remove intervening "
@ -2712,7 +2791,11 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
* This is needed to extract hardlinks over * This is needed to extract hardlinks over
* symlinks. * symlinks.
*/ */
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
r = fstatat(chdir_fd, head, &st, 0);
#else
r = la_stat(head, &st); r = la_stat(head, &st);
#endif
if (r != 0) { if (r != 0) {
tail[0] = c; tail[0] = c;
if (errno == ENOENT) { if (errno == ENOENT) {
@ -2725,7 +2808,19 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
break; break;
} }
} else if (S_ISDIR(st.st_mode)) { } else if (S_ISDIR(st.st_mode)) {
if (chdir(head) != 0) { #if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
fd = la_opendirat(chdir_fd, head);
if (fd < 0)
r = -1;
else {
r = 0;
close(chdir_fd);
chdir_fd = fd;
}
#else
r = chdir(head);
#endif
if (r != 0) {
tail[0] = c; tail[0] = c;
fsobj_error(a_eno, a_estr, fsobj_error(a_eno, a_estr,
errno, errno,
@ -2761,16 +2856,21 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
} }
/* Catches loop exits via break */ /* Catches loop exits via break */
tail[0] = c; tail[0] = c;
#ifdef HAVE_FCHDIR #if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
/* If we operate with openat(), fstatat() and unlinkat() there was
* no chdir(), so just close the fd */
if (chdir_fd >= 0)
close(chdir_fd);
#elif HAVE_FCHDIR
/* If we changed directory above, restore it here. */ /* If we changed directory above, restore it here. */
if (restore_pwd >= 0) { if (chdir_fd >= 0) {
r = fchdir(restore_pwd); r = fchdir(chdir_fd);
if (r != 0) { if (r != 0) {
fsobj_error(a_eno, a_estr, errno, fsobj_error(a_eno, a_estr, errno,
"chdir() failure", ""); "chdir() failure", "");
} }
close(restore_pwd); close(chdir_fd);
restore_pwd = -1; chdir_fd = -1;
if (r != 0) { if (r != 0) {
res = (ARCHIVE_FATAL); res = (ARCHIVE_FATAL);
} }
@ -3387,6 +3487,7 @@ static int
set_mode(struct archive_write_disk *a, int mode) set_mode(struct archive_write_disk *a, int mode)
{ {
int r = ARCHIVE_OK; int r = ARCHIVE_OK;
int r2;
mode &= 07777; /* Strip off file type bits. */ mode &= 07777; /* Strip off file type bits. */
if (a->todo & TODO_SGID_CHECK) { if (a->todo & TODO_SGID_CHECK) {
@ -3480,21 +3581,19 @@ set_mode(struct archive_write_disk *a, int mode)
* post-extract fixup, which is handled elsewhere. * post-extract fixup, which is handled elsewhere.
*/ */
#ifdef HAVE_FCHMOD #ifdef HAVE_FCHMOD
if (a->fd >= 0) { if (a->fd >= 0)
if (fchmod(a->fd, mode) != 0) { r2 = fchmod(a->fd, mode);
archive_set_error(&a->archive, errno, else
"Can't set permissions to 0%o", (int)mode);
r = ARCHIVE_WARN;
}
} else
#endif #endif
/* If this platform lacks fchmod(), then /* If this platform lacks fchmod(), then
* we'll just use chmod(). */ * we'll just use chmod(). */
if (chmod(a->name, mode) != 0) { r2 = chmod(a->name, mode);
archive_set_error(&a->archive, errno,
"Can't set permissions to 0%o", (int)mode); if (r2 != 0) {
r = ARCHIVE_WARN; archive_set_error(&a->archive, errno,
} "Can't set permissions to 0%o", (int)mode);
r = ARCHIVE_WARN;
}
} }
return (r); return (r);
} }

View File

@ -3776,6 +3776,35 @@ DEFINE_TEST(test_read_format_rar_ppmd_use_after_free)
assertA(ARCHIVE_OK == archive_read_next_header(a, &ae)); assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
assertA(archive_read_data(a, buf, sizeof(buf)) <= 0); assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
/* Test EOF */
assertA(1 == archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
DEFINE_TEST(test_read_format_rar_ppmd_use_after_free2)
{
uint8_t buf[16];
const char* reffile = "test_read_format_rar_ppmd_use_after_free2.rar";
struct archive_entry *ae;
struct archive *a;
extract_reference_file(reffile);
assert((a = archive_read_new()) != NULL);
assertA(0 == archive_read_support_filter_all(a));
assertA(0 == archive_read_support_format_all(a));
assertA(0 == archive_read_open_filename(a, reffile, 10240));
assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
/* Test EOF */
assertA(1 == archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a)); assertEqualInt(ARCHIVE_OK, archive_read_free(a));
} }

View File

@ -1194,3 +1194,24 @@ DEFINE_TEST(test_read_format_rar5_fileattr)
EPILOGUE(); EPILOGUE();
} }
DEFINE_TEST(test_read_format_rar5_different_window_size)
{
char buf[4096];
PROLOGUE("test_read_format_rar5_different_window_size.rar");
/* Return codes of those calls are ignored, because this sample file
* is invalid. However, the unpacker shouldn't produce any SIGSEGV
* errors during processing. */
(void) archive_read_next_header(a, &ae);
while(0 != archive_read_data(a, buf, sizeof(buf))) {}
(void) archive_read_next_header(a, &ae);
while(0 != archive_read_data(a, buf, sizeof(buf))) {}
(void) archive_read_next_header(a, &ae);
while(0 != archive_read_data(a, buf, sizeof(buf))) {}
EPILOGUE();
}

View File

@ -0,0 +1,675 @@
begin 600 test_read_format_rar5_different_window_size.rar
M4F%R(1H'`0"-[P+2``'#M#P\7P$'`0"-[P+2``7#`/KZ^OKZA5N8F)B8F)@`
MF`*8T@7"F!=A_________P$$_____________________R%285(A&@?_____
M_________________V@`[E##M#P\7P$'`0"-[P+2``7"87)26`!W=%)A<B$:
M!P$`C>\"T@`"QP\)`'(A&@<!&B/2+0`"**%285(A&@=A<B$:!P$`C>\"T@`"
MQP\`"7(AFC`!&B/2+0`"*"%285(A&@<8`0"-[P+2``7#10!A4B$:!Q@!`#)S
M-/_______U)A<B$:!P$`C>\"T@`"!QS1T='1T='1T='6T='1T='1T='1T='1
MT='1T='1T='1T='1T=&UQX`.`"'X"/\E``*H'#`"`/+__TO__O_G*_____\`
M`"\O``#_02+M____`-X`_["&AFVQJ@,#45TW,?;V]@$``/____\3]O;V]O;_
M_S\``/]!(.VG+R\``/]!(.T)__^PWOS_```O+S$``/8@[;L`````````````
M-3XR9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<
M7#)<7#9<,F1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9&1I9V5S7%Q<7'=E
M9"XR9&EG97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF
M+BX**%)A<B$:!P$`C>\"T@`"!QS1T='1T='1T='6T='1T='1T='1T='1T='1
MT='1T='1T='1T=&UQX`.`"'X"/\E``*H'#`"`/+__TO__O_G*_____\``"\O
M``#_02+M____`-X`_["&AFVQJ@,#45TW,?;V]@$````````3]O;V]O;__S\`
M`/]!(.VG+R\``/]!(.T)__^PWOS_```O+P```/8@[;L`````````````-38R
M9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7#)<
M7#9<,F1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9&1I9V5S7%Q<7'=E9"XR
M9&EG97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF+E)A
M<B$:!P$`C>\"T@`"PP<<K/UN``#___\+`0`"(<O_`0(`+W-E="!T:6UE`/[_
M_^P`````````````````````````````````````````````````````````
M````````````````````````````````````````!0``````````````````
M````````````````````````````````````````````````````````````
M`````#\56BUL:#4M#0````%L<0!SI/\````!]9^?G_*?`9_?GY_U0.`56BUL
M:```````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````&UM)C$@4@H#`\[_CQ5:+6QH-BTZ,PD@.W-L<0'(_P(````!
M#B<G````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````]_\`````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````````````P,#`P,#`P,#`P,#`P,#
M`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````X-S(M,#$E,U0S.GH``O__/\/#P\/#P\/#P\/#(@##
MP\/#PP'#P\/#P\/#P___________________________________________
M____________________________]/_______\/#P\/#P\/#P\/#P\/#+</#
MP\/#P^KJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ
MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZF1I9V5S=#TN"BX*+@H*)BXN
M"B@*+BX**`HN"BX*+C`**`H*+@HN+E!<-3,R4>KJZNKJZNKJZNKJZNKJZNKJ
MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNK#P\/#P\/#P\/#R\-MP\/#
MP\/#P\/#P\/#P\/#P\/#`</#P\/#P\/#____________________________
M_________________________________________S8R9&EG97)T6STN"BX*
M+@H*)F5V:6,V_________\/#P\/#P\/#P\/#P\/#+</#P\/#P\/#P\/#PS8N
M"@HN"@HN+PHR,#<P-S`O<TYT("!@<W0]P\/#P\/#P\/#PP`0:#HR,PT*;%=O
M861?;"X*+@IG89P`,#`P,#`P,#`P,#`P,#`P,#`!`#`W,#<P,C`P,#`P,#`P
M,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,$,P,#`P,#`P,#`P,#`P
M,#`P,#`P-3`P,#`X,#`P,#`P,#`P13`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P
M,#`P,#`P`0`"*"%285(A&@<8`0"-[P+2``7#`!H'``1G``````````#O`M(`
M`L</``D`+@DR'`#]`0`7__\)`"X),AP`_0$`%___$5)A<B'_$5)A<B$:AP$`
MC>\"T@`#QP\`"2$:TB,M``(H(5)A4B$:!Q@!`(WO`M(`!0``````````````
M`````````0``````_____P#_965E965E965E965E965E965E8'-T/2X*+@HN
M"C(P-S`W,&EA='EA<B$*+@H*)BXF+@HH"BX*+@HN4%XO83(U:39D9V5S=#TN
M"BX*+@H*)BXN"@H*)BXN"B@*+@HN"BY07#4S,C8R9"]S3G0@(%MS=#T]+@HN
M"BX*"B8N+@HH"BX*+@HN4%PU,S(V(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
M(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
M(2$A(2X*"B8N+BY<-EPR9&EG97)T-38R9&EA=#TN"BX*="XN+@HH"BX*+@HN
M4%QH83(U-F0N+PHR,"4P-S`O<TYT("!D<W0]+@HN"BX*"B9T/2X*+@HN"@H*
M)BX*+BXH+PHN"BY07&AA,C4V9&EG97-T/2X*+@HN"@HF+BX**`H_+@HN"BY0
M7%Q<7%Q<7%Q<7%Q<,C8R9&EG97)T-38R9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<
M7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7#)<7#9<,F1I9V5R=#4V,F1I870]+@HN
M"G0@9&5V270@9&1I9V5S=#TN"BX*+@H*)BXN"B@*+BX**`HN"BX]+@HN"BX*
M"B8N+@HH"BX*+@HN4%Q<7%Q<7%Q<7%Q<7#(V,F1I9V5R=#4V,F1<7%Q<7%Q<
M7%Q<7%Q<>EQ<*EQ<7%PO7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%PR7%PV7#!D:6=E
M<G0U-C%D:6%T/2X*+@IT(&1E=DET(&0Z[NXZ,````"L-"E=!4D,M1&%T93H)
M,3@W,BTP-RTS5#,Z-SHU6@T*#0I#BVYT^)=7=#%Z5T%20R\Q+C`-"D-O;G1E
M;G0M3&5N9W1H.C`V#0I7*5=!4B\O.ZRL-&X*05)#+ZRL@9$-"DQA<W0M36]D
M:69I960Z"3$X-S(M,#$E,U0S.GH``O__/\/#P\/#P\/#P\/#(@##P\/#PP'#
MP\/#P\/#P______________________________________#P\/#P\/#P\,`
M$&@Z,C,-"FQ7;V%D7VPN"BX*9V&<`#`P,#`P,#`P,#`P,#`P,#`P`0`P-S`W
M,#(P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#!#,#`P
M,#`P,#`P,#`P,#`P,#`P,#4P,#`P.#`P,#`P,#`P,$4P,#`P,#`P,#`P,#`P
M,#`P,#`P,#`P,#`P,#`P,`$``B@A4F%2(1H'&`$`C>\"T@`%PP`:!P`$9P``
M````````[P+2``+'#P`)`"X),AP`_0$`%___"0`N"3(<`/T!`!?__Q%287(A
M_Q%287(A&H<!`(WO`M(``\</``DA&M(C+0`"*"%285(A&@<8`0"-[P+2``4`
M``````````````````````$``````/____\``"\O``#_02#M____L-X`_P"&
MAK%M]O;V`ZK^]O_/_P#$OM\1]O__L`#M4?\O45%/>\Q`"@HW,@```/V-[P+2
M``+'`"X),1P`_0$`%___$5)A<@$`C>\"T@`%PP`:!P`$9P``````````[P+2
M``+'#P`)`"X),AP`_0$`%___$5)A<B$:!P$`C>\"T@`#QP\`"2$:TB,M``DA
M&M(C+0`"*"%285(A&@<8`0"-[P+2``7#`!H'`/R8__]E965E965E965E965E
M965E965@<W0]+@HN"BX*,C`W,#<P:6%T>6%R(0HN"@HF+B8N"B@*+@HN"BY0
M7B]A,C5I-F1G97-T/2X*+@HN"@HF+BX*"@HF+BX**`HN"BX*+E!<-3,R-C)D
M+W-.="`@6W-T/3TN"BX*+@H*)BXN"B@*+@HN"BY07#4S,C8A(2$A(2$A(2$A
M(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
M(2$A(2$A(2$A(2$A(2$A(2$A+@H*)BXN+EPV7#)D:6=E<G0U-C)D:6%T/2X*
M+@IT+BXN"B@*+@HN"BY07&AA,C4V9"XO"C(P)3`W,"]S3G0@(&1S=#TN"BX*
M+@H*)G0]+@HN"BX*"@HF+@HN+B@O"BX*+E!<:&$R-39D:6=E<W0]+@HN"BX*
M"B8N+@HH"C\N"BX*+E!<7%Q<7%Q<7%Q<7%PR-C)D:6=E<G0U-C)D7%Q<7%Q<
M7%Q<7%Q<7'I<7"I<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<,EQ<-EPR9&EG
M97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF+BX**`HN
M+@HH"BX*+CTN"BX*+@H*)BXN"B@*+@HN"BY07%Q<7%Q<7%Q<7%Q<,C8R9&EG
M97)T-38R9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<
M7%Q<7#)<7#9<,&1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9#KN[CHP````
M*PT*5T%20RU$871E.@DQ.#<R+3`W+3-4,SHW.C5:#0H-"D.+;G3XEU=T,7I7
M05)#+S$N,`T*0V]N=&5N="U,96YG=&@Z,#8-"E<I5T%2+R\[K*PT;@I!4D,O
MK*R!D0T*3&%S="U-;V1I9FEE9#H),3@W,BTP,24S5#,Z>@`"__\_P\/#P\/#
MP\/#P\,B`,/#P\/#`</#P\/#P\/#________________________________
M_______________________________________T________P\/#P\/#P\/#
MP\/#P\,MP\/#P\/#ZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ
MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ9&EG97-T/2X*
M+@HN"@HF+BX**`HN+@HH"BX*+@HN,`HH"@HN"BXN4%PU,S)1ZNKJZNKJZNKJ
MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZL/#P\/#P\/#
MP\/+PVW#P\/#P\/#P\/#P\/#P\/#P\,!P\/#P\/#P\/_________________
M____________________________________________________-C)D:6=E
M<G1;/2X*+@HN"@HF979I8S;_________P\/#P\/#P\/#P\/#P\,MP\/#P\/#
MP\/#P\/#-BX*"BX*"BXO"C(P-S`W,"]S3G0@(&!S=#W#P\/#P\/#P\/#`!!H
M.C(S#0IL5V]A9%]L+@HN"F=AG``P,#`P,#`P,#`P,#`P,#`P,`$`,#<P-S`R
M,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P0S`P,#`P
M,#`P,#`P,#`P,#`P,#`U,#`P,#@P,#`P,#`P,#!%,#`P,#`P,#`P,#`P,#`P
M,#`P,#`P,#`P,#`P,#`!``(H(5)A4B$:!Q@!`(WO`M(`!<,`&@<`!&<`````
M`````.\"T@`"QP\`"0`N"3(<`/T!`!?__PD`+@DR'`#]`0`7__\14F%R(?\1
M4F%R(1J'`0"-[P+2``/'#P`)(1K2(RT``B@A4F%2(1H'&`$`C>\"T@`%````
M```````````````````!``````#_____```O+P``_T$@[?___[#>`/\`AH:Q
M;?;V]@.J_O;_S_\`Q+[?$?;?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?___?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W_^[XP##
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````````````````````````````````#_________
M__________________________________________\`````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````"``````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````+8`````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````````````````````````````````!287(A&@<!
M`(WO`M(``L,''(`'`0#__PL!``(ARP$"`````/\`_P$`<<?_____________
M______________________\!`````````/________\!````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````0``````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````_/\`````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````-_?W]_?W]_?W]_?W]_?W]_?#]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]\A("`@("`@(-_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]]V````W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?WT%.4TE?6-_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]O?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]]?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?WP``````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````````````/__________________
M____________________________________________________````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``0`````````````````````````````````````````````````````````
M`````````````````````````````````````````````P``````````````
M``````````!A86$`````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````,#`S,#@Q-@`P,S<T-3,T`#`P,3$V,3``,#`P
M,#`P,#`P,#<`,3(U,S$Q-#4S-S$`(#$R,#<Q`"`Q````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````'5S=&!R
M`#`Q9'9Y=6MO=@````````````````````````````````!E;F<`````````
M``````````#_`0```````````````#`P,``P,#`P,#`P,#`P,```````````
M````````````````````````````````````````````````````````````
M````````````````]P``````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````#,*`````````````0```````!``
M```````````````````$T031T4T```"`__\U*Q8T`````````-_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
MW]_?W]_?W]_?W]_?W]_?````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````F-(%PIAT;W!D:7+___\!!/__________
M__________\A4F%2(1H'__________________\A4F%2(1H'____________
M__________]H`.Y0P[0\/%\!!P$`C>\"T@`%PF%R4E@`=W1287(A&@<!`(WO
M`M(``L</"0!R(1H'`1HCTCH``BBA75U=75U=75U=75U=75U=75U=75U=75T`
M````````````````````````````````````````````````````````````
M````````````````!````````````@``````````````````````````````
M````````````````*```````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````'X````````````````````````````````````````$
M(DT81'`=#P(`@'''`.[_________________________________________
M_________________WP$________________________________________
M_____________________________________________________[T``+JK
MVP&ZNKJZ_____________S#_________________________````%@``````
M``!^?GY^?GY^?GY^?GY^?GY^?GY^?GY^_________PI^?GY^?GY^?GY^?@`!
M+?____8M+2TM"@H*"C(*"@H*"@H*"CT*"@H*"@H*"@H*"@H*"@!7(B___PS#
M/0`P`&$!`&%A86">EFZ>45J>E"(8*1QP&#AP1O__`````!X`````````````
MNKJZNKJZN@'U``"R____`````!X```"`````````````````````````````
M`"Q!`````````"T`%0``:#H`6@$M<VPW-@#($0````````#BH0!C:3``,@!E
M,0``________________````````````"@H*"@```%U=75U=75U=75U=75U=
M70```````````````````````````````````%)A<B$:!P$`C>\"T@`"PP<<
MP@2```#_;24``F<<`0(`#@```0!02P@#`"8F)@!`___/0T+_____\?__K2-T
M='3_______[______R9"____,3,U__\3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3
M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$R8J8BQB`/______0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V
M-C8V&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H
M*"@H*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``
M````````````````````````````V]O;V]L`VP````#;V]L`VR@H*"@H*#8V
M-C8V-C8V-C8VEC8V-C8V-C8VV]O;``````````````````````````````#;
MV]O;VP#;`````-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;
MV]O;V]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V
M-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V
M-C8VV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;
MV]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
M&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;V]O;
MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"0D(`
M````````````````````````````````````````````````````````````
M`````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V
M-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"
M*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````````
M`````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"0D)"
M0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
MV]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V
M-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V
M-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`
M````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````
M````````````````````V]O;V]L`VP````#;V]L`VP``````````````````
M````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U2
M85(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
M&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V
M-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````````
MV]O;V]L`VP````#;V]L`VP!W=%)A<B$:!P$`````````````````````````
M`````(WO`M(``L</"0!R(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(`
M`L</``ER(9HP`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%PT4```!&%<</``ER
M(1H'`1HCTBT:!P$:#2$[````````=EL````````````0^OKZ^OJ%F)B8F)B8
M`)@"F-(%PI@78?________\!!/____________________\A4F%2(1H'____
M______________\A4F%2(1H'______________________]H`.Y0P[0\/%\!
M!P$`C>\"T@`%PF%R4E@`=W1287(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH`
M`BBA75U=75U=75U=75U=75U=75U=75U=75T`````````````````````````
M````````````````````````````````````````````````````!```````
M`````````````````````````````"@`````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````````````!^````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````````0B31A$<!T/`@"`<<<`[O______________
M____________________________________________?`3_____________
M____________________________________________________________
M____________________O0``NJO;`;JZNKK_____________,/__________
M______________\````6`````````'Y^?GY^?GY^?GY^?GY^?GY^?GY^?G[_
M________"GY^?GY^?GY^?GY^``$M____]BTM+2T*"@H*,@H*"@H*"@H*/0H*
M"@H*"@H*"@H*"@H*`%<B+___#,,]`#``80$`86%A8)Z6;IY16IZ4(A@I''`8
M.'!&__\`````'@````````````"ZNKJZNKJZ`?4``++___\`````'@```(``
M````````````````````````````+$$`````````+0`5``!H.@!:`2US;#<V
M`,@1`````````.*A`&-I,``R`&4Q``#_______________\````````````*
M"@H*````75U=75U=75U=75U=75U=````````````````````````````````
M````4F%R(1H'`0"-[P+2``+#!QS"!(```/]M)0`"9QP!`@`.```!`%!+"`,`
M)B8F`$#__\]#0O_____Q__^M(W1T=/_______O______)D+___\Q,S7__Q,3
M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3)BIB+&(`
M_________\[.SL[.SL[.SL[.SL[.SJTC='1T_________S0S-C`Y.#(P-#/(
MX%)#+40Z8`HR'YT/.6C@4D,M1#I@"C(?G0\Y:+1@@S4X`(``4F$N,R\**G-`
M``````<``"\F*G,``L,''(`$@```_VTE^0)G'`$"``X```$`4$L(`P`F*F(L
M8@#_W0`A``!/`/T`,3(P-#$R.#$P.3'(X%)#+40Z8`HR'YT/.&BT8(,U.```
M`%)A+B\*,RIS`````````!D_)B]S+PHJ<R\*("8F)@!GP(XJ`````*^M(P\!
M'R8F)B8G)B8F)B8F)B8F)B8F`$#__\]#0O\````````O)B9S+PHJ<R\*("8F
M)A\F)B8F)B8F)B8F)B8F)"8F)@!`___/0T+_______^M(W1T=/__________
M____________________________________________________________
M____________________________________________________)B`F)A\F
M)B8F)B8F)B8F)B8G)B8`````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````]@``E#@X.#A=.#@XY>7EY0H```#EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
MY>7EY>7EY>5W=V%R(2\O+R`N"@H*75U=75U9R,C(R,C(R,C(R,C(R"<.`'\`
M``I=70!=!UU=7=D`Y>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
MY>7EY>7EY>7EY>7EY>7EY>7EY4$X.#@X]C@X+3@X.#@X.#@X.#@X.#@X.#@X
M.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#AR.#@X.#@X.#@X.#@X.#@X.#@X
M.#@X./DX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X<C@X.'?^_________QE,
M(0(V-C8V-C8V-C8V-C8V,AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-@@V-C8V
MEC8V-C8V-C8VV]O;V]O;V]O_V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V-C8V
M-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
M-C8V-C8VV]O;V]O;V]O;V]M=75U=75U=75U=75U=75U=75U=7=O;V]O;V]O;
M-C8V-C8V-AE,(0(V-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
MVS8V-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-C8V
M-C8V-C8V-C8VEC8V-C8V-C8VV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
MV]O;V]O;V]O;V]O;V]O;V]O;V]O;0D)"0@``````````````````````````
M````````````````````````````````````````````````0D)"0D)"0D)"
M<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U285(A&@=A<D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;
MV]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V
M-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V
M-C8V-C8V-MO;VP``````````````````````````````V]O;V]L`VP````#;
MV]L`VP``````````````````````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)=75U285(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V
M&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H
M*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````
M````````````````````````V]O;V]L`VP````#;V]L`VR@H*"@H*#8V-C8V
M-C8V-C8VEC8V-C8V-C8VV]O;``````````````````````````````#;V]O;
MVP#;`````-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;
MV]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H
M*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8V
MV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;`M(`
M`L</"0!R(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(``L</``ER(9HP
M`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%P_J%6YB8F)B8F`"8`IC2!<*8%V'_
M________`03_____________________(5)A4B$:!___________________
M____:`#N4,.T/#Q?`0<!`(WO`M(`!<)A<E)8`'=T4F%R(1H'`0"-[P+2``+'
M#PD`<B$:!P$:(](M``(HH5)A4B$:!V%R(1H'`0"-[P+2``+'#P`)<B&:,`$:
M(](M`!(H(5)A4B$:!Q@!`(WO`M(`!<-%7P$'`0"-[P+2``72``+'#P`)<B&:
M,`$:(](M``(H(5)A4B$:!Q@!`(WO`M(`!</ZA5N8F)B8F)@`F`*8T@7"F!=A
M_________P$$_____________________R%285(A&@?_________________
M_____V@`[E##M#P\7P$'`0"-[P+2``7"87)26`!W=%)A<B$:!P$`C>\"T@`"
MQP\)`'(A&@<!&B/2+0`"**%285(A&@=A<B$:!P$`C>\"T@`"QP\`"7(AFC`!
M&B/2+0`"*"%285(A&@<8`0"-[P+2``7#15\!!P$`C>\"T@`%PF%R4E@`=W12
M87(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH``BBA4F%2(1H'87(A&@<!`(WO
M`M(``L</``ER(9HP`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%PP```$85!<)A
M<E)8`'=T4F%R(1H'`0"-[P+2``+'#PD`<B$:!P$:(](M``(HH5)A4B$:!V%R
M(1H'`0"-[P+2``+'#P`)<B&:,`$:(](M``(H(5)A4B$:!Q@!`(WO`M(`!</Z
MA5N8F)B8F)@`F`*8T@7"F!=A_______?_P$$_____________________R%2
M85(A&@?______________________V@`[E##M#P\7P$'`0"-[P+2``7"87)2
M6`!W=%)A<B$:!P$``````````````````````````````(WO`M(``L</"0!R
M(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(``L</``ER(9HP`1HCTBT`
M`B@A4F%2(1H'&`$`C>\"T@`%PT4```!&%<</``ER(1H'`1HCTBT:!P$:#2$[
M````````=EL````````````0^OKZ^OJ%F)B8F)B8`)@"F-(%PI@78?______
M__\!!/____________________\A4F%2(1H'__________________\A4F%2
M(1H'______________________]H`.Y0P[0\/%\!!P$`C>\"T@`%PF%R4E@`
M=W1287(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH``BBA75U=75U=75U=75U=
M75U=75U=75U=75T`````````````````````````````````````````````
M````````````````````````````````!````````````@``````````````
M````````````````````````````````*```````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````'X`````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````!")-&$1P'0\"`(!QQP#N____________
M______________________________________________]\!/__________
M____________________________________________________________
M______________________^]``"ZJ]L!NKJZNO____________\P________
M_________________P```!8`````````?GY^?GY^?GY^?GY^?GY^?GY^?GY^
M?O________\*?GY^?GY^?GY^?GX``2W____V+2TM+0H*"@HR"@H*"@H*"@H]
M"@H*"@H*"@H*"@H*"@H`5R(O__\,PST`,`!A`0!A86%@GI9NGE%:GI0B&"D<
M<!@X<$;__P`````>`````````````+JZNKJZNKH!]0``LO___P`````>````
M@``````````````````````````````L00`````````M`!4``&@Z`%H!+7-L
M-S8`R!$`````````XJ$`8VDP`#(`93$``/_______________P``````````
M``H*"@H```!=75U=75U=75U=75U=75T`````````````````````````````
M``````!287(A&@<!`(WO`M(``L,'',($@```_VTE``)G'`$"``X```$`4$L(
M`P`F)B8`0/__ST-"______'__ZTC='1T_______^______\F0O___S$S-?__
M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,F*F(L
M8@#_________SL[.SL[.SL[.SL[.SL[.K2-T='3_________-#,V,#DX,C`T
M,\C@4D,M1#I@"C(?G0\Y:.!20RU$.F`*,A^=#SEHM&"#-3@`@`!282XS+PHJ
M<T``````!P``+R8J<P`"PP<<@`2```#_;27Y`F<<`0(`#@```0!02P@#`"8J
M8BQB`/_=`"$``$\`_0`Q,C`T,3(X,3`Y,<C@4D,M1#I@"C(?G0\X:+1@@S4X
M````4F$N+PHS*G,`````````&3\F+W,O"BIS+PH@)B8F`&?`CBH`````KZTC
M#P$?)B8F)B<F)B8F)B8F)B8F)B8`0/__ST-"_P```````"\F)G,O"BIS+PH@
M)B8F'R8F)B8F)B8F)B8F)B8D)B8F`$#__\]#0O_______ZTC='1T________
M____________________________________________________________
M______________________________________________________\F("8F
M'R8F)B8F)B8F)B8F)B<F)@``````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````#V``"4.#@X.%TX.#CEY>7E"@```.7EY>7EY>7EY>7EY>7EY>7EY>7E
MY>7EY>7EY>7EY7=W87(A+R\O("X*"@I=75U=75G(R,C(R,C(R,C(R,C()PX`
M?P``"EU=`%T'75U=V0#EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
MY>7EY>7EY>7EY>7EY>7EY>7EY>7E03@X.#CV.#@M.#@X.#@X.#@X.#@X.#@X
M.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.'(X.#@X.#@X.#@X.#@X.#@X
M.#@X.#@X^3@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#AR.#@X=_[_________
M&4PA`C8V-C8V-C8V-C8V-C8R&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V"#8V
M-C:6-C8V-C8V-C;;V]O;V]O;V__;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-C8V
M-C8V-C8V-@@V-C8VEC8V-C8V-C8VV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
MV]LV-C8V-C;;V]O;V]O;V]O;VUU=75U=75U=75U=75U=75U=75U=V]O;V]O;
MV]LV-C8V-C8V&4PA`C8V-C8V-C8V-MO;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
MV]O;-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V
M-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]M"0D)"````````````````````````
M``````````````````````````````````````````````````!"0D)"0D)"
M0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;
MV]O;V]O;V]O;V]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V
M-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8V
MEC8V-C8V-C8VV]O;``````````````````````````````#;V]O;VP#;````
M`-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V
M-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H
M*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````
M``````````````````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V
M-C8V-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;
MV]O;`-L`````V]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;
MV]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V
M*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V
M-C;;V]L``````````````````````````````-O;V]O;`-L`````V]O;`-O_
M____________________________________________________________
M_____________________R8@)B8?)B8F)B8F)B8F)B8F)R8F````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````/8``)0X.#@X73@X..7EY>4*````
MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E=W=A<B$O+R\@+@H*"EU=
M75U=6<C(R,C(R,C(R,C(R,@G#@!_```*75T`70==75W9`.7EY>7EY>7EY>7E
MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>5!.#@X
M./8X."TX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X
M.#@X<C@X.#@X.#@X.#@X.#@X.#@X.#@X.#CY.#@X.#@X.#@X.#@X.#@X.#@X
M.#@X.#@X.'(X.#AW_O________\93"$"-C8V-C8V-C8V-C8V-C(93"$"-C8V
M-C8V-C8V-C8V-C8V-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;_]O;V]O;
MV]O;V]O;V]O;V]O;-C8V-C8V-C8V-C8V-C8V"#8V-C:6-C8V-C8V-C;;V]O;
MV]O;V]O;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-MO;V]O;V]O;V]O;75U=75U=
M75U=75U=75U=75U=75W;V]O;V]O;VS8V-C8V-C893"$"-C8V-C8V-C8VV]O;
MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V
M-C8V&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;
MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"
M0D(`````````````````````````````````````````````````````````
M`````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V
M-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`
MC>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````
M`````````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"
M0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'
M87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V
M-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V
M-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;
M`-L`````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````
M````````````````````````V]O;V]L`VP````#;V]L`VP``````````````
M````````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=
M75U285(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V
M-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H
M*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````
M````V]O;V]L`VP````#;V]L`V]O;V]O;V]O;V]O;V]O;V]O;V]O;-C8V-C8V
M-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-C8V
M-C:6-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
MV]O;V]O;V]O;V]O;V]M"0D)"````````````````````````````````````
M``````````````````````````````````````!"0D)"0D)"0D)S0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;
MV]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H
M*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8V
MV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;````
M``````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C893"$"-C8V
M-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!
M`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````````````
M``````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V-C8V-C:6
M-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`````
MV]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V
M-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H
M*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````
M`````````````````````````-O;V]O;`-L`````V]O;`-L"-C8V-C8V-C8V
M-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V
M-C8V-C8VV]O;``````````````````````````````#;V]O;VP#;`````-O;
MVP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C89
M3"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H
M*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````
M``````````````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V
M-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;
M`-L`````V]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;
MVS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H
M*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;
MV]L``````````````````````````````-O;V]O;`-L`````V]O;`-O_____
M____________________________________________________________
M_________________R8@)B8?)B8F)B8F)B8F)B8F)R8F````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````/8``)0X.#@X73@X..7EY>4*````Y>7E
MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E=W=A<B$O+R\@+@H*"EU=75U=
M6<C(R,C(R,C(R,C(R,@G#@!_```*75T`70==75W9`.7EY>7EY>7EY>7EY>7E
MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>5!.#@X./8X
M."TX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X
M<C@X.#@X.#@X.#@X.#@X.#@X.#@X.#CY.#@X.#@X.#@X.#@X.#@X.#@X.#@X
M.#@X.'(X.#AW_O________\93"$"-C8V-C8V-C8V-C8V-C(93"$"-C8V-C8V
M-C8V-C8V-C8V-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;_]O;V]O;V]O;
MV]O;V]O;V]O;-C8V-C8V-C8V-C8V-C8V"#8V-C:6-C8V-C8V-C;;V]O;V]O;
MV]O;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-MO;V]O;V]O;V]O;75U=75U=75U=
M75U=75U=75U=75W;V]O;V]O;VS8V-C8V-C893"$"-C8V-C8V-C8VV]O;V]O;
MV]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
M&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;V]O;
MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"0D(`
M````````````````````````````````````````````````````````````
M`````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V
M-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"
M*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````````
M`````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"0D)"
M0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
MV]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V
M-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V
M-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`
M````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````
M````````````````````V]O;V]L`VP````#;V]L`VP``````````````````
M````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U2
M85(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
M&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V
M-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````````
MV]O;V]L`VP````#;V]L`V]O;V]O;V]O;V]O;V]O;V]O;V]O;-C8V-C8V-AE,
M(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-C:6
M-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
MV]O;V]O;V]O;V]M"0D)"````````````````````````````````````````
M``````````````````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV
M-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H
M*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;
M``````````````````````````````#;V]O;VP#;`````-O;VP#;````````
M``````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C893"$"-C8V-C8V
M-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO
M`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````````````````
M``````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V-C8V-C:6-C8V
M-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`````V]O;
M`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,
M(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H
M*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````
@`````````````````````-O;V]O;`-L`````V]O;`-L`
`
end

View File

@ -0,0 +1,10 @@
begin 664 test_read_format_rar_ppmd_use_after_free2.rar
M4F%R(1H'``1G=$Q24`!W````>U!+`P0Q`'#_J7\`+@TU'`#]`0`7__]"0D)"
M+W5N)B8F)F=I9`UD#1T+``!"`````````&%R(1H'``3_________`F@`H2``
M``"`P\/#2\/#P\/#P\/#P\-3PP"`P\/#PYZ>AYZ>GI[#4\,`@,/#`L,@(""=
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(/______
M__\@("`@("`@("`@("`@("`@("`@("`@("`$9W1,4E``=P```'M02P,$,0!P
M_ZE_`"X--1P`_0$`%___0D)"0B]U;B8F)B9G:60-9`T="P``0@````````!A
0<B$:!P`$_________P)H````
`
end

View File

@ -49,11 +49,10 @@ __FBSDID("$FreeBSD$");
*/ */
struct lafe_line_reader { struct lafe_line_reader {
FILE *f; FILE *f;
char *buff, *buff_end, *line_start, *line_end, *p; char *buff, *buff_end, *line_start, *line_end;
char *pathname; char *pathname;
size_t buff_length; size_t buff_length;
int nullSeparator; /* Lines separated by null, not CR/CRLF/etc. */ int nullSeparator; /* Lines separated by null, not CR/CRLF/etc. */
int ret;
}; };
struct lafe_line_reader * struct lafe_line_reader *

View File

@ -23,9 +23,11 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
/* $OpenBSD: readpassphrase.c,v 1.22 2010/01/13 10:20:54 dtucker Exp $ */ /* $OpenBSD: readpassphrase.c,v 1.27 2019/01/25 00:19:25 millert Exp $ */
/* /*
* Copyright (c) 2000-2002, 2007 Todd C. Miller <Todd.Miller@courtesan.com> * Copyright (c) 2000-2002, 2007, 2010
* Todd C. Miller <millert@openbsd.org>
* *
* Permission to use, copy, modify, and distribute this software for any * Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@ -198,6 +200,27 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
output = STDERR_FILENO; output = STDERR_FILENO;
} }
/*
* Turn off echo if possible.
* If we are using a tty but are not the foreground pgrp this will
* generate SIGTTOU, so do it *before* installing the signal handlers.
*/
if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) {
memcpy(&term, &oterm, sizeof(term));
if (!(flags & RPP_ECHO_ON))
term.c_lflag &= ~(ECHO | ECHONL);
#ifdef VSTATUS
if (term.c_cc[VSTATUS] != _POSIX_VDISABLE)
term.c_cc[VSTATUS] = _POSIX_VDISABLE;
#endif
(void)tcsetattr(input, _T_FLUSH, &term);
} else {
memset(&term, 0, sizeof(term));
term.c_lflag |= ECHO;
memset(&oterm, 0, sizeof(oterm));
oterm.c_lflag |= ECHO;
}
/* /*
* Catch signals that would otherwise cause the user to end * Catch signals that would otherwise cause the user to end
* up with echo turned off in the shell. Don't worry about * up with echo turned off in the shell. Don't worry about
@ -217,57 +240,41 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
(void)sigaction(SIGTTIN, &sa, &savettin); (void)sigaction(SIGTTIN, &sa, &savettin);
(void)sigaction(SIGTTOU, &sa, &savettou); (void)sigaction(SIGTTOU, &sa, &savettou);
/* Turn off echo if possible. */ if (!(flags & RPP_STDIN)) {
if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) { int r = write(output, prompt, strlen(prompt));
memcpy(&term, &oterm, sizeof(term)); (void)r;
if (!(flags & RPP_ECHO_ON))
term.c_lflag &= ~(ECHO | ECHONL);
#ifdef VSTATUS
if (term.c_cc[VSTATUS] != _POSIX_VDISABLE)
term.c_cc[VSTATUS] = _POSIX_VDISABLE;
#endif
(void)tcsetattr(input, _T_FLUSH, &term);
} else {
memset(&term, 0, sizeof(term));
term.c_lflag |= ECHO;
memset(&oterm, 0, sizeof(oterm));
oterm.c_lflag |= ECHO;
} }
end = buf + bufsiz - 1;
/* No I/O if we are already backgrounded. */ p = buf;
if (signo[SIGTTOU] != 1 && signo[SIGTTIN] != 1) { while ((nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r') {
if (!(flags & RPP_STDIN)) { if (p < end) {
int r = write(output, prompt, strlen(prompt)); if ((flags & RPP_SEVENBIT))
(void)r; ch &= 0x7f;
} if (isalpha((unsigned char)ch)) {
end = buf + bufsiz - 1; if ((flags & RPP_FORCELOWER))
p = buf; ch = (char)tolower((unsigned char)ch);
while ((nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r') { if ((flags & RPP_FORCEUPPER))
if (p < end) { ch = (char)toupper((unsigned char)ch);
if ((flags & RPP_SEVENBIT))
ch &= 0x7f;
if (isalpha((unsigned char)ch)) {
if ((flags & RPP_FORCELOWER))
ch = (char)tolower((unsigned char)ch);
if ((flags & RPP_FORCEUPPER))
ch = (char)toupper((unsigned char)ch);
}
*p++ = ch;
} }
*p++ = ch;
} }
*p = '\0'; }
save_errno = errno; *p = '\0';
if (!(term.c_lflag & ECHO)) { save_errno = errno;
int r = write(output, "\n", 1); if (!(term.c_lflag & ECHO)) {
(void)r; int r = write(output, "\n", 1);
} (void)r;
} }
/* Restore old terminal settings and signals. */ /* Restore old terminal settings and signals. */
if (memcmp(&term, &oterm, sizeof(term)) != 0) { if (memcmp(&term, &oterm, sizeof(term)) != 0) {
const int sigttou = signo[SIGTTOU];
/* Ignore SIGTTOU generated when we are not the fg pgrp. */
while (tcsetattr(input, _T_FLUSH, &oterm) == -1 && while (tcsetattr(input, _T_FLUSH, &oterm) == -1 &&
errno == EINTR) errno == EINTR && !signo[SIGTTOU])
continue; continue;
signo[SIGTTOU] = sigttou;
} }
(void)sigaction(SIGALRM, &savealrm, NULL); (void)sigaction(SIGALRM, &savealrm, NULL);
(void)sigaction(SIGHUP, &savehup, NULL); (void)sigaction(SIGHUP, &savehup, NULL);

View File

@ -25,7 +25,7 @@
.\" .\"
.\" $FreeBSD$ .\" $FreeBSD$
.\" .\"
.Dd October 1, 2017 .Dd June 3, 2019
.Dt TAR 1 .Dt TAR 1
.Os .Os
.Sh NAME .Sh NAME
@ -198,7 +198,7 @@ options and before extracting any files.
.It Fl Fl clear-nochange-fflags .It Fl Fl clear-nochange-fflags
(x mode only) (x mode only)
Before removing file system objects to replace them, clear platform-specific Before removing file system objects to replace them, clear platform-specific
file flags that might prevent removal. file attributes or file flags that might prevent removal.
.It Fl Fl exclude Ar pattern .It Fl Fl exclude Ar pattern
Do not process files or directories that match the Do not process files or directories that match the
specified pattern. specified pattern.
@ -218,7 +218,8 @@ and
.Sq Darcs . .Sq Darcs .
.It Fl Fl fflags .It Fl Fl fflags
(c, r, u, x modes only) (c, r, u, x modes only)
Archive or extract file flags. This is the reverse of Archive or extract platform-specific file attributes or file flags.
This is the reverse of
.Fl Fl no-fflags .Fl Fl no-fflags
and the default behavior in c, r, and u modes or if and the default behavior in c, r, and u modes or if
.Nm .Nm
@ -389,8 +390,8 @@ Do not extract modification time.
By default, the modification time is set to the time stored in the archive. By default, the modification time is set to the time stored in the archive.
.It Fl Fl mac-metadata .It Fl Fl mac-metadata
(c, r, u and x mode only) (c, r, u and x mode only)
Mac OS X specific. Archive or extract extended ACLs and extended attributes Mac OS X specific. Archive or extract extended ACLs and extended file
using attributes using
.Xr copyfile 3 .Xr copyfile 3
in AppleDouble format. This is the reverse of in AppleDouble format. This is the reverse of
.Fl Fl no-mac-metadata . .Fl Fl no-mac-metadata .
@ -445,21 +446,21 @@ and the default behavior if
is run as non-root in x mode (on Mac OS X as any user in c, r, u and x modes). is run as non-root in x mode (on Mac OS X as any user in c, r, u and x modes).
.It Fl Fl no-fflags .It Fl Fl no-fflags
(c, r, u, x modes only) (c, r, u, x modes only)
Do not archive or extract file flags. This is the reverse of Do not archive or extract file attributes or file flags. This is the reverse of
.Fl Fl fflags .Fl Fl fflags
and the default behavior if and the default behavior if
.Nm .Nm
is run as non-root in x mode. is run as non-root in x mode.
.It Fl Fl no-mac-metadata .It Fl Fl no-mac-metadata
(x mode only) (x mode only)
Mac OS X specific. Do not archive or extract ACLs and extended attributes using Mac OS X specific. Do not archive or extract ACLs and extended file attributes
using
.Xr copyfile 3 .Xr copyfile 3
in AppleDouble format. This is the reverse of in AppleDouble format. This is the reverse of
.Fl Fl mac-metadata . .Fl Fl mac-metadata .
and the default behavior if and the default behavior if
.Nm .Nm
is run as non-root in x mode. is run as non-root in x mode.
.It Fl n , Fl Fl norecurse , Fl Fl no-recursion
.It Fl Fl no-same-owner .It Fl Fl no-same-owner
(x mode only) (x mode only)
Do not extract owner and group IDs. Do not extract owner and group IDs.
@ -470,8 +471,8 @@ and the default behavior if
is run as non-root. is run as non-root.
.It Fl Fl no-same-permissions .It Fl Fl no-same-permissions
(x mode only) (x mode only)
Do not extract full permissions (SGID, SUID, sticky bit, ACLs, Do not extract full permissions (SGID, SUID, sticky bit,
extended attributes or extended file flags). file attributes or file flags, extended file attributes and ACLs).
This is the reverse of This is the reverse of
.Fl p .Fl p
and the default behavior if and the default behavior if
@ -479,7 +480,7 @@ and the default behavior if
is run as non-root. is run as non-root.
.It Fl Fl no-xattrs .It Fl Fl no-xattrs
(c, r, u, x modes only) (c, r, u, x modes only)
Do not archive or extract extended attributes. This is the reverse of Do not archive or extract extended file attributes. This is the reverse of
.Fl Fl xattrs .Fl Fl xattrs
and the default behavior if and the default behavior if
.Nm .Nm
@ -667,13 +668,13 @@ This option suppresses these behaviors.
.It Fl p , Fl Fl insecure , Fl Fl preserve-permissions .It Fl p , Fl Fl insecure , Fl Fl preserve-permissions
(x mode only) (x mode only)
Preserve file permissions. Preserve file permissions.
Attempt to restore the full permissions, including owner, file modes, ACLs, Attempt to restore the full permissions, including file modes, file attributes
extended attributes and extended file flags, if available, for each item or file flags, extended file attributes and ACLs, if available, for each item
extracted from the archive. This is te reverse of extracted from the archive. This is the reverse of
.Fl Fl no-same-permissions .Fl Fl no-same-permissions
and the default if and the default if
.Nm .Nm
is being run by root and can be partially overridden by also specifying is being run as root. It can be partially overridden by also specifying
.Fl Fl no-acls , .Fl Fl no-acls ,
.Fl Fl no-fflags , .Fl Fl no-fflags ,
.Fl Fl no-mac-metadata .Fl Fl no-mac-metadata
@ -844,7 +845,7 @@ See
for more information about the handling of exclusions. for more information about the handling of exclusions.
.It Fl Fl xattrs .It Fl Fl xattrs
(c, r, u, x modes only) (c, r, u, x modes only)
Archive or extract extended attributes. This is the reverse of Archive or extract extended file attributes. This is the reverse of
.Fl Fl no-xattrs .Fl Fl no-xattrs
and the default behavior in c, r, and u modes or if and the default behavior in c, r, and u modes or if
.Nm .Nm

View File

@ -396,119 +396,119 @@ Lnovec:
#elif defined(__ppc__) #elif defined(__ppc__)
DEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv) DEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
; //
; void libunwind::Registers_ppc::jumpto() // void libunwind::Registers_ppc::jumpto()
; //
; On entry: // On entry:
; thread_state pointer is in r3 // thread_state pointer is in r3
; //
; restore integral registerrs // restore integral registerrs
; skip r0 for now // skip r0 for now
; skip r1 for now // skip r1 for now
lwz r2, 16(r3) lwz %r2, 16(%r3)
; skip r3 for now // skip r3 for now
; skip r4 for now // skip r4 for now
; skip r5 for now // skip r5 for now
lwz r6, 32(r3) lwz %r6, 32(%r3)
lwz r7, 36(r3) lwz %r7, 36(%r3)
lwz r8, 40(r3) lwz %r8, 40(%r3)
lwz r9, 44(r3) lwz %r9, 44(%r3)
lwz r10, 48(r3) lwz %r10, 48(%r3)
lwz r11, 52(r3) lwz %r11, 52(%r3)
lwz r12, 56(r3) lwz %r12, 56(%r3)
lwz r13, 60(r3) lwz %r13, 60(%r3)
lwz r14, 64(r3) lwz %r14, 64(%r3)
lwz r15, 68(r3) lwz %r15, 68(%r3)
lwz r16, 72(r3) lwz %r16, 72(%r3)
lwz r17, 76(r3) lwz %r17, 76(%r3)
lwz r18, 80(r3) lwz %r18, 80(%r3)
lwz r19, 84(r3) lwz %r19, 84(%r3)
lwz r20, 88(r3) lwz %r20, 88(%r3)
lwz r21, 92(r3) lwz %r21, 92(%r3)
lwz r22, 96(r3) lwz %r22, 96(%r3)
lwz r23,100(r3) lwz %r23,100(%r3)
lwz r24,104(r3) lwz %r24,104(%r3)
lwz r25,108(r3) lwz %r25,108(%r3)
lwz r26,112(r3) lwz %r26,112(%r3)
lwz r27,116(r3) lwz %r27,116(%r3)
lwz r28,120(r3) lwz %r28,120(%r3)
lwz r29,124(r3) lwz %r29,124(%r3)
lwz r30,128(r3) lwz %r30,128(%r3)
lwz r31,132(r3) lwz %r31,132(%r3)
; restore float registers // restore float registers
lfd f0, 160(r3) lfd %f0, 160(%r3)
lfd f1, 168(r3) lfd %f1, 168(%r3)
lfd f2, 176(r3) lfd %f2, 176(%r3)
lfd f3, 184(r3) lfd %f3, 184(%r3)
lfd f4, 192(r3) lfd %f4, 192(%r3)
lfd f5, 200(r3) lfd %f5, 200(%r3)
lfd f6, 208(r3) lfd %f6, 208(%r3)
lfd f7, 216(r3) lfd %f7, 216(%r3)
lfd f8, 224(r3) lfd %f8, 224(%r3)
lfd f9, 232(r3) lfd %f9, 232(%r3)
lfd f10,240(r3) lfd %f10,240(%r3)
lfd f11,248(r3) lfd %f11,248(%r3)
lfd f12,256(r3) lfd %f12,256(%r3)
lfd f13,264(r3) lfd %f13,264(%r3)
lfd f14,272(r3) lfd %f14,272(%r3)
lfd f15,280(r3) lfd %f15,280(%r3)
lfd f16,288(r3) lfd %f16,288(%r3)
lfd f17,296(r3) lfd %f17,296(%r3)
lfd f18,304(r3) lfd %f18,304(%r3)
lfd f19,312(r3) lfd %f19,312(%r3)
lfd f20,320(r3) lfd %f20,320(%r3)
lfd f21,328(r3) lfd %f21,328(%r3)
lfd f22,336(r3) lfd %f22,336(%r3)
lfd f23,344(r3) lfd %f23,344(%r3)
lfd f24,352(r3) lfd %f24,352(%r3)
lfd f25,360(r3) lfd %f25,360(%r3)
lfd f26,368(r3) lfd %f26,368(%r3)
lfd f27,376(r3) lfd %f27,376(%r3)
lfd f28,384(r3) lfd %f28,384(%r3)
lfd f29,392(r3) lfd %f29,392(%r3)
lfd f30,400(r3) lfd %f30,400(%r3)
lfd f31,408(r3) lfd %f31,408(%r3)
; restore vector registers if any are in use // restore vector registers if any are in use
lwz r5,156(r3) ; test VRsave lwz %r5, 156(%r3) // test VRsave
cmpwi r5,0 cmpwi %r5, 0
beq Lnovec beq Lnovec
subi r4,r1,16
rlwinm r4,r4,0,0,27 ; mask low 4-bits
; r4 is now a 16-byte aligned pointer into the red zone
; the _vectorRegisters may not be 16-byte aligned so copy via red zone temp buffer
subi %r4, %r1, 16
rlwinm %r4, %r4, 0, 0, 27 // mask low 4-bits
// r4 is now a 16-byte aligned pointer into the red zone
// the _vectorRegisters may not be 16-byte aligned so copy via red zone temp buffer
#define LOAD_VECTOR_UNALIGNEDl(_index) \ #define LOAD_VECTOR_UNALIGNEDl(_index) \
andis. r0,r5,(1<<(15-_index)) @\ andis. %r0, %r5, (1<<(15-_index)) SEPARATOR \
beq Ldone ## _index @\ beq Ldone ## _index SEPARATOR \
lwz r0, 424+_index*16(r3) @\ lwz %r0, 424+_index*16(%r3) SEPARATOR \
stw r0, 0(r4) @\ stw %r0, 0(%r4) SEPARATOR \
lwz r0, 424+_index*16+4(r3) @\ lwz %r0, 424+_index*16+4(%r3) SEPARATOR \
stw r0, 4(r4) @\ stw %r0, 4(%r4) SEPARATOR \
lwz r0, 424+_index*16+8(r3) @\ lwz %r0, 424+_index*16+8(%r3) SEPARATOR \
stw r0, 8(r4) @\ stw %r0, 8(%r4) SEPARATOR \
lwz r0, 424+_index*16+12(r3)@\ lwz %r0, 424+_index*16+12(%r3) SEPARATOR \
stw r0, 12(r4) @\ stw %r0, 12(%r4) SEPARATOR \
lvx v ## _index,0,r4 @\ lvx %v ## _index, 0, %r4 SEPARATOR \
Ldone ## _index: Ldone ## _index:
#define LOAD_VECTOR_UNALIGNEDh(_index) \ #define LOAD_VECTOR_UNALIGNEDh(_index) \
andi. r0,r5,(1<<(31-_index)) @\ andi. %r0, %r5, (1<<(31-_index)) SEPARATOR \
beq Ldone ## _index @\ beq Ldone ## _index SEPARATOR \
lwz r0, 424+_index*16(r3) @\ lwz %r0, 424+_index*16(%r3) SEPARATOR \
stw r0, 0(r4) @\ stw %r0, 0(%r4) SEPARATOR \
lwz r0, 424+_index*16+4(r3) @\ lwz %r0, 424+_index*16+4(%r3) SEPARATOR \
stw r0, 4(r4) @\ stw %r0, 4(%r4) SEPARATOR \
lwz r0, 424+_index*16+8(r3) @\ lwz %r0, 424+_index*16+8(%r3) SEPARATOR \
stw r0, 8(r4) @\ stw %r0, 8(%r4) SEPARATOR \
lwz r0, 424+_index*16+12(r3)@\ lwz %r0, 424+_index*16+12(%r3) SEPARATOR \
stw r0, 12(r4) @\ stw %r0, 12(%r4) SEPARATOR \
lvx v ## _index,0,r4 @\ lvx %v ## _index, 0, %r4 SEPARATOR \
Ldone ## _index: Ldone ## _index:
LOAD_VECTOR_UNALIGNEDl(0) LOAD_VECTOR_UNALIGNEDl(0)
@ -545,17 +545,17 @@ Ldone ## _index:
LOAD_VECTOR_UNALIGNEDh(31) LOAD_VECTOR_UNALIGNEDh(31)
Lnovec: Lnovec:
lwz r0, 136(r3) ; __cr lwz %r0, 136(%r3) // __cr
mtocrf 255,r0 mtcr %r0
lwz r0, 148(r3) ; __ctr lwz %r0, 148(%r3) // __ctr
mtctr r0 mtctr %r0
lwz r0, 0(r3) ; __ssr0 lwz %r0, 0(%r3) // __ssr0
mtctr r0 mtctr %r0
lwz r0, 8(r3) ; do r0 now lwz %r0, 8(%r3) // do r0 now
lwz r5,28(r3) ; do r5 now lwz %r5, 28(%r3) // do r5 now
lwz r4,24(r3) ; do r4 now lwz %r4, 24(%r3) // do r4 now
lwz r1,12(r3) ; do sp now lwz %r1, 12(%r3) // do sp now
lwz r3,20(r3) ; do r3 last lwz %r3, 20(%r3) // do r3 last
bctr bctr
#elif defined(__arm64__) || defined(__aarch64__) #elif defined(__arm64__) || defined(__aarch64__)

View File

@ -557,144 +557,144 @@ DEFINE_LIBUNWIND_FUNCTION(unw_getcontext)
#elif defined(__ppc__) #elif defined(__ppc__)
; //
; extern int unw_getcontext(unw_context_t* thread_state) // extern int unw_getcontext(unw_context_t* thread_state)
; //
; On entry: // On entry:
; thread_state pointer is in r3 // thread_state pointer is in r3
; //
DEFINE_LIBUNWIND_FUNCTION(unw_getcontext) DEFINE_LIBUNWIND_FUNCTION(unw_getcontext)
stw r0, 8(r3) stw %r0, 8(%r3)
mflr r0 mflr %r0
stw r0, 0(r3) ; store lr as ssr0 stw %r0, 0(%r3) // store lr as ssr0
stw r1, 12(r3) stw %r1, 12(%r3)
stw r2, 16(r3) stw %r2, 16(%r3)
stw r3, 20(r3) stw %r3, 20(%r3)
stw r4, 24(r3) stw %r4, 24(%r3)
stw r5, 28(r3) stw %r5, 28(%r3)
stw r6, 32(r3) stw %r6, 32(%r3)
stw r7, 36(r3) stw %r7, 36(%r3)
stw r8, 40(r3) stw %r8, 40(%r3)
stw r9, 44(r3) stw %r9, 44(%r3)
stw r10, 48(r3) stw %r10, 48(%r3)
stw r11, 52(r3) stw %r11, 52(%r3)
stw r12, 56(r3) stw %r12, 56(%r3)
stw r13, 60(r3) stw %r13, 60(%r3)
stw r14, 64(r3) stw %r14, 64(%r3)
stw r15, 68(r3) stw %r15, 68(%r3)
stw r16, 72(r3) stw %r16, 72(%r3)
stw r17, 76(r3) stw %r17, 76(%r3)
stw r18, 80(r3) stw %r18, 80(%r3)
stw r19, 84(r3) stw %r19, 84(%r3)
stw r20, 88(r3) stw %r20, 88(%r3)
stw r21, 92(r3) stw %r21, 92(%r3)
stw r22, 96(r3) stw %r22, 96(%r3)
stw r23,100(r3) stw %r23,100(%r3)
stw r24,104(r3) stw %r24,104(%r3)
stw r25,108(r3) stw %r25,108(%r3)
stw r26,112(r3) stw %r26,112(%r3)
stw r27,116(r3) stw %r27,116(%r3)
stw r28,120(r3) stw %r28,120(%r3)
stw r29,124(r3) stw %r29,124(%r3)
stw r30,128(r3) stw %r30,128(%r3)
stw r31,132(r3) stw %r31,132(%r3)
; save VRSave register // save VRSave register
mfspr r0,256 mfspr %r0, 256
stw r0,156(r3) stw %r0, 156(%r3)
; save CR registers // save CR registers
mfcr r0 mfcr %r0
stw r0,136(r3) stw %r0, 136(%r3)
; save CTR register // save CTR register
mfctr r0 mfctr %r0
stw r0,148(r3) stw %r0, 148(%r3)
; save float registers // save float registers
stfd f0, 160(r3) stfd %f0, 160(%r3)
stfd f1, 168(r3) stfd %f1, 168(%r3)
stfd f2, 176(r3) stfd %f2, 176(%r3)
stfd f3, 184(r3) stfd %f3, 184(%r3)
stfd f4, 192(r3) stfd %f4, 192(%r3)
stfd f5, 200(r3) stfd %f5, 200(%r3)
stfd f6, 208(r3) stfd %f6, 208(%r3)
stfd f7, 216(r3) stfd %f7, 216(%r3)
stfd f8, 224(r3) stfd %f8, 224(%r3)
stfd f9, 232(r3) stfd %f9, 232(%r3)
stfd f10,240(r3) stfd %f10,240(%r3)
stfd f11,248(r3) stfd %f11,248(%r3)
stfd f12,256(r3) stfd %f12,256(%r3)
stfd f13,264(r3) stfd %f13,264(%r3)
stfd f14,272(r3) stfd %f14,272(%r3)
stfd f15,280(r3) stfd %f15,280(%r3)
stfd f16,288(r3) stfd %f16,288(%r3)
stfd f17,296(r3) stfd %f17,296(%r3)
stfd f18,304(r3) stfd %f18,304(%r3)
stfd f19,312(r3) stfd %f19,312(%r3)
stfd f20,320(r3) stfd %f20,320(%r3)
stfd f21,328(r3) stfd %f21,328(%r3)
stfd f22,336(r3) stfd %f22,336(%r3)
stfd f23,344(r3) stfd %f23,344(%r3)
stfd f24,352(r3) stfd %f24,352(%r3)
stfd f25,360(r3) stfd %f25,360(%r3)
stfd f26,368(r3) stfd %f26,368(%r3)
stfd f27,376(r3) stfd %f27,376(%r3)
stfd f28,384(r3) stfd %f28,384(%r3)
stfd f29,392(r3) stfd %f29,392(%r3)
stfd f30,400(r3) stfd %f30,400(%r3)
stfd f31,408(r3) stfd %f31,408(%r3)
; save vector registers // save vector registers
subi r4,r1,16 subi %r4, %r1, 16
rlwinm r4,r4,0,0,27 ; mask low 4-bits rlwinm %r4, %r4, 0, 0, 27 // mask low 4-bits
; r4 is now a 16-byte aligned pointer into the red zone // r4 is now a 16-byte aligned pointer into the red zone
#define SAVE_VECTOR_UNALIGNED(_vec, _offset) \ #define SAVE_VECTOR_UNALIGNED(_vec, _offset) \
stvx _vec,0,r4 @\ stvx _vec, 0, %r4 SEPARATOR \
lwz r5, 0(r4) @\ lwz %r5, 0(%r4) SEPARATOR \
stw r5, _offset(r3) @\ stw %r5, _offset(%r3) SEPARATOR \
lwz r5, 4(r4) @\ lwz %r5, 4(%r4) SEPARATOR \
stw r5, _offset+4(r3) @\ stw %r5, _offset+4(%r3) SEPARATOR \
lwz r5, 8(r4) @\ lwz %r5, 8(%r4) SEPARATOR \
stw r5, _offset+8(r3) @\ stw %r5, _offset+8(%r3) SEPARATOR \
lwz r5, 12(r4) @\ lwz %r5, 12(%r4) SEPARATOR \
stw r5, _offset+12(r3) stw %r5, _offset+12(%r3)
SAVE_VECTOR_UNALIGNED( v0, 424+0x000) SAVE_VECTOR_UNALIGNED( %v0, 424+0x000)
SAVE_VECTOR_UNALIGNED( v1, 424+0x010) SAVE_VECTOR_UNALIGNED( %v1, 424+0x010)
SAVE_VECTOR_UNALIGNED( v2, 424+0x020) SAVE_VECTOR_UNALIGNED( %v2, 424+0x020)
SAVE_VECTOR_UNALIGNED( v3, 424+0x030) SAVE_VECTOR_UNALIGNED( %v3, 424+0x030)
SAVE_VECTOR_UNALIGNED( v4, 424+0x040) SAVE_VECTOR_UNALIGNED( %v4, 424+0x040)
SAVE_VECTOR_UNALIGNED( v5, 424+0x050) SAVE_VECTOR_UNALIGNED( %v5, 424+0x050)
SAVE_VECTOR_UNALIGNED( v6, 424+0x060) SAVE_VECTOR_UNALIGNED( %v6, 424+0x060)
SAVE_VECTOR_UNALIGNED( v7, 424+0x070) SAVE_VECTOR_UNALIGNED( %v7, 424+0x070)
SAVE_VECTOR_UNALIGNED( v8, 424+0x080) SAVE_VECTOR_UNALIGNED( %v8, 424+0x080)
SAVE_VECTOR_UNALIGNED( v9, 424+0x090) SAVE_VECTOR_UNALIGNED( %v9, 424+0x090)
SAVE_VECTOR_UNALIGNED(v10, 424+0x0A0) SAVE_VECTOR_UNALIGNED(%v10, 424+0x0A0)
SAVE_VECTOR_UNALIGNED(v11, 424+0x0B0) SAVE_VECTOR_UNALIGNED(%v11, 424+0x0B0)
SAVE_VECTOR_UNALIGNED(v12, 424+0x0C0) SAVE_VECTOR_UNALIGNED(%v12, 424+0x0C0)
SAVE_VECTOR_UNALIGNED(v13, 424+0x0D0) SAVE_VECTOR_UNALIGNED(%v13, 424+0x0D0)
SAVE_VECTOR_UNALIGNED(v14, 424+0x0E0) SAVE_VECTOR_UNALIGNED(%v14, 424+0x0E0)
SAVE_VECTOR_UNALIGNED(v15, 424+0x0F0) SAVE_VECTOR_UNALIGNED(%v15, 424+0x0F0)
SAVE_VECTOR_UNALIGNED(v16, 424+0x100) SAVE_VECTOR_UNALIGNED(%v16, 424+0x100)
SAVE_VECTOR_UNALIGNED(v17, 424+0x110) SAVE_VECTOR_UNALIGNED(%v17, 424+0x110)
SAVE_VECTOR_UNALIGNED(v18, 424+0x120) SAVE_VECTOR_UNALIGNED(%v18, 424+0x120)
SAVE_VECTOR_UNALIGNED(v19, 424+0x130) SAVE_VECTOR_UNALIGNED(%v19, 424+0x130)
SAVE_VECTOR_UNALIGNED(v20, 424+0x140) SAVE_VECTOR_UNALIGNED(%v20, 424+0x140)
SAVE_VECTOR_UNALIGNED(v21, 424+0x150) SAVE_VECTOR_UNALIGNED(%v21, 424+0x150)
SAVE_VECTOR_UNALIGNED(v22, 424+0x160) SAVE_VECTOR_UNALIGNED(%v22, 424+0x160)
SAVE_VECTOR_UNALIGNED(v23, 424+0x170) SAVE_VECTOR_UNALIGNED(%v23, 424+0x170)
SAVE_VECTOR_UNALIGNED(v24, 424+0x180) SAVE_VECTOR_UNALIGNED(%v24, 424+0x180)
SAVE_VECTOR_UNALIGNED(v25, 424+0x190) SAVE_VECTOR_UNALIGNED(%v25, 424+0x190)
SAVE_VECTOR_UNALIGNED(v26, 424+0x1A0) SAVE_VECTOR_UNALIGNED(%v26, 424+0x1A0)
SAVE_VECTOR_UNALIGNED(v27, 424+0x1B0) SAVE_VECTOR_UNALIGNED(%v27, 424+0x1B0)
SAVE_VECTOR_UNALIGNED(v28, 424+0x1C0) SAVE_VECTOR_UNALIGNED(%v28, 424+0x1C0)
SAVE_VECTOR_UNALIGNED(v29, 424+0x1D0) SAVE_VECTOR_UNALIGNED(%v29, 424+0x1D0)
SAVE_VECTOR_UNALIGNED(v30, 424+0x1E0) SAVE_VECTOR_UNALIGNED(%v30, 424+0x1E0)
SAVE_VECTOR_UNALIGNED(v31, 424+0x1F0) SAVE_VECTOR_UNALIGNED(%v31, 424+0x1F0)
li r3, 0 ; return UNW_ESUCCESS li %r3, 0 // return UNW_ESUCCESS
blr blr

View File

@ -29,8 +29,6 @@
#ifdef _ARCH_PWR8 #ifdef _ARCH_PWR8
#define PPC64_HAS_VMX #define PPC64_HAS_VMX
#endif #endif
#elif defined(__POWERPC__) || defined(__powerpc__) || defined(__ppc__)
#define SEPARATOR @
#elif defined(__arm64__) #elif defined(__arm64__)
#define SEPARATOR %% #define SEPARATOR %%
#else #else

View File

@ -301,7 +301,7 @@ void CIE::dump(raw_ostream &OS, const MCRegisterInfo *MRI, bool IsEH) const {
OS << format(" Data alignment factor: %d\n", (int32_t)DataAlignmentFactor); OS << format(" Data alignment factor: %d\n", (int32_t)DataAlignmentFactor);
OS << format(" Return address column: %d\n", (int32_t)ReturnAddressRegister); OS << format(" Return address column: %d\n", (int32_t)ReturnAddressRegister);
if (Personality) if (Personality)
OS << format(" Personality Address: %08x\n", *Personality); OS << format(" Personality Address: %016" PRIx64 "\n", *Personality);
if (!AugmentationData.empty()) { if (!AugmentationData.empty()) {
OS << " Augmentation data: "; OS << " Augmentation data: ";
for (uint8_t Byte : AugmentationData) for (uint8_t Byte : AugmentationData)
@ -320,7 +320,7 @@ void FDE::dump(raw_ostream &OS, const MCRegisterInfo *MRI, bool IsEH) const {
(uint32_t)InitialLocation, (uint32_t)InitialLocation,
(uint32_t)InitialLocation + (uint32_t)AddressRange); (uint32_t)InitialLocation + (uint32_t)AddressRange);
if (LSDAAddress) if (LSDAAddress)
OS << format(" LSDA Address: %08x\n", *LSDAAddress); OS << format(" LSDA Address: %016" PRIx64 "\n", *LSDAAddress);
CFIs.dump(OS, MRI, IsEH); CFIs.dump(OS, MRI, IsEH);
OS << "\n"; OS << "\n";
} }

View File

@ -1271,6 +1271,7 @@ void ELFObjectWriter::executePostLayoutBinding(MCAssembler &Asm,
// This is the first place we are able to copy this information. // This is the first place we are able to copy this information.
Alias->setExternal(Symbol.isExternal()); Alias->setExternal(Symbol.isExternal());
Alias->setBinding(Symbol.getBinding()); Alias->setBinding(Symbol.getBinding());
Alias->setOther(Symbol.getOther());
if (!Symbol.isUndefined() && !Rest.startswith("@@@")) if (!Symbol.isUndefined() && !Rest.startswith("@@@"))
continue; continue;

View File

@ -522,7 +522,7 @@ static void ARM64EmitUnwindInfo(MCStreamer &streamer, WinEH::FrameInfo *info) {
if (MatchingEpilog) { if (MatchingEpilog) {
assert(EpilogInfo.find(MatchingEpilog) != EpilogInfo.end() && assert(EpilogInfo.find(MatchingEpilog) != EpilogInfo.end() &&
"Duplicate epilog not found"); "Duplicate epilog not found");
EpilogInfo[EpilogStart] = EpilogInfo[MatchingEpilog]; EpilogInfo[EpilogStart] = EpilogInfo.lookup(MatchingEpilog);
// Clear the unwind codes in the EpilogMap, so that they don't get output // Clear the unwind codes in the EpilogMap, so that they don't get output
// in the logic below. // in the logic below.
EpilogInstrs.clear(); EpilogInstrs.clear();

View File

@ -368,7 +368,13 @@ void WasmObjectWriter::startCustomSection(SectionBookkeeping &Section,
// Now that the section is complete and we know how big it is, patch up the // Now that the section is complete and we know how big it is, patch up the
// section size field at the start of the section. // section size field at the start of the section.
void WasmObjectWriter::endSection(SectionBookkeeping &Section) { void WasmObjectWriter::endSection(SectionBookkeeping &Section) {
uint64_t Size = W.OS.tell() - Section.PayloadOffset; uint64_t Size = W.OS.tell();
// /dev/null doesn't support seek/tell and can report offset of 0.
// Simply skip this patching in that case.
if (!Size)
return;
Size -= Section.PayloadOffset;
if (uint32_t(Size) != Size) if (uint32_t(Size) != Size)
report_fatal_error("section size does not fit in a uint32_t"); report_fatal_error("section size does not fit in a uint32_t");

View File

@ -496,7 +496,7 @@ NewArchiveMember ObjectFactory::createWeakExternal(StringRef Sym,
// COFF Header // COFF Header
coff_file_header Header{ coff_file_header Header{
u16(0), u16(Machine),
u16(NumberOfSections), u16(NumberOfSections),
u32(0), u32(0),
u32(sizeof(Header) + (NumberOfSections * sizeof(coff_section))), u32(sizeof(Header) + (NumberOfSections * sizeof(coff_section))),

View File

@ -239,7 +239,6 @@ def M4WriteNEONK : SchedWriteRes<[M4UnitNSHF,
M4UnitS0]> { let Latency = 5; M4UnitS0]> { let Latency = 5;
let NumMicroOps = 2; } let NumMicroOps = 2; }
def M4WriteNEONL : SchedWriteRes<[M4UnitNMUL]> { let Latency = 3; } def M4WriteNEONL : SchedWriteRes<[M4UnitNMUL]> { let Latency = 3; }
def M4WriteNEONM : SchedWriteRes<[M4UnitNMUL]> { let Latency = 3; }
def M4WriteNEONN : SchedWriteRes<[M4UnitNMSC, def M4WriteNEONN : SchedWriteRes<[M4UnitNMSC,
M4UnitNMSC]> { let Latency = 5; M4UnitNMSC]> { let Latency = 5;
let NumMicroOps = 2; } let NumMicroOps = 2; }
@ -480,8 +479,6 @@ def M4WriteCOPY : SchedWriteVariant<[SchedVar<ExynosFPPred, [M4WriteNALU1]>,
SchedVar<NoSchedPred, [M4WriteZ0]>]>; SchedVar<NoSchedPred, [M4WriteZ0]>]>;
def M4WriteMOVI : SchedWriteVariant<[SchedVar<IsZeroFPIdiomPred, [M4WriteZ0]>, def M4WriteMOVI : SchedWriteVariant<[SchedVar<IsZeroFPIdiomPred, [M4WriteZ0]>,
SchedVar<NoSchedPred, [M4WriteNALU1]>]>; SchedVar<NoSchedPred, [M4WriteNALU1]>]>;
def M4WriteMULL : SchedWriteVariant<[SchedVar<ExynosLongVectorUpperPred, [M4WriteNEONM]>,
SchedVar<NoSchedPred, [M4WriteNMUL3]>]>;
// Fast forwarding. // Fast forwarding.
def M4ReadAESM1 : SchedReadAdvance<+1, [M4WriteNCRY1]>; def M4ReadAESM1 : SchedReadAdvance<+1, [M4WriteNCRY1]>;
@ -489,7 +486,8 @@ def M4ReadFMACM1 : SchedReadAdvance<+1, [M4WriteFMAC4,
M4WriteFMAC4H, M4WriteFMAC4H,
M4WriteFMAC5]>; M4WriteFMAC5]>;
def M4ReadNMULM1 : SchedReadAdvance<+1, [M4WriteNMUL3]>; def M4ReadNMULM1 : SchedReadAdvance<+1, [M4WriteNMUL3]>;
def M4ReadMULLP2 : SchedReadAdvance<-2, [M4WriteNEONM]>; def M4ReadNMULP2 : SchedReadAdvance<-2, [M4WriteNMUL3]>;
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Coarse scheduling model. // Coarse scheduling model.
@ -662,10 +660,8 @@ def : InstRW<[M4WriteNEONK], (instregex "^FMOVDXHighr")>;
def : InstRW<[M4WriteFCVT3H], (instregex "^F(RECP|RSQRT)Ev1f16")>; def : InstRW<[M4WriteFCVT3H], (instregex "^F(RECP|RSQRT)Ev1f16")>;
def : InstRW<[M4WriteFCVT3], (instregex "^F(RECP|RSQRT)Ev1i(32|64)")>; def : InstRW<[M4WriteFCVT3], (instregex "^F(RECP|RSQRT)Ev1i(32|64)")>;
def : InstRW<[M4WriteNMSC1], (instregex "^FRECPXv1")>; def : InstRW<[M4WriteNMSC1], (instregex "^FRECPXv1")>;
def : InstRW<[M4WriteFMAC4H, def : InstRW<[M4WriteFMAC4H], (instregex "^F(RECP|RSQRT)S16")>;
M4ReadFMACM1], (instregex "^F(RECP|RSQRT)S16")>; def : InstRW<[M4WriteFMAC4], (instregex "^F(RECP|RSQRT)S(32|64)")>;
def : InstRW<[M4WriteFMAC4,
M4ReadFMACM1], (instregex "^F(RECP|RSQRT)S(32|64)")>;
// FP load instructions. // FP load instructions.
def : InstRW<[WriteVLD], (instregex "^LDR[SDQ]l")>; def : InstRW<[WriteVLD], (instregex "^LDR[SDQ]l")>;
@ -736,14 +732,20 @@ def : InstRW<[M4WriteNALU1], (instregex "^(AND|BIC|EOR|NOT|ORN|ORR)v")>;
def : InstRW<[M4WriteNMSC1], (instregex "^[SU](MIN|MAX)v")>; def : InstRW<[M4WriteNMSC1], (instregex "^[SU](MIN|MAX)v")>;
def : InstRW<[M4WriteNMSC2], (instregex "^[SU](MIN|MAX)Pv")>; def : InstRW<[M4WriteNMSC2], (instregex "^[SU](MIN|MAX)Pv")>;
def : InstRW<[M4WriteNHAD3], (instregex "^[SU](MIN|MAX)Vv")>; def : InstRW<[M4WriteNHAD3], (instregex "^[SU](MIN|MAX)Vv")>;
def : InstRW<[M4WriteNMUL3], (instregex "^(SQR?D)?MULH?v")>;
def : InstRW<[M4WriteNMUL3, def : InstRW<[M4WriteNMUL3,
M4ReadNMULM1], (instregex "^ML[AS]v")>; M4ReadNMULM1], (instregex "^ML[AS]v")>;
def : InstRW<[M4WriteNMUL3], (instregex "^SQRDML[AS]H")>; def : InstRW<[M4WriteNMUL3,
def : InstRW<[M4WriteMULL, M4ReadNMULM1], (instregex "^(SQR?D)?MULH?v")>;
M4ReadMULLP2], (instregex "^(S|U|SQD)ML[AS]Lv")>; def : InstRW<[M4WriteNMUL3,
def : InstRW<[M4WriteMULL, M4ReadNMULM1], (instregex "^SQRDML[AS]H")>;
M4ReadMULLP2], (instregex "^(S|U|SQD)MULLv")>; def : InstRW<[M4WriteNMUL3,
M4ReadNMULM1], (instregex "^(S|U|SQD)ML[AS]L(v1(i32|i64)|v2i32|v4i16|v8i8)")>;
def : InstRW<[M4WriteNMUL3,
M4ReadNMULP2], (instregex "^(S|U|SQD)ML[AS]L(v4i32|v8i16|v16i8)")>;
def : InstRW<[M4WriteNMUL3,
M4ReadNMULM1], (instregex "^(S|U|SQD)MULL(v1(i32|i64)|v2i32|v4i16|v8i8)")>;
def : InstRW<[M4WriteNMUL3,
M4ReadNMULP2], (instregex "^(S|U|SQD)MULL(v4i32|v8i16|v16i8)")>;
def : InstRW<[M4WriteNMUL3], (instregex "^[SU]DOT(lane)?v")>; def : InstRW<[M4WriteNMUL3], (instregex "^[SU]DOT(lane)?v")>;
def : InstRW<[M4WriteNHAD3], (instregex "^[SU]ADALPv")>; def : InstRW<[M4WriteNHAD3], (instregex "^[SU]ADALPv")>;
def : InstRW<[M4WriteNSHT4A], (instregex "^[SU]R?SRA[dv]")>; def : InstRW<[M4WriteNSHT4A], (instregex "^[SU]R?SRA[dv]")>;
@ -808,10 +810,8 @@ def : InstRW<[M4WriteNALU1], (instregex "^FMOVv.f(32|64)")>;
def : InstRW<[M4WriteFCVT3H], (instregex "^F(RECP|RSQRT)Ev[248]f16")>; def : InstRW<[M4WriteFCVT3H], (instregex "^F(RECP|RSQRT)Ev[248]f16")>;
def : InstRW<[M4WriteFCVT3], (instregex "^F(RECP|RSQRT)Ev[248]f(32|64)")>; def : InstRW<[M4WriteFCVT3], (instregex "^F(RECP|RSQRT)Ev[248]f(32|64)")>;
def : InstRW<[M4WriteFCVT3], (instregex "^U(RECP|RSQRT)Ev[24]i32")>; def : InstRW<[M4WriteFCVT3], (instregex "^U(RECP|RSQRT)Ev[24]i32")>;
def : InstRW<[M4WriteFMAC4H, def : InstRW<[M4WriteFMAC4H], (instregex "^F(RECP|RSQRT)Sv.f16")>;
M4ReadFMACM1], (instregex "^F(RECP|RSQRT)Sv.f16")>; def : InstRW<[M4WriteFMAC4], (instregex "^F(RECP|RSQRT)Sv.f(32|64)")>;
def : InstRW<[M4WriteFMAC4,
M4ReadFMACM1], (instregex "^F(RECP|RSQRT)Sv.f(32|64)")>;
def : InstRW<[M4WriteNSHF1], (instregex "^REV(16|32|64)v")>; def : InstRW<[M4WriteNSHF1], (instregex "^REV(16|32|64)v")>;
def : InstRW<[M4WriteNSHFA], (instregex "^TB[LX]v(8|16)i8One")>; def : InstRW<[M4WriteNSHFA], (instregex "^TB[LX]v(8|16)i8One")>;
def : InstRW<[M4WriteNSHFB], (instregex "^TB[LX]v(8|16)i8Two")>; def : InstRW<[M4WriteNSHFB], (instregex "^TB[LX]v(8|16)i8Two")>;

View File

@ -103,17 +103,6 @@ def ExynosScaledIdxPred : MCSchedPredicate<ExynosScaledIdxFn>;
// Identify FP instructions. // Identify FP instructions.
def ExynosFPPred : MCSchedPredicate<CheckAny<[CheckDForm, CheckQForm]>>; def ExynosFPPred : MCSchedPredicate<CheckAny<[CheckDForm, CheckQForm]>>;
// Identify whether an instruction whose result is a long vector
// operates on the upper half of the input registers.
def ExynosLongVectorUpperFn : TIIPredicate<
"isExynosLongVectorUpper",
MCOpcodeSwitchStatement<
[MCOpcodeSwitchCase<
IsLongVectorUpperOp.ValidOpcodes,
MCReturnStatement<TruePred>>],
MCReturnStatement<FalsePred>>>;
def ExynosLongVectorUpperPred : MCSchedPredicate<ExynosLongVectorUpperFn>;
// Identify 128-bit NEON instructions. // Identify 128-bit NEON instructions.
def ExynosQFormPred : MCSchedPredicate<CheckQForm>; def ExynosQFormPred : MCSchedPredicate<CheckQForm>;

View File

@ -268,59 +268,6 @@ def IsStoreRegOffsetOp : CheckOpcode<[STRBBroW, STRBBroX,
def IsLoadStoreRegOffsetOp : CheckOpcode<!listconcat(IsLoadRegOffsetOp.ValidOpcodes, def IsLoadStoreRegOffsetOp : CheckOpcode<!listconcat(IsLoadRegOffsetOp.ValidOpcodes,
IsStoreRegOffsetOp.ValidOpcodes)>; IsStoreRegOffsetOp.ValidOpcodes)>;
// Identify whether an instruction whose result is a long vector
// operates on the upper half of the input registers.
def IsLongVectorUpperOp : CheckOpcode<[FCVTLv8i16, FCVTLv4i32,
FCVTNv8i16, FCVTNv4i32,
FCVTXNv4f32,
PMULLv16i8, PMULLv2i64,
RADDHNv8i16_v16i8, RADDHNv4i32_v8i16, RADDHNv2i64_v4i32,
RSHRNv16i8_shift, RSHRNv8i16_shift, RSHRNv4i32_shift,
RSUBHNv8i16_v16i8, RSUBHNv4i32_v8i16, RSUBHNv2i64_v4i32,
SABALv16i8_v8i16, SABALv8i16_v4i32, SABALv4i32_v2i64,
SABDLv16i8_v8i16, SABDLv8i16_v4i32, SABDLv4i32_v2i64,
SADDLv16i8_v8i16, SADDLv8i16_v4i32, SADDLv4i32_v2i64,
SADDWv16i8_v8i16, SADDWv8i16_v4i32, SADDWv4i32_v2i64,
SHLLv16i8, SHLLv8i16, SHLLv4i32,
SHRNv16i8_shift, SHRNv8i16_shift, SHRNv4i32_shift,
SMLALv16i8_v8i16, SMLALv8i16_v4i32, SMLALv4i32_v2i64,
SMLALv8i16_indexed, SMLALv4i32_indexed,
SMLSLv16i8_v8i16, SMLSLv8i16_v4i32, SMLSLv4i32_v2i64,
SMLSLv8i16_indexed, SMLSLv4i32_indexed,
SMULLv16i8_v8i16, SMULLv8i16_v4i32, SMULLv4i32_v2i64,
SMULLv8i16_indexed, SMULLv4i32_indexed,
SQDMLALv8i16_v4i32, SQDMLALv4i32_v2i64,
SQDMLALv8i16_indexed, SQDMLALv4i32_indexed,
SQDMLSLv8i16_v4i32, SQDMLSLv4i32_v2i64,
SQDMLSLv8i16_indexed, SQDMLSLv4i32_indexed,
SQDMULLv8i16_v4i32, SQDMULLv4i32_v2i64,
SQDMULLv8i16_indexed, SQDMULLv4i32_indexed,
SQRSHRNv16i8_shift, SQRSHRNv8i16_shift, SQRSHRNv4i32_shift,
SQRSHRUNv16i8_shift, SQRSHRUNv8i16_shift, SQRSHRUNv4i32_shift,
SQSHRNv16i8_shift, SQSHRNv8i16_shift, SQSHRNv4i32_shift,
SQSHRUNv16i8_shift, SQSHRUNv8i16_shift, SQSHRUNv4i32_shift,
SQXTNv16i8, SQXTNv8i16, SQXTNv4i32,
SQXTUNv16i8, SQXTUNv8i16, SQXTUNv4i32,
SSHLLv16i8_shift, SSHLLv8i16_shift, SSHLLv4i32_shift,
SSUBLv16i8_v8i16, SSUBLv8i16_v4i32, SSUBLv4i32_v2i64,
SSUBWv16i8_v8i16, SSUBWv8i16_v4i32, SSUBWv4i32_v2i64,
UABALv16i8_v8i16, UABALv8i16_v4i32, UABALv4i32_v2i64,
UABDLv16i8_v8i16, UABDLv8i16_v4i32, UABDLv4i32_v2i64,
UADDLv16i8_v8i16, UADDLv8i16_v4i32, UADDLv4i32_v2i64,
UADDWv16i8_v8i16, UADDWv8i16_v4i32, UADDWv4i32_v2i64,
UMLALv16i8_v8i16, UMLALv8i16_v4i32, UMLALv4i32_v2i64,
UMLALv8i16_indexed, UMLALv4i32_indexed,
UMLSLv16i8_v8i16, UMLSLv8i16_v4i32, UMLSLv4i32_v2i64,
UMLSLv8i16_indexed, UMLSLv4i32_indexed,
UMULLv16i8_v8i16, UMULLv8i16_v4i32, UMULLv4i32_v2i64,
UMULLv8i16_indexed, UMULLv4i32_indexed,
UQSHRNv16i8_shift, UQSHRNv8i16_shift, UQSHRNv4i32_shift,
UQXTNv16i8, UQXTNv8i16, UQXTNv4i32,
USHLLv16i8_shift, USHLLv8i16_shift, USHLLv4i32_shift,
USUBLv16i8_v8i16, USUBLv8i16_v4i32, USUBLv4i32_v2i64,
USUBWv16i8_v8i16, USUBWv8i16_v4i32, USUBWv4i32_v2i64,
XTNv16i8, XTNv8i16, XTNv4i32]>;
// Target predicates. // Target predicates.
// Identify an instruction that effectively transfers a register to another. // Identify an instruction that effectively transfers a register to another.

View File

@ -201,49 +201,55 @@ static bool updateOperand(FoldCandidate &Fold,
Mod.setImm(Mod.getImm() & ~SISrcMods::OP_SEL_1); Mod.setImm(Mod.getImm() & ~SISrcMods::OP_SEL_1);
} }
} }
}
if (Fold.needsShrink()) { if ((Fold.isImm() || Fold.isFI()) && Fold.needsShrink()) {
MachineBasicBlock *MBB = MI->getParent(); MachineBasicBlock *MBB = MI->getParent();
auto Liveness = MBB->computeRegisterLiveness(&TRI, AMDGPU::VCC, MI); auto Liveness = MBB->computeRegisterLiveness(&TRI, AMDGPU::VCC, MI);
if (Liveness != MachineBasicBlock::LQR_Dead) if (Liveness != MachineBasicBlock::LQR_Dead)
return false; return false;
MachineRegisterInfo &MRI = MBB->getParent()->getRegInfo(); MachineRegisterInfo &MRI = MBB->getParent()->getRegInfo();
int Op32 = Fold.getShrinkOpcode(); int Op32 = Fold.getShrinkOpcode();
MachineOperand &Dst0 = MI->getOperand(0); MachineOperand &Dst0 = MI->getOperand(0);
MachineOperand &Dst1 = MI->getOperand(1); MachineOperand &Dst1 = MI->getOperand(1);
assert(Dst0.isDef() && Dst1.isDef()); assert(Dst0.isDef() && Dst1.isDef());
bool HaveNonDbgCarryUse = !MRI.use_nodbg_empty(Dst1.getReg()); bool HaveNonDbgCarryUse = !MRI.use_nodbg_empty(Dst1.getReg());
const TargetRegisterClass *Dst0RC = MRI.getRegClass(Dst0.getReg()); const TargetRegisterClass *Dst0RC = MRI.getRegClass(Dst0.getReg());
unsigned NewReg0 = MRI.createVirtualRegister(Dst0RC); unsigned NewReg0 = MRI.createVirtualRegister(Dst0RC);
const TargetRegisterClass *Dst1RC = MRI.getRegClass(Dst1.getReg());
unsigned NewReg1 = MRI.createVirtualRegister(Dst1RC);
MachineInstr *Inst32 = TII.buildShrunkInst(*MI, Op32); MachineInstr *Inst32 = TII.buildShrunkInst(*MI, Op32);
if (HaveNonDbgCarryUse) { if (HaveNonDbgCarryUse) {
BuildMI(*MBB, MI, MI->getDebugLoc(), TII.get(AMDGPU::COPY), Dst1.getReg()) BuildMI(*MBB, MI, MI->getDebugLoc(), TII.get(AMDGPU::COPY), Dst1.getReg())
.addReg(AMDGPU::VCC, RegState::Kill); .addReg(AMDGPU::VCC, RegState::Kill);
}
// Keep the old instruction around to avoid breaking iterators, but
// replace the outputs with dummy registers.
Dst0.setReg(NewReg0);
Dst1.setReg(NewReg1);
if (Fold.isCommuted())
TII.commuteInstruction(*Inst32, false);
return true;
} }
Old.ChangeToImmediate(Fold.ImmToFold); // Keep the old instruction around to avoid breaking iterators, but
// replace it with a dummy instruction to remove uses.
//
// FIXME: We should not invert how this pass looks at operands to avoid
// this. Should track set of foldable movs instead of looking for uses
// when looking at a use.
Dst0.setReg(NewReg0);
for (unsigned I = MI->getNumOperands() - 1; I > 0; --I)
MI->RemoveOperand(I);
MI->setDesc(TII.get(AMDGPU::IMPLICIT_DEF));
if (Fold.isCommuted())
TII.commuteInstruction(*Inst32, false);
return true; return true;
} }
assert(!Fold.needsShrink() && "not handled"); assert(!Fold.needsShrink() && "not handled");
if (Fold.isImm()) {
Old.ChangeToImmediate(Fold.ImmToFold);
return true;
}
if (Fold.isFI()) { if (Fold.isFI()) {
Old.ChangeToFrameIndex(Fold.FrameIndexToFold); Old.ChangeToFrameIndex(Fold.FrameIndexToFold);
return true; return true;
@ -344,7 +350,7 @@ static bool tryAddToFoldList(SmallVectorImpl<FoldCandidate> &FoldList,
if ((Opc == AMDGPU::V_ADD_I32_e64 || if ((Opc == AMDGPU::V_ADD_I32_e64 ||
Opc == AMDGPU::V_SUB_I32_e64 || Opc == AMDGPU::V_SUB_I32_e64 ||
Opc == AMDGPU::V_SUBREV_I32_e64) && // FIXME Opc == AMDGPU::V_SUBREV_I32_e64) && // FIXME
OpToFold->isImm()) { (OpToFold->isImm() || OpToFold->isFI())) {
MachineRegisterInfo &MRI = MI->getParent()->getParent()->getRegInfo(); MachineRegisterInfo &MRI = MI->getParent()->getParent()->getRegInfo();
// Verify the other operand is a VGPR, otherwise we would violate the // Verify the other operand is a VGPR, otherwise we would violate the
@ -357,7 +363,10 @@ static bool tryAddToFoldList(SmallVectorImpl<FoldCandidate> &FoldList,
assert(MI->getOperand(1).isDef()); assert(MI->getOperand(1).isDef());
int Op32 = AMDGPU::getVOPe32(Opc); // Make sure to get the 32-bit version of the commuted opcode.
unsigned MaybeCommutedOpc = MI->getOpcode();
int Op32 = AMDGPU::getVOPe32(MaybeCommutedOpc);
FoldList.push_back(FoldCandidate(MI, CommuteOpNo, OpToFold, true, FoldList.push_back(FoldCandidate(MI, CommuteOpNo, OpToFold, true,
Op32)); Op32));
return true; return true;

View File

@ -515,18 +515,12 @@ let AddedComplexity = 1 in {
} }
let SubtargetPredicate = HasAddNoCarryInsts in { let SubtargetPredicate = HasAddNoCarryInsts in {
def : DivergentBinOp<add, V_ADD_U32_e32>; def : DivergentBinOp<add, V_ADD_U32_e64>;
def : DivergentBinOp<sub, V_SUB_U32_e32>; def : DivergentBinOp<sub, V_SUB_U32_e64>;
def : DivergentBinOp<sub, V_SUBREV_U32_e32>;
} }
def : DivergentBinOp<add, V_ADD_I32_e32>;
def : DivergentBinOp<add, V_ADD_I32_e64>; def : DivergentBinOp<add, V_ADD_I32_e64>;
def : DivergentBinOp<sub, V_SUB_I32_e32>; def : DivergentBinOp<sub, V_SUB_I32_e64>;
def : DivergentBinOp<sub, V_SUBREV_I32_e32>;
def : DivergentBinOp<srl, V_LSHRREV_B32_e32>; def : DivergentBinOp<srl, V_LSHRREV_B32_e32>;
def : DivergentBinOp<sra, V_ASHRREV_I32_e32>; def : DivergentBinOp<sra, V_ASHRREV_I32_e32>;

View File

@ -26,19 +26,21 @@
#include "AVR.h" #include "AVR.h"
#include "AVRMachineFunctionInfo.h" #include "AVRMachineFunctionInfo.h"
#include "AVRSubtarget.h"
#include "AVRTargetMachine.h" #include "AVRTargetMachine.h"
#include "MCTargetDesc/AVRMCTargetDesc.h" #include "MCTargetDesc/AVRMCTargetDesc.h"
namespace llvm { namespace llvm {
AVRTargetLowering::AVRTargetLowering(AVRTargetMachine &tm) AVRTargetLowering::AVRTargetLowering(const AVRTargetMachine &TM,
: TargetLowering(tm) { const AVRSubtarget &STI)
: TargetLowering(TM), Subtarget(STI) {
// Set up the register classes. // Set up the register classes.
addRegisterClass(MVT::i8, &AVR::GPR8RegClass); addRegisterClass(MVT::i8, &AVR::GPR8RegClass);
addRegisterClass(MVT::i16, &AVR::DREGSRegClass); addRegisterClass(MVT::i16, &AVR::DREGSRegClass);
// Compute derived properties from the register classes. // Compute derived properties from the register classes.
computeRegisterProperties(tm.getSubtargetImpl()->getRegisterInfo()); computeRegisterProperties(Subtarget.getRegisterInfo());
setBooleanContents(ZeroOrOneBooleanContent); setBooleanContents(ZeroOrOneBooleanContent);
setBooleanVectorContents(ZeroOrOneBooleanContent); setBooleanVectorContents(ZeroOrOneBooleanContent);
@ -163,6 +165,13 @@ AVRTargetLowering::AVRTargetLowering(AVRTargetMachine &tm)
setOperationAction(ISD::SMUL_LOHI, MVT::i16, Expand); setOperationAction(ISD::SMUL_LOHI, MVT::i16, Expand);
setOperationAction(ISD::UMUL_LOHI, MVT::i16, Expand); setOperationAction(ISD::UMUL_LOHI, MVT::i16, Expand);
// Expand multiplications to libcalls when there is
// no hardware MUL.
if (!Subtarget.supportsMultiplication()) {
setOperationAction(ISD::SMUL_LOHI, MVT::i8, Expand);
setOperationAction(ISD::UMUL_LOHI, MVT::i8, Expand);
}
for (MVT VT : MVT::integer_valuetypes()) { for (MVT VT : MVT::integer_valuetypes()) {
setOperationAction(ISD::MULHS, VT, Expand); setOperationAction(ISD::MULHS, VT, Expand);
setOperationAction(ISD::MULHU, VT, Expand); setOperationAction(ISD::MULHU, VT, Expand);
@ -1271,7 +1280,7 @@ SDValue AVRTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
// Add a register mask operand representing the call-preserved registers. // Add a register mask operand representing the call-preserved registers.
const AVRTargetMachine &TM = (const AVRTargetMachine &)getTargetMachine(); const AVRTargetMachine &TM = (const AVRTargetMachine &)getTargetMachine();
const TargetRegisterInfo *TRI = TM.getSubtargetImpl()->getRegisterInfo(); const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
const uint32_t *Mask = const uint32_t *Mask =
TRI->getCallPreservedMask(DAG.getMachineFunction(), CallConv); TRI->getCallPreservedMask(DAG.getMachineFunction(), CallConv);
assert(Mask && "Missing call preserved mask for calling convention"); assert(Mask && "Missing call preserved mask for calling convention");
@ -1434,7 +1443,7 @@ MachineBasicBlock *AVRTargetLowering::insertShift(MachineInstr &MI,
MachineFunction *F = BB->getParent(); MachineFunction *F = BB->getParent();
MachineRegisterInfo &RI = F->getRegInfo(); MachineRegisterInfo &RI = F->getRegInfo();
const AVRTargetMachine &TM = (const AVRTargetMachine &)getTargetMachine(); const AVRTargetMachine &TM = (const AVRTargetMachine &)getTargetMachine();
const TargetInstrInfo &TII = *TM.getSubtargetImpl()->getInstrInfo(); const TargetInstrInfo &TII = *Subtarget.getInstrInfo();
DebugLoc dl = MI.getDebugLoc(); DebugLoc dl = MI.getDebugLoc();
switch (MI.getOpcode()) { switch (MI.getOpcode()) {
@ -1575,7 +1584,7 @@ static bool isCopyMulResult(MachineBasicBlock::iterator const &I) {
MachineBasicBlock *AVRTargetLowering::insertMul(MachineInstr &MI, MachineBasicBlock *AVRTargetLowering::insertMul(MachineInstr &MI,
MachineBasicBlock *BB) const { MachineBasicBlock *BB) const {
const AVRTargetMachine &TM = (const AVRTargetMachine &)getTargetMachine(); const AVRTargetMachine &TM = (const AVRTargetMachine &)getTargetMachine();
const TargetInstrInfo &TII = *TM.getSubtargetImpl()->getInstrInfo(); const TargetInstrInfo &TII = *Subtarget.getInstrInfo();
MachineBasicBlock::iterator I(MI); MachineBasicBlock::iterator I(MI);
++I; // in any case insert *after* the mul instruction ++I; // in any case insert *after* the mul instruction
if (isCopyMulResult(I)) if (isCopyMulResult(I))
@ -1838,9 +1847,6 @@ std::pair<unsigned, const TargetRegisterClass *>
AVRTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI, AVRTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
StringRef Constraint, StringRef Constraint,
MVT VT) const { MVT VT) const {
auto STI = static_cast<const AVRTargetMachine &>(this->getTargetMachine())
.getSubtargetImpl();
// We only support i8 and i16. // We only support i8 and i16.
// //
//:FIXME: remove this assert for now since it gets sometimes executed //:FIXME: remove this assert for now since it gets sometimes executed
@ -1884,8 +1890,8 @@ AVRTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
} }
} }
return TargetLowering::getRegForInlineAsmConstraint(STI->getRegisterInfo(), return TargetLowering::getRegForInlineAsmConstraint(
Constraint, VT); Subtarget.getRegisterInfo(), Constraint, VT);
} }
void AVRTargetLowering::LowerAsmOperandForConstraint(SDValue Op, void AVRTargetLowering::LowerAsmOperandForConstraint(SDValue Op,

View File

@ -64,12 +64,14 @@ enum NodeType {
} // end of namespace AVRISD } // end of namespace AVRISD
class AVRSubtarget;
class AVRTargetMachine; class AVRTargetMachine;
/// Performs target lowering for the AVR. /// Performs target lowering for the AVR.
class AVRTargetLowering : public TargetLowering { class AVRTargetLowering : public TargetLowering {
public: public:
explicit AVRTargetLowering(AVRTargetMachine &TM); explicit AVRTargetLowering(const AVRTargetMachine &TM,
const AVRSubtarget &STI);
public: public:
MVT getScalarShiftAmountTy(const DataLayout &, EVT LHSTy) const override { MVT getScalarShiftAmountTy(const DataLayout &, EVT LHSTy) const override {
@ -164,6 +166,10 @@ class AVRTargetLowering : public TargetLowering {
const SDLoc &dl, SelectionDAG &DAG, const SDLoc &dl, SelectionDAG &DAG,
SmallVectorImpl<SDValue> &InVals) const; SmallVectorImpl<SDValue> &InVals) const;
protected:
const AVRSubtarget &Subtarget;
private: private:
MachineBasicBlock *insertShift(MachineInstr &MI, MachineBasicBlock *BB) const; MachineBasicBlock *insertShift(MachineInstr &MI, MachineBasicBlock *BB) const;
MachineBasicBlock *insertMul(MachineInstr &MI, MachineBasicBlock *BB) const; MachineBasicBlock *insertMul(MachineInstr &MI, MachineBasicBlock *BB) const;

View File

@ -29,9 +29,9 @@
namespace llvm { namespace llvm {
AVRSubtarget::AVRSubtarget(const Triple &TT, const std::string &CPU, AVRSubtarget::AVRSubtarget(const Triple &TT, const std::string &CPU,
const std::string &FS, AVRTargetMachine &TM) const std::string &FS, const AVRTargetMachine &TM)
: AVRGenSubtargetInfo(TT, CPU, FS), InstrInfo(), FrameLowering(), : AVRGenSubtargetInfo(TT, CPU, FS), InstrInfo(), FrameLowering(),
TLInfo(TM), TSInfo(), TLInfo(TM, initializeSubtargetDependencies(CPU, FS, TM)), TSInfo(),
// Subtarget features // Subtarget features
m_hasSRAM(false), m_hasJMPCALL(false), m_hasIJMPCALL(false), m_hasSRAM(false), m_hasJMPCALL(false), m_hasIJMPCALL(false),
@ -44,4 +44,12 @@ AVRSubtarget::AVRSubtarget(const Triple &TT, const std::string &CPU,
ParseSubtargetFeatures(CPU, FS); ParseSubtargetFeatures(CPU, FS);
} }
AVRSubtarget &
AVRSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS,
const TargetMachine &TM) {
// Parse features string.
ParseSubtargetFeatures(CPU, FS);
return *this;
}
} // end of namespace llvm } // end of namespace llvm

View File

@ -37,7 +37,7 @@ class AVRSubtarget : public AVRGenSubtargetInfo {
//! \param FS The feature string. //! \param FS The feature string.
//! \param TM The target machine. //! \param TM The target machine.
AVRSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, AVRSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS,
AVRTargetMachine &TM); const AVRTargetMachine &TM);
const AVRInstrInfo *getInstrInfo() const override { return &InstrInfo; } const AVRInstrInfo *getInstrInfo() const override { return &InstrInfo; }
const TargetFrameLowering *getFrameLowering() const override { return &FrameLowering; } const TargetFrameLowering *getFrameLowering() const override { return &FrameLowering; }
@ -49,6 +49,9 @@ class AVRSubtarget : public AVRGenSubtargetInfo {
/// \note Definition of function is auto generated by `tblgen`. /// \note Definition of function is auto generated by `tblgen`.
void ParseSubtargetFeatures(StringRef CPU, StringRef FS); void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
AVRSubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS,
const TargetMachine &TM);
// Subtarget feature getters. // Subtarget feature getters.
// See AVR.td for details. // See AVR.td for details.
bool hasSRAM() const { return m_hasSRAM; } bool hasSRAM() const { return m_hasSRAM; }

View File

@ -700,8 +700,11 @@ void MipsTargetAsmStreamer::emitDirectiveCpreturn(unsigned SaveLocation,
} }
void MipsTargetAsmStreamer::emitDirectiveModuleFP() { void MipsTargetAsmStreamer::emitDirectiveModuleFP() {
OS << "\t.module\tfp="; MipsABIFlagsSection::FpABIKind FpABI = ABIFlagsSection.getFpABI();
OS << ABIFlagsSection.getFpABIString(ABIFlagsSection.getFpABI()) << "\n"; if (FpABI == MipsABIFlagsSection::FpABIKind::SOFT)
OS << "\t.module\tsoftfloat\n";
else
OS << "\t.module\tfp=" << ABIFlagsSection.getFpABIString(FpABI) << "\n";
} }
void MipsTargetAsmStreamer::emitDirectiveSetFp( void MipsTargetAsmStreamer::emitDirectiveSetFp(

View File

@ -1040,7 +1040,7 @@ class TRUNC_L_D_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"trunc.l.d", FGR64Opnd,
class TRUNC_W_S_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"trunc.w.s", FGR32Opnd, class TRUNC_W_S_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"trunc.w.s", FGR32Opnd,
FGR32Opnd, II_TRUNC>; FGR32Opnd, II_TRUNC>;
class TRUNC_W_D_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"trunc.w.d", FGR32Opnd, class TRUNC_W_D_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"trunc.w.d", FGR32Opnd,
AFGR64Opnd, II_TRUNC>; FGR64Opnd, II_TRUNC>;
class SQRT_S_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"sqrt.s", FGR32Opnd, FGR32Opnd, class SQRT_S_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"sqrt.s", FGR32Opnd, FGR32Opnd,
II_SQRT_S, fsqrt>; II_SQRT_S, fsqrt>;
class SQRT_D_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"sqrt.d", AFGR64Opnd, AFGR64Opnd, class SQRT_D_MMR6_DESC : ABSS_FT_MMR6_DESC_BASE<"sqrt.d", AFGR64Opnd, AFGR64Opnd,
@ -1750,6 +1750,8 @@ def : MipsPat<(f32 fpimm0), (MTC1_MMR6 ZERO)>, ISA_MICROMIPS32R6;
def : MipsPat<(f32 fpimm0neg), (FNEG_S_MMR6 (MTC1_MMR6 ZERO))>, ISA_MICROMIPS32R6; def : MipsPat<(f32 fpimm0neg), (FNEG_S_MMR6 (MTC1_MMR6 ZERO))>, ISA_MICROMIPS32R6;
def : MipsPat<(MipsTruncIntFP FGR64Opnd:$src), def : MipsPat<(MipsTruncIntFP FGR64Opnd:$src),
(TRUNC_W_D_MMR6 FGR64Opnd:$src)>, ISA_MICROMIPS32R6; (TRUNC_W_D_MMR6 FGR64Opnd:$src)>, ISA_MICROMIPS32R6;
def : MipsPat<(MipsTruncIntFP FGR32Opnd:$src),
(TRUNC_W_S_MMR6 FGR32Opnd:$src)>, ISA_MICROMIPS32R6;
def : MipsPat<(and GPRMM16:$src, immZExtAndi16:$imm), def : MipsPat<(and GPRMM16:$src, immZExtAndi16:$imm),
(ANDI16_MMR6 GPRMM16:$src, immZExtAndi16:$imm)>, (ANDI16_MMR6 GPRMM16:$src, immZExtAndi16:$imm)>,

View File

@ -425,6 +425,11 @@ def : MipsPat<(f64 (fpextend FGR32Opnd:$src)),
def : MipsPat<(MipsTruncIntFP AFGR64Opnd:$src), def : MipsPat<(MipsTruncIntFP AFGR64Opnd:$src),
(TRUNC_W_MM AFGR64Opnd:$src)>, ISA_MICROMIPS32_NOT_MIPS32R6, (TRUNC_W_MM AFGR64Opnd:$src)>, ISA_MICROMIPS32_NOT_MIPS32R6,
FGR_32; FGR_32;
def : MipsPat<(MipsTruncIntFP FGR64Opnd:$src),
(CVT_W_D64_MM FGR64Opnd:$src)>, ISA_MICROMIPS32_NOT_MIPS32R6,
FGR_64;
def : MipsPat<(MipsTruncIntFP FGR32Opnd:$src),
(TRUNC_W_S_MM FGR32Opnd:$src)>, ISA_MICROMIPS32_NOT_MIPS32R6;
// Selects // Selects
defm : MovzPats0<GPR32, FGR32, MOVZ_I_S_MM, SLT_MM, SLTu_MM, SLTi_MM, SLTiu_MM>, defm : MovzPats0<GPR32, FGR32, MOVZ_I_S_MM, SLT_MM, SLTu_MM, SLTi_MM, SLTiu_MM>,

View File

@ -813,7 +813,8 @@ void MipsAsmPrinter::EmitStartOfAsmFile(Module &M) {
// We should always emit a '.module fp=...' but binutils 2.24 does not accept // We should always emit a '.module fp=...' but binutils 2.24 does not accept
// it. We therefore emit it when it contradicts the ABI defaults (-mfpxx or // it. We therefore emit it when it contradicts the ABI defaults (-mfpxx or
// -mfp64) and omit it otherwise. // -mfp64) and omit it otherwise.
if (ABI.IsO32() && (STI.isABI_FPXX() || STI.isFP64bit())) if ((ABI.IsO32() && (STI.isABI_FPXX() || STI.isFP64bit())) ||
STI.useSoftFloat())
TS.emitDirectiveModuleFP(); TS.emitDirectiveModuleFP();
// We should always emit a '.module [no]oddspreg' but binutils 2.24 does not // We should always emit a '.module [no]oddspreg' but binutils 2.24 does not

View File

@ -1314,7 +1314,9 @@ def PseudoCMPU_LE_QB : PseudoCMP<CMPU_LE_QB>;
def PseudoPICK_PH : PseudoPICK<PICK_PH>; def PseudoPICK_PH : PseudoPICK<PICK_PH>;
def PseudoPICK_QB : PseudoPICK<PICK_QB>; def PseudoPICK_QB : PseudoPICK<PICK_QB>;
def PseudoMTLOHI_DSP : PseudoMTLOHI<ACC64DSP, GPR32>; let AdditionalPredicates = [HasDSP] in {
def PseudoMTLOHI_DSP : PseudoMTLOHI<ACC64DSP, GPR32>;
}
// Patterns. // Patterns.
class DSPPat<dag pattern, dag result, Predicate pred = HasDSP> : class DSPPat<dag pattern, dag result, Predicate pred = HasDSP> :

View File

@ -726,6 +726,7 @@ bool MipsDelaySlotFiller::searchRange(MachineBasicBlock &MBB, IterTy Begin,
// but we don't have enough information to make that decision. // but we don't have enough information to make that decision.
if (InMicroMipsMode && TII->getInstSizeInBytes(*CurrI) == 2 && if (InMicroMipsMode && TII->getInstSizeInBytes(*CurrI) == 2 &&
(Opcode == Mips::JR || Opcode == Mips::PseudoIndirectBranch || (Opcode == Mips::JR || Opcode == Mips::PseudoIndirectBranch ||
Opcode == Mips::PseudoIndirectBranch_MM ||
Opcode == Mips::PseudoReturn || Opcode == Mips::TAILCALL)) Opcode == Mips::PseudoReturn || Opcode == Mips::TAILCALL))
continue; continue;
// Instructions LWP/SWP and MOVEP should not be in a delay slot as that // Instructions LWP/SWP and MOVEP should not be in a delay slot as that

View File

@ -954,21 +954,34 @@ bool MipsFastISel::selectBranch(const Instruction *I) {
// //
MachineBasicBlock *TBB = FuncInfo.MBBMap[BI->getSuccessor(0)]; MachineBasicBlock *TBB = FuncInfo.MBBMap[BI->getSuccessor(0)];
MachineBasicBlock *FBB = FuncInfo.MBBMap[BI->getSuccessor(1)]; MachineBasicBlock *FBB = FuncInfo.MBBMap[BI->getSuccessor(1)];
// For now, just try the simplest case where it's fed by a compare.
// Fold the common case of a conditional branch with a comparison
// in the same block.
unsigned ZExtCondReg = 0;
if (const CmpInst *CI = dyn_cast<CmpInst>(BI->getCondition())) { if (const CmpInst *CI = dyn_cast<CmpInst>(BI->getCondition())) {
MVT CIMVT = if (CI->hasOneUse() && CI->getParent() == I->getParent()) {
TLI.getValueType(DL, CI->getOperand(0)->getType(), true).getSimpleVT(); ZExtCondReg = createResultReg(&Mips::GPR32RegClass);
if (CIMVT == MVT::i1) if (!emitCmp(ZExtCondReg, CI))
return false;
}
}
// For the general case, we need to mask with 1.
if (ZExtCondReg == 0) {
unsigned CondReg = getRegForValue(BI->getCondition());
if (CondReg == 0)
return false; return false;
unsigned CondReg = getRegForValue(CI); ZExtCondReg = emitIntExt(MVT::i1, CondReg, MVT::i32, true);
BuildMI(*BrBB, FuncInfo.InsertPt, DbgLoc, TII.get(Mips::BGTZ)) if (ZExtCondReg == 0)
.addReg(CondReg) return false;
.addMBB(TBB);
finishCondBranch(BI->getParent(), TBB, FBB);
return true;
} }
return false;
BuildMI(*BrBB, FuncInfo.InsertPt, DbgLoc, TII.get(Mips::BGTZ))
.addReg(ZExtCondReg)
.addMBB(TBB);
finishCondBranch(BI->getParent(), TBB, FBB);
return true;
} }
bool MipsFastISel::selectCmp(const Instruction *I) { bool MipsFastISel::selectCmp(const Instruction *I) {

View File

@ -447,6 +447,9 @@ bool MipsSEInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
case Mips::PseudoMTLOHI_DSP: case Mips::PseudoMTLOHI_DSP:
expandPseudoMTLoHi(MBB, MI, Mips::MTLO_DSP, Mips::MTHI_DSP, true); expandPseudoMTLoHi(MBB, MI, Mips::MTLO_DSP, Mips::MTHI_DSP, true);
break; break;
case Mips::PseudoMTLOHI_MM:
expandPseudoMTLoHi(MBB, MI, Mips::MTLO_MM, Mips::MTHI_MM, false);
break;
case Mips::PseudoCVT_S_W: case Mips::PseudoCVT_S_W:
expandCvtFPInt(MBB, MI, Mips::CVT_S_W, Mips::MTC1, false); expandCvtFPInt(MBB, MI, Mips::CVT_S_W, Mips::MTC1, false);
break; break;

View File

@ -61,6 +61,14 @@ extern "C" void LLVMInitializePowerPCDisassembler() {
createPPCLEDisassembler); createPPCLEDisassembler);
} }
static DecodeStatus DecodePCRel24BranchTarget(MCInst &Inst, unsigned Imm,
uint64_t Addr,
const void *Decoder) {
int32_t Offset = SignExtend32<24>(Imm);
Inst.addOperand(MCOperand::createImm(Offset));
return MCDisassembler::Success;
}
// FIXME: These can be generated by TableGen from the existing register // FIXME: These can be generated by TableGen from the existing register
// encoding values! // encoding values!

View File

@ -382,8 +382,11 @@ void PPCInstPrinter::printBranchOperand(const MCInst *MI, unsigned OpNo,
// Branches can take an immediate operand. This is used by the branch // Branches can take an immediate operand. This is used by the branch
// selection pass to print .+8, an eight byte displacement from the PC. // selection pass to print .+8, an eight byte displacement from the PC.
O << ".+"; O << ".";
printAbsBranchOperand(MI, OpNo, O); int32_t Imm = SignExtend32<32>((unsigned)MI->getOperand(OpNo).getImm() << 2);
if (Imm >= 0)
O << "+";
O << Imm;
} }
void PPCInstPrinter::printAbsBranchOperand(const MCInst *MI, unsigned OpNo, void PPCInstPrinter::printAbsBranchOperand(const MCInst *MI, unsigned OpNo,

View File

@ -15,6 +15,7 @@
#include "InstPrinter/PPCInstPrinter.h" #include "InstPrinter/PPCInstPrinter.h"
#include "MCTargetDesc/PPCMCAsmInfo.h" #include "MCTargetDesc/PPCMCAsmInfo.h"
#include "PPCTargetStreamer.h" #include "PPCTargetStreamer.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Triple.h" #include "llvm/ADT/Triple.h"
#include "llvm/BinaryFormat/ELF.h" #include "llvm/BinaryFormat/ELF.h"
@ -182,16 +183,33 @@ class PPCTargetELFStreamer : public PPCTargetStreamer {
void emitAssignment(MCSymbol *S, const MCExpr *Value) override { void emitAssignment(MCSymbol *S, const MCExpr *Value) override {
auto *Symbol = cast<MCSymbolELF>(S); auto *Symbol = cast<MCSymbolELF>(S);
// When encoding an assignment to set symbol A to symbol B, also copy // When encoding an assignment to set symbol A to symbol B, also copy
// the st_other bits encoding the local entry point offset. // the st_other bits encoding the local entry point offset.
if (Value->getKind() != MCExpr::SymbolRef) if (copyLocalEntry(Symbol, Value))
return; UpdateOther.insert(Symbol);
const auto &RhsSym = cast<MCSymbolELF>( else
static_cast<const MCSymbolRefExpr *>(Value)->getSymbol()); UpdateOther.erase(Symbol);
unsigned Other = Symbol->getOther(); }
void finish() override {
for (auto *Sym : UpdateOther)
copyLocalEntry(Sym, Sym->getVariableValue());
}
private:
SmallPtrSet<MCSymbolELF *, 32> UpdateOther;
bool copyLocalEntry(MCSymbolELF *D, const MCExpr *S) {
auto *Ref = dyn_cast<const MCSymbolRefExpr>(S);
if (!Ref)
return false;
const auto &RhsSym = cast<MCSymbolELF>(Ref->getSymbol());
unsigned Other = D->getOther();
Other &= ~ELF::STO_PPC64_LOCAL_MASK; Other &= ~ELF::STO_PPC64_LOCAL_MASK;
Other |= RhsSym.getOther() & ELF::STO_PPC64_LOCAL_MASK; Other |= RhsSym.getOther() & ELF::STO_PPC64_LOCAL_MASK;
Symbol->setOther(Other); D->setOther(Other);
return true;
} }
}; };

View File

@ -4359,8 +4359,8 @@ void PPCDAGToDAGISel::Select(SDNode *N) {
const Module *M = MF->getFunction().getParent(); const Module *M = MF->getFunction().getParent();
if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) != MVT::i32 || if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) != MVT::i32 ||
!PPCSubTarget->isSecurePlt() || !PPCSubTarget->isTargetELF() || (!TM.isPositionIndependent() || !PPCSubTarget->isSecurePlt()) ||
M->getPICLevel() == PICLevel::SmallPIC) !PPCSubTarget->isTargetELF() || M->getPICLevel() == PICLevel::SmallPIC)
break; break;
SDValue Op = N->getOperand(1); SDValue Op = N->getOperand(1);

View File

@ -737,7 +737,9 @@ def abscondbrtarget : Operand<OtherVT> {
def calltarget : Operand<iPTR> { def calltarget : Operand<iPTR> {
let PrintMethod = "printBranchOperand"; let PrintMethod = "printBranchOperand";
let EncoderMethod = "getDirectBrEncoding"; let EncoderMethod = "getDirectBrEncoding";
let DecoderMethod = "DecodePCRel24BranchTarget";
let ParserMatchClass = PPCDirectBrAsmOperand; let ParserMatchClass = PPCDirectBrAsmOperand;
let OperandType = "OPERAND_PCREL";
} }
def abscalltarget : Operand<iPTR> { def abscalltarget : Operand<iPTR> {
let PrintMethod = "printAbsBranchOperand"; let PrintMethod = "printAbsBranchOperand";

View File

@ -138,6 +138,9 @@ void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
if (isDarwin()) if (isDarwin())
HasLazyResolverStubs = true; HasLazyResolverStubs = true;
if (TargetTriple.isOSNetBSD() || TargetTriple.isOSOpenBSD())
SecurePlt = true;
if (HasSPE && IsPPC64) if (HasSPE && IsPPC64)
report_fatal_error( "SPE is only supported for 32-bit targets.\n", false); report_fatal_error( "SPE is only supported for 32-bit targets.\n", false);
if (HasSPE && (HasAltivec || HasQPX || HasVSX || HasFPU)) if (HasSPE && (HasAltivec || HasQPX || HasVSX || HasFPU))

View File

@ -189,7 +189,7 @@ SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
MachineInstr *StMI = MachineInstr *StMI =
BuildMI(*MI.getParent(), II, dl, TII.get(SP::STDFri)) BuildMI(*MI.getParent(), II, dl, TII.get(SP::STDFri))
.addReg(FrameReg).addImm(0).addReg(SrcEvenReg); .addReg(FrameReg).addImm(0).addReg(SrcEvenReg);
replaceFI(MF, II, *StMI, dl, 0, Offset, FrameReg); replaceFI(MF, *StMI, *StMI, dl, 0, Offset, FrameReg);
MI.setDesc(TII.get(SP::STDFri)); MI.setDesc(TII.get(SP::STDFri));
MI.getOperand(2).setReg(SrcOddReg); MI.getOperand(2).setReg(SrcOddReg);
Offset += 8; Offset += 8;
@ -201,7 +201,7 @@ SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
MachineInstr *StMI = MachineInstr *StMI =
BuildMI(*MI.getParent(), II, dl, TII.get(SP::LDDFri), DestEvenReg) BuildMI(*MI.getParent(), II, dl, TII.get(SP::LDDFri), DestEvenReg)
.addReg(FrameReg).addImm(0); .addReg(FrameReg).addImm(0);
replaceFI(MF, II, *StMI, dl, 1, Offset, FrameReg); replaceFI(MF, *StMI, *StMI, dl, 1, Offset, FrameReg);
MI.setDesc(TII.get(SP::LDDFri)); MI.setDesc(TII.get(SP::LDDFri));
MI.getOperand(0).setReg(DestOddReg); MI.getOperand(0).setReg(DestOddReg);

View File

@ -669,13 +669,16 @@ WebAssemblyTargetLowering::LowerCall(CallLoweringInfo &CLI,
if (IsVarArg) { if (IsVarArg) {
// Outgoing non-fixed arguments are placed in a buffer. First // Outgoing non-fixed arguments are placed in a buffer. First
// compute their offsets and the total amount of buffer space needed. // compute their offsets and the total amount of buffer space needed.
for (SDValue Arg : for (unsigned I = NumFixedArgs; I < Outs.size(); ++I) {
make_range(OutVals.begin() + NumFixedArgs, OutVals.end())) { const ISD::OutputArg &Out = Outs[I];
SDValue &Arg = OutVals[I];
EVT VT = Arg.getValueType(); EVT VT = Arg.getValueType();
assert(VT != MVT::iPTR && "Legalized args should be concrete"); assert(VT != MVT::iPTR && "Legalized args should be concrete");
Type *Ty = VT.getTypeForEVT(*DAG.getContext()); Type *Ty = VT.getTypeForEVT(*DAG.getContext());
unsigned Align = std::max(Out.Flags.getOrigAlign(),
Layout.getABITypeAlignment(Ty));
unsigned Offset = CCInfo.AllocateStack(Layout.getTypeAllocSize(Ty), unsigned Offset = CCInfo.AllocateStack(Layout.getTypeAllocSize(Ty),
Layout.getABITypeAlignment(Ty)); Align);
CCInfo.addLoc(CCValAssign::getMem(ArgLocs.size(), VT.getSimpleVT(), CCInfo.addLoc(CCValAssign::getMem(ArgLocs.size(), VT.getSimpleVT(),
Offset, VT.getSimpleVT(), Offset, VT.getSimpleVT(),
CCValAssign::Full)); CCValAssign::Full));

View File

@ -399,7 +399,7 @@ bool X86FastISel::X86FastEmitLoad(EVT VT, X86AddressMode &AM,
case MVT::v2i64: case MVT::v2i64:
case MVT::v8i16: case MVT::v8i16:
case MVT::v16i8: case MVT::v16i8:
if (IsNonTemporal && Alignment >= 16) if (IsNonTemporal && Alignment >= 16 && HasSSE41)
Opc = HasVLX ? X86::VMOVNTDQAZ128rm : Opc = HasVLX ? X86::VMOVNTDQAZ128rm :
HasAVX ? X86::VMOVNTDQArm : X86::MOVNTDQArm; HasAVX ? X86::VMOVNTDQArm : X86::MOVNTDQArm;
else if (Alignment >= 16) else if (Alignment >= 16)

View File

@ -38,6 +38,7 @@
#include "llvm/IR/Attributes.h" #include "llvm/IR/Attributes.h"
#include "llvm/IR/DataLayout.h" #include "llvm/IR/DataLayout.h"
#include "llvm/IR/Function.h" #include "llvm/IR/Function.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/Pass.h" #include "llvm/Pass.h"
#include "llvm/Support/CodeGen.h" #include "llvm/Support/CodeGen.h"
#include "llvm/Support/CommandLine.h" #include "llvm/Support/CommandLine.h"
@ -512,6 +513,9 @@ void X86PassConfig::addPreEmitPass2() {
// correct CFA calculation rule where needed by inserting appropriate CFI // correct CFA calculation rule where needed by inserting appropriate CFI
// instructions. // instructions.
const Triple &TT = TM->getTargetTriple(); const Triple &TT = TM->getTargetTriple();
if (!TT.isOSDarwin() && !TT.isOSWindows()) const MCAsmInfo *MAI = TM->getMCAsmInfo();
if (!TT.isOSDarwin() &&
(!TT.isOSWindows() ||
MAI->getExceptionHandlingType() == ExceptionHandling::DwarfCFI))
addPass(createCFIInstrInserter()); addPass(createCFIInstrInserter());
} }

View File

@ -36,7 +36,7 @@ std::string getClangRepositoryPath() {
// If the SVN_REPOSITORY is empty, try to use the SVN keyword. This helps us // If the SVN_REPOSITORY is empty, try to use the SVN keyword. This helps us
// pick up a tag in an SVN export, for example. // pick up a tag in an SVN export, for example.
StringRef SVNRepository("$URL: https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_800/final/lib/Basic/Version.cpp $"); StringRef SVNRepository("$URL: https://llvm.org/svn/llvm-project/cfe/branches/release_80/lib/Basic/Version.cpp $");
if (URL.empty()) { if (URL.empty()) {
URL = SVNRepository.slice(SVNRepository.find(':'), URL = SVNRepository.slice(SVNRepository.find(':'),
SVNRepository.find("/lib/Basic")); SVNRepository.find("/lib/Basic"));

View File

@ -1518,8 +1518,9 @@ void CodeGenFunction::EmitOMPPrivateLoopCounters(
I < E; ++I) { I < E; ++I) {
const auto *DRE = cast<DeclRefExpr>(C->getLoopCounter(I)); const auto *DRE = cast<DeclRefExpr>(C->getLoopCounter(I));
const auto *VD = cast<VarDecl>(DRE->getDecl()); const auto *VD = cast<VarDecl>(DRE->getDecl());
// Override only those variables that are really emitted already. // Override only those variables that can be captured to avoid re-emission
if (LocalDeclMap.count(VD)) { // of the variables declared within the loops.
if (DRE->refersToEnclosingVariableOrCapture()) {
(void)LoopScope.addPrivate(VD, [this, DRE, VD]() { (void)LoopScope.addPrivate(VD, [this, DRE, VD]() {
return CreateMemTemp(DRE->getType(), VD->getName()); return CreateMemTemp(DRE->getType(), VD->getName());
}); });

View File

@ -718,8 +718,9 @@ static void appendUserToPath(SmallVectorImpl<char> &Result) {
Result.append(UID.begin(), UID.end()); Result.append(UID.begin(), UID.end());
} }
static void addPGOAndCoverageFlags(Compilation &C, const Driver &D, static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C,
const InputInfo &Output, const ArgList &Args, const Driver &D, const InputInfo &Output,
const ArgList &Args,
ArgStringList &CmdArgs) { ArgStringList &CmdArgs) {
auto *PGOGenerateArg = Args.getLastArg(options::OPT_fprofile_generate, auto *PGOGenerateArg = Args.getLastArg(options::OPT_fprofile_generate,
@ -759,6 +760,11 @@ static void addPGOAndCoverageFlags(Compilation &C, const Driver &D,
ProfileGenerateArg->getValue())); ProfileGenerateArg->getValue()));
// The default is to use Clang Instrumentation. // The default is to use Clang Instrumentation.
CmdArgs.push_back("-fprofile-instrument=clang"); CmdArgs.push_back("-fprofile-instrument=clang");
if (TC.getTriple().isWindowsMSVCEnvironment()) {
// Add dependent lib for clang_rt.profile
CmdArgs.push_back(Args.MakeArgString("--dependent-lib=" +
TC.getCompilerRT(Args, "profile")));
}
} }
if (PGOGenerateArg) { if (PGOGenerateArg) {
@ -4118,7 +4124,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// sampling, overhead of call arc collection is way too high and there's no // sampling, overhead of call arc collection is way too high and there's no
// way to collect the output. // way to collect the output.
if (!Triple.isNVPTX()) if (!Triple.isNVPTX())
addPGOAndCoverageFlags(C, D, Output, Args, CmdArgs); addPGOAndCoverageFlags(TC, C, D, Output, Args, CmdArgs);
if (auto *ABICompatArg = Args.getLastArg(options::OPT_fclang_abi_compat_EQ)) if (auto *ABICompatArg = Args.getLastArg(options::OPT_fclang_abi_compat_EQ))
ABICompatArg->render(Args, CmdArgs); ABICompatArg->render(Args, CmdArgs);

View File

@ -45,6 +45,7 @@ static std::string getMultiarchTriple(const Driver &D,
TargetTriple.getEnvironment(); TargetTriple.getEnvironment();
bool IsAndroid = TargetTriple.isAndroid(); bool IsAndroid = TargetTriple.isAndroid();
bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6;
bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32;
// For most architectures, just use whatever we have rather than trying to be // For most architectures, just use whatever we have rather than trying to be
// clever. // clever.
@ -103,33 +104,37 @@ static std::string getMultiarchTriple(const Driver &D,
return "aarch64_be-linux-gnu"; return "aarch64_be-linux-gnu";
break; break;
case llvm::Triple::mips: { case llvm::Triple::mips: {
std::string Arch = IsMipsR6 ? "mipsisa32r6" : "mips"; std::string MT = IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu";
if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-gnu")) if (D.getVFS().exists(SysRoot + "/lib/" + MT))
return Arch + "-linux-gnu"; return MT;
break; break;
} }
case llvm::Triple::mipsel: { case llvm::Triple::mipsel: {
if (IsAndroid) if (IsAndroid)
return "mipsel-linux-android"; return "mipsel-linux-android";
std::string Arch = IsMipsR6 ? "mipsisa32r6el" : "mipsel"; std::string MT = IsMipsR6 ? "mipsisa32r6el-linux-gnu" : "mipsel-linux-gnu";
if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-gnu")) if (D.getVFS().exists(SysRoot + "/lib/" + MT))
return Arch + "-linux-gnu"; return MT;
break; break;
} }
case llvm::Triple::mips64: { case llvm::Triple::mips64: {
std::string Arch = IsMipsR6 ? "mipsisa64r6" : "mips64"; std::string MT = std::string(IsMipsR6 ? "mipsisa64r6" : "mips64") +
std::string ABI = llvm::Triple::getEnvironmentTypeName(TargetEnvironment); "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64");
if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-" + ABI)) if (D.getVFS().exists(SysRoot + "/lib/" + MT))
return Arch + "-linux-" + ABI; return MT;
if (D.getVFS().exists(SysRoot + "/lib/mips64-linux-gnu"))
return "mips64-linux-gnu";
break; break;
} }
case llvm::Triple::mips64el: { case llvm::Triple::mips64el: {
if (IsAndroid) if (IsAndroid)
return "mips64el-linux-android"; return "mips64el-linux-android";
std::string Arch = IsMipsR6 ? "mipsisa64r6el" : "mips64el"; std::string MT = std::string(IsMipsR6 ? "mipsisa64r6el" : "mips64el") +
std::string ABI = llvm::Triple::getEnvironmentTypeName(TargetEnvironment); "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64");
if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-" + ABI)) if (D.getVFS().exists(SysRoot + "/lib/" + MT))
return Arch + "-linux-" + ABI; return MT;
if (D.getVFS().exists(SysRoot + "/lib/mips64el-linux-gnu"))
return "mips64el-linux-gnu";
break; break;
} }
case llvm::Triple::ppc: case llvm::Triple::ppc:

View File

@ -4602,8 +4602,7 @@ DeclRefExpr *OpenMPIterationSpaceChecker::buildCounterVar(
Captures.insert(std::make_pair(LCRef, Ref)); Captures.insert(std::make_pair(LCRef, Ref));
return Ref; return Ref;
} }
return buildDeclRefExpr(SemaRef, VD, VD->getType().getNonReferenceType(), return cast<DeclRefExpr>(LCRef);
DefaultLoc);
} }
Expr *OpenMPIterationSpaceChecker::buildPrivateCounterVar() const { Expr *OpenMPIterationSpaceChecker::buildPrivateCounterVar() const {

View File

@ -1351,19 +1351,47 @@ static void addSymbolToRVASet(SymbolRVASet &RVASet, Defined *S) {
// symbol in an executable section. // symbol in an executable section.
static void maybeAddAddressTakenFunction(SymbolRVASet &AddressTakenSyms, static void maybeAddAddressTakenFunction(SymbolRVASet &AddressTakenSyms,
Symbol *S) { Symbol *S) {
auto *D = dyn_cast_or_null<DefinedCOFF>(S); if (!S)
// Ignore undefined symbols and references to non-functions (e.g. globals and
// labels).
if (!D ||
D->getCOFFSymbol().getComplexType() != COFF::IMAGE_SYM_DTYPE_FUNCTION)
return; return;
// Mark the symbol as address taken if it's in an executable section. switch (S->kind()) {
Chunk *RefChunk = D->getChunk(); case Symbol::DefinedLocalImportKind:
OutputSection *OS = RefChunk ? RefChunk->getOutputSection() : nullptr; case Symbol::DefinedImportDataKind:
if (OS && OS->Header.Characteristics & IMAGE_SCN_MEM_EXECUTE) // Defines an __imp_ pointer, so it is data, so it is ignored.
addSymbolToRVASet(AddressTakenSyms, D); break;
case Symbol::DefinedCommonKind:
// Common is always data, so it is ignored.
break;
case Symbol::DefinedAbsoluteKind:
case Symbol::DefinedSyntheticKind:
// Absolute is never code, synthetic generally isn't and usually isn't
// determinable.
break;
case Symbol::LazyKind:
case Symbol::UndefinedKind:
// Undefined symbols resolve to zero, so they don't have an RVA. Lazy
// symbols shouldn't have relocations.
break;
case Symbol::DefinedImportThunkKind:
// Thunks are always code, include them.
addSymbolToRVASet(AddressTakenSyms, cast<Defined>(S));
break;
case Symbol::DefinedRegularKind: {
// This is a regular, defined, symbol from a COFF file. Mark the symbol as
// address taken if the symbol type is function and it's in an executable
// section.
auto *D = cast<DefinedRegular>(S);
if (D->getCOFFSymbol().getComplexType() == COFF::IMAGE_SYM_DTYPE_FUNCTION) {
Chunk *RefChunk = D->getChunk();
OutputSection *OS = RefChunk ? RefChunk->getOutputSection() : nullptr;
if (OS && OS->Header.Characteristics & IMAGE_SCN_MEM_EXECUTE)
addSymbolToRVASet(AddressTakenSyms, D);
}
break;
}
}
} }
// Visit all relocations from all section contributions of this object file and // Visit all relocations from all section contributions of this object file and

View File

@ -113,6 +113,7 @@ class PPC64 final : public TargetInfo {
void writeGotHeader(uint8_t *Buf) const override; void writeGotHeader(uint8_t *Buf) const override;
bool needsThunk(RelExpr Expr, RelType Type, const InputFile *File, bool needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
uint64_t BranchAddr, const Symbol &S) const override; uint64_t BranchAddr, const Symbol &S) const override;
uint32_t getThunkSectionSpacing() const override;
bool inBranchRange(RelType Type, uint64_t Src, uint64_t Dst) const override; bool inBranchRange(RelType Type, uint64_t Src, uint64_t Dst) const override;
RelExpr adjustRelaxExpr(RelType Type, const uint8_t *Data, RelExpr adjustRelaxExpr(RelType Type, const uint8_t *Data,
RelExpr Expr) const override; RelExpr Expr) const override;
@ -759,6 +760,14 @@ bool PPC64::needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
return !inBranchRange(Type, BranchAddr, S.getVA()); return !inBranchRange(Type, BranchAddr, S.getVA());
} }
uint32_t PPC64::getThunkSectionSpacing() const {
// See comment in Arch/ARM.cpp for a more detailed explanation of
// getThunkSectionSpacing(). For PPC64 we pick the constant here based on
// R_PPC64_REL24, which is used by unconditional branch instructions.
// 0x2000000 = (1 << 24-1) * 4
return 0x2000000;
}
bool PPC64::inBranchRange(RelType Type, uint64_t Src, uint64_t Dst) const { bool PPC64::inBranchRange(RelType Type, uint64_t Src, uint64_t Dst) const {
int64_t Offset = Dst - Src; int64_t Offset = Dst - Src;
if (Type == R_PPC64_REL14) if (Type == R_PPC64_REL14)

View File

@ -248,6 +248,7 @@ void InputSectionBase::parseCompressedHeader() {
} }
UncompressedSize = Hdr->ch_size; UncompressedSize = Hdr->ch_size;
Alignment = std::max<uint64_t>(Hdr->ch_addralign, 1);
RawData = RawData.slice(sizeof(*Hdr)); RawData = RawData.slice(sizeof(*Hdr));
return; return;
} }
@ -265,6 +266,7 @@ void InputSectionBase::parseCompressedHeader() {
} }
UncompressedSize = Hdr->ch_size; UncompressedSize = Hdr->ch_size;
Alignment = std::max<uint64_t>(Hdr->ch_addralign, 1);
RawData = RawData.slice(sizeof(*Hdr)); RawData = RawData.slice(sizeof(*Hdr));
} }
@ -578,10 +580,6 @@ static int64_t getTlsTpOffset() {
// Variant 1. The thread pointer points to a TCB with a fixed 2-word size, // Variant 1. The thread pointer points to a TCB with a fixed 2-word size,
// followed by a variable amount of alignment padding, followed by the TLS // followed by a variable amount of alignment padding, followed by the TLS
// segment. // segment.
//
// NB: While the ARM/AArch64 ABI formally has a 2-word TCB size, lld
// effectively increases the TCB size to 8 words for Android compatibility.
// It accomplishes this by increasing the segment's alignment.
return alignTo(Config->Wordsize * 2, Out::TlsPhdr->p_align); return alignTo(Config->Wordsize * 2, Out::TlsPhdr->p_align);
case EM_386: case EM_386:
case EM_X86_64: case EM_X86_64:

View File

@ -2003,6 +2003,11 @@ template <class ELFT> void SymbolTableSection<ELFT>::writeTo(uint8_t *Buf) {
ESym->setVisibility(Sym->Visibility); ESym->setVisibility(Sym->Visibility);
} }
// The 3 most significant bits of st_other are used by OpenPOWER ABI.
// See getPPC64GlobalEntryToLocalEntryOffset() for more details.
if (Config->EMachine == EM_PPC64)
ESym->st_other |= Sym->StOther & 0xe0;
ESym->st_name = Ent.StrTabOffset; ESym->st_name = Ent.StrTabOffset;
ESym->st_shndx = getSymSectionIndex(Ent.Sym); ESym->st_shndx = getSymSectionIndex(Ent.Sym);

View File

@ -547,6 +547,11 @@ static bool shouldKeepInSymtab(SectionBase *Sec, StringRef SymName,
if (Config->Discard == DiscardPolicy::None) if (Config->Discard == DiscardPolicy::None)
return true; return true;
// If -emit-reloc is given, all symbols including local ones need to be
// copied because they may be referenced by relocations.
if (Config->EmitRelocs)
return true;
// In ELF assembly .L symbols are normally discarded by the assembler. // In ELF assembly .L symbols are normally discarded by the assembler.
// If the assembler fails to do so, the linker discards them if // If the assembler fails to do so, the linker discards them if
// * --discard-locals is used. // * --discard-locals is used.
@ -2216,17 +2221,6 @@ template <class ELFT> void Writer<ELFT>::setPhdrs() {
} }
if (P->p_type == PT_TLS && P->p_memsz) { if (P->p_type == PT_TLS && P->p_memsz) {
if (!Config->Shared &&
(Config->EMachine == EM_ARM || Config->EMachine == EM_AARCH64)) {
// On ARM/AArch64, reserve extra space (8 words) between the thread
// pointer and an executable's TLS segment by overaligning the segment.
// This reservation is needed for backwards compatibility with Android's
// TCB, which allocates several slots after the thread pointer (e.g.
// TLS_SLOT_STACK_GUARD==5). For simplicity, this overalignment is also
// done on other operating systems.
P->p_align = std::max<uint64_t>(P->p_align, Config->Wordsize * 8);
}
// The TLS pointer goes after PT_TLS for variant 2 targets. At least glibc // The TLS pointer goes after PT_TLS for variant 2 targets. At least glibc
// will align it, so round up the size to make sure the offsets are // will align it, so round up the size to make sure the offsets are
// correct. // correct.

View File

@ -2087,20 +2087,38 @@ void llvm::printSymbolTable(const ObjectFile *O, StringRef ArchiveName,
outs() << SectionName; outs() << SectionName;
} }
outs() << '\t';
if (Common || isa<ELFObjectFileBase>(O)) { if (Common || isa<ELFObjectFileBase>(O)) {
uint64_t Val = uint64_t Val =
Common ? Symbol.getAlignment() : ELFSymbolRef(Symbol).getSize(); Common ? Symbol.getAlignment() : ELFSymbolRef(Symbol).getSize();
outs() << format("\t %08" PRIx64 " ", Val); outs() << format("\t%08" PRIx64, Val);
} }
if (Hidden) if (isa<ELFObjectFileBase>(O)) {
outs() << ".hidden "; uint8_t Other = ELFSymbolRef(Symbol).getOther();
switch (Other) {
case ELF::STV_DEFAULT:
break;
case ELF::STV_INTERNAL:
outs() << " .internal";
break;
case ELF::STV_HIDDEN:
outs() << " .hidden";
break;
case ELF::STV_PROTECTED:
outs() << " .protected";
break;
default:
outs() << format(" 0x%02x", Other);
break;
}
} else if (Hidden) {
outs() << " .hidden";
}
if (Demangle) if (Demangle)
outs() << demangle(Name) << '\n'; outs() << ' ' << demangle(Name) << '\n';
else else
outs() << Name << '\n'; outs() << ' ' << Name << '\n';
} }
} }

View File

@ -16,7 +16,7 @@
.\" $Id: traceroute.8,v 1.19 2000/09/21 08:44:19 leres Exp $ .\" $Id: traceroute.8,v 1.19 2000/09/21 08:44:19 leres Exp $
.\" $FreeBSD$ .\" $FreeBSD$
.\" .\"
.Dd May 31, 2015 .Dd June 20, 2019
.Dt TRACEROUTE 8 .Dt TRACEROUTE 8
.Os .Os
.Sh NAME .Sh NAME
@ -32,7 +32,7 @@
.Op Fl m Ar max_ttl .Op Fl m Ar max_ttl
.Op Fl P Ar proto .Op Fl P Ar proto
.Op Fl p Ar port .Op Fl p Ar port
.Op Fl q Ar nqueries .Op Fl q Ar nprobes
.Op Fl s Ar src_addr .Op Fl s Ar src_addr
.Op Fl t Ar tos .Op Fl t Ar tos
.Op Fl w Ar waittime .Op Fl w Ar waittime
@ -125,14 +125,14 @@ Traceroute hopes that nothing is listening on UDP ports (or UDP-Lite ports
if used by if used by
.Nm .Nm
and supported by the peer) and supported by the peer)
.Em base + 1 .Em port + 1
to to
.Em base + nhops * nprobes .Em port + (max_ttl - first_ttl + 1) * nprobes
at the destination host (so an ICMP PORT_UNREACHABLE message will at the destination host (so an ICMP PORT_UNREACHABLE message will
be returned to terminate the route tracing). If something is be returned to terminate the route tracing). If something is
listening on a port in the default range, this option can be used listening on a port in the default range, this option can be used
to pick an unused port range. to pick an unused port range.
.It Fl q Ar nqueries .It Fl q Ar nprobes
Set the number of probes per hop (default is 3, Set the number of probes per hop (default is 3,
unless unless
.Fl D .Fl D

View File

@ -59,7 +59,8 @@ distribution:
${_+_}cd ${SRCTOP}/usr.sbin/rmt; ${MAKE} etc-rmt ${_+_}cd ${SRCTOP}/usr.sbin/rmt; ${MAKE} etc-rmt
.if ${MK_UNBOUND} != "no" .if ${MK_UNBOUND} != "no"
if [ ! -e ${DESTDIR}/etc/unbound ]; then \ if [ ! -e ${DESTDIR}/etc/unbound ]; then \
${INSTALL_SYMLINK} ../var/unbound ${DESTDIR}/etc/unbound; \ ${INSTALL_SYMLINK} -T "package=unbound" \
../var/unbound ${DESTDIR}/etc/unbound; \
fi fi
.endif .endif
.if ${MK_SENDMAIL} != "no" .if ${MK_SENDMAIL} != "no"
@ -68,26 +69,29 @@ distribution:
.if ${MK_KERBEROS} != "no" .if ${MK_KERBEROS} != "no"
cd ${.CURDIR}/root; \ cd ${.CURDIR}/root; \
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \
-T "package=runtime" \
dot.k5login ${DESTDIR}/root/.k5login; dot.k5login ${DESTDIR}/root/.k5login;
.endif .endif
.if ${MK_MAIL} != "no" .if ${MK_MAIL} != "no"
cd ${.CURDIR}/mail; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \ cd ${.CURDIR}/mail; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \
${ETCMAIL} ${DESTDIR}/etc/mail -T "package=runtime" ${ETCMAIL} ${DESTDIR}/etc/mail
if [ -d ${DESTDIR}/etc/mail -a -f ${DESTDIR}/etc/mail/aliases -a \ if [ -d ${DESTDIR}/etc/mail -a -f ${DESTDIR}/etc/mail/aliases -a \
! -f ${DESTDIR}/etc/aliases ]; then \ ! -f ${DESTDIR}/etc/aliases ]; then \
${INSTALL_SYMLINK} mail/aliases ${DESTDIR}/etc/aliases; \ ${INSTALL_SYMLINK} -T "package=runtime" \
mail/aliases ${DESTDIR}/etc/aliases; \
fi fi
.endif .endif
.if ${MK_LOCATE} != "no" .if ${MK_LOCATE} != "no"
${INSTALL} -o nobody -g ${BINGRP} -m 644 /dev/null \ ${INSTALL} -o nobody -g ${BINGRP} -m 644 -T "package=runtime"\
${DESTDIR}/var/db/locate.database /dev/null ${DESTDIR}/var/db/locate.database
.endif .endif
cd ${.CURDIR}/..; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \ cd ${.CURDIR}/..; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
${FREEBSD} ${DESTDIR}/ -T "package=runtime" ${FREEBSD} ${DESTDIR}/
.if ${MK_BOOT} != "no" .if ${MK_BOOT} != "no"
.if exists(${SRCTOP}/sys/${MACHINE}/conf/GENERIC.hints) .if exists(${SRCTOP}/sys/${MACHINE}/conf/GENERIC.hints)
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
-T "package=runtime" \
${SRCTOP}/sys/${MACHINE}/conf/GENERIC.hints \ ${SRCTOP}/sys/${MACHINE}/conf/GENERIC.hints \
${DESTDIR}/boot/device.hints ${DESTDIR}/boot/device.hints
.endif .endif

View File

@ -31,7 +31,7 @@
.. ..
lib lib
clang clang
8.0.0 8.0.1
lib lib
freebsd freebsd
.. ..

View File

@ -152,6 +152,8 @@
.. ..
ppbus ppbus
.. ..
pwm
..
smbus smbus
.. ..
speaker speaker

View File

@ -722,6 +722,8 @@
.. ..
.. ..
.. ..
devrandom
..
dtrace dtrace
.. ..
fifo fifo

View File

@ -37,7 +37,7 @@
aout aout
.. ..
clang clang
8.0.0 8.0.1
include include
sanitizer sanitizer
.. ..

View File

@ -3,7 +3,7 @@
# Please see the file src/etc/mtree/README before making changes to this file. # Please see the file src/etc/mtree/README before making changes to this file.
# #
/set type=dir uname=root gname=wheel mode=0755 /set type=dir uname=root gname=wheel mode=0755 tags=package=runtime
. .
account account
.. ..
@ -32,7 +32,7 @@
.. ..
crash crash
.. ..
cron tags=package=runtime cron
tabs mode=0700 tabs mode=0700
.. ..
.. ..
@ -59,21 +59,21 @@
.. ..
.. ..
.. ..
empty mode=0555 flags=schg tags=package=runtime empty mode=0555 flags=schg
.. ..
games gname=games mode=0775 games gname=games mode=0775
.. ..
heimdal mode=0700 heimdal mode=0700
.. ..
log tags=package=runtime log
.. ..
mail gname=mail mode=0775 tags=package=runtime mail gname=mail mode=0775
.. ..
msgs uname=daemon msgs uname=daemon
.. ..
preserve preserve
.. ..
run tags=package=runtime run
dhclient dhclient
.. ..
ppp gname=network mode=0770 ppp gname=network mode=0770
@ -84,14 +84,16 @@
rwho gname=daemon mode=0775 rwho gname=daemon mode=0775
.. ..
spool spool
dma uname=root gname=mail mode=0770 clientmqueue uname=smmsp gname=smmsp mode=0770 tags=package=sendmail
..
dma uname=root gname=mail mode=0770 tags=package=dma
.. ..
lock uname=uucp gname=dialer mode=0775 lock uname=uucp gname=dialer mode=0775
.. ..
/set gname=daemon /set gname=daemon
lpd lpd
.. ..
mqueue mqueue tags=package=sendmail
.. ..
opielocks mode=0700 opielocks mode=0700
.. ..
@ -101,7 +103,7 @@
.. ..
/set gname=wheel /set gname=wheel
.. ..
tmp mode=01777 tags=package=runtime tmp mode=01777
vi.recover mode=01777 vi.recover mode=01777
.. ..
.. ..

View File

@ -64,29 +64,29 @@ ${mc:T:R}.cf: ${mc}
all: ${ALL} all: ${ALL}
distribution: distribution:
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 -T "package=sendmail" \
${.CURDIR}/freebsd.mc freebsd.cf ${DESTDIR}/etc/mail ${.CURDIR}/freebsd.mc freebsd.cf ${DESTDIR}/etc/mail
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 -T "package=sendmail" \
${.CURDIR}/freebsd.submit.mc freebsd.submit.cf ${DESTDIR}/etc/mail ${.CURDIR}/freebsd.submit.mc freebsd.submit.cf ${DESTDIR}/etc/mail
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 -T "package=sendmail" \
${SMDIR}/helpfile ${DESTDIR}/etc/mail ${SMDIR}/helpfile ${DESTDIR}/etc/mail
.if defined(INSTALL_CF) .if defined(INSTALL_CF)
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 -T "package=sendmail" \
${INSTALL_CF} ${DEST_CF} ${INSTALL_CF} ${DEST_CF}
.else .else
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 -T "package=sendmail" \
freebsd.cf ${DEST_CF} freebsd.cf ${DEST_CF}
.endif .endif
.if defined(SENDMAIL_ADDITIONAL_CF) .if defined(SENDMAIL_ADDITIONAL_CF)
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 -T "package=sendmail" \
${SENDMAIL_ADDITIONAL_CF} ${DESTDIR}/etc/mail ${SENDMAIL_ADDITIONAL_CF} ${DESTDIR}/etc/mail
.endif .endif
.if !defined(SENDMAIL_SET_USER_ID) .if !defined(SENDMAIL_SET_USER_ID)
.if defined(INSTALL_SUBMIT_CF) .if defined(INSTALL_SUBMIT_CF)
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 -T "package=sendmail" \
${INSTALL_SUBMIT_CF} ${DEST_SUBMIT_CF} ${INSTALL_SUBMIT_CF} ${DEST_SUBMIT_CF}
.else .else
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 -T "package=sendmail" \
freebsd.submit.cf ${DEST_SUBMIT_CF} freebsd.submit.cf ${DEST_SUBMIT_CF}
.endif .endif
.endif .endif

View File

@ -14,6 +14,7 @@ CCDIR= ${SRCTOP}/gnu/usr.bin/cc
SRCS= crtstuff.c ${COMMONHDRS} SRCS= crtstuff.c ${COMMONHDRS}
OBJS= crtbegin.o crtend.o crtbeginT.o OBJS= crtbegin.o crtend.o crtbeginT.o
SOBJS= crtbeginS.o crtendS.o SOBJS= crtbeginS.o crtendS.o
DEPENDOBJS+= ${OBJS} ${SOBJS}
CSTD?= gnu89 CSTD?= gnu89
CFLAGS+= -DIN_GCC -DHAVE_LD_EH_FRAME_HDR -DDT_CONFIG -D__GLIBC__=3 CFLAGS+= -DIN_GCC -DHAVE_LD_EH_FRAME_HDR -DDT_CONFIG -D__GLIBC__=3
CFLAGS.gcc+= -finhibit-size-directive -fno-toplevel-reorder CFLAGS.gcc+= -finhibit-size-directive -fno-toplevel-reorder
@ -49,23 +50,23 @@ CLEANFILES= ${OBJS} ${SOBJS} ${TGTOBJS}
crtbegin.o: ${BEGINSRC} crtbegin.o: ${BEGINSRC}
${CC} ${CFLAGS} -g0 -DCRT_BEGIN \ ${CC} ${CFLAGS} -g0 -DCRT_BEGIN \
-c -o ${.TARGET} ${.ALLSRC:N*.h} -c -o ${.TARGET} ${.ALLSRC:N*.h:[1]}
crtbeginT.o: ${BEGINSRC} crtbeginT.o: ${BEGINSRC}
${CC} ${CFLAGS} -g0 -DCRT_BEGIN -DCRTSTUFFT_O \ ${CC} ${CFLAGS} -g0 -DCRT_BEGIN -DCRTSTUFFT_O \
-c -o ${.TARGET} ${.ALLSRC:N*.h} -c -o ${.TARGET} ${.ALLSRC:N*.h:[1]}
crtbeginS.o: ${BEGINSRC} crtbeginS.o: ${BEGINSRC}
${CC} ${CFLAGS} -g0 -DCRT_BEGIN ${CRTS_CFLAGS} \ ${CC} ${CFLAGS} -g0 -DCRT_BEGIN ${CRTS_CFLAGS} \
-c -o ${.TARGET} ${.ALLSRC:N*.h} -c -o ${.TARGET} ${.ALLSRC:N*.h:[1]}
crtend.o: ${ENDSRC} crtend.o: ${ENDSRC}
${CC} ${CFLAGS} -g0 -DCRT_END \ ${CC} ${CFLAGS} -g0 -DCRT_END \
-c -o ${.TARGET} ${.ALLSRC:N*.h} -c -o ${.TARGET} ${.ALLSRC:N*.h:[1]}
crtendS.o: ${ENDSRC} crtendS.o: ${ENDSRC}
${CC} ${CFLAGS} -g0 -DCRT_END ${CRTS_CFLAGS} \ ${CC} ${CFLAGS} -g0 -DCRT_END ${CRTS_CFLAGS} \
-c -o ${.TARGET} ${.ALLSRC:N*.h} -c -o ${.TARGET} ${.ALLSRC:N*.h:[1]}
COMMONHDRS+= tm.h tconfig.h options.h COMMONHDRS+= tm.h tconfig.h options.h
CLEANFILES+= ${COMMONHDRS} optionlist cs-tconfig.h cs-tm.h CLEANFILES+= ${COMMONHDRS} optionlist cs-tconfig.h cs-tm.h

View File

@ -224,11 +224,11 @@ ${T}_OBJS_S = ${${T}_FUNCS:S/$/.pico/}
SOBJS += ${${T}_FUNCS:S/$/.pico/} SOBJS += ${${T}_FUNCS:S/$/.pico/}
${${T}_OBJS_T}: ${${T}_CFILE} ${COMMONHDRS} ${${T}_OBJS_T}: ${${T}_CFILE} ${COMMONHDRS}
${CC_T} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} ${CC_T} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c:[1]}
${${T}_OBJS_P}: ${${T}_CFILE} ${COMMONHDRS} ${${T}_OBJS_P}: ${${T}_CFILE} ${COMMONHDRS}
${CC_P} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} ${CC_P} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c:[1]}
${${T}_OBJS_S}: ${${T}_CFILE} ${COMMONHDRS} ${${T}_OBJS_S}: ${${T}_CFILE} ${COMMONHDRS}
${CC_S} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} ${CC_S} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c:[1]}
.endfor .endfor
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
@ -249,9 +249,9 @@ STAT_OBJS_P = ${SYMS_ST:S/$/.po/}
STATICOBJS = ${SYMS_ST:S/$/.o/} STATICOBJS = ${SYMS_ST:S/$/.o/}
${STAT_OBJS_T}: ${STD_CFILE} ${COMMONHDRS} ${STAT_OBJS_T}: ${STD_CFILE} ${COMMONHDRS}
${CC_T} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} ${CC_T} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c:[1]}
${STAT_OBJS_P}: ${STD_CFILE} ${COMMONHDRS} ${STAT_OBJS_P}: ${STD_CFILE} ${COMMONHDRS}
${CC_P} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} ${CC_P} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c:[1]}
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# #

View File

@ -51,16 +51,16 @@ CLEANFILES+= ${COMMONHDRS} cs-tm.h cs-tconfig.h options.h optionlist
${OBJS} beforedepend: ${COMMONHDRS} ${OBJS} beforedepend: ${COMMONHDRS}
${OBJS_T}: libgcov.c ${OBJS_T}: libgcov.c
${CC_T} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} ${CC_T} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c:[1]}
.if !defined(NO_PIC) .if !defined(NO_PIC)
${OBJS_S}: libgcov.c ${OBJS_S}: libgcov.c
${CC_S} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} ${CC_S} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c:[1]}
.endif .endif
.if ${MK_PROFILE} != "no" .if ${MK_PROFILE} != "no"
${OBJS_P}: libgcov.c ${OBJS_P}: libgcov.c
${CC_P} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} ${CC_P} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c:[1]}
.endif .endif
.include <bsd.lib.mk> .include <bsd.lib.mk>

View File

@ -46,8 +46,8 @@ LSUBDIRS= cam/ata cam/mmc cam/nvme cam/scsi \
dev/acpica dev/agp dev/an dev/bktr dev/ciss dev/filemon dev/firewire \ dev/acpica dev/agp dev/an dev/bktr dev/ciss dev/filemon dev/firewire \
dev/hwpmc dev/hyperv \ dev/hwpmc dev/hyperv \
dev/ic dev/iicbus dev/io dev/mfi dev/mmc dev/nvme \ dev/ic dev/iicbus dev/io dev/mfi dev/mmc dev/nvme \
dev/ofw dev/pbio dev/pci ${_dev_powermac_nvram} dev/ppbus dev/smbus \ dev/ofw dev/pbio dev/pci ${_dev_powermac_nvram} dev/ppbus dev/pwm \
dev/speaker dev/tcp_log dev/veriexec dev/vkbd dev/wi \ dev/smbus dev/speaker dev/tcp_log dev/veriexec dev/vkbd dev/wi \
fs/devfs fs/fdescfs fs/msdosfs fs/nandfs fs/nfs fs/nullfs \ fs/devfs fs/fdescfs fs/msdosfs fs/nandfs fs/nfs fs/nullfs \
fs/procfs fs/smbfs fs/udf fs/unionfs \ fs/procfs fs/smbfs fs/udf fs/unionfs \
geom/cache geom/concat geom/eli geom/gate geom/journal geom/label \ geom/cache geom/concat geom/eli geom/gate geom/journal geom/label \

View File

@ -1,3 +1,3 @@
/* $FreeBSD$ */ /* $FreeBSD$ */
#define FREEBSD_CC_VERSION 1300003 #define FREEBSD_CC_VERSION 1300004

View File

@ -4,7 +4,7 @@
.PATH: ${CLANG_SRCS}/lib/Headers .PATH: ${CLANG_SRCS}/lib/Headers
INCSDIR= ${LIBDIR}/clang/8.0.0/include INCSDIR= ${LIBDIR}/clang/8.0.1/include
GENINCS+= arm_fp16.h GENINCS+= arm_fp16.h
GENINCS+= arm_neon.h GENINCS+= arm_neon.h

View File

@ -1,11 +1,11 @@
/* $FreeBSD$ */ /* $FreeBSD$ */
#define CLANG_VERSION 8.0.0 #define CLANG_VERSION 8.0.1
#define CLANG_VERSION_STRING "8.0.0" #define CLANG_VERSION_STRING "8.0.1"
#define CLANG_VERSION_MAJOR 8 #define CLANG_VERSION_MAJOR 8
#define CLANG_VERSION_MINOR 0 #define CLANG_VERSION_MINOR 0
#define CLANG_VERSION_PATCHLEVEL 0 #define CLANG_VERSION_PATCHLEVEL 1
#define CLANG_VENDOR "FreeBSD " #define CLANG_VENDOR "FreeBSD "
#define SVN_REVISION "356365" #define SVN_REVISION "363030"

View File

@ -62,7 +62,7 @@
#define CLANG_HAVE_RLIMITS 1 #define CLANG_HAVE_RLIMITS 1
/* The LLVM product name and version */ /* The LLVM product name and version */
#define BACKEND_PACKAGE_STRING "LLVM 8.0.0" #define BACKEND_PACKAGE_STRING "LLVM 8.0.1"
/* Linker version detected at compile time. */ /* Linker version detected at compile time. */
/* #undef HOST_LINK_VERSION */ /* #undef HOST_LINK_VERSION */

View File

@ -1,10 +1,10 @@
// $FreeBSD$ // $FreeBSD$
#define LLD_VERSION 8.0.0 #define LLD_VERSION 8.0.1
#define LLD_VERSION_STRING "8.0.0" #define LLD_VERSION_STRING "8.0.1"
#define LLD_VERSION_MAJOR 8 #define LLD_VERSION_MAJOR 8
#define LLD_VERSION_MINOR 0 #define LLD_VERSION_MINOR 0
#define LLD_REPOSITORY_STRING "FreeBSD" #define LLD_REPOSITORY_STRING "FreeBSD"
// <Upstream revision at import>-<Local identifier in __FreeBSD_version style> // <Upstream revision at import>-<Local identifier in __FreeBSD_version style>
#define LLD_REVISION_STRING "356365-1300003" #define LLD_REVISION_STRING "363030-1300004"

View File

@ -330,10 +330,10 @@
#define PACKAGE_NAME "LLVM" #define PACKAGE_NAME "LLVM"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define PACKAGE_STRING "LLVM 8.0.0" #define PACKAGE_STRING "LLVM 8.0.1"
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "8.0.0" #define PACKAGE_VERSION "8.0.1"
/* Define to the vendor of this package. */ /* Define to the vendor of this package. */
/* #undef PACKAGE_VENDOR */ /* #undef PACKAGE_VENDOR */

View File

@ -73,10 +73,10 @@
#define LLVM_VERSION_MINOR 0 #define LLVM_VERSION_MINOR 0
/* Patch version of the LLVM API */ /* Patch version of the LLVM API */
#define LLVM_VERSION_PATCH 0 #define LLVM_VERSION_PATCH 1
/* LLVM version string */ /* LLVM version string */
#define LLVM_VERSION_STRING "8.0.0" #define LLVM_VERSION_STRING "8.0.1"
/* Whether LLVM records statistics for use with GetStatistics(), /* Whether LLVM records statistics for use with GetStatistics(),
* PrintStatistics() or PrintStatisticsJSON() * PrintStatistics() or PrintStatisticsJSON()

View File

@ -1,2 +1,2 @@
/* $FreeBSD$ */ /* $FreeBSD$ */
#define LLVM_REVISION "svn-r356365" #define LLVM_REVISION "svn-r363030"

View File

@ -22,10 +22,11 @@ crtend.o: crtend.c
crtendS.o: crtend.c crtendS.o: crtend.c
crtbegin.o crtend.o crtbeginT.o: crtbegin.o crtend.o crtbeginT.o:
${CC} ${CFLAGS} -I${.CURDIR} -c -o ${.TARGET} ${.ALLSRC} ${CC} ${CFLAGS} -I${.CURDIR} -c -o ${.TARGET} ${.ALLSRC:N*.h:[1]}
crtbeginS.o crtendS.o: crtbeginS.o crtendS.o:
${CC} ${CFLAGS} -I${.CURDIR} ${CFLAGS_CRTS} -c -o ${.TARGET} ${.ALLSRC} ${CC} ${CFLAGS} -I${.CURDIR} ${CFLAGS_CRTS} -c -o ${.TARGET} \
${.ALLSRC:N*.h:[1]}
.endif .endif

View File

@ -209,6 +209,7 @@
#define HAVE_TZSET 1 #define HAVE_TZSET 1
#define HAVE_UINTMAX_T 1 #define HAVE_UINTMAX_T 1
#define HAVE_UNISTD_H 1 #define HAVE_UNISTD_H 1
#define HAVE_UNLINKAT 1
#define HAVE_UNSETENV 1 #define HAVE_UNSETENV 1
#define HAVE_UNSIGNED_LONG_LONG 1 #define HAVE_UNSIGNED_LONG_LONG 1
#define HAVE_UNSIGNED_LONG_LONG_INT 1 #define HAVE_UNSIGNED_LONG_LONG_INT 1

View File

@ -506,6 +506,7 @@ ${PACKAGE}FILES+= test_read_format_rar_multivolume.part0004.rar.uu
${PACKAGE}FILES+= test_read_format_rar_noeof.rar.uu ${PACKAGE}FILES+= test_read_format_rar_noeof.rar.uu
${PACKAGE}FILES+= test_read_format_rar_ppmd_lzss_conversion.rar.uu ${PACKAGE}FILES+= test_read_format_rar_ppmd_lzss_conversion.rar.uu
${PACKAGE}FILES+= test_read_format_rar_ppmd_use_after_free.rar.uu ${PACKAGE}FILES+= test_read_format_rar_ppmd_use_after_free.rar.uu
${PACKAGE}FILES+= test_read_format_rar_ppmd_use_after_free2.rar.uu
${PACKAGE}FILES+= test_read_format_rar_sfx.exe.uu ${PACKAGE}FILES+= test_read_format_rar_sfx.exe.uu
${PACKAGE}FILES+= test_read_format_rar_subblock.rar.uu ${PACKAGE}FILES+= test_read_format_rar_subblock.rar.uu
${PACKAGE}FILES+= test_read_format_rar_unicode.rar.uu ${PACKAGE}FILES+= test_read_format_rar_unicode.rar.uu
@ -513,6 +514,7 @@ ${PACKAGE}FILES+= test_read_format_rar_windows.rar.uu
${PACKAGE}FILES+= test_read_format_rar5_arm.rar.uu ${PACKAGE}FILES+= test_read_format_rar5_arm.rar.uu
${PACKAGE}FILES+= test_read_format_rar5_blake2.rar.uu ${PACKAGE}FILES+= test_read_format_rar5_blake2.rar.uu
${PACKAGE}FILES+= test_read_format_rar5_compressed.rar.uu ${PACKAGE}FILES+= test_read_format_rar5_compressed.rar.uu
${PACKAGE}FILES+= test_read_format_rar5_different_window_size.rar.uu
${PACKAGE}FILES+= test_read_format_rar5_distance_overflow.rar.uu ${PACKAGE}FILES+= test_read_format_rar5_distance_overflow.rar.uu
${PACKAGE}FILES+= test_read_format_rar5_extra_field_version.rar.uu ${PACKAGE}FILES+= test_read_format_rar5_extra_field_version.rar.uu
${PACKAGE}FILES+= test_read_format_rar5_fileattr.rar.uu ${PACKAGE}FILES+= test_read_format_rar5_fileattr.rar.uu

View File

@ -28,7 +28,7 @@
.\" @(#)open.2 8.2 (Berkeley) 11/16/93 .\" @(#)open.2 8.2 (Berkeley) 11/16/93
.\" $FreeBSD$ .\" $FreeBSD$
.\" .\"
.Dd November 11, 2018 .Dd June 14, 2019
.Dt OPEN 2 .Dt OPEN 2
.Os .Os
.Sh NAME .Sh NAME
@ -224,10 +224,7 @@ The descriptor remains in non-blocking mode for subsequent operations.
If If
.Dv O_FSYNC .Dv O_FSYNC
is used in the mask, all writes will is used in the mask, all writes will
immediately be written to disk, immediately and synchronously be written to disk.
the kernel will not cache written data
and all writes on the descriptor will not return until
the data to be written completes.
.Pp .Pp
.Dv O_SYNC .Dv O_SYNC
is a synonym for is a synonym for

View File

@ -424,6 +424,39 @@ fileargs_free(fileargs_t *fa)
free(fa); free(fa);
} }
cap_channel_t *
fileargs_unwrap(fileargs_t *fa, int *flags)
{
cap_channel_t *chan;
if (fa == NULL)
return (NULL);
assert(fa->fa_magic == FILEARGS_MAGIC);
chan = fa->fa_chann;
if (flags != NULL) {
*flags = fa->fa_fdflags;
}
nvlist_destroy(fa->fa_cache);
explicit_bzero(&fa->fa_magic, sizeof(fa->fa_magic));
free(fa);
return (chan);
}
fileargs_t *
fileargs_wrap(cap_channel_t *chan, int fdflags)
{
if (chan == NULL) {
return (NULL);
}
return (fileargs_create(chan, fdflags));
}
/* /*
* Service functions. * Service functions.
*/ */

Some files were not shown because too many files have changed in this diff Show More