Index: head/devel/llvm70/Makefile =================================================================== --- head/devel/llvm70/Makefile (revision 483689) +++ head/devel/llvm70/Makefile (revision 483690) @@ -1,604 +1,591 @@ # $FreeBSD$ PORTNAME= llvm DISTVERSION= 7.0.0 -PORTREVISION= 0 +PORTREVISION= 1 CATEGORIES= devel lang MASTER_SITES= http://${PRE_}releases.llvm.org/${LLVM_RELEASE}/${RCDIR} PKGNAMESUFFIX= ${LLVM_SUFFIX} DISTNAME= ${PORTNAME}-${DISTVERSION}.src DISTFILES= ${PORTNAME}-${DISTVERSION}.src${EXTRACT_SUFX} MAINTAINER= brooks@FreeBSD.org COMMENT= LLVM and Clang -# License are listed in the order they appear in LICENSE.TXT -LICENSE= LLVM GTEST REGEX MIT ARM PD -LICENSE_COMB= multi -LICENSE_NAME_LLVM= LLVM Release License -LICENSE_NAME_GTEST= Google test license -LICENSE_NAME_REGEX= OpenBSD Regex License -# pyyaml tests are under the MIT license -LICENSE_NAME_ARM= ARM Limited license -# md5 is in the public domain -LICENSE_FILE_LLVM= ${WRKSRC}/LICENSE.TXT -LICENSE_FILE_GTEST= ${WRKSRC}/utils/unittest/googletest/LICENSE.TXT -LICENSE_FILE_REGEX= ${WRKSRC}/lib/Support/COPYRIGHT.regex -LICENSE_FILE_ARM= ${WRKSRC}/lib/Target/ARM/LICENSE.TXT -LICENSE_PERMS_LLVM= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept -LICENSE_PERMS_GTEST= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept -LICENSE_PERMS_REGEX= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept -LICENSE_PERMS_ARM= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept +.include "${.CURDIR}/../llvm-devel/Makefile.LICENSE" LLVM_RELEASE= ${DISTVERSION:C/rc.*//} LLVM_MAJOR= ${LLVM_RELEASE:C/\.[0-9]\.[0-9]$//} RCDIR= ${DISTVERSION:S/${LLVM_RELEASE}//:C|(rc.*)|\1/|} PRE_= ${DISTVERSION:C/.*rc.*/pre/:N*[0-9]*} LLVM_SUFFIX= ${LLVM_RELEASE:C/\.[0-9]$//:C/\.//} LLVM_PREFIX= ${PREFIX}/llvm${LLVM_SUFFIX} DOCSDIR= ${PREFIX}/share/doc/${PORTNAME}${LLVM_SUFFIX} DATADIR= ${PREFIX}/share/${PORTNAME}${LLVM_SUFFIX} USES= cmake:outsource compiler:c++11-lib libedit perl5 tar:xz \ shebangfix _USES_PYTHON?= python:2.7,build USES+= ${_USES_PYTHON} USE_LDCONFIG= ${LLVM_PREFIX}/lib SHEBANG_FILES= utils/lit/lit.py utils/llvm-lit/llvm-lit.in \ tools/clang/utils/hmaptool/hmaptool SUB_FILES= llvm-wrapper.sh SUB_LIST= LLVM_PREFIX="${LLVM_PREFIX}" LLVM_SUFFIX="${LLVM_SUFFIX}" CMAKE_INSTALL_PREFIX= ${LLVM_PREFIX} CMAKE_ARGS= -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON CMAKE_ARGS+= -DLLVM_ENABLE_RTTI=ON CMAKE_ARGS+= -DLLVM_DEFAULT_TARGET_TRIPLE=${CONFIGURE_TARGET} CMAKE_ARGS+= -DLLVM_HOST_TRIPLE=${CONFIGURE_TARGET} # Following commit https://github.com/kitware/cmake/commit/956054 # we need to either change the whole man-shuffle below, or simply # redefine CMAKE_INSTALL_MANDIR CMAKE_ARGS+= -DCMAKE_INSTALL_MANDIR:PATH="share/man" CMAKE_ARGS+= -DLLVM_PARALLEL_LINK_JOBS=1 OPTIONS_DEFINE= CLANG DOCS EXTRAS LIT LLD LLDB OPTIONS_DEFINE_amd64= COMPILER_RT GOLD OPENMP OPTIONS_DEFINE_i386= COMPILER_RT OPENMP OPTIONS_DEFAULT= CLANG EXTRAS LIT LLD LLDB OPTIONS_DEFAULT_amd64= COMPILER_RT GOLD OPENMP OPTIONS_DEFAULT_i386= COMPILER_RT OPENMP OPTIONS_SUB= yes CLANG_DESC= Build clang CLANG_EXTRA_PATCHES= ${PATCHDIR}/clang CLANG_CONFLICTS_INSTALL= clang-devel-3.[1234567]* CLANG_DISTFILES= cfe-${DISTVERSION}.src${EXTRACT_SUFX} CLANG_CMAKE_ON= -DCLANG_DEFAULT_OPENMP_RUNTIME=libomp CLANG_PORTDOCS= clang CLANG_USE= GNOME=libxml2 COMPILER_RT_DESC= Sanitizer libraries COMPILER_RT_DISTFILES= compiler-rt-${DISTVERSION}.src${EXTRACT_SUFX} COMPILER_RT_PLIST_FILES=${_COMPILER_RT_LIBS:S|^|${_CRTLIBDIR}/|} \ ${_COMPILER_RT_BLACKLISTS:S|^|${_CRTBLDIR}/|} DOCS_BUILD_DEPENDS= sphinx-build:textproc/py-sphinx DOCS_PORTDOCS= llvm DOCS_CMAKE_ON= -DLLVM_ENABLE_SPHINX=ON \ -DSPHINX_WARNINGS_AS_ERRORS=OFF \ -DLLVM_BUILD_DOCS=ON DOCS_PLIST_FILES= ${MAN1SRCS:S|^|man/man1/|:S|.1$|${LLVM_SUFFIX}.1.gz|} EXTRAS_DESC= Extra clang tools EXTRAS_IMPLIES= CLANG EXTRAS_DISTFILES= clang-tools-extra-${DISTVERSION}.src${EXTRACT_SUFX} GOLD_DESC= Build the LLVM Gold plugin for LTO GOLD_CMAKE_ON= -DLLVM_BINUTILS_INCDIR=${LOCALBASE}/include GOLD_BUILD_DEPENDS= ${LOCALBASE}/bin/ld.gold:devel/binutils LIT_DESC= Install lit and FileCheck test tools LIT_VARS= _USES_PYTHON=python:2.7 LLD_DESC= Install lld, the LLVM linker LLD_DISTFILES= lld-${DISTVERSION}.src${EXTRACT_SUFX} +LLD_EXTRA_PATCHES= ${PATCHDIR}/lld LLDB_BUILD_DEPENDS= swig3.0:devel/swig30 \ ${PY_ENUM34} LLDB_DESC= Install lldb, the LLVM debugger LLDB_DISTFILES= lldb-${DISTVERSION}.src${EXTRACT_SUFX} +LLDB_EXTRA_PATCHES= ${PATCHDIR}/lldb LLDB_IMPLIES= CLANG LLDB_VARS= _USES_PYTHON=python:2.7 OPENMP_DESC= Install libomp, the LLVM OpenMP runtime library OPENMP_DISTFILES= openmp-${DISTVERSION}.src${EXTRACT_SUFX} OPENMP_EXTRA_PATCHES= ${PATCHDIR}/openmp .if defined(WITH_DEBUG) CMAKE_BUILD_TYPE= RelWithDebInfo STRIP= .endif # Emulate USE_GITHUB's ${WRKSRC_tag} to reduce diffs to ../llvm-devel .for option in CLANG COMPILER_RT EXTRAS LLD LLDB OPENMP WRKSRC_${option:tl}= ${WRKDIR}/${${option}_DISTFILES:S/${EXTRACT_SUFX}//} .endfor OPTIONS_SUB= yes PLIST_SUB+= LLVM_RELEASE=${LLVM_RELEASE} \ LLVM_SUFFIX=${LLVM_SUFFIX} \ LLVM_MAJOR=${LLVM_MAJOR} COMMANDS= bugpoint \ dsymutil \ llc \ lli \ llvm-ar \ llvm-as \ llvm-bcanalyzer \ llvm-cat \ llvm-cfi-verify \ llvm-config \ llvm-cov \ llvm-cvtres \ llvm-diff \ llvm-dis \ llvm-dlltool \ llvm-dwarfdump \ llvm-dwp \ llvm-exegesis \ llvm-extract \ llvm-link \ llvm-mc \ llvm-mca \ llvm-modextract \ llvm-mt \ llvm-nm \ llvm-objcopy \ llvm-objdump \ llvm-opt-report \ llvm-pdbutil \ llvm-profdata \ llvm-ranlib \ llvm-rc \ llvm-readelf \ llvm-readobj \ llvm-rtdyld \ llvm-size \ llvm-split \ llvm-stress \ llvm-strings \ llvm-strip \ llvm-symbolizer \ llvm-tblgen \ llvm-undname \ llvm-xray \ macho-dump \ opt \ sancov FIRST_COMMAND= ${COMMANDS:C/^/XXXX/1:MXXXX*:C/^XXXX//} STRIP_LIBS= BugpointPasses.so \ LLVMHello.so \ ${LIBNAME}.0 \ libLTO.so EXTRAS_COMMANDS+= \ clang-apply-replacements \ clang-change-namespace \ clang-include-fixer \ clang-modernize \ clang-query \ clang-rename \ clang-reorder-fields \ clang-tidy \ clangd \ find-all-symbols \ modularize EXTRAS_LIBS= libclangApplyReplacements \ libclangChangeNamespace \ libclangDaemon \ libclangIncludeFixer \ libclangMove \ libclangQuery \ libclangRename \ libclangReorderFields \ libclangTidy \ libclangTidyGoogleModule \ libclangTidyLLVMModule \ libclangTidyMiscModule \ libclangTidyReadabilityModule \ libclangTidyUtils \ libfindAllSymbols \ libmodernizeCore EXTRAS_PATTERN= ${EXTRAS_COMMANDS:tW:C/ */|/g}|${EXTRAS_LIBS:tW:C/ */|/g} .include # keep in sync with /usr/src/lib/clang/clang.build.mk # ----------- start of sync block ------------------ # Armv6 and armv7 uses hard float abi, unless the CPUTYPE has soft in it. # arm (for armv4 and armv5 CPUs) always uses the soft float ABI. # For all other targets, we stick with 'unknown'. .if ${ARCH:Marmv[67]*} && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "") TARGET_ABI= -gnueabihf .elif ${ARCH:Marm*} TARGET_ABI= -gnueabi .else TARGET_ABI= .endif CONFIGURE_TARGET:=${ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-portbld-${OPSYS:tl}${OSREL}${TARGET_ABI} # ----------- end of sync block -------------------- .if ${PORT_OPTIONS:MCLANG} COMMANDS+= c-index-test \ clang \ clang++ \ clang-check \ clang-cpp \ clang-format \ clang-func-mapping \ clang-import-test \ clang-offload-bundler \ diagtool \ hmaptool \ scan-build \ scan-view MAN1SRCS+= clang.1 \ diagtool.1 \ scan-build.1 CLANG_PATTERN= (c-index-test|clang|scan-|Reporter.py|ScanView.py|scanview.css|sorttable.js|startfile.py|-analyzer) SHEBANG_FILES+= tools/clang/tools/scan-view/bin/scan-view \ tools/clang/tools/clang-format/git-clang-format \ tools/clang/tools/clang-format/clang-format-diff.py +USES+= gnome .endif .if ${PORT_OPTIONS:MCOMPILER_RT} COMPILER_RT_PATTERN= (_blacklist.txt|sanitizer|include.xray) .endif .if ${PORT_OPTIONS:MLIT} MAN1SRCS+= lit.1 FileCheck.1 LIT_COMMANDS= lit llvm-lit FileCheck .endif .if ${PORT_OPTIONS:MLLDB} COMMANDS+= lldb \ lldb-argdumper \ lldb-mi \ lldb-server \ lldb-test .endif .if ! ${OPTIONS_DEFINE:MCOMPILER_RT} # Hack to disable COMPILER_RT in plist of unsupported architectures PLIST_SUB+= COMPILER_RT="@comment " .else .endif .if ! ${OPTIONS_DEFINE:MGOLD} # Hack to disable GOLD in plist of unsupported architectures PLIST_SUB+= GOLD="@comment " .else .endif .if ! ${OPTIONS_DEFINE:MOPENMP} # Hack to disable OPENMP in plist of unsupported architectures PLIST_SUB+= OPENMP="@comment " .else .endif MAN1SRCS+= bugpoint.1 dsymutil.1 llc.1 lli.1 llvm-ar.1 llvm-as.1 \ llvm-bcanalyzer.1 llvm-build.1 llvm-config.1 llvm-cov.1 \ llvm-diff.1 llvm-dis.1 llvm-dwarfdump.1 \ llvm-exegesis.1 \ llvm-extract.1 llvm-lib.1 llvm-link.1 \ llvm-mca.1 \ llvm-nm.1 \ llvm-pdbutil.1 \ llvm-profdata.1 llvm-readobj.1 llvm-stress.1 llvm-symbolizer.1 \ opt.1 tblgen.1 .include _CRTLIBDIR= ${LLVM_PREFIX:S|${PREFIX}/||}/lib/clang/${LLVM_RELEASE}/lib/freebsd _CRTBLDIR= ${LLVM_PREFIX:S|${PREFIX}/||}/share _COMPILER_RT_BLACKLISTS= cfi_blacklist.txt .if ${ARCH} == "amd64" _COMPILER_RT_BLACKLISTS+= asan_blacklist.txt _COMPILER_RT_BLACKLISTS+= msan_blacklist.txt _COMPILER_RT_LIBS= \ libclang_rt.asan-preinit-x86_64.a \ libclang_rt.asan-x86_64.a \ libclang_rt.asan-x86_64.a.syms \ libclang_rt.asan-x86_64.so \ libclang_rt.asan_cxx-x86_64.a \ libclang_rt.asan_cxx-x86_64.a.syms \ libclang_rt.builtins-x86_64.a \ libclang_rt.dd-x86_64.a \ libclang_rt.dyndd-x86_64.so \ libclang_rt.fuzzer-x86_64.a \ libclang_rt.fuzzer_no_main-x86_64.a \ libclang_rt.lsan-x86_64.a \ libclang_rt.msan-x86_64.a \ libclang_rt.msan-x86_64.a.syms \ libclang_rt.msan_cxx-x86_64.a \ libclang_rt.msan_cxx-x86_64.a.syms \ libclang_rt.profile-x86_64.a \ libclang_rt.safestack-x86_64.a \ libclang_rt.stats-x86_64.a \ libclang_rt.stats_client-x86_64.a \ libclang_rt.tsan-x86_64.a \ libclang_rt.tsan-x86_64.a.syms \ libclang_rt.tsan_cxx-x86_64.a \ libclang_rt.tsan_cxx-x86_64.a.syms \ libclang_rt.ubsan_minimal-x86_64.a \ libclang_rt.ubsan_minimal-x86_64.a.syms \ libclang_rt.ubsan_minimal-x86_64.so \ libclang_rt.ubsan_standalone-x86_64.a \ libclang_rt.ubsan_standalone-x86_64.a.syms \ libclang_rt.ubsan_standalone-x86_64.so \ libclang_rt.ubsan_standalone_cxx-x86_64.a \ libclang_rt.ubsan_standalone_cxx-x86_64.a.syms \ libclang_rt.xray-basic-x86_64.a \ libclang_rt.xray-fdr-x86_64.a \ libclang_rt.xray-profiling-x86_64.a \ libclang_rt.xray-x86_64.a .endif .if ${ARCH} == "i386" _COMPILER_RT_BLACKLISTS+= asan_blacklist.txt _COMPILER_RT_LIBS+= \ libclang_rt.asan-i386.a \ libclang_rt.asan-i386.so \ libclang_rt.asan-preinit-i386.a \ libclang_rt.asan_cxx-i386.a \ libclang_rt.builtins-i386.a \ libclang_rt.lsan-i386.a \ libclang_rt.profile-i386.a \ libclang_rt.safestack-i386.a \ libclang_rt.stats-i386.a \ libclang_rt.stats_client-i386.a \ libclang_rt.ubsan_minimal-i386.a \ libclang_rt.ubsan_minimal-i386.so \ libclang_rt.ubsan_standalone-i386.a \ libclang_rt.ubsan_standalone-i386.so \ libclang_rt.ubsan_standalone_cxx-i386.a .endif .if ${PORT_OPTIONS:MEXTRAS} COMMANDS+= ${EXTRAS_COMMANDS} MAN1SRCS+= extraclangtools.1 PORTDOCS+= clang-tools SHEBANG_FILES+= tools/clang/tools/extra/clang-tidy/tool/clang-tidy-diff.py \ tools/clang/tools/extra/clang-tidy/tool/run-clang-tidy.py \ tools/clang/tools/extra/include-fixer/find-all-symbols/tool/run-find-all-symbols.py .endif .if ${PORT_OPTIONS:MLLD} COMMANDS+= ld.lld \ ld64.lld \ lld \ lld-link \ wasm-ld PORTDOCS+= lld .endif .if ${OPSYS} == "FreeBSD" && ${COMPILER_TYPE} != clang CXXFLAGS+= -D_GLIBCXX_USE_C99 .endif .if ${ARCH} == "armv6" || ${ARCH} == "armv7" BUILD_DEPENDS+= ${LOCALBASE}/bin/ld:devel/binutils CONFIGURE_ENV+= COMPILER_PATH=${LOCALBASE}/bin MAKE_ENV+= COMPILER_PATH=${LOCALBASE}/bin .endif post-extract-CLANG-on: ${MV} ${WRKSRC_clang} ${PATCH_WRKSRC}/tools/clang post-extract-EXTRAS-on: ${MV} ${WRKSRC_extras} ${PATCH_WRKSRC}/tools/clang/tools/extra post-extract-LLD-on: ${MV} ${WRKSRC_lld} ${PATCH_WRKSRC}/tools/lld post-extract-LLDB-on: ${MV} ${WRKSRC_lldb} ${PATCH_WRKSRC}/tools/lldb post-extract-OPENMP-on: ${MV} ${WRKSRC_openmp} ${PATCH_WRKSRC}/projects/openmp post-patch: ${REINPLACE_CMD} -e 's|import lit|import lit${LLVM_SUFFIX}|' \ -e 's|from lit|from lit${LLVM_SUFFIX}|' \ -e 's|lit\.|lit${LLVM_SUFFIX}.|' \ ${WRKSRC}/utils/lit/lit.py ${WRKSRC}/utils/lit/lit/*.py \ ${WRKSRC}/utils/lit/lit/formats/*.py ${REINPLACE_CMD} -e 's,/usr/local/,${LOCALBASE}/,' \ ${WRKSRC}/CMakeLists.txt post-patch-CLANG-on: ${REINPLACE_CMD} -e 's|%%LLVM_PREFIX%%|${LLVM_PREFIX}|' \ ${PATCH_WRKSRC}/tools/clang/lib/Driver/ToolChains/CommonArgs.cpp ${REINPLACE_CMD} -e 's|%%LLVM_SUFFIX%%|${LLVM_SUFFIX}|' \ ${PATCH_WRKSRC}/tools/clang/tools/clang-format/clang-format.py \ ${PATCH_WRKSRC}/tools/clang/tools/clang-format/clang-format-sublime.py \ ${PATCH_WRKSRC}/tools/clang/tools/clang-format/git-clang-format post-build-COMPILER_RT-on: ${MKDIR} ${WRKDIR}/compiler-rt-build cd ${WRKDIR}/compiler-rt-build && \ ${SETENV} ${CONFIGURE_ENV} ${CMAKE_BIN} ${CMAKE_ARGS} \ -DLLVM_CONFIG_PATH=${CONFIGURE_WRKSRC}/bin/llvm-config \ ${WRKSRC_compiler_rt} && \ ${MAKE_ENV} ${MAKE_CMD} post-install: ${RM} -r ${STAGEDIR}${LLVM_PREFIX}/include/llvm/MC/MCAnalysis ${INSTALL_SCRIPT} ${WRKDIR}/llvm-wrapper.sh \ ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX} .for command in ${COMMANDS:C/^/XXXX/1:NXXXX*} ${LN} -f ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX} \ ${STAGEDIR}${PREFIX}/bin/${command}${LLVM_SUFFIX} .endfor post-install-DOCS-on: ${MV} ${STAGEDIR}${LLVM_PREFIX}/share/doc ${STAGEDIR}${DOCSDIR} .for _man in ${MAN1SRCS} ${MV} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/${_man} \ ${STAGEDIR}${MANPREFIX}/man/man1/${_man:R}${LLVM_SUFFIX}.1 .endfor .if ! ${PORT_OPTIONS:MLIT} ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/lit.1 ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/FileCheck.1 .endif ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/ .if ${PORT_OPTIONS:MCLANG} post-install-DOCS-off: ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/scan-build.1 ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/ .endif post-install-LLD-on: ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/include/llvm/BinaryFormat/WasmRelocs post-install-CLANG-on: ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/clang \ ${STAGEDIR}${LLVM_PREFIX}/bin/clang-cpp ${INSTALL_PROGRAM} ${WRKDIR}/.build/bin/clang-tblgen \ ${STAGEDIR}${LLVM_PREFIX}/bin/ post-install-COMPILER_RT-on: cd ${WRKDIR}/compiler-rt-build && \ ${MAKE_ENV} ${MAKE_CMD} ${INSTALL_TARGET} .if ${ARCH} == "amd64" ${RM} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd/libclang_rt*i386* .endif ${MKDIR} ${STAGEDIR}${PREFIX}/${_CRTLIBDIR} ${MV} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd/* \ ${STAGEDIR}${PREFIX}/${_CRTLIBDIR} ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd post-install-LIT-on: ${INSTALL_SCRIPT} ${PATCH_WRKSRC}/utils/lit/lit.py \ ${STAGEDIR}${LLVM_PREFIX}/bin/lit ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \ ${STAGEDIR}${LLVM_PREFIX}/bin/llvm-lit ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \ ${STAGEDIR}${PREFIX}/bin/lit${LLVM_SUFFIX} ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \ ${STAGEDIR}${PREFIX}/bin/llvm-lit${LLVM_SUFFIX} ${MKDIR} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX} ${MKDIR} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX}/formats ${INSTALL_DATA} ${WRKSRC}/utils/lit/lit/*.py \ ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX} ${INSTALL_DATA} ${WRKSRC}/utils/lit/lit/formats/*.py \ ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX}/formats ${INSTALL_PROGRAM} ${WRKDIR}/.build/bin/FileCheck \ ${STAGEDIR}${LLVM_PREFIX}/bin/ ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/FileCheck \ ${STAGEDIR}${PREFIX}/bin/FileCheck${LLVM_SUFFIX} TEST_CMD= '(cd ${WRKSRC}/test; ${SETENV} ${MAKE_ENV} LD_LIBRARY_PATH=${WRKSRC}/Release/lib ${MAKE_CMD} check-local-lit)' do-test: if [ `${ID} -u` = 0 ]; then \ ${CHOWN} -R nobody ${WRKSRC}/test; \ su -m nobody -c ${TEST_CMD}; \ else \ ${SH} -c ${TEST_CMD}; \ fi build-plist: ${RM} ${PLIST} ${PLIST}.tmp ${ECHO_CMD} "@comment >>>>> GENERATED FILE, DO NOT EDIT <<<<<" >> ${PLIST}.tmp ${ECHO_CMD} "@comment Alter build-plist target and regenerate as required" >> ${PLIST}.tmp .for command in ${COMMANDS} ${ECHO_CMD} bin/${command}%%LLVM_SUFFIX%% >> ${PLIST}.tmp .endfor .for command in ${LIT_COMMANDS} ${ECHO_CMD} %%LIT%%bin/${command}%%LLVM_SUFFIX%% >> ${PLIST}.tmp ${ECHO_CMD} %%LIT%%${LLVM_PREFIX:S|${PREFIX}/||:C|${LLVM_SUFFIX}|%%LLVM_SUFFIX%%|}/bin/${command} >> ${PLIST}.tmp .endfor ${FIND} ${STAGEDIR}${LLVM_PREFIX} -type f -o -type l | \ ${GREP} -v '_blacklist.txt$$' | \ ${GREP} -v '[/-]lit$$' | ${GREP} -v 'FileCheck$$' | \ ${GREP} -v man/man1 | ${SED} -e 's|${STAGEDIR}${PREFIX}/||' \ -e 's|${PYTHON_SITELIBDIR:C|${PREFIX}/||}|%%PYTHON_SITELIBDIR%%|' \ -e 's|${LLVM_RELEASE}|%%LLVM_RELEASE%%|' \ -e 's|release.cmake|%%CMAKE_BUILD_TYPE%%.cmake|' \ -e 's|${LLVM_RELEASE:C/\./\\./g}|%%LLVM_RELEASE%%|' \ -e 's|${LLVM_SUFFIX:C/\./\\./g}|%%LLVM_SUFFIX%%|' \ -e 's|${LLVM_MAJOR}|%%LLVM_MAJOR%%|' \ | ${SORT} >> ${PLIST}.tmp ${FIND} ${STAGEDIR}${PYTHON_SITELIBDIR}/lit${LLVM_SUFFIX} -type f | \ ${SED} -e 's|${STAGEDIR}${PYTHON_SITELIBDIR}|%%LIT%%%%PYTHON_SITELIBDIR%%|' \ -e 's|${LLVM_RELEASE:C/\./\\./g}|%%LLVM_RELEASE%%|' \ -e 's|${LLVM_SUFFIX:C/\./\\./g}|%%LLVM_SUFFIX%%|' \ -e 's|${LLVM_MAJOR}|%%LLVM_MAJOR%%|' \ | ${SORT} >> ${PLIST}.tmp ${AWK} '{ \ if ($$0 ~ /${CLANG_PATTERN}/ && $$0 !~ /(omp.h|ompt.h|${EXTRAS_PATTERN}|libclang_rt)/) {printf "%%%%CLANG%%%%"} \ if ($$0 ~ /${COMPILER_RT_PATTERN}/) \ {printf "%%%%COMPILER_RT%%%%"} \ if ($$0 ~ /(${EXTRAS_PATTERN})/) {printf "%%%%EXTRAS%%%%"} \ if ($$0 ~ /(libclangDoc.a)/) {printf "%%%%DOCS%%%%"} \ if ($$0 ~ /(lld|wasm-ld)/ && $$0 !~ /(lldb)/) {printf "%%%%LLD%%%%"} \ if ($$0 ~ /(argdumper|lldb|six.py)/) {printf "%%%%LLDB%%%%"} \ if ($$0 ~ /(lib.*omp|omp.h|ompt.h)/) {printf "%%%%OPENMP%%%%"} \ if ($$0 ~ /(LLVMgold)/) {printf "%%%%GOLD%%%%"} \ if ($$0 !~ /(libclang_rt)/) {print}}' ${PLIST}.tmp >> ${PLIST} ${ECHO_CMD} '@postexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi' >> ${PLIST} ${ECHO_CMD} '@postunexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi' >> ${PLIST} ${RM} ${PLIST}.tmp check-commands: .for command in ${COMMANDS} test -e ${STAGEDIR}${LLVM_PREFIX}/bin/${command} .endfor .if make(svn-patch-llvm) .if !defined(PATCH_REV) .error svn-patch-llvm requires that PATCH_REV be set .endif _PATCH_FILE=${FILESDIR}/patch-svn-${PATCH_REV} _LLVM_BASE=http://llvm.org/svn/llvm-project/llvm/trunk svn-patch-llvm: svn log -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE} svn diff -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE} .endif .if make(svn-patch-clang) .if !defined(PATCH_REV) .error svn-patch-clang requires that PATCH_REV be set .endif _PATCH_FILE=${FILESDIR}/clang/patch-svn-${PATCH_REV} _LLVM_BASE=http://llvm.org/svn/llvm-project/cfe/trunk svn-patch-clang: svn log -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE} svn diff -c ${PATCH_REV} ${_LLVM_BASE} | \ ${SED} -E -e 's;^(---|\+\+\+) ;\1 tools/clang/;' >> ${_PATCH_FILE} .endif .if make(svn-patch-compiler-rt) .if !defined(PATCH_REV) .error svn-patch-compiler-rt requires that PATCH_REV be set .endif _PATCH_FILE=${FILESDIR}/compiler-rt/patch-svn-${PATCH_REV} _LLVM_BASE=http://llvm.org/svn/llvm-project/compiler-rt/trunk svn-patch-compiler-rt: svn log -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE} svn diff -c ${PATCH_REV} ${_LLVM_BASE} | \ ${SED} -E -e 's;^(---|\+\+\+) ;\1 tools/compiler-rt/;' >> ${_PATCH_FILE} .endif .if make(svn-patch-lldb) .if !defined(PATCH_REV) .error svn-patch-lldb requires that PATCH_REV be set .endif _PATCH_FILE=${FILESDIR}/lldb/patch-svn-${PATCH_REV} _LLVM_BASE=http://llvm.org/svn/llvm-project/lldb/trunk svn-patch-lldb: svn log -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE} svn diff -c ${PATCH_REV} ${_LLVM_BASE} | >> ${_PATCH_FILE} .endif .include Index: head/devel/llvm70/files/clang/patch-head-r339019.diff =================================================================== --- head/devel/llvm70/files/clang/patch-head-r339019.diff (nonexistent) +++ head/devel/llvm70/files/clang/patch-head-r339019.diff (revision 483690) @@ -0,0 +1,30 @@ +r339019 | emaste | 2018-09-29 22:01:23 +0200 (Sat, 29 Sep 2018) | 15 lines + +clang: allow ifunc resolvers to accept arguments + +Previously Clang required ifunc resolution functions to take no +arguments, presumably because GCC documented ifunc resolvers as taking +no arguments. However, GCC accepts resolvers accepting arguments, and +our rtld passes CPU ID information (cpuid, hwcap, etc.) to ifunc +resolvers. Just remove the check from the in-tree compiler for our in- +tree compiler; a different (per-OS) approach may be required upstream. + +Reported by: mjg +Approved by: re (rgrimes) +MFC after: 1 week +Relnotes: Yes +Sponsored by: The FreeBSD Foundation + +Index: tools/clang/lib/CodeGen/CodeGenModule.cpp +=================================================================== +--- tools/clang/lib/CodeGen/CodeGenModule.cpp (revision 339018) ++++ tools/clang/lib/CodeGen/CodeGenModule.cpp (revision 339019) +@@ -321,8 +321,6 @@ void CodeGenModule::checkAliases() { + assert(FTy); + if (!FTy->getReturnType()->isPointerTy()) + Diags.Report(Location, diag::err_ifunc_resolver_return); +- if (FTy->getNumParams()) +- Diags.Report(Location, diag::err_ifunc_resolver_params); + } + + llvm::Constant *Aliasee = Alias->getIndirectSymbol(); Property changes on: head/devel/llvm70/files/clang/patch-head-r339019.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1,2 ## +yes +\ No newline at end of property \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/llvm70/files/lld/patch-head-r337282.diff =================================================================== --- head/devel/llvm70/files/lld/patch-head-r337282.diff (nonexistent) +++ head/devel/llvm70/files/lld/patch-head-r337282.diff (revision 483690) @@ -0,0 +1,39 @@ +r337282 | alc | 2018-08-04 04:30:51 +0200 (Sat, 04 Aug 2018) | 7 lines + +Set the default image base on arm64 and i386 to a superpage-aligned +address. + +Reviewed by: emaste, markj +Discussed with: dim +Differential Revision: https://reviews.freebsd.org/D16385 + +Index: tools/lld/ELF/Arch/AArch64.cpp +=================================================================== +--- tools/lld/ELF/Arch/AArch64.cpp (revision 337281) ++++ tools/lld/ELF/Arch/AArch64.cpp (revision 337282) +@@ -66,6 +66,10 @@ AArch64::AArch64() { + PltHeaderSize = 32; + DefaultMaxPageSize = 65536; + ++ // Align to the 2 MiB page size (known as a superpage or huge page). ++ // FreeBSD automatically promotes 2 MiB-aligned allocations. ++ DefaultImageBase = 0x200000; ++ + // It doesn't seem to be documented anywhere, but tls on aarch64 uses variant + // 1 of the tls structures and the tcb size is 16. + TcbSize = 16; +Index: tools/lld/ELF/Arch/X86.cpp +=================================================================== +--- tools/lld/ELF/Arch/X86.cpp (revision 337281) ++++ tools/lld/ELF/Arch/X86.cpp (revision 337282) +@@ -61,6 +61,10 @@ X86::X86() { + PltHeaderSize = 16; + TlsGdRelaxSkip = 2; + TrapInstr = 0xcccccccc; // 0xcc = INT3 ++ ++ // Align to the non-PAE large page size (known as a superpage or huge page). ++ // FreeBSD automatically promotes large, superpage-aligned allocations. ++ DefaultImageBase = 0x400000; + } + + static bool hasBaseReg(uint8_t ModRM) { return (ModRM & 0xc7) != 0x5; } Property changes on: head/devel/llvm70/files/lld/patch-head-r337282.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1,2 ## +yes +\ No newline at end of property \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/llvm70/files/lld/patch-head-r338297.diff =================================================================== --- head/devel/llvm70/files/lld/patch-head-r338297.diff (nonexistent) +++ head/devel/llvm70/files/lld/patch-head-r338297.diff (revision 483690) @@ -0,0 +1,94 @@ +r338297 | dim | 2018-08-24 19:48:05 +0200 (Fri, 24 Aug 2018) | 6 lines + +Apply r338251 ("Preserve relocations against ifuncs when -zifunc-noplt +is specified") on top of lld 7.0.0. This is to prepare for another +merge from head. + +Obtained from: https://github.com/markjdb/freebsd-dev/commit/02f35faa6df364769b9223746b99e3c7ba05c5dd + +Index: tools/lld/ELF/Config.h +=================================================================== +--- tools/lld/ELF/Config.h (revision 338296) ++++ tools/lld/ELF/Config.h (revision 338297) +@@ -181,6 +181,7 @@ struct Configuration { + bool ZCopyreloc; + bool ZExecstack; + bool ZHazardplt; ++ bool ZIfuncnoplt; + bool ZInitfirst; + bool ZKeepTextSectionPrefix; + bool ZNodelete; +Index: tools/lld/ELF/Driver.cpp +=================================================================== +--- tools/lld/ELF/Driver.cpp (revision 338296) ++++ tools/lld/ELF/Driver.cpp (revision 338297) +@@ -338,7 +338,8 @@ static bool getZFlag(opt::InputArgList &Args, Stri + + static bool isKnown(StringRef S) { + return S == "combreloc" || S == "copyreloc" || S == "defs" || +- S == "execstack" || S == "hazardplt" || S == "initfirst" || ++ S == "execstack" || S == "hazardplt" || S == "ifunc-noplt" || ++ S == "initfirst" || + S == "keep-text-section-prefix" || S == "lazy" || S == "muldefs" || + S == "nocombreloc" || S == "nocopyreloc" || S == "nodelete" || + S == "nodlopen" || S == "noexecstack" || +@@ -843,6 +844,7 @@ void LinkerDriver::readConfigs(opt::InputArgList & + Config->ZCopyreloc = getZFlag(Args, "copyreloc", "nocopyreloc", true); + Config->ZExecstack = getZFlag(Args, "execstack", "noexecstack", false); + Config->ZHazardplt = hasZOption(Args, "hazardplt"); ++ Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt"); + Config->ZInitfirst = hasZOption(Args, "initfirst"); + Config->ZKeepTextSectionPrefix = getZFlag( + Args, "keep-text-section-prefix", "nokeep-text-section-prefix", false); +Index: tools/lld/ELF/Relocations.cpp +=================================================================== +--- tools/lld/ELF/Relocations.cpp (revision 338296) ++++ tools/lld/ELF/Relocations.cpp (revision 338297) +@@ -366,6 +366,10 @@ static bool isStaticLinkTimeConstant(RelExpr E, Re + R_TLSLD_HINT>(E)) + return true; + ++ // The computation involves output from the ifunc resolver. ++ if (Sym.isGnuIFunc() && Config->ZIfuncnoplt) ++ return false; ++ + // These never do, except if the entire file is position dependent or if + // only the low bits are used. + if (E == R_GOT || E == R_PLT || E == R_TLSDESC) +@@ -816,6 +820,10 @@ static void processRelocAux(InputSectionBase &Sec, + Sec.Relocations.push_back({Expr, Type, Offset, Addend, &Sym}); + return; + } ++ if (Sym.isGnuIFunc() && Config->ZIfuncnoplt) { ++ InX::RelaDyn->addReloc(Type, &Sec, Offset, &Sym, Addend, R_ADDEND, Type); ++ return; ++ } + bool CanWrite = (Sec.Flags & SHF_WRITE) || !Config->ZText; + if (CanWrite) { + // R_GOT refers to a position in the got, even if the symbol is preemptible. +@@ -985,7 +993,7 @@ static void scanReloc(InputSectionBase &Sec, Offse + // all dynamic symbols that can be resolved within the executable will + // actually be resolved that way at runtime, because the main exectuable + // is always at the beginning of a search list. We can leverage that fact. +- if (Sym.isGnuIFunc()) ++ if (Sym.isGnuIFunc() && !Config->ZIfuncnoplt) + Expr = toPlt(Expr); + else if (!Sym.IsPreemptible && Expr == R_GOT_PC && !isAbsoluteValue(Sym)) + Expr = Target->adjustRelaxExpr(Type, RelocatedAddr, Expr); +Index: tools/lld/ELF/Writer.cpp +=================================================================== +--- tools/lld/ELF/Writer.cpp (revision 338296) ++++ tools/lld/ELF/Writer.cpp (revision 338297) +@@ -1561,8 +1561,11 @@ template void Writer::finalizeS + applySynthetic({InX::EhFrame}, + [](SyntheticSection *SS) { SS->finalizeContents(); }); + +- for (Symbol *S : Symtab->getSymbols()) ++ for (Symbol *S : Symtab->getSymbols()) { + S->IsPreemptible |= computeIsPreemptible(*S); ++ if (S->isGnuIFunc() && Config->ZIfuncnoplt) ++ S->ExportDynamic = true; ++ } + + // Scan relocations. This must be done after every symbol is declared so that + // we can correctly decide if a dynamic relocation is needed. Property changes on: head/devel/llvm70/files/lld/patch-head-r338297.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1,2 ## +yes +\ No newline at end of property \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/llvm70/files/lld/patch-head-r338682.diff =================================================================== --- head/devel/llvm70/files/lld/patch-head-r338682.diff (nonexistent) +++ head/devel/llvm70/files/lld/patch-head-r338682.diff (revision 483690) @@ -0,0 +1,64 @@ +r338682 | emaste | 2018-09-14 17:15:16 +0200 (Fri, 14 Sep 2018) | 16 lines + +lld: add -z interpose support + +-z interpose sets the DF_1_INTERPOSE flag, marking the object as an +interposer. + +Committed upstream as LLVM r342239. + +PR: 230604 +Reported by: jbeich +Reviewed by: markj +Approved by: re (kib) +MFC after: 1 week +Relnotes: Yes +Sponsored by: The FreeBSD Foundation +Differential Revision: https://reviews.freebsd.org/D17172 + +Index: tools/lld/ELF/Config.h +=================================================================== +--- tools/lld/ELF/Config.h (revision 338681) ++++ tools/lld/ELF/Config.h (revision 338682) +@@ -183,6 +183,7 @@ struct Configuration { + bool ZHazardplt; + bool ZIfuncnoplt; + bool ZInitfirst; ++ bool ZInterpose; + bool ZKeepTextSectionPrefix; + bool ZNodelete; + bool ZNodlopen; +Index: tools/lld/ELF/Driver.cpp +=================================================================== +--- tools/lld/ELF/Driver.cpp (revision 338681) ++++ tools/lld/ELF/Driver.cpp (revision 338682) +@@ -339,7 +339,7 @@ static bool getZFlag(opt::InputArgList &Args, StringRe + static bool isKnown(StringRef S) { + return S == "combreloc" || S == "copyreloc" || S == "defs" || + S == "execstack" || S == "hazardplt" || S == "ifunc-noplt" || +- S == "initfirst" || ++ S == "initfirst" || S == "interpose" || + S == "keep-text-section-prefix" || S == "lazy" || S == "muldefs" || + S == "nocombreloc" || S == "nocopyreloc" || S == "nodelete" || + S == "nodlopen" || S == "noexecstack" || +@@ -846,6 +846,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args + Config->ZHazardplt = hasZOption(Args, "hazardplt"); + Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt"); + Config->ZInitfirst = hasZOption(Args, "initfirst"); ++ Config->ZInterpose = hasZOption(Args, "interpose"); + Config->ZKeepTextSectionPrefix = getZFlag( + Args, "keep-text-section-prefix", "nokeep-text-section-prefix", false); + Config->ZNodelete = hasZOption(Args, "nodelete"); +Index: tools/lld/ELF/SyntheticSections.cpp +=================================================================== +--- tools/lld/ELF/SyntheticSections.cpp (revision 338681) ++++ tools/lld/ELF/SyntheticSections.cpp (revision 338682) +@@ -1266,6 +1266,8 @@ template void DynamicSection::final + DtFlags |= DF_SYMBOLIC; + if (Config->ZInitfirst) + DtFlags1 |= DF_1_INITFIRST; ++ if (Config->ZInterpose) ++ DtFlags1 |= DF_1_INTERPOSE; + if (Config->ZNodelete) + DtFlags1 |= DF_1_NODELETE; + if (Config->ZNodlopen) Property changes on: head/devel/llvm70/files/lld/patch-head-r338682.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1,2 ## +yes +\ No newline at end of property \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/llvm70/files/lld/patch-head-r339304.diff =================================================================== --- head/devel/llvm70/files/lld/patch-head-r339304.diff (nonexistent) +++ head/devel/llvm70/files/lld/patch-head-r339304.diff (revision 483690) @@ -0,0 +1,37 @@ +r339304 | emaste | 2018-10-11 15:19:17 +0200 (Thu, 11 Oct 2018) | 13 lines + +lld: set sh_link and sh_info for .rela.plt sections + +ELF spec says that for SHT_REL and SHT_RELA sh_link should reference the +associated string table and sh_info should reference the "section to +which the relocation applies." ELF Tool Chain's elfcopy / strip use +this (in part) to control whether or not the relocation entry is copied +to the output. + +LLVM PR 37538 https://bugs.llvm.org/show_bug.cgi?id=37538 + +Approved by: re (kib) +Obtained from: llvm r344226 (backported for 6.0) + +Index: tools/lld/ELF/SyntheticSections.cpp +=================================================================== +--- tools/lld/ELF/SyntheticSections.cpp (revision 339303) ++++ tools/lld/ELF/SyntheticSections.cpp (revision 339304) +@@ -1213,11 +1213,13 @@ void RelocationBaseSection::addReloc(const Dynamic + void RelocationBaseSection::finalizeContents() { + // If all relocations are R_*_RELATIVE they don't refer to any + // dynamic symbol and we don't need a dynamic symbol table. If that +- // is the case, just use 0 as the link. +- Link = InX::DynSymTab ? InX::DynSymTab->getParent()->SectionIndex : 0; ++ // is the case, just use the index of the regular symbol table section. ++ getParent()->Link = InX::DynSymTab ? ++ InX::DynSymTab->getParent()->SectionIndex : ++ InX::SymTab->getParent()->SectionIndex; + +- // Set required output section properties. +- getParent()->Link = Link; ++ if (InX::RelaIplt == this || InX::RelaPlt == this) ++ getParent()->Info = InX::GotPlt->getParent()->SectionIndex; + } + + RelrBaseSection::RelrBaseSection() Property changes on: head/devel/llvm70/files/lld/patch-head-r339304.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1,2 ## +yes +\ No newline at end of property \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/llvm70/files/lld/patch-lld-manpage.diff =================================================================== --- head/devel/llvm70/files/lld/patch-lld-manpage.diff (nonexistent) +++ head/devel/llvm70/files/lld/patch-lld-manpage.diff (revision 483690) @@ -0,0 +1,57 @@ +head r329003: explain long options may use one or two dashes +head r338251: document -z ifunc-noplt option +head r338682: document -z interpose option + +--- tools/lld/docs/ld.lld.1 ++++ tools/lld/docs/ld.lld.1 +@@ -3,7 +3,7 @@ + .\" + .\" This man page documents only lld's ELF linking support, obtained originally + .\" from FreeBSD. +-.Dd July 30, 2018 ++.Dd September 14, 2018 + .Dt LD.LLD 1 + .Os + .Sh NAME +@@ -25,6 +25,17 @@ is a drop-in replacement for the GNU BFD and gold link + It accepts most of the same command line arguments and linker scripts + as GNU linkers. + .Pp ++Many options have both a single-letter and long form. ++When using the long form options other than those beginning with the ++letter ++.Cm o ++may be specified using either one or two dashes preceding the option name. ++Long options beginning with ++.Cm o ++require two dashes to avoid confusion with the ++.Fl o Ar path ++option. ++.Pp + These options are available: + .Bl -tag -width indent + .It Fl -allow-multiple-definition +@@ -440,10 +451,23 @@ Make the main stack executable. + Stack permissions are recorded in the + .Dv PT_GNU_STACK + segment. ++.It Cm ifunc-noplt ++Do not emit PLT entries for GNU ifuncs. ++Instead, preserve relocations for ifunc call sites so that they may ++be applied by a run-time loader. ++Note that this feature requires special loader support and will ++generally result in application crashes when used outside of freestanding ++environments. + .It Cm initfirst + Sets the + .Dv DF_1_INITFIRST + flag to indicate the module should be initialized first. ++.It Cm interpose ++Set the ++.Dv DF_1_INTERPOSE ++flag to indicate that the object is an interposer. ++Runtime linkers perform symbol resolution by first searching the application, ++followed by interposers, and then any other dependencies. + .It Cm muldefs + Do not error if a symbol is defined multiple times. + The first definition will be used. Property changes on: head/devel/llvm70/files/lld/patch-lld-manpage.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1,2 ## +yes +\ No newline at end of property \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/llvm70/files/lldb/patch-head-r332965.diff =================================================================== --- head/devel/llvm70/files/lldb/patch-head-r332965.diff (nonexistent) +++ head/devel/llvm70/files/lldb/patch-head-r332965.diff (revision 483690) @@ -0,0 +1,22 @@ +r332965 | emaste | 2018-04-24 21:26:58 +0200 (Tue, 24 Apr 2018) | 8 lines + +lldb: remove assertion that target_arch is FreeBSD + +The target is not necessarily a FreeBSD binary - for example, it may be +a Linux binary running under the linuxulator. Basic ptrace (live) +debugging already worked in this case, except for the assertion. + +Sponsored by: Turing Robotic Industries Inc. + +Index: tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp +=================================================================== +--- tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp (revision 332964) ++++ tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp (revision 332965) +@@ -169,7 +169,6 @@ lldb::RegisterContextSP FreeBSDThread::GetRegister + RegisterInfoInterface *reg_interface = nullptr; + const ArchSpec &target_arch = GetProcess()->GetTarget().GetArchitecture(); + +- assert(target_arch.GetTriple().getOS() == llvm::Triple::FreeBSD); + switch (target_arch.GetMachine()) { + case llvm::Triple::aarch64: + reg_interface = new RegisterInfoPOSIX_arm64(target_arch); Property changes on: head/devel/llvm70/files/lldb/patch-head-r332965.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1,2 ## +yes +\ No newline at end of property \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/llvm70/files/patch-head-r308867.diff =================================================================== --- head/devel/llvm70/files/patch-head-r308867.diff (nonexistent) +++ head/devel/llvm70/files/patch-head-r308867.diff (revision 483690) @@ -0,0 +1,33 @@ +r308867 | dim | 2016-11-19 22:05:17 +0100 (Sat, 19 Nov 2016) | 15 lines + +Work around LLVM PR30879, which is about a bad interaction between X86 +Call Frame Optimization on i386 and libunwind, by disallowing the +optimization for i386-freebsd12. + +This should fix some instances of broken exception handling when frame +pointers are omitted, in particular some unittests run during the build +of editors/libreoffice. + +This hack will be removed as soon as upstream has implemented a more +permanent fix for this problem. + +Upstream PR: https://llvm.org/bugs/show_bug.cgi?id=30879 +Reviewed by: emaste +PR: 212343 + +Index: lib/Target/X86/X86CallFrameOptimization.cpp +=================================================================== +--- lib/Target/X86/X86CallFrameOptimization.cpp (revision 308866) ++++ lib/Target/X86/X86CallFrameOptimization.cpp (revision 308867) +@@ -125,6 +125,11 @@ bool X86CallFrameOptimization::isLegal(MachineFunc + if (NoX86CFOpt.getValue()) + return false; + ++ // Work around LLVM PR30879 (bad interaction between CFO and libunwind) ++ if (STI->isTargetFreeBSD() && STI->is32Bit() && ++ STI->getTargetTriple().getOSMajorVersion() >= 12) ++ return false; ++ + // We can't encode multiple DW_CFA_GNU_args_size or DW_CFA_def_cfa_offset + // in the compact unwind encoding that Darwin uses. So, bail if there + // is a danger of that being generated. Property changes on: head/devel/llvm70/files/patch-head-r308867.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1,2 ## +yes +\ No newline at end of property \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property