MFHead @349234
Sponsored by: The FreeBSD Foundation
This commit is contained in:
commit
e532a99901
77
.clang-format
Normal file
77
.clang-format
Normal 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
1
.gitattributes
vendored
@ -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
|
||||||
|
@ -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 \
|
||||||
|
@ -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
|
||||||
|
13
UPDATING
13
UPDATING
@ -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
|
||||||
|
@ -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//} \
|
||||||
|
@ -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
|
||||||
|
@ -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 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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.
|
||||||
|
9
cddl/usr.sbin/dtrace/tests/amd64/Makefile
Normal file
9
cddl/usr.sbin/dtrace/tests/amd64/Makefile
Normal 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>
|
@ -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>
|
||||||
|
@ -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);
|
||||||
|
@ -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",
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
@ -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
|
@ -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
|
@ -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 *
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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__)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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";
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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");
|
||||||
|
|
||||||
|
@ -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))),
|
||||||
|
@ -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")>;
|
||||||
|
@ -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>;
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
@ -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;
|
||||||
|
@ -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>;
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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; }
|
||||||
|
@ -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(
|
||||||
|
@ -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)>,
|
||||||
|
@ -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>,
|
||||||
|
@ -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
|
||||||
|
@ -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> :
|
||||||
|
@ -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
|
||||||
|
@ -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) {
|
||||||
|
@ -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;
|
||||||
|
@ -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!
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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";
|
||||||
|
@ -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))
|
||||||
|
@ -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);
|
||||||
|
@ -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));
|
||||||
|
@ -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)
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
|
@ -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"));
|
||||||
|
@ -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());
|
||||||
});
|
});
|
||||||
|
@ -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);
|
||||||
|
@ -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:
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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:
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
@ -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';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
16
etc/Makefile
16
etc/Makefile
@ -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
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
..
|
..
|
||||||
lib
|
lib
|
||||||
clang
|
clang
|
||||||
8.0.0
|
8.0.1
|
||||||
lib
|
lib
|
||||||
freebsd
|
freebsd
|
||||||
..
|
..
|
||||||
|
@ -152,6 +152,8 @@
|
|||||||
..
|
..
|
||||||
ppbus
|
ppbus
|
||||||
..
|
..
|
||||||
|
pwm
|
||||||
|
..
|
||||||
smbus
|
smbus
|
||||||
..
|
..
|
||||||
speaker
|
speaker
|
||||||
|
@ -722,6 +722,8 @@
|
|||||||
..
|
..
|
||||||
..
|
..
|
||||||
..
|
..
|
||||||
|
devrandom
|
||||||
|
..
|
||||||
dtrace
|
dtrace
|
||||||
..
|
..
|
||||||
fifo
|
fifo
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
aout
|
aout
|
||||||
..
|
..
|
||||||
clang
|
clang
|
||||||
8.0.0
|
8.0.1
|
||||||
include
|
include
|
||||||
sanitizer
|
sanitizer
|
||||||
..
|
..
|
||||||
|
@ -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
|
||||||
..
|
..
|
||||||
..
|
..
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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]}
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
#-----------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
|
@ -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>
|
||||||
|
@ -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 \
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
/* $FreeBSD$ */
|
/* $FreeBSD$ */
|
||||||
|
|
||||||
#define FREEBSD_CC_VERSION 1300003
|
#define FREEBSD_CC_VERSION 1300004
|
||||||
|
@ -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
|
||||||
|
@ -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"
|
||||||
|
@ -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 */
|
||||||
|
@ -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"
|
||||||
|
@ -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 */
|
||||||
|
@ -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()
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
/* $FreeBSD$ */
|
/* $FreeBSD$ */
|
||||||
#define LLVM_REVISION "svn-r356365"
|
#define LLVM_REVISION "svn-r363030"
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
Loading…
Reference in New Issue
Block a user