From owner-svn-src-projects@freebsd.org Sun Feb 3 11:41:48 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AD4F914C536E for ; Sun, 3 Feb 2019 11:41:47 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5B74F6A367; Sun, 3 Feb 2019 11:41:47 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 50B081E250; Sun, 3 Feb 2019 11:41:47 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x13Bfljf014627; Sun, 3 Feb 2019 11:41:47 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x13BfhDj014606; Sun, 3 Feb 2019 11:41:43 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201902031141.x13BfhDj014606@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sun, 3 Feb 2019 11:41:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r343712 - in projects/clang800-import: . contrib/elftoolchain/readelf contrib/ipfilter contrib/ipfilter/ipsend contrib/ipfilter/ipsend/.OLD contrib/ipfilter/lib contrib/ipfilter/tools l... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang800-import: . contrib/elftoolchain/readelf contrib/ipfilter contrib/ipfilter/ipsend contrib/ipfilter/ipsend/.OLD contrib/ipfilter/lib contrib/ipfilter/tools lib/libc/tests/stdlib lib/... X-SVN-Commit-Revision: 343712 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 5B74F6A367 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.98 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.99)[-0.986,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 03 Feb 2019 11:41:48 -0000 Author: dim Date: Sun Feb 3 11:41:43 2019 New Revision: 343712 URL: https://svnweb.freebsd.org/changeset/base/343712 Log: Merge ^/head r343571 through r343711. Added: projects/clang800-import/lib/libc/tests/stdlib/dynthr_mod/ - copied from r343711, head/lib/libc/tests/stdlib/dynthr_mod/ projects/clang800-import/lib/libc/tests/stdlib/dynthr_test.c - copied unchanged from r343711, head/lib/libc/tests/stdlib/dynthr_test.c projects/clang800-import/libexec/rtld-elf/rtld_malloc.c - copied unchanged from r343711, head/libexec/rtld-elf/rtld_malloc.c projects/clang800-import/sbin/pfilctl/ - copied from r343711, head/sbin/pfilctl/ projects/clang800-import/sys/dev/nvdimm/nvdimm_nfit.c - copied unchanged from r343711, head/sys/dev/nvdimm/nvdimm_nfit.c projects/clang800-import/sys/dev/qlnx/qlnxe/ecore_iwarp.c - copied unchanged from r343711, head/sys/dev/qlnx/qlnxe/ecore_iwarp.c projects/clang800-import/sys/dev/qlnx/qlnxe/ecore_ll2.c - copied unchanged from r343711, head/sys/dev/qlnx/qlnxe/ecore_ll2.c projects/clang800-import/sys/dev/qlnx/qlnxe/ecore_ooo.c - copied unchanged from r343711, head/sys/dev/qlnx/qlnxe/ecore_ooo.c projects/clang800-import/sys/dev/qlnx/qlnxe/ecore_rdma.c - copied unchanged from r343711, head/sys/dev/qlnx/qlnxe/ecore_rdma.c projects/clang800-import/sys/dev/qlnx/qlnxe/ecore_roce.c - copied unchanged from r343711, head/sys/dev/qlnx/qlnxe/ecore_roce.c projects/clang800-import/sys/dev/qlnx/qlnxe/qlnx_rdma.c - copied unchanged from r343711, head/sys/dev/qlnx/qlnxe/qlnx_rdma.c projects/clang800-import/sys/dev/qlnx/qlnxe/qlnx_rdma.h - copied unchanged from r343711, head/sys/dev/qlnx/qlnxe/qlnx_rdma.h projects/clang800-import/sys/dev/qlnx/qlnxr/ - copied from r343711, head/sys/dev/qlnx/qlnxr/ projects/clang800-import/sys/modules/iflib/ - copied from r343711, head/sys/modules/iflib/ projects/clang800-import/sys/modules/qlnx/qlnxr/ - copied from r343711, head/sys/modules/qlnx/qlnxr/ projects/clang800-import/sys/powerpc/powernv/xive.c - copied unchanged from r343711, head/sys/powerpc/powernv/xive.c projects/clang800-import/usr.sbin/bluetooth/sdpd/audio_sink.c - copied unchanged from r343711, head/usr.sbin/bluetooth/sdpd/audio_sink.c projects/clang800-import/usr.sbin/bluetooth/sdpd/audio_source.c - copied unchanged from r343711, head/usr.sbin/bluetooth/sdpd/audio_source.c Deleted: projects/clang800-import/contrib/ipfilter/ipsend/.OLD/ip_compat.h projects/clang800-import/contrib/ipfilter/ml_ipl.c projects/clang800-import/contrib/ipfilter/mlf_ipl.c projects/clang800-import/contrib/ipfilter/mlf_rule.c projects/clang800-import/contrib/ipfilter/mlfk_ipl.c projects/clang800-import/contrib/ipfilter/mlh_rule.c projects/clang800-import/contrib/ipfilter/mln_ipl.c projects/clang800-import/contrib/ipfilter/mln_rule.c projects/clang800-import/contrib/ipfilter/mlo_ipl.c projects/clang800-import/contrib/ipfilter/mlo_rule.c projects/clang800-import/contrib/ipfilter/mls_ipl.c projects/clang800-import/contrib/ipfilter/mls_rule.c projects/clang800-import/contrib/ipfilter/mlso_rule.c projects/clang800-import/libexec/rtld-elf/malloc.c Modified: projects/clang800-import/ObsoleteFiles.inc projects/clang800-import/UPDATING projects/clang800-import/contrib/elftoolchain/readelf/readelf.c projects/clang800-import/contrib/ipfilter/arc4random.c projects/clang800-import/contrib/ipfilter/ip_dstlist.c projects/clang800-import/contrib/ipfilter/ip_fil.c projects/clang800-import/contrib/ipfilter/ip_fil_compat.c projects/clang800-import/contrib/ipfilter/ipf.h projects/clang800-import/contrib/ipfilter/ipsend/44arp.c projects/clang800-import/contrib/ipfilter/ipsend/arp.c projects/clang800-import/contrib/ipfilter/ipsend/dlcommon.c projects/clang800-import/contrib/ipfilter/ipsend/ip.c projects/clang800-import/contrib/ipfilter/ipsend/ipresend.c projects/clang800-import/contrib/ipfilter/ipsend/ipsend.c projects/clang800-import/contrib/ipfilter/ipsend/ipsend.h projects/clang800-import/contrib/ipfilter/ipsend/ipsopt.c projects/clang800-import/contrib/ipfilter/ipsend/iptest.c projects/clang800-import/contrib/ipfilter/ipsend/iptests.c projects/clang800-import/contrib/ipfilter/ipsend/resend.c projects/clang800-import/contrib/ipfilter/ipsend/sdlpi.c projects/clang800-import/contrib/ipfilter/ipsend/sock.c projects/clang800-import/contrib/ipfilter/lib/getifname.c projects/clang800-import/contrib/ipfilter/lib/getproto.c projects/clang800-import/contrib/ipfilter/lib/inet_addr.c projects/clang800-import/contrib/ipfilter/lib/kmem.c projects/clang800-import/contrib/ipfilter/lib/printproto.c projects/clang800-import/contrib/ipfilter/md5.c projects/clang800-import/contrib/ipfilter/tools/ipf.c projects/clang800-import/contrib/ipfilter/tools/ipfs.c projects/clang800-import/contrib/ipfilter/tools/ipfstat.c projects/clang800-import/contrib/ipfilter/tools/ipftest.c projects/clang800-import/contrib/ipfilter/tools/ipmon.c projects/clang800-import/contrib/ipfilter/tools/ipnat.c projects/clang800-import/contrib/ipfilter/tools/ipnat_y.y projects/clang800-import/contrib/ipfilter/tools/ippool.c projects/clang800-import/contrib/ipfilter/tools/ippool_y.y projects/clang800-import/lib/libc/tests/stdlib/Makefile projects/clang800-import/lib/libsdp/sdp.h projects/clang800-import/lib/libthr/Makefile projects/clang800-import/lib/msun/Makefile projects/clang800-import/libexec/rtld-elf/Makefile projects/clang800-import/libexec/rtld-elf/i386/reloc.c projects/clang800-import/sbin/Makefile projects/clang800-import/sbin/ifconfig/ifieee80211.c projects/clang800-import/share/man/man4/bnxt.4 projects/clang800-import/share/man/man4/em.4 projects/clang800-import/share/man/man4/iavf.4 projects/clang800-import/share/man/man4/imcsmb.4 projects/clang800-import/share/man/man4/ixgbe.4 projects/clang800-import/share/man/man4/ixl.4 projects/clang800-import/share/man/man4/jedec_dimm.4 projects/clang800-import/share/man/man4/vmx.4 projects/clang800-import/share/man/man5/src.conf.5 projects/clang800-import/share/man/man9/Makefile projects/clang800-import/share/man/man9/pfil.9 projects/clang800-import/share/mk/src.opts.mk projects/clang800-import/sys/amd64/conf/GENERIC projects/clang800-import/sys/arm64/conf/GENERIC projects/clang800-import/sys/cam/scsi/scsi_da.c projects/clang800-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/clang800-import/sys/compat/ndis/ndis_var.h projects/clang800-import/sys/conf/NOTES projects/clang800-import/sys/conf/files projects/clang800-import/sys/conf/files.powerpc projects/clang800-import/sys/contrib/ipfilter/netinet/fil.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_auth.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_compat.h projects/clang800-import/sys/contrib/ipfilter/netinet/ip_dstlist.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_fil.h projects/clang800-import/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_frag.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_ftp_pxy.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_htable.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_irc_pxy.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_log.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_lookup.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_nat.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_nat.h projects/clang800-import/sys/contrib/ipfilter/netinet/ip_nat6.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_pool.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_proxy.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_raudio_pxy.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_scan.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_state.c projects/clang800-import/sys/contrib/ipfilter/netinet/ip_sync.c projects/clang800-import/sys/dev/bwn/if_bwn.c projects/clang800-import/sys/dev/cxgbe/adapter.h projects/clang800-import/sys/dev/cxgbe/common/common.h projects/clang800-import/sys/dev/cxgbe/common/t4_hw.c projects/clang800-import/sys/dev/cxgbe/t4_main.c projects/clang800-import/sys/dev/cxgbe/t4_sge.c projects/clang800-import/sys/dev/e1000/if_em.c projects/clang800-import/sys/dev/e1000/if_em.h projects/clang800-import/sys/dev/if_ndis/if_ndis.c projects/clang800-import/sys/dev/if_ndis/if_ndis_pccard.c projects/clang800-import/sys/dev/imcsmb/imcsmb.c projects/clang800-import/sys/dev/imcsmb/imcsmb_pci.c projects/clang800-import/sys/dev/imcsmb/imcsmb_reg.h projects/clang800-import/sys/dev/imcsmb/imcsmb_var.h projects/clang800-import/sys/dev/ipw/if_ipw.c projects/clang800-import/sys/dev/ixgbe/if_ix.c projects/clang800-import/sys/dev/ixgbe/if_ixv.c projects/clang800-import/sys/dev/ixgbe/ix_txrx.c projects/clang800-import/sys/dev/ixgbe/ixgbe.h projects/clang800-import/sys/dev/ixgbe/ixgbe_type.h projects/clang800-import/sys/dev/ixl/if_iavf.c projects/clang800-import/sys/dev/ixl/if_ixl.c projects/clang800-import/sys/dev/ixl/ixl_iw.c projects/clang800-import/sys/dev/ixl/ixl_pf_main.c projects/clang800-import/sys/dev/jedec_dimm/jedec_dimm.c projects/clang800-import/sys/dev/jedec_dimm/jedec_dimm.h projects/clang800-import/sys/dev/netmap/netmap.c projects/clang800-import/sys/dev/netmap/netmap_freebsd.c projects/clang800-import/sys/dev/netmap/netmap_kern.h projects/clang800-import/sys/dev/netmap/netmap_kloop.c projects/clang800-import/sys/dev/nvdimm/nvdimm.c projects/clang800-import/sys/dev/nvdimm/nvdimm_spa.c projects/clang800-import/sys/dev/nvdimm/nvdimm_var.h projects/clang800-import/sys/dev/sound/usb/uaudio.c projects/clang800-import/sys/dev/usb/wlan/if_rsu.c projects/clang800-import/sys/dev/usb/wlan/if_rsureg.h projects/clang800-import/sys/dev/usb/wlan/if_run.c projects/clang800-import/sys/dev/vmware/vmxnet3/if_vmx.c projects/clang800-import/sys/dev/wtap/if_wtap.c projects/clang800-import/sys/i386/conf/GENERIC projects/clang800-import/sys/i386/i386/machdep.c projects/clang800-import/sys/i386/i386/minidump_machdep_base.c projects/clang800-import/sys/kern/kern_mbuf.c projects/clang800-import/sys/kern/makesyscalls.sh projects/clang800-import/sys/kern/subr_disk.c projects/clang800-import/sys/kern/subr_kobj.c projects/clang800-import/sys/kern/systrace_args.c projects/clang800-import/sys/mips/conf/OCTEON1 projects/clang800-import/sys/mips/conf/std.XLP projects/clang800-import/sys/modules/Makefile projects/clang800-import/sys/modules/nvdimm/Makefile projects/clang800-import/sys/modules/qlnx/Makefile projects/clang800-import/sys/modules/qlnx/qlnxe/Makefile projects/clang800-import/sys/net/if_bridge.c projects/clang800-import/sys/net/if_enc.c projects/clang800-import/sys/net/if_ethersubr.c projects/clang800-import/sys/net/if_lagg.c projects/clang800-import/sys/net/if_var.h projects/clang800-import/sys/net/iflib.c projects/clang800-import/sys/net/netmap.h projects/clang800-import/sys/net/pfil.c projects/clang800-import/sys/net/pfil.h projects/clang800-import/sys/net80211/ieee80211_dfs.c projects/clang800-import/sys/net80211/ieee80211_freebsd.c projects/clang800-import/sys/net80211/ieee80211_proto.c projects/clang800-import/sys/net80211/ieee80211_scan.c projects/clang800-import/sys/net80211/ieee80211_scan_sta.c projects/clang800-import/sys/net80211/ieee80211_tdma.c projects/clang800-import/sys/netinet/ip_fastfwd.c projects/clang800-import/sys/netinet/ip_input.c projects/clang800-import/sys/netinet/ip_output.c projects/clang800-import/sys/netinet/ip_var.h projects/clang800-import/sys/netinet/siftr.c projects/clang800-import/sys/netinet/tcp_input.c projects/clang800-import/sys/netinet/tcp_stacks/rack.c projects/clang800-import/sys/netinet6/ip6_fastfwd.c projects/clang800-import/sys/netinet6/ip6_forward.c projects/clang800-import/sys/netinet6/ip6_input.c projects/clang800-import/sys/netinet6/ip6_output.c projects/clang800-import/sys/netinet6/ip6_var.h projects/clang800-import/sys/netpfil/ipfw/ip_fw2.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_dynamic.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_eaction.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_iface.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_nat.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_pfil.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_private.h projects/clang800-import/sys/netpfil/ipfw/ip_fw_sockopt.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_table.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_table_value.c projects/clang800-import/sys/netpfil/pf/pf_ioctl.c projects/clang800-import/sys/powerpc/conf/GENERIC64 projects/clang800-import/sys/powerpc/conf/MPC85XX projects/clang800-import/sys/powerpc/conf/MPC85XXSPE projects/clang800-import/sys/powerpc/conf/QORIQ64 projects/clang800-import/sys/powerpc/conf/dpaa/DPAA projects/clang800-import/sys/powerpc/powernv/opal.h projects/clang800-import/sys/powerpc/powernv/platform_powernv.c projects/clang800-import/sys/powerpc/pseries/xics.c projects/clang800-import/sys/sparc64/conf/GENERIC projects/clang800-import/sys/sys/elf_common.h projects/clang800-import/sys/sys/mbuf.h projects/clang800-import/sys/sys/sysproto.h projects/clang800-import/sys/teken/teken.c projects/clang800-import/sys/vm/uma_core.c projects/clang800-import/sys/x86/x86/nexus.c projects/clang800-import/sys/x86/xen/hvm.c projects/clang800-import/sys/x86/xen/xen_intr.c projects/clang800-import/sys/xen/hvm.h projects/clang800-import/usr.bin/elfdump/elfdump.c projects/clang800-import/usr.bin/shar/shar.1 projects/clang800-import/usr.bin/xinstall/tests/install_test.sh projects/clang800-import/usr.bin/xinstall/xinstall.c projects/clang800-import/usr.sbin/bluetooth/sdpd/Makefile projects/clang800-import/usr.sbin/bluetooth/sdpd/profile.c projects/clang800-import/usr.sbin/freebsd-update/freebsd-update.sh projects/clang800-import/usr.sbin/ndiscvt/inf.c projects/clang800-import/usr.sbin/ndiscvt/ndiscvt.c projects/clang800-import/usr.sbin/rpc.statd/file.c Directory Properties: projects/clang800-import/ (props changed) projects/clang800-import/contrib/elftoolchain/ (props changed) projects/clang800-import/contrib/ipfilter/ (props changed) projects/clang800-import/sys/cddl/contrib/opensolaris/ (props changed) projects/clang800-import/sys/contrib/ipfilter/ (props changed) Modified: projects/clang800-import/ObsoleteFiles.inc ============================================================================== --- projects/clang800-import/ObsoleteFiles.inc Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/ObsoleteFiles.inc Sun Feb 3 11:41:43 2019 (r343712) @@ -190,6 +190,12 @@ OLD_FILES+=usr/lib/clang/7.0.1/lib/freebsd/libclang_rt OLD_DIRS+=usr/lib/clang/7.0.1/lib/freebsd OLD_DIRS+=usr/lib/clang/7.0.1/lib OLD_DIRS+=usr/lib/clang/7.0.1 +# 20190131: pfil(9) changed +OLD_FILES+=usr/share/man/man9/pfil_hook_get.9 +OLD_FILES+=usr/share/man/man9/pfil_rlock.9 +OLD_FILES+=usr/share/man/man9/pfil_runlock.9 +OLD_FILES+=usr/share/man/man9/pfil_wlock.9 +OLD_FILES+=usr/share/man/man9/pfil_wunlock.9 # 20190126: adv(4) / adw(4) removal OLD_FILES+=usr/share/man/man4/adv.4.gz OLD_FILES+=usr/share/man/man4/adw.4.gz Modified: projects/clang800-import/UPDATING ============================================================================== --- projects/clang800-import/UPDATING Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/UPDATING Sun Feb 3 11:41:43 2019 (r343712) @@ -37,6 +37,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: prerequisites and upgrading, if you are not already using clang 3.5.0 or higher. +20190131: + Iflib is no longer unconditionally compiled into the kernel. Drivers + using iflib and statically compiled into the kernel, now require + the 'device iflib' config option. For the same drivers loaded as + modules on kernels not having 'device iflib', the iflib.ko module + is loaded automatically. + 20181230: r342635 changes the way efibootmgr(8) works by requiring users to add the -b (bootnum) parameter for commands where the bootnum was previously Modified: projects/clang800-import/contrib/elftoolchain/readelf/readelf.c ============================================================================== --- projects/clang800-import/contrib/elftoolchain/readelf/readelf.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/elftoolchain/readelf/readelf.c Sun Feb 3 11:41:43 2019 (r343712) @@ -220,6 +220,11 @@ struct mips_option { const char *desc; }; +struct flag_desc { + uint64_t flag; + const char *desc; +}; + static void add_dumpop(struct readelf *re, size_t si, const char *sn, int op, int t); static const char *aeabi_adv_simd_arch(uint64_t simd); @@ -293,6 +298,7 @@ static void dump_dwarf_ranges_foreach(struct readelf * static void dump_dwarf_str(struct readelf *re); static void dump_eflags(struct readelf *re, uint64_t e_flags); static void dump_elf(struct readelf *re); +static void dump_flags(struct flag_desc *fd, uint64_t flags); static void dump_dyn_val(struct readelf *re, GElf_Dyn *dyn, uint32_t stab); static void dump_dynamic(struct readelf *re); static void dump_liblist(struct readelf *re); @@ -307,6 +313,8 @@ static void dump_mips_specific_info(struct readelf *re static void dump_notes(struct readelf *re); static void dump_notes_content(struct readelf *re, const char *buf, size_t sz, off_t off); +static void dump_notes_data(const char *name, uint32_t type, const char *buf, + size_t sz); static void dump_svr4_hash(struct section *s); static void dump_svr4_hash64(struct readelf *re, struct section *s); static void dump_gnu_hash(struct readelf *re, struct section *s); @@ -2721,6 +2729,58 @@ dump_arch_dyn_val(struct readelf *re, GElf_Dyn *dyn) } static void +dump_flags(struct flag_desc *desc, uint64_t val) +{ + struct flag_desc *fd; + + for (fd = desc; fd->flag != 0; fd++) { + if (val & fd->flag) { + val &= ~fd->flag; + printf(" %s", fd->desc); + } + } + if (val != 0) + printf(" unknown (0x%jx)", (uintmax_t)val); +} + +static struct flag_desc dt_flags[] = { + { DF_ORIGIN, "ORIGIN" }, + { DF_SYMBOLIC, "SYMBOLIC" }, + { DF_TEXTREL, "TEXTREL" }, + { DF_BIND_NOW, "BIND_NOW" }, + { DF_STATIC_TLS, "STATIC_TLS" }, + { 0, NULL } +}; + +static struct flag_desc dt_flags_1[] = { + { DF_1_BIND_NOW, "NOW" }, + { DF_1_GLOBAL, "GLOBAL" }, + { 0x4, "GROUP" }, + { DF_1_NODELETE, "NODELETE" }, + { DF_1_LOADFLTR, "LOADFLTR" }, + { 0x20, "INITFIRST" }, + { DF_1_NOOPEN, "NOOPEN" }, + { DF_1_ORIGIN, "ORIGIN" }, + { 0x100, "DIRECT" }, + { DF_1_INTERPOSE, "INTERPOSE" }, + { DF_1_NODEFLIB, "NODEFLIB" }, + { 0x1000, "NODUMP" }, + { 0x2000, "CONFALT" }, + { 0x4000, "ENDFILTEE" }, + { 0x8000, "DISPRELDNE" }, + { 0x10000, "DISPRELPND" }, + { 0x20000, "NODIRECT" }, + { 0x40000, "IGNMULDEF" }, + { 0x80000, "NOKSYMS" }, + { 0x100000, "NOHDR" }, + { 0x200000, "EDITED" }, + { 0x400000, "NORELOC" }, + { 0x800000, "SYMINTPOSE" }, + { 0x1000000, "GLOBAUDIT" }, + { 0, NULL } +}; + +static void dump_dyn_val(struct readelf *re, GElf_Dyn *dyn, uint32_t stab) { const char *name; @@ -2804,6 +2864,12 @@ dump_dyn_val(struct readelf *re, GElf_Dyn *dyn, uint32 case DT_GNU_PRELINKED: printf(" %s\n", timestamp(dyn->d_un.d_val)); break; + case DT_FLAGS: + dump_flags(dt_flags, dyn->d_un.d_val); + break; + case DT_FLAGS_1: + dump_flags(dt_flags_1, dyn->d_un.d_val); + break; default: printf("\n"); } @@ -3422,7 +3488,54 @@ dump_notes(struct readelf *re) } } +static struct flag_desc note_feature_ctl_flags[] = { + { NT_FREEBSD_FCTL_ASLR_DISABLE, "ASLR_DISABLE" }, + { 0, NULL } +}; + static void +dump_notes_data(const char *name, uint32_t type, const char *buf, size_t sz) +{ + size_t i; + const uint32_t *ubuf; + + /* Note data is at least 4-byte aligned. */ + if (((uintptr_t)buf & 3) != 0) { + warnx("bad note data alignment"); + goto unknown; + } + ubuf = (const uint32_t *)(const void *)buf; + + if (strcmp(name, "FreeBSD") == 0) { + switch (type) { + case NT_FREEBSD_ABI_TAG: + if (sz != 4) + goto unknown; + printf(" ABI tag: %u\n", ubuf[0]); + return; + /* NT_FREEBSD_NOINIT_TAG carries no data, treat as unknown. */ + case NT_FREEBSD_ARCH_TAG: + if (sz != 4) + goto unknown; + printf(" Arch tag: %x\n", ubuf[0]); + return; + case NT_FREEBSD_FEATURE_CTL: + if (sz != 4) + goto unknown; + printf(" Features:"); + dump_flags(note_feature_ctl_flags, ubuf[0]); + printf("\n"); + return; + } + } +unknown: + printf(" description data:"); + for (i = 0; i < sz; i++) + printf(" %02x", (unsigned char)buf[i]); + printf("\n"); +} + +static void dump_notes_content(struct readelf *re, const char *buf, size_t sz, off_t off) { Elf_Note *note; @@ -3438,7 +3551,9 @@ dump_notes_content(struct readelf *re, const char *buf return; } note = (Elf_Note *)(uintptr_t) buf; - name = (char *)(uintptr_t)(note + 1); + buf += sizeof(Elf_Note); + name = buf; + buf += roundup2(note->n_namesz, 4); /* * The name field is required to be nul-terminated, and * n_namesz includes the terminating nul in observed @@ -3456,8 +3571,8 @@ dump_notes_content(struct readelf *re, const char *buf printf(" %-13s %#010jx", name, (uintmax_t) note->n_descsz); printf(" %s\n", note_type(name, re->ehdr.e_type, note->n_type)); - buf += sizeof(Elf_Note) + roundup2(note->n_namesz, 4) + - roundup2(note->n_descsz, 4); + dump_notes_data(name, note->n_type, buf, note->n_descsz); + buf += roundup2(note->n_descsz, 4); } } Modified: projects/clang800-import/contrib/ipfilter/arc4random.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/arc4random.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/arc4random.c Sun Feb 3 11:41:43 2019 (r343712) @@ -7,7 +7,7 @@ * * Dan Moschuk */ -#if !defined(SOLARIS2) && !defined(__osf__) +#if !defined(SOLARIS2) # include #endif @@ -16,26 +16,16 @@ #ifdef __FreeBSD__ # include #endif -#if !defined(__osf__) # include -#endif #ifdef __FreeBSD__ # include #endif #include -#ifndef __osf__ # include -#endif #include -#if defined(SOLARIS2) && (SOLARIS2 < 9) -# include -#endif #include #include -#ifdef __osf__ -# include -#endif #include #include #include "netinet/ip_compat.h" Modified: projects/clang800-import/contrib/ipfilter/ip_dstlist.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ip_dstlist.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ip_dstlist.c Sun Feb 3 11:41:43 2019 (r343712) @@ -9,9 +9,6 @@ # define KERNEL 1 # define _KERNEL 1 #endif -#if defined(__osf__) -# define _PROTO_NET_H_ -#endif #include #include #include @@ -21,9 +18,6 @@ # include # include # define _KERNEL -# ifdef __OpenBSD__ -struct file; -# endif # include # undef _KERNEL #else @@ -33,14 +27,12 @@ struct file; # endif #endif #include -#if !defined(linux) # include -#endif #include -#if defined(_KERNEL) && (!defined(__SVR4) && !defined(__svr4__)) +#if defined(_KERNEL) && !defined(__SVR4) # include #endif -#if defined(__SVR4) || defined(__svr4__) +#if defined(__SVR4) # include # include # ifdef _KERNEL @@ -49,7 +41,7 @@ struct file; # include # include #endif -#if defined(__FreeBSD_version) && (__FreeBSD_version >= 300000) +#if defined(__FreeBSD_version) # include #endif Modified: projects/clang800-import/contrib/ipfilter/ip_fil.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ip_fil.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ip_fil.c Sun Feb 3 11:41:43 2019 (r343712) @@ -25,24 +25,10 @@ struct rtentry; static void ipf_setifpaddr __P((struct ifnet *, char *)); void init_ifp __P((void)); -#if defined(__sgi) && (IRIX < 60500) static int no_output __P((struct ifnet *, struct mbuf *, - struct sockaddr *)); -static int write_output __P((struct ifnet *, struct mbuf *, - struct sockaddr *)); -#else -# if TRU64 >= 1885 -static int no_output __P((struct ifnet *, struct mbuf *, - struct sockaddr *, struct rtentry *, char *)); -static int write_output __P((struct ifnet *, struct mbuf *, - struct sockaddr *, struct rtentry *, char *)); -# else -static int no_output __P((struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *)); static int write_output __P((struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *)); -# endif -#endif struct ifaddr { struct sockaddr_storage ifa_addr; @@ -123,17 +109,8 @@ ipf_forgetifp(softc, ifp) static int -#if defined(__sgi) && (IRIX < 60500) -no_output(ifp, m, s) -#else -# if TRU64 >= 1885 -no_output (ifp, m, s, rt, cp) - char *cp; -# else no_output(ifp, m, s, rt) -# endif struct rtentry *rt; -#endif struct ifnet *ifp; struct mbuf *m; struct sockaddr *s; @@ -143,17 +120,8 @@ no_output(ifp, m, s, rt) static int -#if defined(__sgi) && (IRIX < 60500) -write_output(ifp, m, s) -#else -# if TRU64 >= 1885 -write_output (ifp, m, s, rt, cp) - char *cp; -# else write_output(ifp, m, s, rt) -# endif struct rtentry *rt; -#endif struct ifnet *ifp; struct mbuf *m; struct sockaddr *s; @@ -167,8 +135,7 @@ write_output(ifp, m, s, rt) ip = MTOD(mb, ip_t *); #if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606)) || \ - (defined(OpenBSD) && (OpenBSD >= 199603)) || defined(linux) || \ - (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) + defined(__FreeBSD__) sprintf(fname, "/tmp/%s", ifp->if_xname); #else sprintf(fname, "/tmp/%s%d", ifp->if_name, ifp->if_unit); @@ -189,42 +156,26 @@ ipf_setifpaddr(ifp, addr) struct ifnet *ifp; char *addr; { -#ifdef __sgi - struct in_ifaddr *ifa; -#else struct ifaddr *ifa; -#endif -#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD__) if (ifp->if_addrlist.tqh_first != NULL) #else -# ifdef __sgi - if (ifp->in_ifaddr != NULL) -# else if (ifp->if_addrlist != NULL) -# endif #endif return; ifa = (struct ifaddr *)malloc(sizeof(*ifa)); -#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD__) ifp->if_addrlist.tqh_first = ifa; #else -# ifdef __sgi - ifp->in_ifaddr = ifa; -# else ifp->if_addrlist = ifa; -# endif #endif if (ifa != NULL) { struct sockaddr_in *sin; -#ifdef __sgi - sin = (struct sockaddr_in *)&ifa->ia_addr; -#else sin = (struct sockaddr_in *)&ifa->ifa_addr; -#endif #ifdef USE_INET6 if (index(addr, ':') != NULL) { struct sockaddr_in6 *sin6; @@ -263,8 +214,7 @@ get_unit(name, family) struct ifnet *ifp, **ifpp, **old_ifneta; char *addr; #if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606)) || \ - (defined(OpenBSD) && (OpenBSD >= 199603)) || defined(linux) || \ - (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) + defined(__FreeBSD__) if (!*name) return NULL; @@ -333,12 +283,11 @@ get_unit(name, family) } ifp = ifneta[nifs - 1]; -#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD__) TAILQ_INIT(&ifp->if_addrlist); #endif #if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606)) || \ - (defined(OpenBSD) && (OpenBSD >= 199603)) || defined(linux) || \ - (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) + defined(__FreeBSD__) (void) strncpy(ifp->if_xname, name, sizeof(ifp->if_xname)); #else s = name + strlen(name) - 1; @@ -375,8 +324,7 @@ get_ifname(ifp) { static char ifname[LIFNAMSIZ]; -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(linux) || \ - (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) +#if defined(__NetBSD__) || defined(__FreeBSD__) sprintf(ifname, "%s", ifp->if_xname); #else if (ifp->if_unit != -1) @@ -397,8 +345,7 @@ init_ifp() int fd; #if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606)) || \ - (defined(OpenBSD) && (OpenBSD >= 199603)) || defined(linux) || \ - (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) + defined(__FreeBSD__) for (ifpp = ifneta; ifpp && (ifp = *ifpp); ifpp++) { ifp->if_output = (void *)write_output; sprintf(fname, "/tmp/%s", ifp->if_xname); @@ -717,20 +664,12 @@ ipf_ifpaddr(softc, v, atype, ifptr, inp, inpmask) i6addr_t *inp, *inpmask; { struct ifnet *ifp = ifptr; -#ifdef __sgi - struct in_ifaddr *ifa; -#else struct ifaddr *ifa; -#endif -#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD__) ifa = ifp->if_addrlist.tqh_first; #else -# ifdef __sgi - ifa = (struct in_ifaddr *)ifp->in_ifaddr; -# else ifa = ifp->if_addrlist; -# endif #endif if (ifa != NULL) { if (v == 4) { @@ -738,11 +677,7 @@ ipf_ifpaddr(softc, v, atype, ifptr, inp, inpmask) mask.sin_addr.s_addr = 0xffffffff; -#ifdef __sgi - sin = (struct sockaddr_in *)&ifa->ia_addr; -#else sin = (struct sockaddr_in *)&ifa->ifa_addr; -#endif return ipf_ifpfillv4addr(atype, sin, &mask, &inp->in4, &inpmask->in4); Modified: projects/clang800-import/contrib/ipfilter/ip_fil_compat.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ip_fil_compat.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ip_fil_compat.c Sun Feb 3 11:41:43 2019 (r343712) @@ -9,15 +9,12 @@ # define KERNEL 1 # define _KERNEL 1 #endif -#if defined(__osf__) -# define _PROTO_NET_H_ -#endif #include #include #include #include #include -#if __FreeBSD_version >= 220000 && defined(_KERNEL) +#if defined(__FreeBSD_version) && defined(_KERNEL) # include # include #else @@ -26,17 +23,10 @@ #if !defined(_KERNEL) # include # define _KERNEL -# ifdef __OpenBSD__ -struct file; -# endif # include # undef _KERNEL #endif #include -#if (defined(__osf__) || defined(AIX) || defined(__hpux) || defined(__sgi)) && defined(_KERNEL) -# include "radix_ipf_local.h" -# define _RADIX_H_ -#endif #include #if defined(__FreeBSD__) # include @@ -44,7 +34,7 @@ struct file; #endif #if defined(_KERNEL) # include -# if !defined(__SVR4) && !defined(__svr4__) +# if !defined(__SVR4) # include # endif #endif @@ -348,9 +338,6 @@ typedef struct fr_info_4_1_32 { void *fin_qpi; char fin_ifname[LIFNAMSIZ]; #endif -#ifdef __sgi - void *fin_hbuf; -#endif } fr_info_4_1_32_t; typedef struct fr_info_4_1_24 { @@ -389,9 +376,6 @@ typedef struct fr_info_4_1_24 { void *fin_qpi; char fin_ifname[LIFNAMSIZ]; #endif -#ifdef __sgi - void *fin_hbuf; -#endif } fr_info_4_1_24_t; typedef struct fr_info_4_1_23 { @@ -429,9 +413,6 @@ typedef struct fr_info_4_1_23 { void *fin_qpi; char fin_ifname[LIFNAMSIZ]; #endif -#ifdef __sgi - void *fin_hbuf; -#endif } fr_info_4_1_23_t; typedef struct fr_info_4_1_11 { @@ -468,9 +449,6 @@ typedef struct fr_info_4_1_11 { void *fin_qpi; char fin_ifname[LIFNAMSIZ]; #endif -#ifdef __sgi - void *fin_hbuf; -#endif } fr_info_4_1_11_t; /* ------------------------------------------------------------------------ */ @@ -2678,9 +2656,6 @@ fr_info_4_1_32_to_current(old, current) fin->fin_qfm = old->fin_qfm; fin->fin_qpi = old->fin_qpi; #endif -#ifdef __sgi - fin->fin_hbuf = old->fin_hbuf; -#endif } @@ -2719,9 +2694,6 @@ fr_info_4_1_24_to_current(old, current) fin->fin_qfm = old->fin_qfm; fin->fin_qpi = old->fin_qpi; #endif -#ifdef __sgi - fin->fin_hbuf = old->fin_hbuf; -#endif } @@ -2759,9 +2731,6 @@ fr_info_4_1_23_to_current(old, current) fin->fin_qfm = old->fin_qfm; fin->fin_qpi = old->fin_qpi; #endif -#ifdef __sgi - fin->fin_hbuf = fin->fin_hbuf; -#endif } @@ -2799,9 +2768,6 @@ fr_info_4_1_11_to_current(old, current) fin->fin_qfm = old->fin_qfm; fin->fin_qpi = old->fin_qpi; #endif -#ifdef __sgi - fin->fin_hbuf = fin->fin_hbuf; -#endif } @@ -4078,9 +4044,6 @@ fr_info_current_to_4_1_24(current, old) old->fin_qpi = fin->fin_qpi; old->fin_ifname[0] = '\0'; #endif -#ifdef __sgi - old->fin_hbuf = fin->fin_hbuf; -#endif } @@ -4121,9 +4084,6 @@ fr_info_current_to_4_1_23(current, old) old->fin_qpi = fin->fin_qpi; old->fin_ifname[0] = '\0'; #endif -#ifdef __sgi - old->fin_hbuf = fin->fin_hbuf; -#endif } @@ -4163,9 +4123,6 @@ fr_info_current_to_4_1_11(current, old) old->fin_qfm = fin->fin_qfm; old->fin_qpi = fin->fin_qpi; old->fin_ifname[0] = '\0'; -#endif -#ifdef __sgi - old->fin_hbuf = fin->fin_hbuf; #endif } Modified: projects/clang800-import/contrib/ipfilter/ipf.h ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipf.h Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipf.h Sun Feb 3 11:41:43 2019 (r343712) @@ -12,11 +12,6 @@ #ifndef __IPF_H__ #define __IPF_H__ -#if defined(__osf__) -# define radix_mask ipf_radix_mask -# define radix_node ipf_radix_node -# define radix_node_head ipf_radix_node_head -#endif #include #include @@ -31,9 +26,6 @@ # define _KERNEL # define KERNEL #endif -#ifdef __OpenBSD__ -struct file; -#endif #include #ifdef ADD_KERNEL # undef _KERNEL @@ -188,9 +180,8 @@ typedef struct proxyrule { } proxyrule_t; -#if defined(__NetBSD__) || defined(__OpenBSD__) || \ - (_BSDI_VERSION >= 199701) || (__FreeBSD_version >= 300000) || \ - SOLARIS || defined(__sgi) || defined(__osf__) || defined(linux) +#if defined(__NetBSD__) || defined(__FreeBSD_version) || \ + SOLARIS # include typedef int (* ioctlfunc_t) __P((int, ioctlcmd_t, ...)); #else @@ -199,13 +190,6 @@ typedef int (* ioctlfunc_t) __P((dev_t, ioctlcmd_t, vo typedef int (* addfunc_t) __P((int, ioctlfunc_t, void *)); typedef int (* copyfunc_t) __P((void *, void *, size_t)); - -/* - * SunOS4 - */ -#if defined(sun) && !defined(__SVR4) && !defined(__svr4__) -extern int ioctl __P((int, int, void *)); -#endif extern char thishost[]; extern char flagset[]; Modified: projects/clang800-import/contrib/ipfilter/ipsend/44arp.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/44arp.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/44arp.c Sun Feb 3 11:41:43 2019 (r343712) @@ -10,9 +10,7 @@ #include #include #include -#ifndef __osf__ # include -#endif #include #include #include Modified: projects/clang800-import/contrib/ipfilter/ipsend/arp.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/arp.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/arp.c Sun Feb 3 11:41:43 2019 (r343712) @@ -88,7 +88,6 @@ int arp(ip, ether) sin = (struct sockaddr_in *)&ar.arp_pa; sin->sin_family = AF_INET; bcopy(ip, (char *)&sin->sin_addr.s_addr, 4); -#ifndef hpux if ((hp = gethostbyaddr(ip, 4, AF_INET))) # if SOLARIS && (SOLARIS2 >= 10) if (!(ether_hostton(hp->h_name, (struct ether_addr *)ether))) @@ -96,7 +95,6 @@ int arp(ip, ether) if (!(ether_hostton(hp->h_name, ether))) # endif goto savearp; -#endif if (sfd == -1) if ((sfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) Modified: projects/clang800-import/contrib/ipfilter/ipsend/dlcommon.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/dlcommon.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/dlcommon.c Sun Feb 3 11:41:43 2019 (r343712) @@ -20,11 +20,7 @@ typedef unsigned long ulong; #include #include #include -#ifdef __osf__ -# include -#else # include -#endif #include #include #include Modified: projects/clang800-import/contrib/ipfilter/ipsend/ip.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/ip.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/ip.c Sun Feb 3 11:41:43 2019 (r343712) @@ -17,11 +17,9 @@ static const char rcsid[] = "@(#)$Id$"; #include #include #include -#ifndef linux # include # include # include -#endif #include #include #include Modified: projects/clang800-import/contrib/ipfilter/ipsend/ipresend.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/ipresend.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/ipresend.c Sun Feb 3 11:41:43 2019 (r343712) @@ -18,9 +18,7 @@ static const char rcsid[] = "@(#)$Id$"; #include #include #include -#ifndef linux #include -#endif #include #include #include @@ -37,9 +35,6 @@ extern struct ipread pcap, iphex, iptext; int opts = 0; #ifndef DEFAULT_DEVICE -# ifdef linux -char default_device[] = "eth0"; -# else # ifdef sun char default_device[] = "le0"; # else @@ -49,15 +44,10 @@ char default_device[] = "ln0"; # ifdef __bsdi__ char default_device[] = "ef0"; # else -# ifdef __sgi -char default_device[] = "ec0"; -# else char default_device[] = "lan0"; -# endif # endif # endif # endif -# endif #else char default_device[] = DEFAULT_DEVICE; #endif Modified: projects/clang800-import/contrib/ipfilter/ipsend/ipsend.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/ipsend.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/ipsend.c Sun Feb 3 11:41:43 2019 (r343712) @@ -21,14 +21,10 @@ static const char rcsid[] = "@(#)$Id$"; #include #include #include -#ifndef linux # include -#endif #include "ipsend.h" #include "ipf.h" -#ifndef linux # include -#endif extern char *optarg; @@ -37,27 +33,15 @@ extern void iplang __P((FILE *)); char options[68]; int opts; -#ifdef linux -char default_device[] = "eth0"; -#else # ifdef ultrix char default_device[] = "ln0"; # else # ifdef __bsdi__ char default_device[] = "ef0"; # else -# ifdef __sgi -char default_device[] = "ec0"; -# else -# ifdef __hpux -char default_device[] = "lan0"; -# else char default_device[] = "le0"; -# endif /* __hpux */ -# endif /* __sgi */ # endif /* __bsdi__ */ # endif /* ultrix */ -#endif /* linux */ static void usage __P((char *)); Modified: projects/clang800-import/contrib/ipfilter/ipsend/ipsend.h ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/ipsend.h Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/ipsend.h Sun Feb 3 11:41:43 2019 (r343712) @@ -26,9 +26,6 @@ #include #include "ipf.h" -#ifdef linux -#include -#endif /* XXX: The following is needed by tcpip.h */ #include #include "netinet/tcpip.h" @@ -49,11 +46,7 @@ extern u_32_t buildopts __P((char *, char *, int)); extern int addipopt __P((char *, struct ipopt_names *, int, char *)); extern int initdevice __P((char *, int)); extern int sendip __P((int, char *, int)); -#ifdef linux -extern struct sock *find_tcp __P((int, struct tcpiphdr *)); -#else extern struct tcpcb *find_tcp __P((int, struct tcpiphdr *)); -#endif extern int ip_resend __P((char *, int, struct ipread *, struct in_addr, char *)); extern void ip_test1 __P((char *, int, ip_t *, struct in_addr, int)); Modified: projects/clang800-import/contrib/ipfilter/ipsend/ipsopt.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/ipsopt.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/ipsopt.c Sun Feb 3 11:41:43 2019 (r343712) @@ -20,9 +20,7 @@ static const char rcsid[] = "@(#)$Id$"; #include #include #include -#ifndef linux #include -#endif #include #include #include "ipsend.h" Modified: projects/clang800-import/contrib/ipfilter/ipsend/iptest.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/iptest.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/iptest.c Sun Feb 3 11:41:43 2019 (r343712) @@ -18,12 +18,7 @@ static const char rcsid[] = "@(#)$Id$"; #include #include #include -#ifndef linux #include -#endif -#ifdef linux -#include -#endif #include #include #include @@ -36,9 +31,6 @@ extern char *optarg; extern int optind; char options[68]; -#ifdef linux -char default_device[] = "eth0"; -#else # ifdef sun char default_device[] = "le0"; # else @@ -48,15 +40,10 @@ char default_device[] = "ln0"; # ifdef __bsdi__ char default_device[] = "ef0"; # else -# ifdef __sgi -char default_device[] = "ec0"; -# else char default_device[] = "lan0"; -# endif # endif # endif # endif -#endif static void usage __P((char *)); int main __P((int, char **)); Modified: projects/clang800-import/contrib/ipfilter/ipsend/iptests.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/iptests.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/iptests.c Sun Feb 3 11:41:43 2019 (r343712) @@ -21,7 +21,6 @@ static const char rcsid[] = "@(#)$Id$"; typedef int boolean_t; #endif #include -#if !defined(__osf__) # ifdef __NetBSD__ # include # include @@ -37,7 +36,6 @@ typedef int boolean_t; # endif # undef _KERNEL # undef KERNEL -#endif #if !defined(solaris) && !defined(linux) && !defined(__sgi) # include # include @@ -66,24 +64,13 @@ typedef int boolean_t; #endif #include #include -#ifdef __hpux -# define _NET_ROUTE_INCLUDED -#endif #include -#if defined(linux) && (LINUX >= 0200) -# include -#endif -#if !defined(linux) # if defined(__FreeBSD__) # include "radix_ipf.h" # endif # if !defined(solaris) # include # endif -#else -# define __KERNEL__ /* because there's a macro not wrapped by this */ -# include /* in this file :-/ */ -#endif #include #include #include @@ -94,20 +81,13 @@ typedef int boolean_t; #include #include #include -#ifdef __hpux -# undef _NET_ROUTE_INCLUDED -#endif -#if !defined(linux) # include # if !defined(__hpux) && !defined(solaris) # include # endif -#endif #include "ipsend.h" -#if !defined(linux) && !defined(__hpux) # include # include -#endif #if defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 106000000) # define USE_NANOSLEEP #endif @@ -951,9 +931,7 @@ void ip_test5(dev, mtu, ip, gwip, ptest) int nfd, i; t = (tcphdr_t *)((char *)ip + (IP_HL(ip) << 2)); -#if !defined(linux) && !defined(__osf__) t->th_x2 = 0; -#endif TCP_OFF_A(t, 0); t->th_sport = htons(1); t->th_dport = htons(1); Modified: projects/clang800-import/contrib/ipfilter/ipsend/resend.c ============================================================================== --- projects/clang800-import/contrib/ipfilter/ipsend/resend.c Sun Feb 3 11:07:40 2019 (r343711) +++ projects/clang800-import/contrib/ipfilter/ipsend/resend.c Sun Feb 3 11:41:43 2019 (r343712) @@ -19,10 +19,8 @@ static const char rcsid[] = "@(#)$Id$"; #include #include #include -#ifndef linux # include *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Mon Feb 4 17:53:30 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AE9F714AB22C for ; Mon, 4 Feb 2019 17:53:30 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DFDF6A634; Mon, 4 Feb 2019 17:53:30 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 33CB397C4; Mon, 4 Feb 2019 17:53:30 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x14HrU2d077877; Mon, 4 Feb 2019 17:53:30 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x14HrUu1077876; Mon, 4 Feb 2019 17:53:30 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201902041753.x14HrUu1077876@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 4 Feb 2019 17:53:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r343747 - projects/clang800-import/sys/i386/i386 X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: projects/clang800-import/sys/i386/i386 X-SVN-Commit-Revision: 343747 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4DFDF6A634 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.97)[-0.971,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Feb 2019 17:53:30 -0000 Author: dim Date: Mon Feb 4 17:53:29 2019 New Revision: 343747 URL: https://svnweb.freebsd.org/changeset/base/343747 Log: Use NLDT to get number of LDTs on i386 Compiling a GENERIC kernel for i386 with clang 8.0 results in the following warning: /usr/src/sys/i386/i386/sys_machdep.c:542:40: error: 'sizeof ((ldt))' will return the size of the pointer, not the array itself [-Werror,-Wsizeof-pointer-div] nldt = pldt != NULL ? pldt->ldt_len : nitems(ldt); ^~~~~~~~~~~ /usr/src/sys/sys/param.h:299:32: note: expanded from macro 'nitems' #define nitems(x) (sizeof((x)) / sizeof((x)[0])) ~~~~~~~~~~~ ^ Indeed, 'ldt' is declared as 'union descriptor *', so nitems() is not the right way to determine the number of LDTs. Instead, the NLDT define from sys/x86/include/segments.h should be used. Reviewed by: kib MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D19074 Modified: projects/clang800-import/sys/i386/i386/sys_machdep.c Modified: projects/clang800-import/sys/i386/i386/sys_machdep.c ============================================================================== --- projects/clang800-import/sys/i386/i386/sys_machdep.c Mon Feb 4 16:55:24 2019 (r343746) +++ projects/clang800-import/sys/i386/i386/sys_machdep.c Mon Feb 4 17:53:29 2019 (r343747) @@ -539,7 +539,7 @@ i386_get_ldt(struct thread *td, struct i386_ldt_args * data = malloc(num * sizeof(union descriptor), M_TEMP, M_WAITOK); mtx_lock_spin(&dt_lock); pldt = td->td_proc->p_md.md_ldt; - nldt = pldt != NULL ? pldt->ldt_len : nitems(ldt); + nldt = pldt != NULL ? pldt->ldt_len : NLDT; if (uap->start >= nldt) { num = 0; } else { From owner-svn-src-projects@freebsd.org Tue Feb 5 19:48:32 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3789814CE9BB for ; Tue, 5 Feb 2019 19:48:32 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C74758E8AE; Tue, 5 Feb 2019 19:48:31 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B562A228F4; Tue, 5 Feb 2019 19:48:31 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x15JmVjF000745; Tue, 5 Feb 2019 19:48:31 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x15JmPDM000710; Tue, 5 Feb 2019 19:48:25 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201902051948.x15JmPDM000710@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Tue, 5 Feb 2019 19:48:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r343806 - in projects/clang800-import: contrib/llvm/include/llvm/Support contrib/llvm/include/llvm/Transforms/Utils contrib/llvm/lib/CodeGen contrib/llvm/lib/CodeGen/AsmPrinter contrib/... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang800-import: contrib/llvm/include/llvm/Support contrib/llvm/include/llvm/Transforms/Utils contrib/llvm/lib/CodeGen contrib/llvm/lib/CodeGen/AsmPrinter contrib/llvm/lib/CodeGen/Selectio... X-SVN-Commit-Revision: 343806 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: C74758E8AE X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.98)[-0.976,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Feb 2019 19:48:32 -0000 Author: dim Date: Tue Feb 5 19:48:24 2019 New Revision: 343806 URL: https://svnweb.freebsd.org/changeset/base/343806 Log: Merge llvm, clang, compiler-rt, libc++, lld, and lldb release_80 branch r353167, resolve conflicts, and bump version numbers. Modified: projects/clang800-import/contrib/llvm/include/llvm/Support/JSON.h projects/clang800-import/contrib/llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h projects/clang800-import/contrib/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp projects/clang800-import/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp projects/clang800-import/contrib/llvm/lib/CodeGen/MachineInstr.cpp projects/clang800-import/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp projects/clang800-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp projects/clang800-import/contrib/llvm/lib/IR/AutoUpgrade.cpp projects/clang800-import/contrib/llvm/lib/Support/JSON.cpp projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64SpeculationHardening.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td projects/clang800-import/contrib/llvm/lib/Target/Mips/MicroMipsInstrInfo.td projects/clang800-import/contrib/llvm/lib/Target/Mips/Mips32r6InstrInfo.td projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsAsmPrinter.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsFastISel.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.h projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsInstrInfo.cpp projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp projects/clang800-import/contrib/llvm/lib/Target/X86/X86DiscriminateMemOps.cpp projects/clang800-import/contrib/llvm/lib/Target/X86/X86InsertPrefetch.cpp projects/clang800-import/contrib/llvm/lib/Transforms/Utils/FunctionImportUtils.cpp projects/clang800-import/contrib/llvm/lib/Transforms/Utils/LoopUtils.cpp projects/clang800-import/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsAArch64.def projects/clang800-import/contrib/llvm/tools/clang/include/clang/Basic/Features.def projects/clang800-import/contrib/llvm/tools/clang/include/clang/Basic/FileManager.h projects/clang800-import/contrib/llvm/tools/clang/include/clang/Basic/TargetInfo.h projects/clang800-import/contrib/llvm/tools/clang/include/clang/Driver/Options.td projects/clang800-import/contrib/llvm/tools/clang/include/clang/Tooling/ArgumentsAdjusters.h projects/clang800-import/contrib/llvm/tools/clang/lib/Basic/FileManager.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Basic/TargetInfo.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Basic/Targets.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Basic/Targets/AArch64.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Basic/Targets/ARM.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Basic/Targets/OSTargets.h projects/clang800-import/contrib/llvm/tools/clang/lib/Basic/Targets/SPIR.h projects/clang800-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/NetBSD.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Headers/opencl-c.h projects/clang800-import/contrib/llvm/tools/clang/lib/Lex/LiteralSupport.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Sema/SemaCodeComplete.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Sema/SemaExpr.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Sema/SemaTemplate.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Sema/SemaType.cpp projects/clang800-import/contrib/llvm/tools/clang/lib/Tooling/ArgumentsAdjusters.cpp projects/clang800-import/contrib/llvm/tools/lld/COFF/Chunks.cpp projects/clang800-import/contrib/llvm/tools/lld/COFF/Chunks.h projects/clang800-import/contrib/llvm/tools/lld/COFF/DLL.cpp projects/clang800-import/contrib/llvm/tools/lld/COFF/ICF.cpp projects/clang800-import/contrib/llvm/tools/lld/COFF/Writer.cpp projects/clang800-import/contrib/llvm/tools/lld/ELF/ICF.cpp projects/clang800-import/contrib/llvm/tools/lld/ELF/InputFiles.cpp projects/clang800-import/contrib/llvm/tools/lld/ELF/InputFiles.h projects/clang800-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp projects/clang800-import/contrib/llvm/tools/lld/docs/ReleaseNotes.rst projects/clang800-import/lib/clang/include/clang/Basic/Version.inc projects/clang800-import/lib/clang/include/lld/Common/Version.inc projects/clang800-import/lib/clang/include/llvm/Support/VCSRevision.h Directory Properties: projects/clang800-import/contrib/compiler-rt/ (props changed) projects/clang800-import/contrib/libc++/ (props changed) projects/clang800-import/contrib/llvm/ (props changed) projects/clang800-import/contrib/llvm/tools/clang/ (props changed) projects/clang800-import/contrib/llvm/tools/lld/ (props changed) projects/clang800-import/contrib/llvm/tools/lldb/ (props changed) Modified: projects/clang800-import/contrib/llvm/include/llvm/Support/JSON.h ============================================================================== --- projects/clang800-import/contrib/llvm/include/llvm/Support/JSON.h Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/include/llvm/Support/JSON.h Tue Feb 5 19:48:24 2019 (r343806) @@ -481,6 +481,7 @@ class Value { (private) mutable llvm::AlignedCharArrayUnion Union; + friend bool operator==(const Value &, const Value &); }; bool operator==(const Value &, const Value &); Modified: projects/clang800-import/contrib/llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h ============================================================================== --- projects/clang800-import/contrib/llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/include/llvm/Transforms/Utils/FunctionImportUtils.h Tue Feb 5 19:48:24 2019 (r343806) @@ -44,6 +44,11 @@ class FunctionImportGlobalProcessing { /// to promote any non-renamable values. SmallPtrSet Used; + /// Keep track of any COMDATs that require renaming (because COMDAT + /// leader was promoted and renamed). Maps from original COMDAT to one + /// with new name. + DenseMap RenamedComdats; + /// Check if we should promote the given local value to global scope. bool shouldPromoteLocalToGlobal(const GlobalValue *SGV); Modified: projects/clang800-import/contrib/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -1836,7 +1836,10 @@ TypeIndex CodeViewDebug::lowerTypeMemberFunction(const unsigned Index = 0; SmallVector ArgTypeIndices; - TypeIndex ReturnTypeIndex = getTypeIndex(ReturnAndArgs[Index++]); + TypeIndex ReturnTypeIndex = TypeIndex::Void(); + if (ReturnAndArgs.size() > Index) { + ReturnTypeIndex = getTypeIndex(ReturnAndArgs[Index++]); + } // If the first argument is a pointer type and this isn't a static method, // treat it as the special 'this' parameter, which is encoded separately from Modified: projects/clang800-import/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -1956,8 +1956,10 @@ void DebugLocEntry::finalize(const AsmPrinter &AP, void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) { // Emit the size. Asm->OutStreamer->AddComment("Loc expr size"); - Asm->emitInt16(DebugLocs.getBytes(Entry).size()); - + if (getDwarfVersion() >= 5) + Asm->EmitULEB128(DebugLocs.getBytes(Entry).size()); + else + Asm->emitInt16(DebugLocs.getBytes(Entry).size()); // Emit the entry. APByteStreamer Streamer(*Asm); emitDebugLocEntry(Streamer, Entry); Modified: projects/clang800-import/contrib/llvm/lib/CodeGen/MachineInstr.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/CodeGen/MachineInstr.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/CodeGen/MachineInstr.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -225,12 +225,13 @@ void MachineInstr::addOperand(MachineFunction &MF, con } #ifndef NDEBUG - bool isMetaDataOp = Op.getType() == MachineOperand::MO_Metadata; + bool isDebugOp = Op.getType() == MachineOperand::MO_Metadata || + Op.getType() == MachineOperand::MO_MCSymbol; // OpNo now points as the desired insertion point. Unless this is a variadic // instruction, only implicit regs are allowed beyond MCID->getNumOperands(). // RegMask operands go between the explicit and implicit operands. assert((isImpReg || Op.isRegMask() || MCID->isVariadic() || - OpNo < MCID->getNumOperands() || isMetaDataOp) && + OpNo < MCID->getNumOperands() || isDebugOp) && "Trying to add an operand to a machine instr that is already done!"); #endif Modified: projects/clang800-import/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -16214,23 +16214,29 @@ static SDValue reduceBuildVecToShuffleWithZero(SDNode // The build vector contains some number of undef elements and exactly // one other element. That other element must be a zero-extended scalar // extracted from a vector at a constant index to turn this into a shuffle. + // Also, require that the build vector does not implicitly truncate/extend + // its elements. // TODO: This could be enhanced to allow ANY_EXTEND as well as ZERO_EXTEND. + EVT VT = BV->getValueType(0); SDValue Zext = BV->getOperand(ZextElt); if (Zext.getOpcode() != ISD::ZERO_EXTEND || !Zext.hasOneUse() || Zext.getOperand(0).getOpcode() != ISD::EXTRACT_VECTOR_ELT || - !isa(Zext.getOperand(0).getOperand(1))) + !isa(Zext.getOperand(0).getOperand(1)) || + Zext.getValueSizeInBits() != VT.getScalarSizeInBits()) return SDValue(); - // The zero-extend must be a multiple of the source size. + // The zero-extend must be a multiple of the source size, and we must be + // building a vector of the same size as the source of the extract element. SDValue Extract = Zext.getOperand(0); unsigned DestSize = Zext.getValueSizeInBits(); unsigned SrcSize = Extract.getValueSizeInBits(); - if (DestSize % SrcSize != 0) + if (DestSize % SrcSize != 0 || + Extract.getOperand(0).getValueSizeInBits() != VT.getSizeInBits()) return SDValue(); // Create a shuffle mask that will combine the extracted element with zeros // and undefs. - int ZextRatio = DestSize / SrcSize; + int ZextRatio = DestSize / SrcSize; int NumMaskElts = NumBVOps * ZextRatio; SmallVector ShufMask(NumMaskElts, -1); for (int i = 0; i != NumMaskElts; ++i) { @@ -16260,7 +16266,7 @@ static SDValue reduceBuildVecToShuffleWithZero(SDNode SDValue ZeroVec = DAG.getConstant(0, DL, VecVT); SDValue Shuf = DAG.getVectorShuffle(VecVT, DL, Extract.getOperand(0), ZeroVec, ShufMask); - return DAG.getBitcast(BV->getValueType(0), Shuf); + return DAG.getBitcast(VT, Shuf); } // Check to see if this is a BUILD_VECTOR of a bunch of EXTRACT_VECTOR_ELT Modified: projects/clang800-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -184,7 +184,8 @@ DWARFDebugLoclists::parseOneLocationList(DataExtractor } if (Kind != dwarf::DW_LLE_base_address) { - unsigned Bytes = Data.getU16(Offset); + unsigned Bytes = + Version >= 5 ? Data.getULEB128(Offset) : Data.getU16(Offset); // A single location description describing the location of the object... StringRef str = Data.getData().substr(*Offset, Bytes); *Offset += Bytes; Modified: projects/clang800-import/contrib/llvm/lib/IR/AutoUpgrade.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/IR/AutoUpgrade.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/IR/AutoUpgrade.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -469,6 +469,11 @@ static bool UpgradeX86IntrinsicFunction(Function *F, S } } + if (Name == "seh.recoverfp") { + NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::eh_recoverfp); + return true; + } + return false; } @@ -542,10 +547,6 @@ static bool UpgradeIntrinsicFunction1(Function *F, Fun } if (Name == "aarch64.thread.pointer" || Name == "arm.thread.pointer") { NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::thread_pointer); - return true; - } - if (Name == "x86.seh.recoverfp") { - NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::eh_recoverfp); return true; } break; Modified: projects/clang800-import/contrib/llvm/lib/Support/JSON.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Support/JSON.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Support/JSON.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -182,6 +182,12 @@ bool operator==(const Value &L, const Value &R) { case Value::Boolean: return *L.getAsBoolean() == *R.getAsBoolean(); case Value::Number: + // Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 + // The same integer must convert to the same double, per the standard. + // However we see 64-vs-80-bit precision comparisons with gcc-7 -O3 -m32. + // So we avoid floating point promotion for exact comparisons. + if (L.Type == Value::T_Integer || R.Type == Value::T_Integer) + return L.getAsInteger() == R.getAsInteger(); return *L.getAsNumber() == *R.getAsNumber(); case Value::String: return *L.getAsString() == *R.getAsString(); Modified: projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64SpeculationHardening.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64SpeculationHardening.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64SpeculationHardening.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -103,6 +103,7 @@ #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineOperand.h" #include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/RegisterScavenging.h" #include "llvm/IR/DebugLoc.h" #include "llvm/Pass.h" #include "llvm/Support/CodeGen.h" @@ -146,25 +147,31 @@ class AArch64SpeculationHardening : public MachineFunc BitVector RegsAlreadyMasked; bool functionUsesHardeningRegister(MachineFunction &MF) const; - bool instrumentControlFlow(MachineBasicBlock &MBB); + bool instrumentControlFlow(MachineBasicBlock &MBB, + bool &UsesFullSpeculationBarrier); bool endsWithCondControlFlow(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, AArch64CC::CondCode &CondCode) const; void insertTrackingCode(MachineBasicBlock &SplitEdgeBB, AArch64CC::CondCode &CondCode, DebugLoc DL) const; - void insertSPToRegTaintPropagation(MachineBasicBlock *MBB, + void insertSPToRegTaintPropagation(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI) const; - void insertRegToSPTaintPropagation(MachineBasicBlock *MBB, + void insertRegToSPTaintPropagation(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned TmpReg) const; + void insertFullSpeculationBarrier(MachineBasicBlock &MBB, + MachineBasicBlock::iterator MBBI, + DebugLoc DL) const; bool slhLoads(MachineBasicBlock &MBB); bool makeGPRSpeculationSafe(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, MachineInstr &MI, unsigned Reg); - bool lowerSpeculationSafeValuePseudos(MachineBasicBlock &MBB); + bool lowerSpeculationSafeValuePseudos(MachineBasicBlock &MBB, + bool UsesFullSpeculationBarrier); bool expandSpeculationSafeValue(MachineBasicBlock &MBB, - MachineBasicBlock::iterator MBBI); + MachineBasicBlock::iterator MBBI, + bool UsesFullSpeculationBarrier); bool insertCSDB(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, DebugLoc DL); }; @@ -207,15 +214,19 @@ bool AArch64SpeculationHardening::endsWithCondControlF return true; } +void AArch64SpeculationHardening::insertFullSpeculationBarrier( + MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, + DebugLoc DL) const { + // A full control flow speculation barrier consists of (DSB SYS + ISB) + BuildMI(MBB, MBBI, DL, TII->get(AArch64::DSB)).addImm(0xf); + BuildMI(MBB, MBBI, DL, TII->get(AArch64::ISB)).addImm(0xf); +} + void AArch64SpeculationHardening::insertTrackingCode( MachineBasicBlock &SplitEdgeBB, AArch64CC::CondCode &CondCode, DebugLoc DL) const { if (UseControlFlowSpeculationBarrier) { - // insert full control flow speculation barrier (DSB SYS + ISB) - BuildMI(SplitEdgeBB, SplitEdgeBB.begin(), DL, TII->get(AArch64::ISB)) - .addImm(0xf); - BuildMI(SplitEdgeBB, SplitEdgeBB.begin(), DL, TII->get(AArch64::DSB)) - .addImm(0xf); + insertFullSpeculationBarrier(SplitEdgeBB, SplitEdgeBB.begin(), DL); } else { BuildMI(SplitEdgeBB, SplitEdgeBB.begin(), DL, TII->get(AArch64::CSELXr)) .addDef(MisspeculatingTaintReg) @@ -227,7 +238,7 @@ void AArch64SpeculationHardening::insertTrackingCode( } bool AArch64SpeculationHardening::instrumentControlFlow( - MachineBasicBlock &MBB) { + MachineBasicBlock &MBB, bool &UsesFullSpeculationBarrier) { LLVM_DEBUG(dbgs() << "Instrument control flow tracking on MBB: " << MBB); bool Modified = false; @@ -263,55 +274,105 @@ bool AArch64SpeculationHardening::instrumentControlFlo } // Perform correct code generation around function calls and before returns. - { - SmallVector ReturnInstructions; - SmallVector CallInstructions; + // The below variables record the return/terminator instructions and the call + // instructions respectively; including which register is available as a + // temporary register just before the recorded instructions. + SmallVector, 4> ReturnInstructions; + SmallVector, 4> CallInstructions; + // if a temporary register is not available for at least one of the + // instructions for which we need to transfer taint to the stack pointer, we + // need to insert a full speculation barrier. + // TmpRegisterNotAvailableEverywhere tracks that condition. + bool TmpRegisterNotAvailableEverywhere = false; - for (MachineInstr &MI : MBB) { - if (MI.isReturn()) - ReturnInstructions.push_back(&MI); - else if (MI.isCall()) - CallInstructions.push_back(&MI); - } + RegScavenger RS; + RS.enterBasicBlock(MBB); - Modified |= - (ReturnInstructions.size() > 0) || (CallInstructions.size() > 0); + for (MachineBasicBlock::iterator I = MBB.begin(); I != MBB.end(); I++) { + MachineInstr &MI = *I; + if (!MI.isReturn() && !MI.isCall()) + continue; - for (MachineInstr *Return : ReturnInstructions) - insertRegToSPTaintPropagation(Return->getParent(), Return, AArch64::X17); - for (MachineInstr *Call : CallInstructions) { + // The RegScavenger represents registers available *after* the MI + // instruction pointed to by RS.getCurrentPosition(). + // We need to have a register that is available *before* the MI is executed. + if (I != MBB.begin()) + RS.forward(std::prev(I)); + // FIXME: The below just finds *a* unused register. Maybe code could be + // optimized more if this looks for the register that isn't used for the + // longest time around this place, to enable more scheduling freedom. Not + // sure if that would actually result in a big performance difference + // though. Maybe RegisterScavenger::findSurvivorBackwards has some logic + // already to do this - but it's unclear if that could easily be used here. + unsigned TmpReg = RS.FindUnusedReg(&AArch64::GPR64commonRegClass); + LLVM_DEBUG(dbgs() << "RS finds " + << ((TmpReg == 0) ? "no register " : "register "); + if (TmpReg != 0) dbgs() << printReg(TmpReg, TRI) << " "; + dbgs() << "to be available at MI " << MI); + if (TmpReg == 0) + TmpRegisterNotAvailableEverywhere = true; + if (MI.isReturn()) + ReturnInstructions.push_back({&MI, TmpReg}); + else if (MI.isCall()) + CallInstructions.push_back({&MI, TmpReg}); + } + + if (TmpRegisterNotAvailableEverywhere) { + // When a temporary register is not available everywhere in this basic + // basic block where a propagate-taint-to-sp operation is needed, just + // emit a full speculation barrier at the start of this basic block, which + // renders the taint/speculation tracking in this basic block unnecessary. + insertFullSpeculationBarrier(MBB, MBB.begin(), + (MBB.begin())->getDebugLoc()); + UsesFullSpeculationBarrier = true; + Modified = true; + } else { + for (auto MI_Reg : ReturnInstructions) { + assert(MI_Reg.second != 0); + LLVM_DEBUG( + dbgs() + << " About to insert Reg to SP taint propagation with temp register " + << printReg(MI_Reg.second, TRI) + << " on instruction: " << *MI_Reg.first); + insertRegToSPTaintPropagation(MBB, MI_Reg.first, MI_Reg.second); + Modified = true; + } + + for (auto MI_Reg : CallInstructions) { + assert(MI_Reg.second != 0); + LLVM_DEBUG(dbgs() << " About to insert Reg to SP and back taint " + "propagation with temp register " + << printReg(MI_Reg.second, TRI) + << " around instruction: " << *MI_Reg.first); // Just after the call: - MachineBasicBlock::iterator i = Call; - i++; - insertSPToRegTaintPropagation(Call->getParent(), i); + insertSPToRegTaintPropagation( + MBB, std::next((MachineBasicBlock::iterator)MI_Reg.first)); // Just before the call: - insertRegToSPTaintPropagation(Call->getParent(), Call, AArch64::X17); + insertRegToSPTaintPropagation(MBB, MI_Reg.first, MI_Reg.second); + Modified = true; } } - return Modified; } void AArch64SpeculationHardening::insertSPToRegTaintPropagation( - MachineBasicBlock *MBB, MachineBasicBlock::iterator MBBI) const { + MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI) const { // If full control flow speculation barriers are used, emit a control flow // barrier to block potential miss-speculation in flight coming in to this // function. if (UseControlFlowSpeculationBarrier) { - // insert full control flow speculation barrier (DSB SYS + ISB) - BuildMI(*MBB, MBBI, DebugLoc(), TII->get(AArch64::DSB)).addImm(0xf); - BuildMI(*MBB, MBBI, DebugLoc(), TII->get(AArch64::ISB)).addImm(0xf); + insertFullSpeculationBarrier(MBB, MBBI, DebugLoc()); return; } // CMP SP, #0 === SUBS xzr, SP, #0 - BuildMI(*MBB, MBBI, DebugLoc(), TII->get(AArch64::SUBSXri)) + BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::SUBSXri)) .addDef(AArch64::XZR) .addUse(AArch64::SP) .addImm(0) .addImm(0); // no shift // CSETM x16, NE === CSINV x16, xzr, xzr, EQ - BuildMI(*MBB, MBBI, DebugLoc(), TII->get(AArch64::CSINVXr)) + BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::CSINVXr)) .addDef(MisspeculatingTaintReg) .addUse(AArch64::XZR) .addUse(AArch64::XZR) @@ -319,7 +380,7 @@ void AArch64SpeculationHardening::insertSPToRegTaintPr } void AArch64SpeculationHardening::insertRegToSPTaintPropagation( - MachineBasicBlock *MBB, MachineBasicBlock::iterator MBBI, + MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned TmpReg) const { // If full control flow speculation barriers are used, there will not be // miss-speculation when returning from this function, and therefore, also @@ -328,19 +389,19 @@ void AArch64SpeculationHardening::insertRegToSPTaintPr return; // mov Xtmp, SP === ADD Xtmp, SP, #0 - BuildMI(*MBB, MBBI, DebugLoc(), TII->get(AArch64::ADDXri)) + BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::ADDXri)) .addDef(TmpReg) .addUse(AArch64::SP) .addImm(0) .addImm(0); // no shift // and Xtmp, Xtmp, TaintReg === AND Xtmp, Xtmp, TaintReg, #0 - BuildMI(*MBB, MBBI, DebugLoc(), TII->get(AArch64::ANDXrs)) + BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::ANDXrs)) .addDef(TmpReg, RegState::Renamable) .addUse(TmpReg, RegState::Kill | RegState::Renamable) .addUse(MisspeculatingTaintReg, RegState::Kill) .addImm(0); // mov SP, Xtmp === ADD SP, Xtmp, #0 - BuildMI(*MBB, MBBI, DebugLoc(), TII->get(AArch64::ADDXri)) + BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::ADDXri)) .addDef(AArch64::SP) .addUse(TmpReg, RegState::Kill) .addImm(0) @@ -484,7 +545,8 @@ bool AArch64SpeculationHardening::slhLoads(MachineBasi /// \brief If MBBI references a pseudo instruction that should be expanded /// here, do the expansion and return true. Otherwise return false. bool AArch64SpeculationHardening::expandSpeculationSafeValue( - MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI) { + MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, + bool UsesFullSpeculationBarrier) { MachineInstr &MI = *MBBI; unsigned Opcode = MI.getOpcode(); bool Is64Bit = true; @@ -499,7 +561,7 @@ bool AArch64SpeculationHardening::expandSpeculationSaf // Just remove the SpeculationSafe pseudo's if control flow // miss-speculation isn't happening because we're already inserting barriers // to guarantee that. - if (!UseControlFlowSpeculationBarrier) { + if (!UseControlFlowSpeculationBarrier && !UsesFullSpeculationBarrier) { unsigned DstReg = MI.getOperand(0).getReg(); unsigned SrcReg = MI.getOperand(1).getReg(); // Mark this register and all its aliasing registers as needing to be @@ -537,7 +599,7 @@ bool AArch64SpeculationHardening::insertCSDB(MachineBa } bool AArch64SpeculationHardening::lowerSpeculationSafeValuePseudos( - MachineBasicBlock &MBB) { + MachineBasicBlock &MBB, bool UsesFullSpeculationBarrier) { bool Modified = false; RegsNeedingCSDBBeforeUse.reset(); @@ -572,15 +634,16 @@ bool AArch64SpeculationHardening::lowerSpeculationSafe break; } - if (NeedToEmitBarrier) + if (NeedToEmitBarrier && !UsesFullSpeculationBarrier) Modified |= insertCSDB(MBB, MBBI, DL); - Modified |= expandSpeculationSafeValue(MBB, MBBI); + Modified |= + expandSpeculationSafeValue(MBB, MBBI, UsesFullSpeculationBarrier); MBBI = NMBBI; } - if (RegsNeedingCSDBBeforeUse.any()) + if (RegsNeedingCSDBBeforeUse.any() && !UsesFullSpeculationBarrier) Modified |= insertCSDB(MBB, MBBI, DL); return Modified; @@ -609,7 +672,7 @@ bool AArch64SpeculationHardening::runOnMachineFunction Modified |= slhLoads(MBB); } - // 2.a Add instrumentation code to function entry and exits. + // 2. Add instrumentation code to function entry and exits. LLVM_DEBUG( dbgs() << "***** AArch64SpeculationHardening - track control flow *****\n"); @@ -620,17 +683,15 @@ bool AArch64SpeculationHardening::runOnMachineFunction EntryBlocks.push_back(LPI.LandingPadBlock); for (auto Entry : EntryBlocks) insertSPToRegTaintPropagation( - Entry, Entry->SkipPHIsLabelsAndDebug(Entry->begin())); + *Entry, Entry->SkipPHIsLabelsAndDebug(Entry->begin())); - // 2.b Add instrumentation code to every basic block. - for (auto &MBB : MF) - Modified |= instrumentControlFlow(MBB); - - LLVM_DEBUG(dbgs() << "***** AArch64SpeculationHardening - Lowering " - "SpeculationSafeValue Pseudos *****\n"); - // Step 3: Lower SpeculationSafeValue pseudo instructions. - for (auto &MBB : MF) - Modified |= lowerSpeculationSafeValuePseudos(MBB); + // 3. Add instrumentation code to every basic block. + for (auto &MBB : MF) { + bool UsesFullSpeculationBarrier = false; + Modified |= instrumentControlFlow(MBB, UsesFullSpeculationBarrier); + Modified |= + lowerSpeculationSafeValuePseudos(MBB, UsesFullSpeculationBarrier); + } return Modified; } Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -65,10 +65,7 @@ class MCInstrInfo; } // end namespace llvm -static cl::opt -EmitJalrReloc("mips-jalr-reloc", cl::Hidden, - cl::desc("MIPS: Emit R_{MICRO}MIPS_JALR relocation with jalr"), - cl::init(true)); +extern cl::opt EmitJalrReloc; namespace { Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -15,6 +15,13 @@ using namespace llvm; +// Note: this option is defined here to be visible from libLLVMMipsAsmParser +// and libLLVMMipsCodeGen +cl::opt +EmitJalrReloc("mips-jalr-reloc", cl::Hidden, + cl::desc("MIPS: Emit R_{MICRO}MIPS_JALR relocation with jalr"), + cl::init(true)); + namespace { static const MCPhysReg O32IntRegs[4] = {Mips::A0, Mips::A1, Mips::A2, Mips::A3}; Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h Tue Feb 5 19:48:24 2019 (r343806) @@ -89,7 +89,10 @@ namespace MipsII { MO_GOT_HI16, MO_GOT_LO16, MO_CALL_HI16, - MO_CALL_LO16 + MO_CALL_LO16, + + /// Helper operand used to generate R_MIPS_JALR + MO_JALR }; enum { Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -614,8 +614,9 @@ getExprOpValue(const MCExpr *Expr, SmallVectorImplgetSubExpr(), Fixups, STI); case MipsMCExpr::MEK_CALL_HI16: FixupKind = Mips::fixup_Mips_CALL_HI16; break; Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -44,8 +44,10 @@ void MipsMCExpr::printImpl(raw_ostream &OS, const MCAs llvm_unreachable("MEK_None and MEK_Special are invalid"); break; case MEK_DTPREL: - llvm_unreachable("MEK_DTPREL is used for TLS DIEExpr only"); - break; + // MEK_DTPREL is used for marking TLS DIEExpr only + // and contains a regular sub-expression. + getSubExpr()->print(OS, MAI, true); + return; case MEK_CALL_HI16: OS << "%call_hi"; break; @@ -161,7 +163,9 @@ MipsMCExpr::evaluateAsRelocatableImpl(MCValue &Res, case MEK_Special: llvm_unreachable("MEK_None and MEK_Special are invalid"); case MEK_DTPREL: - llvm_unreachable("MEK_DTPREL is used for TLS DIEExpr only"); + // MEK_DTPREL is used for marking TLS DIEExpr only + // and contains a regular sub-expression. + return getSubExpr()->evaluateAsRelocatable(Res, Layout, Fixup); case MEK_DTPREL_HI: case MEK_DTPREL_LO: case MEK_GOT: @@ -249,9 +253,6 @@ void MipsMCExpr::fixELFSymbolsInTLSFixups(MCAssembler case MEK_Special: llvm_unreachable("MEK_None and MEK_Special are invalid"); break; - case MEK_DTPREL: - llvm_unreachable("MEK_DTPREL is used for TLS DIEExpr only"); - break; case MEK_CALL_HI16: case MEK_CALL_LO16: case MEK_GOT: @@ -274,6 +275,7 @@ void MipsMCExpr::fixELFSymbolsInTLSFixups(MCAssembler if (const MipsMCExpr *E = dyn_cast(getSubExpr())) E->fixELFSymbolsInTLSFixups(Asm); break; + case MEK_DTPREL: case MEK_DTPREL_HI: case MEK_DTPREL_LO: case MEK_TLSLDM: Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td Tue Feb 5 19:48:24 2019 (r343806) @@ -460,6 +460,7 @@ class JALRC16_MMR6_DESC_BASE; Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MicroMipsInstrInfo.td ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MicroMipsInstrInfo.td Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MicroMipsInstrInfo.td Tue Feb 5 19:48:24 2019 (r343806) @@ -426,6 +426,7 @@ class JumpLinkRegMM16 : PseudoSE<(outs), (ins RO:$rs), [(MipsTailCall RO:$rs)], II_JR>, PseudoInstExpansion<(JumpInst RT:$rt, RO:$rs)>; Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsAsmPrinter.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsAsmPrinter.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsAsmPrinter.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -68,6 +68,8 @@ using namespace llvm; #define DEBUG_TYPE "mips-asm-printer" +extern cl::opt EmitJalrReloc; + MipsTargetStreamer &MipsAsmPrinter::getTargetStreamer() const { return static_cast(*OutStreamer->getTargetStreamer()); } @@ -148,6 +150,40 @@ void MipsAsmPrinter::emitPseudoIndirectBranch(MCStream EmitToStreamer(OutStreamer, TmpInst0); } +// If there is an MO_JALR operand, insert: +// +// .reloc tmplabel, R_{MICRO}MIPS_JALR, symbol +// tmplabel: +// +// This is an optimization hint for the linker which may then replace +// an indirect call with a direct branch. +static void emitDirectiveRelocJalr(const MachineInstr &MI, + MCContext &OutContext, + TargetMachine &TM, + MCStreamer &OutStreamer, + const MipsSubtarget &Subtarget) { + for (unsigned int I = MI.getDesc().getNumOperands(), E = MI.getNumOperands(); + I < E; ++I) { + MachineOperand MO = MI.getOperand(I); + if (MO.isMCSymbol() && (MO.getTargetFlags() & MipsII::MO_JALR)) { + MCSymbol *Callee = MO.getMCSymbol(); + if (Callee && !Callee->getName().empty()) { + MCSymbol *OffsetLabel = OutContext.createTempSymbol(); + const MCExpr *OffsetExpr = + MCSymbolRefExpr::create(OffsetLabel, OutContext); + const MCExpr *CaleeExpr = + MCSymbolRefExpr::create(Callee, OutContext); + OutStreamer.EmitRelocDirective + (*OffsetExpr, + Subtarget.inMicroMipsMode() ? "R_MICROMIPS_JALR" : "R_MIPS_JALR", + CaleeExpr, SMLoc(), *TM.getMCSubtargetInfo()); + OutStreamer.EmitLabel(OffsetLabel); + return; + } + } + } +} + void MipsAsmPrinter::EmitInstruction(const MachineInstr *MI) { MipsTargetStreamer &TS = getTargetStreamer(); unsigned Opc = MI->getOpcode(); @@ -205,6 +241,11 @@ void MipsAsmPrinter::EmitInstruction(const MachineInst case Mips::PATCHABLE_TAIL_CALL: LowerPATCHABLE_TAIL_CALL(*MI); return; + } + + if (EmitJalrReloc && + (MI->isReturn() || MI->isCall() || MI->isIndirectBranch())) { + emitDirectiveRelocJalr(*MI, OutContext, TM, *OutStreamer, *Subtarget); } MachineBasicBlock::const_instr_iterator I = MI->getIterator(); Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsFastISel.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsFastISel.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsFastISel.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -56,6 +56,7 @@ #include "llvm/IR/Type.h" #include "llvm/IR/User.h" #include "llvm/IR/Value.h" +#include "llvm/MC/MCContext.h" #include "llvm/MC/MCInstrDesc.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSymbol.h" @@ -75,6 +76,8 @@ using namespace llvm; +extern cl::opt EmitJalrReloc; + namespace { class MipsFastISel final : public FastISel { @@ -1550,6 +1553,16 @@ bool MipsFastISel::fastLowerCall(CallLoweringInfo &CLI MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC)); CLI.Call = MIB; + + if (EmitJalrReloc && !Subtarget->inMips16Mode()) { + // Attach callee address to the instruction, let asm printer emit + // .reloc R_MIPS_JALR. + if (Symbol) + MIB.addSym(Symbol, MipsII::MO_JALR); + else + MIB.addSym(FuncInfo.MF->getContext().getOrCreateSymbol( + Addr.getGlobalValue()->getName()), MipsII::MO_JALR); + } // Finish off the call including any return values. return finishCall(CLI, RetVT, NumBytes); Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -57,6 +57,7 @@ #include "llvm/IR/GlobalValue.h" #include "llvm/IR/Type.h" #include "llvm/IR/Value.h" +#include "llvm/MC/MCContext.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/Support/Casting.h" #include "llvm/Support/CodeGen.h" @@ -91,6 +92,8 @@ NoZeroDivCheck("mno-check-zero-division", cl::Hidden, cl::desc("MIPS: Don't trap on integer division by zero."), cl::init(false)); +extern cl::opt EmitJalrReloc; + static const MCPhysReg Mips64DPRegs[8] = { Mips::D12_64, Mips::D13_64, Mips::D14_64, Mips::D15_64, Mips::D16_64, Mips::D17_64, Mips::D18_64, Mips::D19_64 @@ -2879,6 +2882,54 @@ getOpndList(SmallVectorImpl &Ops, Ops.push_back(InFlag); } +void MipsTargetLowering::AdjustInstrPostInstrSelection(MachineInstr &MI, + SDNode *Node) const { + switch (MI.getOpcode()) { + default: + return; + case Mips::JALR: + case Mips::JALRPseudo: + case Mips::JALR64: + case Mips::JALR64Pseudo: + case Mips::JALR16_MM: + case Mips::JALRC16_MMR6: + case Mips::TAILCALLREG: + case Mips::TAILCALLREG64: + case Mips::TAILCALLR6REG: + case Mips::TAILCALL64R6REG: + case Mips::TAILCALLREG_MM: + case Mips::TAILCALLREG_MMR6: { + if (!EmitJalrReloc || + Subtarget.inMips16Mode() || + !isPositionIndependent() || + Node->getNumOperands() < 1 || + Node->getOperand(0).getNumOperands() < 2) { + return; + } + // We are after the callee address, set by LowerCall(). + // If added to MI, asm printer will emit .reloc R_MIPS_JALR for the + // symbol. + const SDValue TargetAddr = Node->getOperand(0).getOperand(1); + StringRef Sym; + if (const GlobalAddressSDNode *G = + dyn_cast_or_null(TargetAddr)) { + Sym = G->getGlobal()->getName(); + } + else if (const ExternalSymbolSDNode *ES = + dyn_cast_or_null(TargetAddr)) { + Sym = ES->getSymbol(); + } + + if (Sym.empty()) + return; + + MachineFunction *MF = MI.getParent()->getParent(); + MCSymbol *S = MF->getContext().getOrCreateSymbol(Sym); + MI.addOperand(MachineOperand::CreateMCSymbol(S, MipsII::MO_JALR)); + } + } +} + /// LowerCall - functions arguments are copied from virtual regs to /// (physical regs)/(stack frame), CALLSEQ_START and CALLSEQ_END are emitted. SDValue @@ -2930,7 +2981,7 @@ MipsTargetLowering::LowerCall(TargetLowering::CallLowe // the maximum out going argument area (including the reserved area), and // preallocates the stack space on entrance to the caller. // - // FIXME: We should do the same for efficency and space. + // FIXME: We should do the same for efficiency and space. // Note: The check on the calling convention below must match // MipsABIInfo::GetCalleeAllocdArgSizeInBytes(). Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.h ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.h Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.h Tue Feb 5 19:48:24 2019 (r343806) @@ -341,6 +341,9 @@ class TargetRegisterClass; EmitInstrWithCustomInserter(MachineInstr &MI, MachineBasicBlock *MBB) const override; + void AdjustInstrPostInstrSelection(MachineInstr &MI, + SDNode *Node) const override; + void HandleByVal(CCState *, unsigned &, unsigned) const override; unsigned getRegisterByName(const char* RegName, EVT VT, Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsInstrInfo.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsInstrInfo.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsInstrInfo.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -653,6 +653,16 @@ MipsInstrInfo::genInstrWithNewOpc(unsigned NewOpc, MIB.addImm(0); + // If I has an MCSymbol operand (used by asm printer, to emit R_MIPS_JALR), + // add it to the new instruction. + for (unsigned J = I->getDesc().getNumOperands(), E = I->getNumOperands(); + J < E; ++J) { + const MachineOperand &MO = I->getOperand(J); + if (MO.isMCSymbol() && (MO.getTargetFlags() & MipsII::MO_JALR)) + MIB.addSym(MO.getMCSymbol(), MipsII::MO_JALR); + } + + } else { for (unsigned J = 0, E = I->getDesc().getNumOperands(); J < E; ++J) { if (BranchWithZeroOperand && (unsigned)ZeroOperandPosition == J) @@ -825,7 +835,8 @@ MipsInstrInfo::getSerializableDirectMachineOperandTarg {MO_GOT_HI16, "mips-got-hi16"}, {MO_GOT_LO16, "mips-got-lo16"}, {MO_CALL_HI16, "mips-call-hi16"}, - {MO_CALL_LO16, "mips-call-lo16"} + {MO_CALL_LO16, "mips-call-lo16"}, + {MO_JALR, "mips-jalr"} }; return makeArrayRef(Flags); } Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td Tue Feb 5 19:48:24 2019 (r343806) @@ -1623,11 +1623,15 @@ let isCall=1, hasDelaySlot=1, isCTI=1, Defs = [RA] in class JumpLinkRegPseudo: PseudoSE<(outs), (ins RO:$rs), [(MipsJmpLink RO:$rs)], II_JALR>, - PseudoInstExpansion<(JALRInst RetReg, ResRO:$rs)>; + PseudoInstExpansion<(JALRInst RetReg, ResRO:$rs)> { + let hasPostISelHook = 1; + } class JumpLinkReg: InstSE<(outs RO:$rd), (ins RO:$rs), !strconcat(opstr, "\t$rd, $rs"), - [], II_JALR, FrmR, opstr>; + [], II_JALR, FrmR, opstr> { + let hasPostISelHook = 1; + } class BGEZAL_FT : @@ -1646,7 +1650,9 @@ let isCall = 1, isTerminator = 1, isReturn = 1, isBarr class TailCallReg : PseudoSE<(outs), (ins RO:$rs), [(MipsTailCall RO:$rs)], II_JR>, - PseudoInstExpansion<(JumpInst RO:$rs)>; + PseudoInstExpansion<(JumpInst RO:$rs)> { + let hasPostISelHook = 1; + } } class BAL_BR_Pseudo : Modified: projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/Mips/MipsMCInstLower.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -117,6 +117,8 @@ MCOperand MipsMCInstLower::LowerSymbolOperand(const Ma case MipsII::MO_CALL_LO16: TargetKind = MipsMCExpr::MEK_CALL_LO16; break; + case MipsII::MO_JALR: + return MCOperand(); } switch (MOTy) { Modified: projects/clang800-import/contrib/llvm/lib/Target/X86/X86DiscriminateMemOps.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/X86/X86DiscriminateMemOps.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/X86/X86DiscriminateMemOps.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -27,6 +27,14 @@ using namespace llvm; #define DEBUG_TYPE "x86-discriminate-memops" +static cl::opt EnableDiscriminateMemops( + DEBUG_TYPE, cl::init(false), + cl::desc("Generate unique debug info for each instruction with a memory " + "operand. Should be enabled for profile-drived cache prefetching, " + "both in the build of the binary being profiled, as well as in " + "the build of the binary consuming the profile."), + cl::Hidden); + namespace { using Location = std::pair; @@ -67,6 +75,9 @@ char X86DiscriminateMemOps::ID = 0; X86DiscriminateMemOps::X86DiscriminateMemOps() : MachineFunctionPass(ID) {} bool X86DiscriminateMemOps::runOnMachineFunction(MachineFunction &MF) { + if (!EnableDiscriminateMemops) + return false; + DISubprogram *FDI = MF.getFunction().getSubprogram(); if (!FDI || !FDI->getUnit()->getDebugInfoForProfiling()) return false; Modified: projects/clang800-import/contrib/llvm/lib/Target/X86/X86InsertPrefetch.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Target/X86/X86InsertPrefetch.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Target/X86/X86InsertPrefetch.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -34,7 +34,8 @@ using namespace sampleprof; static cl::opt PrefetchHintsFile("prefetch-hints-file", - cl::desc("Path to the prefetch hints profile."), + cl::desc("Path to the prefetch hints profile. See also " + "-x86-discriminate-memops"), cl::Hidden); namespace { Modified: projects/clang800-import/contrib/llvm/lib/Transforms/Utils/FunctionImportUtils.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Transforms/Utils/FunctionImportUtils.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Transforms/Utils/FunctionImportUtils.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -249,6 +249,8 @@ void FunctionImportGlobalProcessing::processGlobalForT bool DoPromote = false; if (GV.hasLocalLinkage() && ((DoPromote = shouldPromoteLocalToGlobal(&GV)) || isPerformingImport())) { + // Save the original name string before we rename GV below. + auto Name = GV.getName().str(); // Once we change the name or linkage it is difficult to determine // again whether we should promote since shouldPromoteLocalToGlobal needs // to locate the summary (based on GUID from name and linkage). Therefore, @@ -257,6 +259,12 @@ void FunctionImportGlobalProcessing::processGlobalForT GV.setLinkage(getLinkage(&GV, DoPromote)); if (!GV.hasLocalLinkage()) GV.setVisibility(GlobalValue::HiddenVisibility); + + // If we are renaming a COMDAT leader, ensure that we record the COMDAT + // for later renaming as well. This is required for COFF. + if (const auto *C = GV.getComdat()) + if (C->getName() == Name) + RenamedComdats.try_emplace(C, M.getOrInsertComdat(GV.getName())); } else GV.setLinkage(getLinkage(&GV, /* DoPromote */ false)); @@ -281,6 +289,16 @@ void FunctionImportGlobalProcessing::processGlobalsFor processGlobalForThinLTO(SF); for (GlobalAlias &GA : M.aliases()) processGlobalForThinLTO(GA); + + // Replace any COMDATS that required renaming (because the COMDAT leader was + // promoted and renamed). + if (!RenamedComdats.empty()) + for (auto &GO : M.global_objects()) + if (auto *C = GO.getComdat()) { + auto Replacement = RenamedComdats.find(C); + if (Replacement != RenamedComdats.end()) + GO.setComdat(Replacement->second); + } } bool FunctionImportGlobalProcessing::run() { Modified: projects/clang800-import/contrib/llvm/lib/Transforms/Utils/LoopUtils.cpp ============================================================================== --- projects/clang800-import/contrib/llvm/lib/Transforms/Utils/LoopUtils.cpp Tue Feb 5 18:40:18 2019 (r343805) +++ projects/clang800-import/contrib/llvm/lib/Transforms/Utils/LoopUtils.cpp Tue Feb 5 19:48:24 2019 (r343806) @@ -217,7 +217,10 @@ static Optional getOptionalBoolLoopAttribute(con // When the value is absent it is interpreted as 'attribute set'. return true; case 2: - return mdconst::extract_or_null(MD->getOperand(1).get()); + if (ConstantInt *IntMD = + mdconst::extract_or_null(MD->getOperand(1).get())) + return IntMD->getZExtValue(); + return true; } llvm_unreachable("unexpected number of options"); } @@ -376,16 +379,16 @@ TransformationMode llvm::hasVectorizeTransformation(Lo Optional InterleaveCount = getOptionalIntLoopAttribute(L, "llvm.loop.interleave.count"); - if (Enable == true) { - // 'Forcing' vector width and interleave count to one effectively disables - // this tranformation. - if (VectorizeWidth == 1 && InterleaveCount == 1) - return TM_SuppressedByUser; - return TM_ForcedByUser; - } + // 'Forcing' vector width and interleave count to one effectively disables *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Tue Feb 5 19:50:59 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3E55714CEA37 for ; Tue, 5 Feb 2019 19:50:59 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BAC228EB45; Tue, 5 Feb 2019 19:50:58 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A673522917; Tue, 5 Feb 2019 19:50:58 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x15JowQW000978; Tue, 5 Feb 2019 19:50:58 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x15JolB7000924; Tue, 5 Feb 2019 19:50:47 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201902051950.x15JolB7000924@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Tue, 5 Feb 2019 19:50:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r343807 - in projects/clang800-import: etc/mail lib/libc/tests/sys lib/libefivar lib/libpmc/pmu-events lib/libsysdecode lib/libthr/thread release/arm64 sbin/devmatch sbin/nvmecontrol sb... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang800-import: etc/mail lib/libc/tests/sys lib/libefivar lib/libpmc/pmu-events lib/libsysdecode lib/libthr/thread release/arm64 sbin/devmatch sbin/nvmecontrol sbin/nvmecontrol/modules/wd... X-SVN-Commit-Revision: 343807 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: BAC228EB45 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.98)[-0.976,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Feb 2019 19:51:00 -0000 Author: dim Date: Tue Feb 5 19:50:46 2019 New Revision: 343807 URL: https://svnweb.freebsd.org/changeset/base/343807 Log: Merge ^/head r343712 through r343806. Modified: projects/clang800-import/etc/mail/Makefile projects/clang800-import/lib/libc/tests/sys/sendfile_test.c projects/clang800-import/lib/libefivar/efi-osdep.h projects/clang800-import/lib/libefivar/efivar-dp-format.c projects/clang800-import/lib/libefivar/efivar-dp-parse.c projects/clang800-import/lib/libefivar/efivar-dp-xlate.c projects/clang800-import/lib/libefivar/efivar-dp.h projects/clang800-import/lib/libefivar/efivar.3 projects/clang800-import/lib/libefivar/efivar.c projects/clang800-import/lib/libefivar/efivar.h projects/clang800-import/lib/libefivar/uefi-dplib.h projects/clang800-import/lib/libefivar/uefi-dputil.c projects/clang800-import/lib/libpmc/pmu-events/jevents.c projects/clang800-import/lib/libsysdecode/flags.c projects/clang800-import/lib/libthr/thread/thr_malloc.c projects/clang800-import/lib/libthr/thread/thr_mutex.c projects/clang800-import/release/arm64/PINE64-LTS.conf projects/clang800-import/release/arm64/RPI3.conf projects/clang800-import/sbin/devmatch/devmatch.8 projects/clang800-import/sbin/devmatch/devmatch.c projects/clang800-import/sbin/nvmecontrol/modules/wdc/wdc.c projects/clang800-import/sbin/nvmecontrol/nc_util.c projects/clang800-import/sbin/nvmecontrol/ns.c projects/clang800-import/sbin/nvmecontrol/nvmecontrol_ext.h projects/clang800-import/sbin/nvmecontrol/power.c projects/clang800-import/share/man/man4/nda.4 projects/clang800-import/share/man/man9/kern_testfrwk.9 projects/clang800-import/stand/efi/libefi/efienv.c projects/clang800-import/stand/efi/libefi/env.c projects/clang800-import/stand/efi/libefi/wchar.c projects/clang800-import/stand/efi/loader/main.c projects/clang800-import/stand/forth/efi.4th projects/clang800-import/stand/i386/libi386/biospci.c projects/clang800-import/stand/libsa/abort.c projects/clang800-import/stand/libsa/xlocale_private.h projects/clang800-import/sys/amd64/amd64/exception.S projects/clang800-import/sys/amd64/conf/GENERIC projects/clang800-import/sys/arm/arm/physmem.c projects/clang800-import/sys/arm64/conf/GENERIC projects/clang800-import/sys/cam/nvme/nvme_all.c projects/clang800-import/sys/cam/nvme/nvme_all.h projects/clang800-import/sys/cam/nvme/nvme_da.c projects/clang800-import/sys/cam/scsi/scsi_enc_ses.c projects/clang800-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c projects/clang800-import/sys/conf/files projects/clang800-import/sys/conf/kern.pre.mk projects/clang800-import/sys/contrib/ipfilter/netinet/fil.c projects/clang800-import/sys/crypto/aesni/aesencdec.h projects/clang800-import/sys/dev/efidev/efidev.c projects/clang800-import/sys/dev/netmap/if_ptnet.c projects/clang800-import/sys/dev/netmap/if_vtnet_netmap.h projects/clang800-import/sys/dev/netmap/netmap.c projects/clang800-import/sys/dev/netmap/netmap_bdg.c projects/clang800-import/sys/dev/netmap/netmap_freebsd.c projects/clang800-import/sys/dev/netmap/netmap_generic.c projects/clang800-import/sys/dev/netmap/netmap_kern.h projects/clang800-import/sys/dev/netmap/netmap_legacy.c projects/clang800-import/sys/dev/netmap/netmap_mem2.c projects/clang800-import/sys/dev/netmap/netmap_monitor.c projects/clang800-import/sys/dev/netmap/netmap_null.c projects/clang800-import/sys/dev/netmap/netmap_offloadings.c projects/clang800-import/sys/dev/netmap/netmap_pipe.c projects/clang800-import/sys/dev/netmap/netmap_vale.c projects/clang800-import/sys/dev/nvme/nvme_sim.c projects/clang800-import/sys/dev/syscons/scterm-teken.c projects/clang800-import/sys/dev/tcp_log/tcp_log_dev.c projects/clang800-import/sys/dev/tcp_log/tcp_log_dev.h projects/clang800-import/sys/dev/vt/vt_core.c projects/clang800-import/sys/i386/include/counter.h projects/clang800-import/sys/kern/kern_environment.c projects/clang800-import/sys/kern/kern_proc.c projects/clang800-import/sys/kern/subr_boot.c projects/clang800-import/sys/kern/uipc_syscalls.c projects/clang800-import/sys/kern/vfs_extattr.c projects/clang800-import/sys/net/iflib.c projects/clang800-import/sys/netinet/sctp_output.c projects/clang800-import/sys/netinet/sctp_usrreq.c projects/clang800-import/sys/netinet/tcp_hpts.c projects/clang800-import/sys/netinet/tcp_hpts.h projects/clang800-import/sys/netinet/tcp_log_buf.c projects/clang800-import/sys/netinet/tcp_log_buf.h projects/clang800-import/sys/netinet/tcp_stacks/rack.c projects/clang800-import/sys/netinet/tcp_stacks/rack_bbr_common.h projects/clang800-import/sys/netinet/tcp_stacks/sack_filter.c projects/clang800-import/sys/netinet/tcp_stacks/sack_filter.h projects/clang800-import/sys/netinet/tcp_stacks/tcp_rack.h projects/clang800-import/sys/powerpc/aim/locore32.S projects/clang800-import/sys/powerpc/aim/locore64.S projects/clang800-import/sys/powerpc/aim/trap_subr32.S projects/clang800-import/sys/powerpc/aim/trap_subr64.S projects/clang800-import/sys/powerpc/powerpc/cpu.c projects/clang800-import/sys/powerpc/pseries/phyp_llan.c projects/clang800-import/sys/sys/boot.h projects/clang800-import/sys/sys/efiio.h projects/clang800-import/sys/sys/kern_prefetch.h projects/clang800-import/sys/teken/libteken/teken.3 projects/clang800-import/sys/teken/teken.c projects/clang800-import/sys/teken/teken.h projects/clang800-import/sys/tests/callout_test.h projects/clang800-import/sys/tests/callout_test/callout_test.c projects/clang800-import/sys/tests/framework/kern_testfrwk.c projects/clang800-import/sys/tests/kern_testfrwk.h projects/clang800-import/sys/vm/vm_page.c projects/clang800-import/sys/vm/vm_page.h projects/clang800-import/sys/x86/include/specialreg.h projects/clang800-import/sys/x86/x86/identcpu.c projects/clang800-import/usr.sbin/efibootmgr/efibootmgr.8 projects/clang800-import/usr.sbin/efibootmgr/efibootmgr.c projects/clang800-import/usr.sbin/efidp/efidp.8 projects/clang800-import/usr.sbin/efidp/efidp.c projects/clang800-import/usr.sbin/efivar/efiutil.c projects/clang800-import/usr.sbin/efivar/efiutil.h projects/clang800-import/usr.sbin/efivar/efivar.8 projects/clang800-import/usr.sbin/efivar/efivar.c projects/clang800-import/usr.sbin/mpsutil/mps_cmd.c projects/clang800-import/usr.sbin/mpsutil/mps_debug.c projects/clang800-import/usr.sbin/mpsutil/mps_show.c projects/clang800-import/usr.sbin/mpsutil/mpsutil.c projects/clang800-import/usr.sbin/pmcstat/pmcpl_annotate_cg.c projects/clang800-import/usr.sbin/pmcstat/pmcpl_annotate_cg.h projects/clang800-import/usr.sbin/pmcstudy/eval_expr.c projects/clang800-import/usr.sbin/pmcstudy/eval_expr.h projects/clang800-import/usr.sbin/pmcstudy/pmcstudy.8 projects/clang800-import/usr.sbin/pmcstudy/pmcstudy.c projects/clang800-import/usr.sbin/sesutil/sesutil.c Directory Properties: projects/clang800-import/ (props changed) projects/clang800-import/sys/cddl/contrib/opensolaris/ (props changed) projects/clang800-import/sys/contrib/ipfilter/ (props changed) projects/clang800-import/usr.sbin/bhyve/usb_mouse.c (props changed) Modified: projects/clang800-import/etc/mail/Makefile ============================================================================== --- projects/clang800-import/etc/mail/Makefile Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/etc/mail/Makefile Tue Feb 5 19:50:46 2019 (r343807) @@ -60,8 +60,8 @@ # ------------------------------------------------------------------------ # # The Makefile knows about the following maps: -# access, bitdomain, domaintable, genericstable, mailertable, userdb, -# uucpdomain, virtusertable +# access, authinfo, bitdomain, domaintable, genericstable, mailertable, +# userdb, uucpdomain, virtusertable # .ifndef SENDMAIL_MC @@ -125,7 +125,7 @@ SENDMAIL_MAP_PERMS?= 0640 # type to use when calling makemap. # SENDMAIL_MAP_SRC+= mailertable domaintable bitdomain uucpdomain \ - genericstable virtusertable access + genericstable virtusertable access authinfo SENDMAIL_MAP_OBJ= SENDMAIL_MAP_TYPE?= hash Modified: projects/clang800-import/lib/libc/tests/sys/sendfile_test.c ============================================================================== --- projects/clang800-import/lib/libc/tests/sys/sendfile_test.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libc/tests/sys/sendfile_test.c Tue Feb 5 19:50:46 2019 (r343807) @@ -97,22 +97,31 @@ generate_random_port(int seed) static void resolve_localhost(struct addrinfo **res, int domain, int type, int port) { + const char *host; char *serv; struct addrinfo hints; int error; - ATF_REQUIRE_MSG(domain == AF_INET || domain == AF_INET6, - "unhandled domain: %d", domain); + switch (domain) { + case AF_INET: + host = "127.0.0.1"; + break; + case AF_INET6: + host = "::1"; + break; + default: + atf_tc_fail("unhandled domain: %d", domain); + } ATF_REQUIRE_MSG(asprintf(&serv, "%d", port) >= 0, "asprintf failed: %s", strerror(errno)); memset(&hints, 0, sizeof(hints)); hints.ai_family = domain; - hints.ai_flags = AI_ADDRCONFIG|AI_NUMERICSERV; + hints.ai_flags = AI_ADDRCONFIG|AI_NUMERICSERV|AI_NUMERICHOST; hints.ai_socktype = type; - error = getaddrinfo("localhost", serv, &hints, res); + error = getaddrinfo(host, serv, &hints, res); ATF_REQUIRE_EQ_MSG(error, 0, "getaddrinfo failed: %s", gai_strerror(error)); free(serv); Modified: projects/clang800-import/lib/libefivar/efi-osdep.h ============================================================================== --- projects/clang800-import/lib/libefivar/efi-osdep.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/efi-osdep.h Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2017 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libefivar/efivar-dp-format.c ============================================================================== --- projects/clang800-import/lib/libefivar/efivar-dp-format.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/efivar-dp-format.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2017 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libefivar/efivar-dp-parse.c ============================================================================== --- projects/clang800-import/lib/libefivar/efivar-dp-parse.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/efivar-dp-parse.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2017 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libefivar/efivar-dp-xlate.c ============================================================================== --- projects/clang800-import/lib/libefivar/efivar-dp-xlate.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/efivar-dp-xlate.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2017 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libefivar/efivar-dp.h ============================================================================== --- projects/clang800-import/lib/libefivar/efivar-dp.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/efivar-dp.h Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2017 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libefivar/efivar.3 ============================================================================== --- projects/clang800-import/lib/libefivar/efivar.3 Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/efivar.3 Tue Feb 5 19:50:46 2019 (r343807) @@ -1,3 +1,4 @@ +.\" .\" Copyright 2016 Netflix, Inc. .\" All rights reserved. .\" Modified: projects/clang800-import/lib/libefivar/efivar.c ============================================================================== --- projects/clang800-import/lib/libefivar/efivar.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/efivar.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2016 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libefivar/efivar.h ============================================================================== --- projects/clang800-import/lib/libefivar/efivar.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/efivar.h Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2016 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libefivar/uefi-dplib.h ============================================================================== --- projects/clang800-import/lib/libefivar/uefi-dplib.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/uefi-dplib.h Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2017 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libefivar/uefi-dputil.c ============================================================================== --- projects/clang800-import/lib/libefivar/uefi-dputil.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libefivar/uefi-dputil.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2017 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/lib/libpmc/pmu-events/jevents.c ============================================================================== --- projects/clang800-import/lib/libpmc/pmu-events/jevents.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libpmc/pmu-events/jevents.c Tue Feb 5 19:50:46 2019 (r343807) @@ -54,6 +54,10 @@ #include "json.h" #include "jevents.h" +static int +nftw_ordered(const char *path, int (*fn)(const char *, const struct stat *, int, + struct FTW *), int nfds, int ftwflags); + _Noreturn void _Exit(int); int verbose; @@ -1122,7 +1126,7 @@ int main(int argc, char *argv[]) maxfds = get_maxfds(); mapfile = NULL; - rc = nftw(ldirname, preprocess_arch_std_files, maxfds, 0); + rc = nftw_ordered(ldirname, preprocess_arch_std_files, maxfds, 0); if (rc && verbose) { pr_info("%s: Error preprocessing arch standard files %s: %s\n", prog, ldirname, strerror(errno)); @@ -1135,7 +1139,7 @@ int main(int argc, char *argv[]) goto empty_map; } - rc = nftw(ldirname, process_one_file, maxfds, 0); + rc = nftw_ordered(ldirname, process_one_file, maxfds, 0); if (rc && verbose) { pr_info("%s: Error walking file tree %s\n", prog, ldirname); goto empty_map; @@ -1168,4 +1172,91 @@ empty_map: create_empty_mapping(output_file); free_arch_std_events(); return 0; +} + +#include + +static int +fts_compare(const FTSENT * const *a, const FTSENT * const *b) +{ + return (strcmp((*a)->fts_name, (*b)->fts_name)); +} + +static int +nftw_ordered(const char *path, int (*fn)(const char *, const struct stat *, int, + struct FTW *), int nfds, int ftwflags) +{ + char * const paths[2] = { (char *)path, NULL }; + struct FTW ftw; + FTSENT *cur; + FTS *ftsp; + int error = 0, ftsflags, fnflag, postorder, sverrno; + + /* XXX - nfds is currently unused */ + if (nfds < 1) { + errno = EINVAL; + return (-1); + } + + ftsflags = FTS_COMFOLLOW; + if (!(ftwflags & FTW_CHDIR)) + ftsflags |= FTS_NOCHDIR; + if (ftwflags & FTW_MOUNT) + ftsflags |= FTS_XDEV; + if (ftwflags & FTW_PHYS) + ftsflags |= FTS_PHYSICAL; + else + ftsflags |= FTS_LOGICAL; + postorder = (ftwflags & FTW_DEPTH) != 0; + ftsp = fts_open(paths, ftsflags, fts_compare); + if (ftsp == NULL) + return (-1); + while ((cur = fts_read(ftsp)) != NULL) { + switch (cur->fts_info) { + case FTS_D: + if (postorder) + continue; + fnflag = FTW_D; + break; + case FTS_DC: + continue; + case FTS_DNR: + fnflag = FTW_DNR; + break; + case FTS_DP: + if (!postorder) + continue; + fnflag = FTW_DP; + break; + case FTS_F: + case FTS_DEFAULT: + fnflag = FTW_F; + break; + case FTS_NS: + case FTS_NSOK: + fnflag = FTW_NS; + break; + case FTS_SL: + fnflag = FTW_SL; + break; + case FTS_SLNONE: + fnflag = FTW_SLN; + break; + default: + error = -1; + goto done; + } + ftw.base = cur->fts_pathlen - cur->fts_namelen; + ftw.level = cur->fts_level; + error = fn(cur->fts_path, cur->fts_statp, fnflag, &ftw); + if (error != 0) + break; + } +done: + sverrno = errno; + if (fts_close(ftsp) != 0 && error == 0) + error = -1; + else + errno = sverrno; + return (error); } Modified: projects/clang800-import/lib/libsysdecode/flags.c ============================================================================== --- projects/clang800-import/lib/libsysdecode/flags.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libsysdecode/flags.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1208,7 +1208,7 @@ sysdecode_sctp_pr_policy(int policy) static struct name_table sctpsndflags[] = { X(SCTP_EOF) X(SCTP_ABORT) X(SCTP_UNORDERED) X(SCTP_ADDR_OVER) - X(SCTP_SENDALL) X(SCTP_SACK_IMMEDIATELY) XEND + X(SCTP_SENDALL) X(SCTP_EOR) X(SCTP_SACK_IMMEDIATELY) XEND }; bool Modified: projects/clang800-import/lib/libthr/thread/thr_malloc.c ============================================================================== --- projects/clang800-import/lib/libthr/thread/thr_malloc.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libthr/thread/thr_malloc.c Tue Feb 5 19:50:46 2019 (r343807) @@ -46,6 +46,8 @@ void __thr_malloc_init(void) { + if (npagesizes != 0) + return; npagesizes = getpagesizes(pagesizes_d, nitems(pagesizes_d)); if (npagesizes == -1) { npagesizes = 1; @@ -59,6 +61,8 @@ static void thr_malloc_lock(struct pthread *curthread) { + if (curthread == NULL) + return; curthread->locklevel++; _thr_umutex_lock(&thr_malloc_umtx, TID(curthread)); } @@ -67,6 +71,8 @@ static void thr_malloc_unlock(struct pthread *curthread) { + if (curthread == NULL) + return; _thr_umutex_unlock(&thr_malloc_umtx, TID(curthread)); curthread->locklevel--; _thr_ast(curthread); Modified: projects/clang800-import/lib/libthr/thread/thr_mutex.c ============================================================================== --- projects/clang800-import/lib/libthr/thread/thr_mutex.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/lib/libthr/thread/thr_mutex.c Tue Feb 5 19:50:46 2019 (r343807) @@ -390,6 +390,7 @@ __pthread_mutex_init(pthread_mutex_t * __restrict mute } if (mutex_attr == NULL || (*mutex_attr)->m_pshared == PTHREAD_PROCESS_PRIVATE) { + __thr_malloc_init(); return (mutex_init(mutex, mutex_attr ? *mutex_attr : NULL, __thr_calloc)); } Modified: projects/clang800-import/release/arm64/PINE64-LTS.conf ============================================================================== --- projects/clang800-import/release/arm64/PINE64-LTS.conf Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/release/arm64/PINE64-LTS.conf Tue Feb 5 19:50:46 2019 (r343807) @@ -6,7 +6,7 @@ EMBEDDED_TARGET_ARCH="aarch64" EMBEDDED_TARGET="arm64" EMBEDDEDBUILD=1 -EMBEDDEDPORTS="sysutils/u-boot-sopine" +EMBEDDEDPORTS="sysutils/u-boot-pine64-lts" FAT_SIZE="54m -b 1m" FAT_TYPE="16" IMAGE_SIZE="2560M" @@ -18,7 +18,7 @@ FDT_OVERLAYS="sun50i-a64-sid,sun50i-a64-ths,sun50i-a64 export BOARDNAME="PINE64-LTS" arm_install_uboot() { - UBOOT_DIR="/usr/local/share/u-boot/u-boot-sopine" + UBOOT_DIR="/usr/local/share/u-boot/u-boot-pine64-lts" UBOOT_FILES="u-boot-sunxi-with-spl.bin" chroot ${CHROOTDIR} dd if=${UBOOT_DIR}/${UBOOT_FILES} \ of=/dev/${mddev} bs=1k seek=8 conv=sync Modified: projects/clang800-import/release/arm64/RPI3.conf ============================================================================== --- projects/clang800-import/release/arm64/RPI3.conf Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/release/arm64/RPI3.conf Tue Feb 5 19:50:46 2019 (r343807) @@ -4,7 +4,7 @@ # DTB_DIR="/usr/local/share/rpi-firmware" -DTB="bcm2710-rpi-3-b.dtb" +DTB="bcm2710-rpi-3-b.dtb bcm2710-rpi-3-b-plus.dtb" EMBEDDED_TARGET_ARCH="aarch64" EMBEDDED_TARGET="arm64" EMBEDDEDBUILD=1 Modified: projects/clang800-import/sbin/devmatch/devmatch.8 ============================================================================== --- projects/clang800-import/sbin/devmatch/devmatch.8 Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sbin/devmatch/devmatch.8 Tue Feb 5 19:50:46 2019 (r343807) @@ -1,7 +1,5 @@ .\" -.\" Copyright (c) 2017 Netflix, Inc -.\" -.\" All rights reserved. +.\" Copyright (c) 2017 Netflix, Inc. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions Modified: projects/clang800-import/sbin/devmatch/devmatch.c ============================================================================== --- projects/clang800-import/sbin/devmatch/devmatch.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sbin/devmatch/devmatch.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- - * Copyright (c) 2017 Netflix, Inc - * All rights reserved. + * Copyright (c) 2017 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sbin/nvmecontrol/modules/wdc/wdc.c ============================================================================== --- projects/clang800-import/sbin/nvmecontrol/modules/wdc/wdc.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sbin/nvmecontrol/modules/wdc/wdc.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- - * Copyright (c) 2017 Netflix, Inc - * All rights reserved. + * Copyright (c) 2017 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sbin/nvmecontrol/nc_util.c ============================================================================== --- projects/clang800-import/sbin/nvmecontrol/nc_util.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sbin/nvmecontrol/nc_util.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- - * Copyright (c) 2017 Netflix, Inc - * All rights reserved. + * Copyright (c) 2017 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sbin/nvmecontrol/ns.c ============================================================================== --- projects/clang800-import/sbin/nvmecontrol/ns.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sbin/nvmecontrol/ns.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2017 Netflix, Inc + * Copyright (c) 2017 Netflix, Inc. * Copyright (C) 2018 Alexander Motin * * Redistribution and use in source and binary forms, with or without Modified: projects/clang800-import/sbin/nvmecontrol/nvmecontrol_ext.h ============================================================================== --- projects/clang800-import/sbin/nvmecontrol/nvmecontrol_ext.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sbin/nvmecontrol/nvmecontrol_ext.h Tue Feb 5 19:50:46 2019 (r343807) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (C) 2018 Netflix + * Copyright (C) 2018 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sbin/nvmecontrol/power.c ============================================================================== --- projects/clang800-import/sbin/nvmecontrol/power.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sbin/nvmecontrol/power.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- - * Copyright (c) 2016 Netflix, Inc - * All rights reserved. + * Copyright (c) 2016 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/share/man/man4/nda.4 ============================================================================== --- projects/clang800-import/share/man/man4/nda.4 Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/share/man/man4/nda.4 Tue Feb 5 19:50:46 2019 (r343807) @@ -1,5 +1,5 @@ -.\" Copyright (c) 2017 Netflix, Inc -.\" All rights reserved. +.\" +.\" Copyright (c) 2017 Netflix, Inc. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions Modified: projects/clang800-import/share/man/man9/kern_testfrwk.9 ============================================================================== --- projects/clang800-import/share/man/man9/kern_testfrwk.9 Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/share/man/man9/kern_testfrwk.9 Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ .\" -.\" Copyright (c) 2015 Netflix Inc. -.\" All rights reserved. +.\" Copyright (c) 2015 Netflix, Inc. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions Modified: projects/clang800-import/stand/efi/libefi/efienv.c ============================================================================== --- projects/clang800-import/stand/efi/libefi/efienv.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/stand/efi/libefi/efienv.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2018 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/stand/efi/libefi/env.c ============================================================================== --- projects/clang800-import/stand/efi/libefi/env.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/stand/efi/libefi/env.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Netflix, Inc. All Rights Reserved. + * Copyright (c) 2015 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/stand/efi/libefi/wchar.c ============================================================================== --- projects/clang800-import/stand/efi/libefi/wchar.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/stand/efi/libefi/wchar.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,5 +1,5 @@ /*- - * Copyright 2016 Netflix, Inc. All Rights Reserved. + * Copyright 2016 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/stand/efi/loader/main.c ============================================================================== --- projects/clang800-import/stand/efi/loader/main.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/stand/efi/loader/main.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,9 +1,10 @@ /*- * Copyright (c) 2008-2010 Rui Paulo * Copyright (c) 2006 Marcel Moolenaar - * Copyright (c) 2018 Netflix, Inc * All rights reserved. * + * Copyright (c) 2018 Netflix, Inc. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: Modified: projects/clang800-import/stand/forth/efi.4th ============================================================================== --- projects/clang800-import/stand/forth/efi.4th Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/stand/forth/efi.4th Tue Feb 5 19:50:46 2019 (r343807) @@ -1,5 +1,5 @@ -\ Copyright (c) 2016 Netflix, Inc -\ All rights reserved. +\ +\ Copyright (c) 2016 Netflix, Inc. \ \ Redistribution and use in source and binary forms, with or without \ modification, are permitted provided that the following conditions Modified: projects/clang800-import/stand/i386/libi386/biospci.c ============================================================================== --- projects/clang800-import/stand/i386/libi386/biospci.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/stand/i386/libi386/biospci.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,7 +1,8 @@ /*- * Copyright (c) 1998 Michael Smith - * Copyright (c) 2016 Netflix, Inc * All rights reserved. + * + * Copyright (c) 2016 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/stand/libsa/abort.c ============================================================================== --- projects/clang800-import/stand/libsa/abort.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/stand/libsa/abort.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Netflix. All Rights Reserved. + * Copyright (c) 2018 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/stand/libsa/xlocale_private.h ============================================================================== --- projects/clang800-import/stand/libsa/xlocale_private.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/stand/libsa/xlocale_private.h Tue Feb 5 19:50:46 2019 (r343807) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2018 Netflix + * Copyright (c) 2018 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sys/amd64/amd64/exception.S ============================================================================== --- projects/clang800-import/sys/amd64/amd64/exception.S Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/amd64/amd64/exception.S Tue Feb 5 19:50:46 2019 (r343807) @@ -521,12 +521,14 @@ fast_syscall_common: movq TF_RFLAGS(%rsp),%r11 /* original %rflags */ movq TF_RIP(%rsp),%rcx /* original %rip */ movq TF_RSP(%rsp),%rsp /* user stack pointer */ + xorl %r8d,%r8d /* zero the rest of GPRs */ + xorl %r10d,%r10d cmpq $~0,PCPU(UCR3) je 2f movq PCPU(UCR3),%r9 movq %r9,%cr3 - xorl %r9d,%r9d -2: swapgs +2: xorl %r9d,%r9d + swapgs sysretq 3: /* AST scheduled. */ Modified: projects/clang800-import/sys/amd64/conf/GENERIC ============================================================================== --- projects/clang800-import/sys/amd64/conf/GENERIC Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/amd64/conf/GENERIC Tue Feb 5 19:50:46 2019 (r343807) @@ -102,8 +102,8 @@ options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default # Kernel Sanitizers -#options COVERAGE # Generic kernel coverage. Used by KCOV -#options KCOV # Kernel Coverage Sanitizer +options COVERAGE # Generic kernel coverage. Used by KCOV +options KCOV # Kernel Coverage Sanitizer # Warning: KUBSAN can result in a kernel too large for loader to load #options KUBSAN # Kernel Undefined Behavior Sanitizer Modified: projects/clang800-import/sys/arm/arm/physmem.c ============================================================================== --- projects/clang800-import/sys/arm/arm/physmem.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/arm/arm/physmem.c Tue Feb 5 19:50:46 2019 (r343807) @@ -29,6 +29,7 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_acpi.h" #include "opt_ddb.h" /* @@ -48,8 +49,13 @@ __FBSDID("$FreeBSD$"); * that can be allocated, or both, depending on the exclusion flags associated * with the region. */ +#ifdef DEV_ACPI +#define MAX_HWCNT 32 /* ACPI needs more regions */ +#define MAX_EXCNT 32 +#else #define MAX_HWCNT 16 #define MAX_EXCNT 16 +#endif #if defined(__arm__) #define MAX_PHYS_ADDR 0xFFFFFFFFull Modified: projects/clang800-import/sys/arm64/conf/GENERIC ============================================================================== --- projects/clang800-import/sys/arm64/conf/GENERIC Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/arm64/conf/GENERIC Tue Feb 5 19:50:46 2019 (r343807) @@ -94,8 +94,8 @@ options USB_DEBUG # enable debug msgs options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default # Kernel Sanitizers -#options COVERAGE # Generic kernel coverage. Used by KCOV -#options KCOV # Kernel Coverage Sanitizer +options COVERAGE # Generic kernel coverage. Used by KCOV +options KCOV # Kernel Coverage Sanitizer # Warning: KUBSAN can result in a kernel too large for loader to load #options KUBSAN # Kernel Undefined Behavior Sanitizer Modified: projects/clang800-import/sys/cam/nvme/nvme_all.c ============================================================================== --- projects/clang800-import/sys/cam/nvme/nvme_all.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/cam/nvme/nvme_all.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2015 Netflix, Inc + * Copyright (c) 2015 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sys/cam/nvme/nvme_all.h ============================================================================== --- projects/clang800-import/sys/cam/nvme/nvme_all.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/cam/nvme/nvme_all.h Tue Feb 5 19:50:46 2019 (r343807) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2015 Netflix, Inc + * Copyright (c) 2015 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sys/cam/nvme/nvme_da.c ============================================================================== --- projects/clang800-import/sys/cam/nvme/nvme_da.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/cam/nvme/nvme_da.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2015 Netflix, Inc + * Copyright (c) 2015 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sys/cam/scsi/scsi_enc_ses.c ============================================================================== --- projects/clang800-import/sys/cam/scsi/scsi_enc_ses.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/cam/scsi/scsi_enc_ses.c Tue Feb 5 19:50:46 2019 (r343807) @@ -2729,13 +2729,13 @@ ses_handle_string(enc_softc_t *enc, encioc_string_t *s if (sstr->bufsiz > 0xffff) return (EINVAL); /* buffer size too large */ - if (ioc == ENCIOC_SETSTRING) { + switch (ioc) { + case ENCIOC_SETSTRING: payload = sstr->bufsiz + 4; /* header for SEND DIAGNOSTIC */ amt = 0 - payload; buf = ENC_MALLOC(payload); if (buf == NULL) - return ENOMEM; - + return (ENOMEM); ses_page_cdb(cdb, payload, 0, CAM_DIR_OUT); /* Construct the page request */ buf[0] = SesStringOut; @@ -2743,12 +2743,14 @@ ses_handle_string(enc_softc_t *enc, encioc_string_t *s buf[2] = sstr->bufsiz >> 8; buf[3] = sstr->bufsiz & 0xff; memcpy(&buf[4], sstr->buf, sstr->bufsiz); - } else if (ioc == ENCIOC_GETSTRING) { + break; + case ENCIOC_GETSTRING: payload = sstr->bufsiz; amt = payload; ses_page_cdb(cdb, payload, SesStringIn, CAM_DIR_IN); buf = sstr->buf; - } else if (ioc == ENCIOC_GETENCNAME) { + break; + case ENCIOC_GETENCNAME: if (ses_cache->ses_nsubencs < 1) return (ENODEV); enc_desc = ses_cache->subencs[0]; @@ -2768,7 +2770,7 @@ ses_handle_string(enc_softc_t *enc, encioc_string_t *s size = sstr->bufsiz; copyout(str, sstr->buf, size); return (size == rsize ? 0 : ENOMEM); - } else if (ioc == ENCIOC_GETENCID) { + case ENCIOC_GETENCID: if (ses_cache->ses_nsubencs < 1) return (ENODEV); enc_desc = ses_cache->subencs[0]; @@ -2782,13 +2784,13 @@ ses_handle_string(enc_softc_t *enc, encioc_string_t *s size = sstr->bufsiz; copyout(str, sstr->buf, size); return (size == rsize ? 0 : ENOMEM); - } else - return EINVAL; - + default: + return (EINVAL); + } ret = enc_runcmd(enc, cdb, 6, buf, &amt); if (ioc == ENCIOC_SETSTRING) ENC_FREE(buf); - return ret; + return (ret); } /** Modified: projects/clang800-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c ============================================================================== --- projects/clang800-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c Tue Feb 5 19:50:46 2019 (r343807) @@ -165,29 +165,38 @@ static vdev_ops_t *vdev_ops_table[] = { /* target number of metaslabs per top-level vdev */ int vdev_max_ms_count = 200; -SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, max_ms_count, CTLFLAG_RDTUN, +SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, max_ms_count, CTLFLAG_RWTUN, &vdev_max_ms_count, 0, - "Maximum number of metaslabs per top-level vdev"); + "Target number of metaslabs per top-level vdev"); /* minimum number of metaslabs per top-level vdev */ int vdev_min_ms_count = 16; -SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, min_ms_count, CTLFLAG_RDTUN, +SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, min_ms_count, CTLFLAG_RWTUN, &vdev_min_ms_count, 0, "Minimum number of metaslabs per top-level vdev"); /* practical upper limit of total metaslabs per top-level vdev */ int vdev_ms_count_limit = 1ULL << 17; +SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, max_ms_count_limit, CTLFLAG_RWTUN, + &vdev_ms_count_limit, 0, + "Maximum number of metaslabs per top-level vdev"); /* lower limit for metaslab size (512M) */ int vdev_default_ms_shift = 29; -SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, default_ms_shift, CTLFLAG_RDTUN, +SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, default_ms_shift, CTLFLAG_RWTUN, &vdev_default_ms_shift, 0, - "Shift between vdev size and number of metaslabs"); + "Default shift between vdev size and number of metaslabs"); /* upper limit for metaslab size (256G) */ int vdev_max_ms_shift = 38; +SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, max_ms_shift, CTLFLAG_RWTUN, + &vdev_max_ms_shift, 0, + "Maximum shift between vdev size and number of metaslabs"); boolean_t vdev_validate_skip = B_FALSE; +SYSCTL_INT(_vfs_zfs_vdev, OID_AUTO, validate_skip, CTLFLAG_RWTUN, + &vdev_validate_skip, 0, + "Bypass vdev validation"); /* * Since the DTL space map of a vdev is not expected to have a lot of Modified: projects/clang800-import/sys/conf/files ============================================================================== --- projects/clang800-import/sys/conf/files Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/conf/files Tue Feb 5 19:50:46 2019 (r343807) @@ -3808,7 +3808,7 @@ kern/kern_idle.c standard kern/kern_intr.c standard kern/kern_jail.c standard kern/kern_kcov.c optional kcov \ - compile-with "${NORMAL_C} -fno-sanitize-coverage=trace-pc,trace-cmp" + compile-with "${NORMAL_C} -fno-sanitize=all" kern/kern_khelp.c standard kern/kern_kthread.c standard kern/kern_ktr.c optional ktr Modified: projects/clang800-import/sys/conf/kern.pre.mk ============================================================================== --- projects/clang800-import/sys/conf/kern.pre.mk Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/conf/kern.pre.mk Tue Feb 5 19:50:46 2019 (r343807) @@ -120,7 +120,12 @@ SAN_CFLAGS+= -fsanitize=undefined COVERAGE_ENABLED!= grep COVERAGE opt_global.h || true ; echo .if !empty(COVERAGE_ENABLED) +.if ${COMPILER_TYPE} == "clang" || \ + (${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} >= 80100) SAN_CFLAGS+= -fsanitize-coverage=trace-pc,trace-cmp +.else +SAN_CFLAGS+= -fsanitize-coverage=trace-pc +.endif .endif CFLAGS+= ${SAN_CFLAGS} Modified: projects/clang800-import/sys/contrib/ipfilter/netinet/fil.c ============================================================================== --- projects/clang800-import/sys/contrib/ipfilter/netinet/fil.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/contrib/ipfilter/netinet/fil.c Tue Feb 5 19:50:46 2019 (r343807) @@ -6119,9 +6119,7 @@ ipf_getifname(ifp, buffer) char *buffer; { static char namebuf[LIFNAMSIZ]; -# if defined(MENTAT) || defined(__FreeBSD__) || defined(__osf__) || \ - defined(__sgi) || defined(linux) || defined(_AIX51) || \ - (defined(sun) && !defined(__SVR4) && !defined(__svr4__)) +# if defined(MENTAT) || defined(__FreeBSD__) int unit, space; char temp[20]; char *s; @@ -6131,9 +6129,7 @@ ipf_getifname(ifp, buffer) buffer = namebuf; (void) strncpy(buffer, ifp->if_name, LIFNAMSIZ); buffer[LIFNAMSIZ - 1] = '\0'; -# if defined(MENTAT) || defined(__FreeBSD__) || defined(__osf__) || \ - defined(__sgi) || defined(_AIX51) || \ - (defined(sun) && !defined(__SVR4) && !defined(__svr4__)) +# if defined(MENTAT) || defined(__FreeBSD__) for (s = buffer; *s; s++) ; unit = ifp->if_unit; Modified: projects/clang800-import/sys/crypto/aesni/aesencdec.h ============================================================================== --- projects/clang800-import/sys/crypto/aesni/aesencdec.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/crypto/aesni/aesencdec.h Tue Feb 5 19:50:46 2019 (r343807) @@ -1,7 +1,8 @@ /*- * Copyright 2013 John-Mark Gurney - * Copyright 2015 Netflix, Inc. * All rights reserved. + * + * Copyright 2015 Netflix, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sys/dev/efidev/efidev.c ============================================================================== --- projects/clang800-import/sys/dev/efidev/efidev.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/dev/efidev/efidev.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2016 Netflix, Inc. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/clang800-import/sys/dev/netmap/if_ptnet.c ============================================================================== --- projects/clang800-import/sys/dev/netmap/if_ptnet.c Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/dev/netmap/if_ptnet.c Tue Feb 5 19:50:46 2019 (r343807) @@ -1151,10 +1151,10 @@ ptnet_sync_from_csb(struct ptnet_softc *sc, struct net kring->nr_hwtail = kring->rtail = kring->ring->tail = ktoa->hwtail; - ND("%d,%d: csb {hc %u h %u c %u ht %u}", t, i, + nm_prdis("%d,%d: csb {hc %u h %u c %u ht %u}", t, i, ktoa->hwcur, atok->head, atok->cur, ktoa->hwtail); - ND("%d,%d: kring {hc %u rh %u rc %u h %u c %u ht %u rt %u t %u}", + nm_prdis("%d,%d: kring {hc %u rh %u rc %u h %u c %u ht %u rt %u t %u}", t, i, kring->nr_hwcur, kring->rhead, kring->rcur, kring->ring->head, kring->ring->cur, kring->nr_hwtail, kring->rtail, kring->ring->tail); @@ -1179,7 +1179,6 @@ ptnet_nm_register(struct netmap_adapter *na, int onoff struct ptnet_softc *sc = if_getsoftc(ifp); int native = (na == &sc->ptna->hwup.up); struct ptnet_queue *pq; - enum txrx t; int ret = 0; int i; @@ -1194,7 +1193,7 @@ ptnet_nm_register(struct netmap_adapter *na, int onoff * in the RX rings, since we will not receive further interrupts * until these will be processed. */ if (native && !onoff && na->active_fds == 0) { - D("Exit netmap mode, re-enable interrupts"); + nm_prinf("Exit netmap mode, re-enable interrupts"); for (i = 0; i < sc->num_rings; i++) { pq = sc->queues + i; pq->atok->appl_need_kick = 1; @@ -1230,30 +1229,14 @@ ptnet_nm_register(struct netmap_adapter *na, int onoff /* If not native, don't call nm_set_native_flags, since we don't want * to replace if_transmit method, nor set NAF_NETMAP_ON */ if (native) { - for_rx_tx(t) { - for (i = 0; i <= nma_get_nrings(na, t); i++) { - struct netmap_kring *kring = NMR(na, t)[i]; - - if (nm_kring_pending_on(kring)) { - kring->nr_mode = NKR_NETMAP_ON; - } - } - } + netmap_krings_mode_commit(na, onoff); nm_set_native_flags(na); } } else { if (native) { nm_clear_native_flags(na); - for_rx_tx(t) { - for (i = 0; i <= nma_get_nrings(na, t); i++) { - struct netmap_kring *kring = NMR(na, t)[i]; - - if (nm_kring_pending_off(kring)) { - kring->nr_mode = NKR_NETMAP_OFF; - } - } - } + netmap_krings_mode_commit(na, onoff); } if (sc->ptna->backend_users == 0) { @@ -1728,7 +1711,7 @@ ptnet_drain_transmit_queue(struct ptnet_queue *pq, uns if (!PTNET_Q_TRYLOCK(pq)) { /* We failed to acquire the lock, schedule the taskqueue. */ - RD(1, "Deferring TX work"); + nm_prlim(1, "Deferring TX work"); if (may_resched) { taskqueue_enqueue(pq->taskq, &pq->task); } @@ -1738,7 +1721,7 @@ ptnet_drain_transmit_queue(struct ptnet_queue *pq, uns if (unlikely(!(ifp->if_drv_flags & IFF_DRV_RUNNING))) { PTNET_Q_UNLOCK(pq); - RD(1, "Interface is down"); + nm_prlim(1, "Interface is down"); return ENETDOWN; } @@ -1776,7 +1759,7 @@ ptnet_drain_transmit_queue(struct ptnet_queue *pq, uns break; } - RD(1, "Found more slots by doublecheck"); + nm_prlim(1, "Found more slots by doublecheck"); /* More slots were freed before reactivating * the interrupts. */ atok->appl_need_kick = 0; @@ -1815,7 +1798,7 @@ ptnet_drain_transmit_queue(struct ptnet_queue *pq, uns continue; } } - ND(1, "%s: [csum_flags %lX] vnet hdr: flags %x " + nm_prdis(1, "%s: [csum_flags %lX] vnet hdr: flags %x " "csum_start %u csum_ofs %u hdr_len = %u " "gso_size %u gso_type %x", __func__, mhead->m_pkthdr.csum_flags, vh->flags, @@ -1890,7 +1873,7 @@ ptnet_drain_transmit_queue(struct ptnet_queue *pq, uns } if (count >= budget && may_resched) { - DBG(RD(1, "out of budget: resched, %d mbufs pending\n", + DBG(nm_prlim(1, "out of budget: resched, %d mbufs pending\n", drbr_inuse(ifp, pq->bufring))); taskqueue_enqueue(pq->taskq, &pq->task); } @@ -1932,7 +1915,7 @@ ptnet_transmit(if_t ifp, struct mbuf *m) err = drbr_enqueue(ifp, pq->bufring, m); if (err) { /* ENOBUFS when the bufring is full */ - RD(1, "%s: drbr_enqueue() failed %d\n", + nm_prlim(1, "%s: drbr_enqueue() failed %d\n", __func__, err); pq->stats.errors ++; return err; @@ -2077,13 +2060,13 @@ host_sync: /* There is no good reason why host should * put the header in multiple netmap slots. * If this is the case, discard. */ - RD(1, "Fragmented vnet-hdr: dropping"); + nm_prlim(1, "Fragmented vnet-hdr: dropping"); head = ptnet_rx_discard(kring, head); pq->stats.iqdrops ++; deliver = 0; goto skip; } - ND(1, "%s: vnet hdr: flags %x csum_start %u " + nm_prdis(1, "%s: vnet hdr: flags %x csum_start %u " "csum_ofs %u hdr_len = %u gso_size %u " "gso_type %x", __func__, vh->flags, vh->csum_start, vh->csum_offset, vh->hdr_len, @@ -2147,7 +2130,7 @@ host_sync: /* The very last slot prepared by the host has * the NS_MOREFRAG set. Drop it and continue * the outer cycle (to do the double-check). */ - RD(1, "Incomplete packet: dropping"); + nm_prlim(1, "Incomplete packet: dropping"); m_freem(mhead); pq->stats.iqdrops ++; goto host_sync; @@ -2185,7 +2168,7 @@ host_sync: | VIRTIO_NET_HDR_F_DATA_VALID))) { if (unlikely(ptnet_rx_csum(mhead, vh))) { m_freem(mhead); - RD(1, "Csum offload error: dropping"); + nm_prlim(1, "Csum offload error: dropping"); pq->stats.iqdrops ++; deliver = 0; } @@ -2231,7 +2214,7 @@ escape: if (count >= budget && may_resched) { /* If we ran out of budget or the double-check found new * slots to process, schedule the taskqueue. */ - DBG(RD(1, "out of budget: resched h %u t %u\n", + DBG(nm_prlim(1, "out of budget: resched h %u t %u\n", head, ring->tail)); taskqueue_enqueue(pq->taskq, &pq->task); } @@ -2246,7 +2229,7 @@ ptnet_rx_task(void *context, int pending) { struct ptnet_queue *pq = context; - DBG(RD(1, "%s: pq #%u\n", __func__, pq->kring_id)); + DBG(nm_prlim(1, "%s: pq #%u\n", __func__, pq->kring_id)); ptnet_rx_eof(pq, PTNET_RX_BUDGET, true); } @@ -2255,7 +2238,7 @@ ptnet_tx_task(void *context, int pending) { struct ptnet_queue *pq = context; - DBG(RD(1, "%s: pq #%u\n", __func__, pq->kring_id)); + DBG(nm_prlim(1, "%s: pq #%u\n", __func__, pq->kring_id)); ptnet_drain_transmit_queue(pq, PTNET_TX_BUDGET, true); } @@ -2273,7 +2256,7 @@ ptnet_poll(if_t ifp, enum poll_cmd cmd, int budget) KASSERT(sc->num_rings > 0, ("Found no queues in while polling ptnet")); queue_budget = MAX(budget / sc->num_rings, 1); - RD(1, "Per-queue budget is %d", queue_budget); + nm_prlim(1, "Per-queue budget is %d", queue_budget); while (budget) { unsigned int rcnt = 0; Modified: projects/clang800-import/sys/dev/netmap/if_vtnet_netmap.h ============================================================================== --- projects/clang800-import/sys/dev/netmap/if_vtnet_netmap.h Tue Feb 5 19:48:24 2019 (r343806) +++ projects/clang800-import/sys/dev/netmap/if_vtnet_netmap.h Tue Feb 5 19:50:46 2019 (r343807) @@ -90,7 +90,6 @@ vtnet_netmap_reg(struct netmap_adapter *na, int state) *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***