From owner-svn-src-projects@freebsd.org Sun Apr 30 22:38:17 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 31354CA1CD8 for ; Sun, 30 Apr 2017 22:38:17 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 01D4B16D5; Sun, 30 Apr 2017 22:38:16 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v3UMcGBF004848; Sun, 30 Apr 2017 22:38:16 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v3UMcFkr004843; Sun, 30 Apr 2017 22:38:15 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201704302238.v3UMcFkr004843@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sun, 30 Apr 2017 22:38:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317612 - in projects/pnfs-planb-server/sys/fs: nfs nfsserver X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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, 30 Apr 2017 22:38:17 -0000 Author: rmacklem Date: Sun Apr 30 22:38:15 2017 New Revision: 317612 URL: https://svnweb.freebsd.org/changeset/base/317612 Log: Two changes: - Add support for the FS_LAYOUTTYPES attribute. - Change the size of a stripe to an exact multiple of 64K. These two changes are needed to get the Linux client to do pNFS. There still appear to be some issues w.r.t. file size for the Linux client. Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonport.c projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_commonport.c Sun Apr 30 19:37:45 2017 (r317611) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_commonport.c Sun Apr 30 22:38:15 2017 (r317612) @@ -64,6 +64,8 @@ int nfscl_debuglevel = 0; char nfsv4_callbackaddr[INET6_ADDRSTRLEN]; struct callout newnfsd_callout; int nfsrv_lughashsize = 100; +struct mtx nfsrv_dslock_mtx; +struct nfsdevicehead nfsrv_devidhead; void (*nfsd_call_servertimer)(void) = NULL; void (*ncl_call_invalcaches)(struct vnode *) = NULL; @@ -693,6 +695,8 @@ nfscommon_modevent(module_t mod, int typ mtx_init(&nfs_req_mutex, "nfs_req_mutex", NULL, MTX_DEF); mtx_init(&nfsrv_nfsuserdsock.nr_mtx, "nfsuserd", NULL, MTX_DEF); + mtx_init(&nfsrv_dslock_mtx, "nfs4ds", NULL, MTX_DEF); + TAILQ_INIT(&nfsrv_devidhead); callout_init(&newnfsd_callout, 1); newnfs_init(); nfsd_call_nfscommon = nfssvc_nfscommon; @@ -719,6 +723,7 @@ nfscommon_modevent(module_t mod, int typ mtx_destroy(&nfs_slock_mutex); mtx_destroy(&nfs_req_mutex); mtx_destroy(&nfsrv_nfsuserdsock.nr_mtx); + mtx_destroy(&nfsrv_dslock_mtx); loaded = 0; break; default: Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Sun Apr 30 19:37:45 2017 (r317611) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Sun Apr 30 22:38:15 2017 (r317612) @@ -71,6 +71,8 @@ int nfsd_enable_stringtouid = 0; NFSNAMEIDMUTEX; NFSSOCKMUTEX; extern int nfsrv_lughashsize; +extern struct mtx nfsrv_dslock_mtx; +extern struct nfsdevicehead nfsrv_devidhead; /* * This array of structures indicates, for V4: @@ -2535,6 +2537,23 @@ nfsv4_fillattr(struct nfsrv_descript *nd NFSCLRBIT_ATTRBIT(&attrbits, NFSATTRBIT_TIMEACCESSSET); retnum += nfsrv_putattrbit(nd, &attrbits); break; + case NFSATTRBIT_FSLAYOUTTYPE: + NFSDDSLOCK(); + if (TAILQ_EMPTY(&nfsrv_devidhead)) + siz = 1; + else + siz = 2; + NFSDDSUNLOCK(); + if (siz == 2) { + NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); + *tl++ = txdr_unsigned(1); + *tl = txdr_unsigned(NFSLAYOUT_NFSV4_1_FILES); + } else { + NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED); + *tl = txdr_unsigned(0); + } + retnum += siz * NFSX_UNSIGNED; + break; default: printf("EEK! Bad V4 attribute bitpos=%d\n", bitpos); } Modified: projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Sun Apr 30 19:37:45 2017 (r317611) +++ projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Sun Apr 30 22:38:15 2017 (r317612) @@ -1031,7 +1031,8 @@ struct nfsv3_sattr { NFSATTRBM_MOUNTEDONFILEID | \ NFSATTRBM_QUOTAHARD | \ NFSATTRBM_QUOTASOFT | \ - NFSATTRBM_QUOTAUSED) + NFSATTRBM_QUOTAUSED | \ + NFSATTRBM_FSLAYOUTTYPE) #ifdef QUOTA Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Sun Apr 30 19:37:45 2017 (r317611) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Sun Apr 30 22:38:15 2017 (r317612) @@ -66,6 +66,7 @@ extern int nfsrv_sessionhashsize; extern struct nfsstatsv1 nfsstatsv1; extern struct nfslayouthash *nfslayouthash; extern int nfsrv_layouthashsize; +extern struct mtx nfsrv_dslock_mtx; struct vfsoptlist nfsv4root_opt, nfsv4root_newopt; NFSDLOCKMUTEX; NFSSTATESPINLOCK; @@ -74,7 +75,6 @@ struct nfsrchash_bucket nfsrcahash_table struct mtx nfsrc_udpmtx; struct mtx nfs_v4root_mutex; struct nfsrvfh nfs_rootfh, nfs_pubfh; -struct mtx nfsrv_dslock_mtx; int nfs_pubfhset = 0, nfs_rootfhset = 0; struct proc *nfsd_master_proc = NULL; int nfsd_debuglevel = 0; @@ -4465,8 +4465,6 @@ nfsd_modevent(module_t mod, int type, vo mtx_init(&nfs_v4root_mutex, "nfs4rt", NULL, MTX_DEF); mtx_init(&nfsv4root_mnt.mnt_mtx, "nfs4mnt", NULL, MTX_DEF); lockinit(&nfsv4root_mnt.mnt_explock, PVFS, "explock", 0, 0); - mtx_init(&nfsrv_dslock_mtx, "nfs4ds", NULL, MTX_DEF); - TAILQ_INIT(&nfsrv_devidhead); nfsrvd_initcache(); nfsd_init(); NFSD_LOCK(); @@ -4518,7 +4516,6 @@ nfsd_modevent(module_t mod, int type, vo for (i = 0; i < nfsrv_layouthashsize; i++) mtx_destroy(&nfslayouthash[i].mtx); lockdestroy(&nfsv4root_mnt.mnt_explock); - mtx_destroy(&nfsrv_dslock_mtx); free(nfsclienthash, M_NFSDCLIENT); free(nfslockhash, M_NFSDLOCKFILE); free(nfssessionhash, M_NFSDSESSION); Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Sun Apr 30 19:37:45 2017 (r317611) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Sun Apr 30 22:38:15 2017 (r317612) @@ -35,7 +35,6 @@ struct nfsrv_stablefirst nfsrv_stablefir int nfsrv_issuedelegs = 0; int nfsrv_dolocallocks = 0; struct nfsv4lock nfsv4rootfs_lock; -struct nfsdevicehead nfsrv_devidhead; time_t nfsdev_time = 0; extern int newnfs_numnfsd; @@ -46,6 +45,7 @@ extern u_int32_t newnfs_true, newnfs_fal extern struct mtx nfsrv_dslock_mtx; extern int nfsd_debuglevel; extern u_int nfsrv_dsdirsize; +extern struct nfsdevicehead nfsrv_devidhead; NFSV4ROOTLOCKMUTEX; NFSSTATESPINLOCK; @@ -6201,7 +6201,7 @@ nfsrv_layoutget(struct nfsrv_descript *n NFSDDSLOCK(); if (TAILQ_EMPTY(&nfsrv_devidhead)) { NFSDDSUNLOCK(); - return (NFSERR_LAYOUTTRYLATER); + return (NFSERR_UNKNLAYOUTTYPE); } NFSDDSUNLOCK(); @@ -6272,7 +6272,16 @@ nfsrv_layoutget(struct nfsrv_descript *n tl = (uint32_t *)lyp->lay_xdr; NFSBCOPY(devid, tl, NFSX_V4DEVICEID); /* Device ID. */ tl += (NFSX_V4DEVICEID / NFSX_UNSIGNED); - *tl++ = txdr_unsigned(NFSFLAYUTIL_STRIPE_MASK); /* Max stripe size. */ + + /* + * Make the stripe size as many 64K blocks as will fit in the stripe + * mask. Since there is only one stripe, the stripe size doesn't really + * matter, except that the Linux client will only handle an exact + * multiple of their PAGE_SIZE (usually 4K). I chose 64K as a value + * that should cover most/all arches w.r.t. PAGE_SIZE. + */ + *tl++ = txdr_unsigned(NFSFLAYUTIL_STRIPE_MASK & ~0xffff); + *tl++ = 0; /* 1st stripe index. */ pattern_offset = 0; txdr_hyper(pattern_offset, tl); tl += 2; /* Pattern offset. */ From owner-svn-src-projects@freebsd.org Mon May 1 00:57:17 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 43EF9D45F49 for ; Mon, 1 May 2017 00:57:17 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 15F56E41; Mon, 1 May 2017 00:57:17 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v410vGsZ062059; Mon, 1 May 2017 00:57:16 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v410vGSq062058; Mon, 1 May 2017 00:57:16 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201705010057.v410vGSq062058@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 1 May 2017 00:57:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317615 - projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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, 01 May 2017 00:57:17 -0000 Author: rmacklem Date: Mon May 1 00:57:15 2017 New Revision: 317615 URL: https://svnweb.freebsd.org/changeset/base/317615 Log: Update file attributes upon Close, since the Linux client doesn't always do a LayoutCommit operation. There are still cases where the Linux client does a Getattr without first doing Close or LayoutCommit. The case I've observed is just before a Lock operation on the file. At this point, all you can do to get this case to work correctly is set the sysctl vfs.nfsd.pnfsgetdsattr=1. Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Mon May 1 00:53:07 2017 (r317614) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Mon May 1 00:57:15 2017 (r317615) @@ -3142,6 +3142,7 @@ nfsrvd_close(struct nfsrv_descript *nd, int error = 0; nfsv4stateid_t stateid; nfsquad_t clientid; + struct nfsvattr na; NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID); stp->ls_seq = fxdr_unsigned(u_int32_t, *tl++); @@ -3182,6 +3183,8 @@ nfsrvd_close(struct nfsrv_descript *nd, nd->nd_clientid.qval = clientid.qval; } nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, nd, p); + /* For pNFS, update the attributes. */ + nfsrv_updatemdsattr(vp, &na, p); vput(vp); if (!nd->nd_repstat) { /* From owner-svn-src-projects@freebsd.org Mon May 1 21:11:14 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 14CF2D59934 for ; Mon, 1 May 2017 21:11:14 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id E3F8B633; Mon, 1 May 2017 21:11:13 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v41LBCN8065916; Mon, 1 May 2017 21:11:12 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v41LBC8F065912; Mon, 1 May 2017 21:11:12 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201705012111.v41LBC8F065912@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 1 May 2017 21:11:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317661 - in projects/pnfs-planb-server/sys/fs: nfs nfsserver X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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, 01 May 2017 21:11:14 -0000 Author: rmacklem Date: Mon May 1 21:11:12 2017 New Revision: 317661 URL: https://svnweb.freebsd.org/changeset/base/317661 Log: Add checks for a Layout plus Open/Write_access or Write_delegation to the nfsrv_proxyds() function for the Getattr case. Do the attribute updates for Close and DelegReturn for the write cases. This should make it perform better for clients such as Linux, where the value of vfs.nfsd.pnfsgetdsattr needs to be set non-zero to keep the file's attributes (mainly size) up to date. Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h Mon May 1 20:04:07 2017 (r317660) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h Mon May 1 21:11:12 2017 (r317661) @@ -109,9 +109,9 @@ int nfsrv_openctrl(struct nfsrv_descript int nfsrv_opencheck(nfsquad_t, nfsv4stateid_t *, struct nfsstate *, vnode_t, struct nfsrv_descript *, NFSPROC_T *, int); int nfsrv_openupdate(vnode_t, struct nfsstate *, nfsquad_t, - nfsv4stateid_t *, struct nfsrv_descript *, NFSPROC_T *); + nfsv4stateid_t *, struct nfsrv_descript *, NFSPROC_T *, int *); int nfsrv_delegupdate(struct nfsrv_descript *, nfsquad_t, nfsv4stateid_t *, - vnode_t, int, struct ucred *, NFSPROC_T *); + vnode_t, int, struct ucred *, NFSPROC_T *, int *); int nfsrv_releaselckown(struct nfsstate *, nfsquad_t, NFSPROC_T *); void nfsrv_zapclient(struct nfsclient *, NFSPROC_T *); int nfssvc_idname(struct nfsd_idargs *); @@ -149,8 +149,7 @@ int nfsrv_layoutreturn(struct nfsrv_desc int nfsrv_getdevinfo(char *, int, uint32_t *, uint32_t *, int *, char **); void nfsrv_freealllayoutsanddevids(void); void nfsrv_createdevids(struct nfsd_nfsd_args *, NFSPROC_T *); -int nfsrv_findlayout(struct nfsrv_descript *, fhandle_t *, NFSPROC_T *, - struct nfslayout **); +int nfsrv_checkdsattr(struct nfsrv_descript *, vnode_t, NFSPROC_T *); /* nfs_nfsdserv.c */ int nfsrvd_access(struct nfsrv_descript *, int, Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Mon May 1 20:04:07 2017 (r317660) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Mon May 1 21:11:12 2017 (r317661) @@ -257,8 +257,8 @@ nfsvno_getattr(struct vnode *vp, struct /* * Acquire the Change, Size and Modify Time attributes from the DS file - * for a pNFS server. A return of ENOENT indicates that there is - * no DS file or the MetaData file has up to date attributes. + * for a pNFS server. A return of 0 indicates that there are + * DS file attributes to be merged into the returned attributes. */ gotattr = 0; error = nfsrv_proxyds(nd, vp, 0, 0, nd->nd_cred, p, NFSPROC_GETATTR, @@ -3831,13 +3831,11 @@ nfsrv_proxyds(struct nfsrv_descript *nd, char *cp, struct mbuf **mpp2, struct nfsvattr *nap, struct acl *aclp) { struct nfsmount *nmp; - struct nfslayouthash *lhyp; - struct nfslayout *lyp; fhandle_t fh; struct vnode *dvp; struct pnfsdsattr dsattr; char *buf; - int buflen, error, ret; + int buflen, error; NFSD_DEBUG(4, "in nfsrv_proxyds\n"); /* @@ -3873,32 +3871,16 @@ nfsrv_proxyds(struct nfsrv_descript *nd, nap->na_mtime = dsattr.dsa_mtime; } - /* If nfsrv_pnfsgetdsattr isn't set, just return ENXIO. */ - if (nfsrv_pnfsgetdsattr == 0) { - free(buf, M_TEMP); - return (error); - } - /* - * For Getattr, check to see if there is a write layout - * issued to a client. If there is no write layout, return - * ENXIO to indicate that the MetaData file's attributes - * are current w.r.t. the file, except the va_filerev, which - * has already been acquired from the extended attribute. + * If nfsrv_pnfsgetdsattr is 0 or nfsrv_checkdsattr() returns + * 0, just return now. nfsrv_checkdsattr() returns 0 if there + * is no Read/Write layout + either an Open/Write_access or + * Write delegation issued to a client for the file. */ - ret = nfsvno_getfh(vp, &fh, p); - if (ret == 0) { - lhyp = NFSLAYOUTHASH(&fh); - NFSLOCKLAYOUT(lhyp); - ret = nfsrv_findlayout(nd, &fh, p, &lyp); - if (ret != 0 || lyp->lay_rw == 0) { - NFSUNLOCKLAYOUT(lhyp); - free(buf, M_TEMP); - NFSD_DEBUG(4, "nfsrv_proxyds: getattr " - "nolayout=%d\n", ret); - return (error); - } - NFSUNLOCKLAYOUT(lhyp); + if (nfsrv_pnfsgetdsattr == 0 || nfsrv_checkdsattr(nd, vp, p) == + 0) { + free(buf, M_TEMP); + return (error); } } Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Mon May 1 20:04:07 2017 (r317660) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Mon May 1 21:11:12 2017 (r317661) @@ -3139,7 +3139,7 @@ nfsrvd_close(struct nfsrv_descript *nd, { u_int32_t *tl; struct nfsstate st, *stp = &st; - int error = 0; + int error = 0, writeacc; nfsv4stateid_t stateid; nfsquad_t clientid; struct nfsvattr na; @@ -3182,9 +3182,11 @@ nfsrvd_close(struct nfsrv_descript *nd, nd->nd_flag |= ND_IMPLIEDCLID; nd->nd_clientid.qval = clientid.qval; } - nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, nd, p); + nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, nd, p, + &writeacc); /* For pNFS, update the attributes. */ - nfsrv_updatemdsattr(vp, &na, p); + if (writeacc != 0) + nfsrv_updatemdsattr(vp, &na, p); vput(vp); if (!nd->nd_repstat) { /* @@ -3238,7 +3240,7 @@ nfsrvd_delegpurge(struct nfsrv_descript nd->nd_clientid.qval = clientid.qval; } nd->nd_repstat = nfsrv_delegupdate(nd, clientid, NULL, NULL, - NFSV4OP_DELEGPURGE, nd->nd_cred, p); + NFSV4OP_DELEGPURGE, nd->nd_cred, p, NULL); nfsmout: NFSEXITCODE2(error, nd); return (error); @@ -3252,9 +3254,10 @@ nfsrvd_delegreturn(struct nfsrv_descript vnode_t vp, NFSPROC_T *p, __unused struct nfsexstuff *exp) { u_int32_t *tl; - int error = 0; + int error = 0, writeacc; nfsv4stateid_t stateid; nfsquad_t clientid; + struct nfsvattr na; NFSM_DISSECT(tl, u_int32_t *, NFSX_STATEID); stateid.seqid = fxdr_unsigned(u_int32_t, *tl++); @@ -3273,7 +3276,10 @@ nfsrvd_delegreturn(struct nfsrv_descript nd->nd_clientid.qval = clientid.qval; } nd->nd_repstat = nfsrv_delegupdate(nd, clientid, &stateid, vp, - NFSV4OP_DELEGRETURN, nd->nd_cred, p); + NFSV4OP_DELEGRETURN, nd->nd_cred, p, &writeacc); + /* For pNFS, update the attributes. */ + if (writeacc != 0) + nfsrv_updatemdsattr(vp, &na, p); nfsmout: vput(vp); NFSEXITCODE2(error, nd); @@ -3337,7 +3343,8 @@ nfsrvd_openconfirm(struct nfsrv_descript nd->nd_flag |= ND_IMPLIEDCLID; nd->nd_clientid.qval = clientid.qval; } - nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, nd, p); + nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, nd, p, + NULL); if (!nd->nd_repstat) { NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID); *tl++ = txdr_unsigned(stateid.seqid); @@ -3440,7 +3447,7 @@ nfsrvd_opendowngrade(struct nfsrv_descri } if (!nd->nd_repstat) nd->nd_repstat = nfsrv_openupdate(vp, stp, clientid, &stateid, - nd, p); + nd, p, NULL); if (!nd->nd_repstat) { /* For NFSv4.1, set the Current StateID. */ if ((nd->nd_flag & ND_NFSV41) != 0) { Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Mon May 1 20:04:07 2017 (r317660) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Mon May 1 21:11:12 2017 (r317661) @@ -186,6 +186,8 @@ static int nfsrv_setdsserver(char *dspat struct nfsdevice **dsp); static void nfsrv_allocdevid(struct nfsdevice *ds, char *addr, char *dnshost); static void nfsrv_freealldevids(void); +static int nfsrv_findlayout(struct nfsrv_descript *nd, fhandle_t *fhp, + NFSPROC_T *, struct nfslayout **lypp); /* * Scan the client list for a match and either return the current one, @@ -3283,7 +3285,8 @@ out: */ APPLESTATIC int nfsrv_openupdate(vnode_t vp, struct nfsstate *new_stp, nfsquad_t clientid, - nfsv4stateid_t *stateidp, struct nfsrv_descript *nd, NFSPROC_T *p) + nfsv4stateid_t *stateidp, struct nfsrv_descript *nd, NFSPROC_T *p, + int *retwriteaccessp) { struct nfsstate *stp, *ownerstp; struct nfsclient *clp; @@ -3386,6 +3389,12 @@ nfsrv_openupdate(vnode_t vp, struct nfss } else if (new_stp->ls_flags & NFSLCK_CLOSE) { ownerstp = stp->ls_openowner; lfp = stp->ls_lfp; + if (retwriteaccessp != NULL) { + if ((stp->ls_flags & NFSLCK_WRITEACCESS) != 0) + *retwriteaccessp = 1; + else + *retwriteaccessp = 0; + } if (nfsrv_dolocallocks != 0 && !LIST_EMPTY(&stp->ls_open)) { /* Get the lf lock */ nfsrv_locklf(lfp); @@ -3442,7 +3451,7 @@ out: APPLESTATIC int nfsrv_delegupdate(struct nfsrv_descript *nd, nfsquad_t clientid, nfsv4stateid_t *stateidp, vnode_t vp, int op, struct ucred *cred, - NFSPROC_T *p) + NFSPROC_T *p, int *retwriteaccessp) { struct nfsstate *stp; struct nfsclient *clp; @@ -3507,6 +3516,12 @@ nfsrv_delegupdate(struct nfsrv_descript error = NFSERR_BADSTATEID; goto out; } + if (retwriteaccessp != NULL) { + if ((stp->ls_flags & NFSLCK_DELEGWRITE) != 0) + *retwriteaccessp = 1; + else + *retwriteaccessp = 0; + } nfsrv_freedeleg(stp); } else { nfsrv_freedeleglist(&clp->lc_olddeleg); @@ -6380,7 +6395,7 @@ nfsrv_layoutreturn(struct nfsrv_descript /* * Look for an existing layout. */ -int +static int nfsrv_findlayout(struct nfsrv_descript *nd, fhandle_t *fhp, NFSPROC_T *p, struct nfslayout **lypp) { @@ -6792,3 +6807,80 @@ nfsrv_freealldevids(void) nfsrv_freedevid(ds); } +/* + * Check to see if there is a Read/Write Layout plus either: + * - A Write Delegation + * or + * - An Open with Write_access. + * Return 1 if this is the case and 0 otherwise. + * This function is used by nfsrv_proxyds() to decide if doing a Proxy + * Getattr RPC to the Data Server (DS) is necessary. + */ +APPLESTATIC int +nfsrv_checkdsattr(struct nfsrv_descript *nd, vnode_t vp, NFSPROC_T *p) +{ + fhandle_t fh, *tfhp; + struct nfsstate *stp; + struct nfslayout *lyp; + struct nfslayouthash *lhyp; + struct nfslockhashhead *hp; + struct nfslockfile *lfp; + int ret; + + KASSERT((nd->nd_flag & ND_IMPLIEDCLID) != 0, + ("nfsrv_chechdsattr: no nd_clientid\n")); + ret = nfsvno_getfh(vp, &fh, p); + if (ret != 0) + return (0); + + /* First check for a Read/Write Layout. */ + lhyp = NFSLAYOUTHASH(&fh); + NFSLOCKLAYOUT(lhyp); + ret = nfsrv_findlayout(nd, &fh, p, &lyp); + if (ret != 0 || lyp->lay_rw == 0) { + /* None found, so return 0. */ + NFSUNLOCKLAYOUT(lhyp); + return (0); + } + NFSUNLOCKLAYOUT(lhyp); + + /* Get the nfslockfile for this fh. */ + NFSLOCKSTATE(); + hp = NFSLOCKHASH(&fh); + LIST_FOREACH(lfp, hp, lf_hash) { + tfhp = &lfp->lf_fh; + if (NFSVNO_CMPFH(&fh, tfhp)) + break; + } + if (lfp == NULL) { + /* None found, so return 0. */ + NFSUNLOCKSTATE(); + return (0); + } + + /* Now, look for a Write delegation for this clientid. */ + LIST_FOREACH(stp, &lfp->lf_deleg, ls_file) { + if ((stp->ls_flags & NFSLCK_DELEGWRITE) != 0 && + stp->ls_clp->lc_clientid.qval == nd->nd_clientid.qval) + break; + } + if (stp != NULL) { + /* Found one, so return 1. */ + NFSUNLOCKSTATE(); + return (1); + } + + /* No Write delegation, so look for an Open with Write_access. */ + LIST_FOREACH(stp, &lfp->lf_open, ls_file) { + KASSERT((stp->ls_flags & NFSLCK_OPEN) != 0, + ("nfsrv_checkdsattr: Non-open in Open list\n")); + if ((stp->ls_flags & NFSLCK_WRITEACCESS) != 0 && + stp->ls_clp->lc_clientid.qval == nd->nd_clientid.qval) + break; + } + NFSUNLOCKSTATE(); + if (stp != NULL) + return (1); + return (0); +} + From owner-svn-src-projects@freebsd.org Mon May 1 21:21:05 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 65896D59D21 for ; Mon, 1 May 2017 21:21:05 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 379ECC99; Mon, 1 May 2017 21:21:05 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v41LL4cN069547; Mon, 1 May 2017 21:21:04 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v41LL4hA069546; Mon, 1 May 2017 21:21:04 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201705012121.v41LL4hA069546@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 1 May 2017 21:21:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317662 - projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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, 01 May 2017 21:21:05 -0000 Author: rmacklem Date: Mon May 1 21:21:04 2017 New Revision: 317662 URL: https://svnweb.freebsd.org/changeset/base/317662 Log: Change the default value of vfs.nfsd.pnfsgetdsattr to 1 so that it works for Linux clients by default. Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Mon May 1 21:11:12 2017 (r317661) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Mon May 1 21:21:04 2017 (r317662) @@ -132,7 +132,7 @@ SYSCTL_INT(_vfs_nfsd, OID_AUTO, debuglev 0, "Debug level for NFS server"); SYSCTL_INT(_vfs_nfsd, OID_AUTO, enable_stringtouid, CTLFLAG_RW, &nfsd_enable_stringtouid, 0, "Enable nfsd to accept numeric owner_names"); -static int nfsrv_pnfsgetdsattr = 0; +static int nfsrv_pnfsgetdsattr = 1; SYSCTL_INT(_vfs_nfsd, OID_AUTO, pnfsgetdsattr, CTLFLAG_RW, &nfsrv_pnfsgetdsattr, 0, "When set getattr gets DS attributes via RPC"); From owner-svn-src-projects@freebsd.org Wed May 3 21:54:59 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DA529D55243 for ; Wed, 3 May 2017 21:54:59 +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 mx1.freebsd.org (Postfix) with ESMTPS id 5C9D110A2; Wed, 3 May 2017 21:54:59 +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 v43LswU9088987; Wed, 3 May 2017 21:54:58 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v43LsuW0088970; Wed, 3 May 2017 21:54:56 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201705032154.v43LsuW0088970@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Wed, 3 May 2017 21:54:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317778 - in projects/clang500-import: contrib/compiler-rt/include/sanitizer contrib/compiler-rt/include/xray contrib/compiler-rt/lib/asan contrib/compiler-rt/lib/lsan contrib/compiler-... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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: Wed, 03 May 2017 21:55:00 -0000 Author: dim Date: Wed May 3 21:54:55 2017 New Revision: 317778 URL: https://svnweb.freebsd.org/changeset/base/317778 Log: Merge llvm, clang, lld, lldb, compiler-rt and libc++ r302069, and update build glue (preliminary, not all option combinations work yet). Added: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls.h - copied unchanged from r317773, vendor/compiler-rt/dist/lib/scudo/scudo_tls.h projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.cpp - copied unchanged from r317773, vendor/compiler-rt/dist/lib/scudo/scudo_tls_linux.cpp projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_tls_linux.h - copied unchanged from r317773, vendor/compiler-rt/dist/lib/scudo/scudo_tls_linux.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleDebugFileChecksumFragment.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/CodeView/ModuleDebugFileChecksumFragment.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleDebugFragment.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/CodeView/ModuleDebugFragment.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleDebugFragmentRecord.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/CodeView/ModuleDebugFragmentRecord.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleDebugFragmentVisitor.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/CodeView/ModuleDebugFragmentVisitor.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleDebugInlineeLinesFragment.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/CodeView/ModuleDebugInlineeLinesFragment.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleDebugLineFragment.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/CodeView/ModuleDebugLineFragment.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleDebugUnknownFragment.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/CodeView/ModuleDebugUnknownFragment.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/StringTable.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/CodeView/StringTable.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/DWARF/DWARFVerifier.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/DWARF/DWARFVerifier.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/ModuleDebugStreamBuilder.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/PDB/Native/ModuleDebugStreamBuilder.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/PDBStringTable.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/PDB/Native/PDBStringTable.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/PDBStringTableBuilder.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/DebugInfo/PDB/Native/PDBStringTableBuilder.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h - copied unchanged from r317771, vendor/llvm/dist/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h projects/clang500-import/contrib/llvm/lib/CodeGen/MachineFrameInfo.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/CodeGen/MachineFrameInfo.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleDebugFileChecksumFragment.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/CodeView/ModuleDebugFileChecksumFragment.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleDebugFragment.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/CodeView/ModuleDebugFragment.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleDebugFragmentRecord.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/CodeView/ModuleDebugFragmentRecord.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleDebugFragmentVisitor.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/CodeView/ModuleDebugFragmentVisitor.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleDebugInlineeLinesFragment.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/CodeView/ModuleDebugInlineeLinesFragment.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleDebugLineFragment.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/CodeView/ModuleDebugLineFragment.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleDebugUnknownFragment.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/CodeView/ModuleDebugUnknownFragment.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/StringTable.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/CodeView/StringTable.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/DWARF/DWARFVerifier.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptor.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/PDB/Native/DbiModuleDescriptor.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/ModuleDebugStream.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/PDB/Native/ModuleDebugStream.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/ModuleDebugStreamBuilder.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/PDB/Native/ModuleDebugStreamBuilder.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/PDBStringTable.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/PDB/Native/PDBStringTable.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/PDBStringTableBuilder.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/DebugInfo/PDB/Native/PDBStringTableBuilder.cpp projects/clang500-import/contrib/llvm/lib/Support/Unix/DynamicLibrary.inc - copied unchanged from r317771, vendor/llvm/dist/lib/Support/Unix/DynamicLibrary.inc projects/clang500-import/contrib/llvm/lib/Target/Mips/MicroMipsSizeReduction.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/Target/Mips/MicroMipsSizeReduction.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp - copied unchanged from r317771, vendor/llvm/dist/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp projects/clang500-import/contrib/llvm/tools/clang/include/clang/AST/ASTStructuralEquivalence.h - copied unchanged from r317771, vendor/clang/dist/include/clang/AST/ASTStructuralEquivalence.h projects/clang500-import/contrib/llvm/tools/clang/lib/AST/ASTStructuralEquivalence.cpp - copied unchanged from r317771, vendor/clang/dist/lib/AST/ASTStructuralEquivalence.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/common/MainLoop.cpp - copied unchanged from r317771, vendor/lldb/dist/source/Host/common/MainLoop.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.cpp - copied unchanged from r317771, vendor/llvm/dist/tools/llvm-pdbdump/C13DebugFragmentVisitor.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/C13DebugFragmentVisitor.h - copied unchanged from r317771, vendor/llvm/dist/tools/llvm-pdbdump/C13DebugFragmentVisitor.h Deleted: projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleSubstream.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/ModInfo.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/ModInfoBuilder.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/ModStream.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/StringTable.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/StringTableBuilder.h projects/clang500-import/contrib/llvm/include/llvm/Object/ModuleSummaryIndexObjectFile.h projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleSubstream.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/ModInfo.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/ModInfoBuilder.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/ModStream.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/StringTable.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/StringTableBuilder.cpp projects/clang500-import/contrib/llvm/lib/Object/ModuleSummaryIndexObjectFile.cpp projects/clang500-import/contrib/llvm/lib/Support/SearchForAddressOfSpecialSymbol.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMInstructionSelector.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/posix/MainLoopPosix.h projects/clang500-import/contrib/llvm/tools/lldb/source/Host/posix/MainLoopPosix.cpp Modified: projects/clang500-import/contrib/compiler-rt/include/sanitizer/tsan_interface.h projects/clang500-import/contrib/compiler-rt/include/xray/xray_log_interface.h projects/clang500-import/contrib/compiler-rt/lib/asan/asan_globals.cc projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interface.inc projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h projects/clang500-import/contrib/compiler-rt/lib/lsan/lsan_interceptors.cc projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_format.inc projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.h projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_utils.cpp projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_utils.h projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_defs.h projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_external.cc projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interface.h projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interface_ann.cc projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_report.cc projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_report.h projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl.cc projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl.h projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cc projects/clang500-import/contrib/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cc projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_diag.cc projects/clang500-import/contrib/compiler-rt/lib/ubsan/ubsan_handlers.cc projects/clang500-import/contrib/compiler-rt/lib/xray/xray_log_interface.cc projects/clang500-import/contrib/llvm/include/llvm/ADT/APInt.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/AssumptionCache.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/CGSCCPassManager.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/CallGraph.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/IVUsers.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/InlineCost.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/InstructionSimplify.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/MemoryBuiltins.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfo.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h projects/clang500-import/contrib/llvm/include/llvm/Analysis/ValueTracking.h projects/clang500-import/contrib/llvm/include/llvm/Bitcode/BitcodeReader.h projects/clang500-import/contrib/llvm/include/llvm/Bitcode/LLVMBitCodes.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/BasicTTIImpl.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/CommandFlags.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/FunctionLoweringInfo.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/GlobalISel/InstructionSelector.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/ISDOpcodes.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/MIRYamlMapping.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/MachineFrameInfo.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/SelectionDAG.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/SelectionDAGNodes.h projects/clang500-import/contrib/llvm/include/llvm/CodeGen/ValueTypes.td projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/CVRecord.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/CodeView.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/Line.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/SymbolVisitorDelegate.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/CodeView/TypeDatabase.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/DIContext.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/DWARF/DWARFFormValue.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/DbiStream.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/NativeEnumModules.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/PDBFile.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/PDBFileBuilder.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/PDB/Native/RawTypes.h projects/clang500-import/contrib/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h projects/clang500-import/contrib/llvm/include/llvm/IR/Argument.h projects/clang500-import/contrib/llvm/include/llvm/IR/Attributes.h projects/clang500-import/contrib/llvm/include/llvm/IR/Attributes.td projects/clang500-import/contrib/llvm/include/llvm/IR/CallSite.h projects/clang500-import/contrib/llvm/include/llvm/IR/CallingConv.h projects/clang500-import/contrib/llvm/include/llvm/IR/DIBuilder.h projects/clang500-import/contrib/llvm/include/llvm/IR/DebugInfoMetadata.h projects/clang500-import/contrib/llvm/include/llvm/IR/Function.h projects/clang500-import/contrib/llvm/include/llvm/IR/InstrTypes.h projects/clang500-import/contrib/llvm/include/llvm/IR/Instructions.h projects/clang500-import/contrib/llvm/include/llvm/IR/IntrinsicInst.h projects/clang500-import/contrib/llvm/include/llvm/IR/Intrinsics.h projects/clang500-import/contrib/llvm/include/llvm/IR/Intrinsics.td projects/clang500-import/contrib/llvm/include/llvm/IR/IntrinsicsAMDGPU.td projects/clang500-import/contrib/llvm/include/llvm/IR/IntrinsicsX86.td projects/clang500-import/contrib/llvm/include/llvm/IR/ModuleSummaryIndex.h projects/clang500-import/contrib/llvm/include/llvm/IR/ValueHandle.h projects/clang500-import/contrib/llvm/include/llvm/InitializePasses.h projects/clang500-import/contrib/llvm/include/llvm/MC/ConstantPools.h projects/clang500-import/contrib/llvm/include/llvm/MC/LaneBitmask.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCAssembler.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCContext.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCDwarf.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCExpr.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCFragment.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCInst.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCLinkerOptimizationHint.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCParser/MCAsmLexer.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCParser/MCAsmParser.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCRegisterInfo.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCSection.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCSectionWasm.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCStreamer.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCSubtargetInfo.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCSymbol.h projects/clang500-import/contrib/llvm/include/llvm/MC/MCWasmObjectWriter.h projects/clang500-import/contrib/llvm/include/llvm/Object/Binary.h projects/clang500-import/contrib/llvm/include/llvm/Object/COFF.h projects/clang500-import/contrib/llvm/include/llvm/Object/COFFImportFile.h projects/clang500-import/contrib/llvm/include/llvm/Object/ELF.h projects/clang500-import/contrib/llvm/include/llvm/Support/AArch64TargetParser.def projects/clang500-import/contrib/llvm/include/llvm/Support/BinaryStreamArray.h projects/clang500-import/contrib/llvm/include/llvm/Support/BinaryStreamReader.h projects/clang500-import/contrib/llvm/include/llvm/Support/BinaryStreamRef.h projects/clang500-import/contrib/llvm/include/llvm/Support/BinaryStreamWriter.h projects/clang500-import/contrib/llvm/include/llvm/Support/DataExtractor.h projects/clang500-import/contrib/llvm/include/llvm/Support/DynamicLibrary.h projects/clang500-import/contrib/llvm/include/llvm/Support/ELFRelocs/AArch64.def projects/clang500-import/contrib/llvm/include/llvm/Support/ELFRelocs/Hexagon.def projects/clang500-import/contrib/llvm/include/llvm/Support/KnownBits.h projects/clang500-import/contrib/llvm/include/llvm/Support/LEB128.h projects/clang500-import/contrib/llvm/include/llvm/Support/ScopedPrinter.h projects/clang500-import/contrib/llvm/include/llvm/Support/StringSaver.h projects/clang500-import/contrib/llvm/include/llvm/Support/Wasm.h projects/clang500-import/contrib/llvm/include/llvm/Target/Target.td projects/clang500-import/contrib/llvm/include/llvm/Target/TargetLowering.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Scalar/NaryReassociate.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Utils/Cloning.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Utils/Local.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Utils/ModuleUtils.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Utils/SimplifyIndVar.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Utils/ValueMapper.h projects/clang500-import/contrib/llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h projects/clang500-import/contrib/llvm/lib/Analysis/AssumptionCache.cpp projects/clang500-import/contrib/llvm/lib/Analysis/CFLGraph.h projects/clang500-import/contrib/llvm/lib/Analysis/CallGraphSCCPass.cpp projects/clang500-import/contrib/llvm/lib/Analysis/DemandedBits.cpp projects/clang500-import/contrib/llvm/lib/Analysis/InlineCost.cpp projects/clang500-import/contrib/llvm/lib/Analysis/InstructionSimplify.cpp projects/clang500-import/contrib/llvm/lib/Analysis/LazyValueInfo.cpp projects/clang500-import/contrib/llvm/lib/Analysis/Lint.cpp projects/clang500-import/contrib/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp projects/clang500-import/contrib/llvm/lib/Analysis/PHITransAddr.cpp projects/clang500-import/contrib/llvm/lib/Analysis/ScalarEvolution.cpp projects/clang500-import/contrib/llvm/lib/Analysis/ScalarEvolutionExpander.cpp projects/clang500-import/contrib/llvm/lib/Analysis/TargetTransformInfo.cpp projects/clang500-import/contrib/llvm/lib/Analysis/ValueTracking.cpp projects/clang500-import/contrib/llvm/lib/AsmParser/LLLexer.cpp projects/clang500-import/contrib/llvm/lib/AsmParser/LLParser.cpp projects/clang500-import/contrib/llvm/lib/AsmParser/LLToken.h projects/clang500-import/contrib/llvm/lib/Bitcode/Reader/BitcodeReader.cpp projects/clang500-import/contrib/llvm/lib/Bitcode/Reader/MetadataLoader.cpp projects/clang500-import/contrib/llvm/lib/Bitcode/Reader/ValueList.cpp projects/clang500-import/contrib/llvm/lib/Bitcode/Reader/ValueList.h projects/clang500-import/contrib/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h projects/clang500-import/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h projects/clang500-import/contrib/llvm/lib/CodeGen/CodeGenPrepare.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/DFAPacketizer.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/GlobalISel/InstructionSelector.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MIRParser/MIRParser.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MIRPrinter.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MachineFunction.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/MachineInstr.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/PrologEpilogInserter.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/StackMaps.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/TargetLoweringBase.cpp projects/clang500-import/contrib/llvm/lib/CodeGen/UnreachableBlockElim.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/EnumTables.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/CodeView/TypeDatabase.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFDebugPubTable.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFFormValue.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/DWARF/DWARFGdbIndex.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/DbiStream.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/PDBFile.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/PDB/Native/PDBFileBuilder.cpp projects/clang500-import/contrib/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp projects/clang500-import/contrib/llvm/lib/ExecutionEngine/Interpreter/Execution.cpp projects/clang500-import/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp projects/clang500-import/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h projects/clang500-import/contrib/llvm/lib/IR/AsmWriter.cpp projects/clang500-import/contrib/llvm/lib/IR/Attributes.cpp projects/clang500-import/contrib/llvm/lib/IR/AutoUpgrade.cpp projects/clang500-import/contrib/llvm/lib/IR/ConstantRange.cpp projects/clang500-import/contrib/llvm/lib/IR/DIBuilder.cpp projects/clang500-import/contrib/llvm/lib/IR/DebugInfoMetadata.cpp projects/clang500-import/contrib/llvm/lib/IR/Function.cpp projects/clang500-import/contrib/llvm/lib/IR/IRBuilder.cpp projects/clang500-import/contrib/llvm/lib/IR/Instructions.cpp projects/clang500-import/contrib/llvm/lib/IR/LLVMContextImpl.h projects/clang500-import/contrib/llvm/lib/IR/Metadata.cpp projects/clang500-import/contrib/llvm/lib/IR/ModuleSummaryIndex.cpp projects/clang500-import/contrib/llvm/lib/IR/Value.cpp projects/clang500-import/contrib/llvm/lib/IR/Verifier.cpp projects/clang500-import/contrib/llvm/lib/LTO/LTO.cpp projects/clang500-import/contrib/llvm/lib/LTO/ThinLTOCodeGenerator.cpp projects/clang500-import/contrib/llvm/lib/MC/ELFObjectWriter.cpp projects/clang500-import/contrib/llvm/lib/MC/MCCodeView.cpp projects/clang500-import/contrib/llvm/lib/MC/MCObjectFileInfo.cpp projects/clang500-import/contrib/llvm/lib/MC/MCParser/AsmParser.cpp projects/clang500-import/contrib/llvm/lib/MC/MCParser/MCAsmLexer.cpp projects/clang500-import/contrib/llvm/lib/MC/StringTableBuilder.cpp projects/clang500-import/contrib/llvm/lib/MC/WasmObjectWriter.cpp projects/clang500-import/contrib/llvm/lib/MC/WinCOFFObjectWriter.cpp projects/clang500-import/contrib/llvm/lib/Object/ELF.cpp projects/clang500-import/contrib/llvm/lib/Passes/PassBuilder.cpp projects/clang500-import/contrib/llvm/lib/Passes/PassRegistry.def projects/clang500-import/contrib/llvm/lib/Support/APInt.cpp projects/clang500-import/contrib/llvm/lib/Support/BinaryStreamReader.cpp projects/clang500-import/contrib/llvm/lib/Support/BinaryStreamWriter.cpp projects/clang500-import/contrib/llvm/lib/Support/DataExtractor.cpp projects/clang500-import/contrib/llvm/lib/Support/DynamicLibrary.cpp projects/clang500-import/contrib/llvm/lib/Support/Host.cpp projects/clang500-import/contrib/llvm/lib/Support/PrettyStackTrace.cpp projects/clang500-import/contrib/llvm/lib/Support/ScopedPrinter.cpp projects/clang500-import/contrib/llvm/lib/Support/SourceMgr.cpp projects/clang500-import/contrib/llvm/lib/Support/Triple.cpp projects/clang500-import/contrib/llvm/lib/Support/Windows/DynamicLibrary.inc projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64CallLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64FastISel.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64ISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64InstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64InstructionSelector.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64Subtarget.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64Subtarget.h projects/clang500-import/contrib/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp projects/clang500-import/contrib/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.h projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPU.td projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.h projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUInstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUMachineFunction.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/R600Intrinsics.td projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIDefines.h projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/SIInstructions.td projects/clang500-import/contrib/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARM.h projects/clang500-import/contrib/llvm/lib/Target/ARM/ARM.td projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMCallLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMFastISel.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMInstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMInstructionSelector.cpp projects/clang500-import/contrib/llvm/lib/Target/ARM/ARMTargetMachine.cpp projects/clang500-import/contrib/llvm/lib/Target/AVR/AVRFrameLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AVR/AVRISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/AVR/AVRISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/AVR/AVRInstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/AVR/AVRRegisterInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp projects/clang500-import/contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.h projects/clang500-import/contrib/llvm/lib/Target/BPF/Disassembler/BPFDisassembler.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/Disassembler/HexagonDisassembler.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonAsmPrinter.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonBitTracker.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonCFGOptimizer.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepITypes.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepITypes.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonDepInstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrFormats.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrFormatsV60.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonInstrInfo.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonMCInstLower.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonMachineScheduler.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonOperands.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonPseudo.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonRegisterInfo.td projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/HexagonVLIWPacketizer.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonELFObjectWriter.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonFixupKinds.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCCodeEmitter.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCCompound.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCExpr.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCShuffler.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCShuffler.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.cpp projects/clang500-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonShuffler.h projects/clang500-import/contrib/llvm/lib/Target/Hexagon/RDFLiveness.cpp projects/clang500-import/contrib/llvm/lib/Target/Lanai/LanaiRegisterInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/Lanai/LanaiRegisterInfo.h projects/clang500-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp projects/clang500-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp projects/clang500-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h projects/clang500-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp projects/clang500-import/contrib/llvm/lib/Target/Mips/Mips.h projects/clang500-import/contrib/llvm/lib/Target/Mips/Mips16HardFloat.cpp projects/clang500-import/contrib/llvm/lib/Target/Mips/MipsFastISel.cpp projects/clang500-import/contrib/llvm/lib/Target/Mips/MipsTargetMachine.cpp projects/clang500-import/contrib/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp projects/clang500-import/contrib/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp projects/clang500-import/contrib/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp projects/clang500-import/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/PowerPC/PPCInstrVSX.td projects/clang500-import/contrib/llvm/lib/Target/Sparc/SparcISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/Sparc/SparcISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp projects/clang500-import/contrib/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/TargetLoweringObjectFile.cpp projects/clang500-import/contrib/llvm/lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp projects/clang500-import/contrib/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td projects/clang500-import/contrib/llvm/lib/Target/X86/X86.td projects/clang500-import/contrib/llvm/lib/Target/X86/X86FastISel.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86ISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/X86/X86InstrCompiler.td projects/clang500-import/contrib/llvm/lib/Target/X86/X86InstrInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86InstrInfo.td projects/clang500-import/contrib/llvm/lib/Target/X86/X86InstructionSelector.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86LegalizerInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86OptimizeLEAs.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86RegisterInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86Schedule.td projects/clang500-import/contrib/llvm/lib/Target/X86/X86SelectionDAGInfo.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86Subtarget.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86Subtarget.h projects/clang500-import/contrib/llvm/lib/Target/X86/X86TargetMachine.cpp projects/clang500-import/contrib/llvm/lib/Target/X86/X86WinEHState.cpp projects/clang500-import/contrib/llvm/lib/Target/XCore/XCoreISelLowering.cpp projects/clang500-import/contrib/llvm/lib/Target/XCore/XCoreISelLowering.h projects/clang500-import/contrib/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Coroutines/CoroSplit.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/FunctionAttrs.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/FunctionImport.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/GlobalOpt.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/MergeFunctions.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/PartialInlining.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp projects/clang500-import/contrib/llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineInternal.h projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp projects/clang500-import/contrib/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Instrumentation/IndirectCallPromotion.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp projects/clang500-import/contrib/llvm/lib/Transforms/ObjCARC/ARCRuntimeEntryPoints.h projects/clang500-import/contrib/llvm/lib/Transforms/ObjCARC/ObjCARC.h projects/clang500-import/contrib/llvm/lib/Transforms/ObjCARC/PtrState.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/EarlyCSE.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/GVN.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/GuardWidening.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/JumpThreading.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/LoopDeletion.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/LoopInstSimplify.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/LoopRotation.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/NaryReassociate.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/NewGVN.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/Reassociate.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/SROA.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/Scalar.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/BuildLibCalls.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/CloneFunction.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/InlineFunction.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/LibCallsShrinkWrap.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/Local.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/LoopSimplify.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/LoopUnroll.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/ModuleUtils.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/SimplifyCFG.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/SimplifyInstructions.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp projects/clang500-import/contrib/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp projects/clang500-import/contrib/llvm/tools/clang/include/clang-c/Index.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/AST/DeclBase.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/AST/Type.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/Attr.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/AttrDocs.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/Diagnostic.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticDriverKinds.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticGroups.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticIDs.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticLexKinds.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSerializationKinds.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Basic/LangOptions.def projects/clang500-import/contrib/llvm/tools/clang/include/clang/CodeGen/CGFunctionInfo.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td projects/clang500-import/contrib/llvm/tools/clang/include/clang/Edit/EditedSource.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Frontend/FrontendActions.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Frontend/FrontendOptions.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Frontend/LangStandard.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Frontend/LangStandards.def projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/HeaderSearch.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/MacroInfo.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/PPCallbacks.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/PreprocessingRecord.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Lex/Preprocessor.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/Sema/Sema.h projects/clang500-import/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/BugReporter/CommonBugCategories.h projects/clang500-import/contrib/llvm/tools/clang/lib/ARCMigrate/ObjCMT.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/AST/ASTContext.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/AST/ASTImporter.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/AST/DeclBase.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/AST/ODRHash.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/AST/TypePrinter.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Basic/Diagnostic.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Basic/DiagnosticIDs.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Basic/Targets.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGBlocks.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGCall.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGDeclCXX.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGExpr.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGExprScalar.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGObjC.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGObjCGNU.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGObjCMac.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CGStmtOpenMP.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenFunction.h projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenModule.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenModule.h projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/MacroPPCallbacks.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/MacroPPCallbacks.h projects/clang500-import/contrib/llvm/tools/clang/lib/CodeGen/TargetInfo.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Driver/Job.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Driver/SanitizerArgs.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Edit/EditedSource.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Format/UnwrappedLineParser.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/ASTUnit.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/FrontendAction.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/FrontendActions.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/FrontendOptions.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/LangStandards.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/PrintPreprocessedOutput.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/Rewrite/InclusionRewriter.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Headers/avx512fintrin.h projects/clang500-import/contrib/llvm/tools/clang/lib/Headers/avxintrin.h projects/clang500-import/contrib/llvm/tools/clang/lib/Headers/bmiintrin.h projects/clang500-import/contrib/llvm/tools/clang/lib/Headers/emmintrin.h projects/clang500-import/contrib/llvm/tools/clang/lib/Headers/stdint.h projects/clang500-import/contrib/llvm/tools/clang/lib/Index/IndexDecl.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Index/USRGeneration.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/HeaderSearch.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/MacroInfo.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/PPDirectives.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/PPLexerChange.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/PPMacroExpansion.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/Pragma.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Lex/PreprocessingRecord.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Parse/ParseOpenMP.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaDeclObjC.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaExpr.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaExprCXX.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaExprObjC.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaOpenMP.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaOverload.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Sema/SemaType.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/StaticAnalyzer/Checkers/ValistChecker.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/CommonBugCategories.cpp projects/clang500-import/contrib/llvm/tools/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp projects/clang500-import/contrib/llvm/tools/clang/utils/TableGen/ClangAttrEmitter.cpp projects/clang500-import/contrib/llvm/tools/lld/COFF/Chunks.cpp projects/clang500-import/contrib/llvm/tools/lld/COFF/Error.cpp projects/clang500-import/contrib/llvm/tools/lld/COFF/ICF.cpp projects/clang500-import/contrib/llvm/tools/lld/COFF/InputFiles.cpp projects/clang500-import/contrib/llvm/tools/lld/COFF/InputFiles.h projects/clang500-import/contrib/llvm/tools/lld/COFF/MapFile.cpp projects/clang500-import/contrib/llvm/tools/lld/COFF/PDB.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Config.h projects/clang500-import/contrib/llvm/tools/lld/ELF/Driver.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Driver.h projects/clang500-import/contrib/llvm/tools/lld/ELF/Error.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/InputFiles.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/InputFiles.h projects/clang500-import/contrib/llvm/tools/lld/ELF/InputSection.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/LinkerScript.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/LinkerScript.h projects/clang500-import/contrib/llvm/tools/lld/ELF/MapFile.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Options.td projects/clang500-import/contrib/llvm/tools/lld/ELF/OutputSections.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/OutputSections.h projects/clang500-import/contrib/llvm/tools/lld/ELF/Strings.h projects/clang500-import/contrib/llvm/tools/lld/ELF/SymbolTable.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Target.cpp projects/clang500-import/contrib/llvm/tools/lld/ELF/Writer.cpp projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Core/Module.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Core/TraceOptions.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Core/UniqueCStringMap.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/Config.h.cmake projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/MainLoop.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/PosixApi.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/Socket.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/common/TCPSocket.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/common/UDPSocket.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Host/posix/DomainSocket.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Symbol/ObjectFile.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Symbol/SymbolFile.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Symbol/Symtab.h projects/clang500-import/contrib/llvm/tools/lldb/include/lldb/Target/Target.h projects/clang500-import/contrib/llvm/tools/lldb/source/Core/Module.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/common/Socket.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/common/SocketAddress.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/common/TCPSocket.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/common/UDPSocket.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Host/posix/DomainSocket.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Interpreter/CommandInterpreter.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Interpreter/OptionValueEnumeration.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Interpreter/OptionValueProperties.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h projects/clang500-import/contrib/llvm/tools/lldb/source/Symbol/ClangASTContext.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Symbol/GoASTContext.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Symbol/SymbolFile.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Symbol/Symtab.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Target/Target.cpp projects/clang500-import/contrib/llvm/tools/lldb/source/Utility/ConstString.cpp projects/clang500-import/contrib/llvm/tools/lldb/tools/lldb-server/Acceptor.cpp projects/clang500-import/contrib/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp projects/clang500-import/contrib/llvm/tools/llvm-link/llvm-link.cpp projects/clang500-import/contrib/llvm/tools/llvm-lto/llvm-lto.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/CompactTypeDumpVisitor.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/CompactTypeDumpVisitor.h projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/Diff.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/PdbYaml.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/PdbYaml.h projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/StreamUtil.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/YAMLOutputStyle.h projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp projects/clang500-import/contrib/llvm/tools/llvm-pdbdump/llvm-pdbdump.h projects/clang500-import/contrib/llvm/tools/llvm-readobj/COFFDumper.cpp projects/clang500-import/contrib/llvm/tools/llvm-readobj/ELFDumper.cpp projects/clang500-import/contrib/llvm/tools/llvm-readobj/ObjDumper.h projects/clang500-import/contrib/llvm/tools/llvm-readobj/WasmDumper.cpp projects/clang500-import/contrib/llvm/tools/llvm-readobj/llvm-readobj.cpp projects/clang500-import/contrib/llvm/tools/llvm-readobj/llvm-readobj.h projects/clang500-import/contrib/llvm/tools/opt/BreakpointPrinter.cpp projects/clang500-import/contrib/llvm/utils/TableGen/CodeGenDAGPatterns.cpp projects/clang500-import/contrib/llvm/utils/TableGen/CodeGenIntrinsics.h projects/clang500-import/contrib/llvm/utils/TableGen/CodeGenTarget.cpp projects/clang500-import/contrib/llvm/utils/TableGen/GlobalISelEmitter.cpp projects/clang500-import/contrib/llvm/utils/TableGen/IntrinsicEmitter.cpp projects/clang500-import/contrib/llvm/utils/TableGen/SubtargetFeatureInfo.cpp projects/clang500-import/contrib/llvm/utils/TableGen/SubtargetFeatureInfo.h projects/clang500-import/contrib/llvm/utils/TableGen/X86RecognizableInstr.cpp projects/clang500-import/lib/clang/include/clang/Basic/Version.inc projects/clang500-import/lib/clang/include/lld/Config/Version.inc projects/clang500-import/lib/clang/include/lldb/Host/Config.h projects/clang500-import/lib/clang/include/llvm/Support/VCSRevision.h projects/clang500-import/lib/clang/libclang/Makefile projects/clang500-import/lib/clang/liblldb/Makefile projects/clang500-import/lib/clang/libllvm/Makefile projects/clang500-import/usr.bin/clang/llvm-pdbdump/Makefile Directory Properties: projects/clang500-import/contrib/compiler-rt/ (props changed) projects/clang500-import/contrib/libc++/ (props changed) projects/clang500-import/contrib/llvm/ (props changed) projects/clang500-import/contrib/llvm/tools/clang/ (props changed) projects/clang500-import/contrib/llvm/tools/lld/ (props changed) projects/clang500-import/contrib/llvm/tools/lldb/ (props changed) Modified: projects/clang500-import/contrib/compiler-rt/include/sanitizer/tsan_interface.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/include/sanitizer/tsan_interface.h Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/include/sanitizer/tsan_interface.h Wed May 3 21:54:55 2017 (r317778) @@ -68,7 +68,8 @@ const unsigned __tsan_mutex_recursive_un void __tsan_mutex_create(void *addr, unsigned flags); // Annotate destruction of a mutex. -// Supported flags: none. +// Supported flags: +// - __tsan_mutex_linker_init void __tsan_mutex_destroy(void *addr, unsigned flags); // Annotate start of lock operation. @@ -125,6 +126,7 @@ void __tsan_mutex_post_divert(void *addr // which is later used in read/write annotations to denote the object type // - __tsan_external_assign_tag can optionally mark a heap object with a tag void *__tsan_external_register_tag(const char *object_type); +void __tsan_external_register_header(void *tag, const char *header); void __tsan_external_assign_tag(void *addr, void *tag); void __tsan_external_read(void *addr, void *caller_pc, void *tag); void __tsan_external_write(void *addr, void *caller_pc, void *tag); Modified: projects/clang500-import/contrib/compiler-rt/include/xray/xray_log_interface.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/include/xray/xray_log_interface.h Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/include/xray/xray_log_interface.h Wed May 3 21:54:55 2017 (r317778) @@ -10,7 +10,73 @@ // This file is a part of XRay, a function call tracing system. // // APIs for installing a new logging implementation. +// //===----------------------------------------------------------------------===// +/// +/// XRay allows users to implement their own logging handlers and install them +/// to replace the default runtime-controllable implementation that comes with +/// compiler-rt/xray. The "flight data recorder" (FDR) mode implementation uses +/// this API to install itself in an XRay-enabled binary. See +/// compiler-rt/lib/xray_fdr_logging.{h,cc} for details of that implementation. +/// +/// The high-level usage pattern for these APIs look like the following: +/// +/// // Before we try initializing the log implementation, we must set it as +/// // the log implementation. We provide the function pointers that define +/// // the various initialization, finalization, and other pluggable hooks +/// // that we need. +/// __xray_set_log_impl({...}); +/// +/// // Once that's done, we can now initialize the implementation. Each +/// // implementation has a chance to let users customize the implementation +/// // with a struct that their implementation supports. Roughly this might +/// // look like: +/// MyImplementationOptions opts; +/// opts.enable_feature = true; +/// ... +/// auto init_status = __xray_log_init( +/// BufferSize, MaxBuffers, &opts, sizeof opts); +/// if (init_status != XRayLogInitStatus::XRAY_LOG_INITIALIZED) { +/// // deal with the error here, if there is one. +/// } +/// +/// // When the log implementation has had the chance to initialize, we can +/// // now patch the sleds. +/// auto patch_status = __xray_patch(); +/// if (patch_status != XRayPatchingStatus::SUCCESS) { +/// // deal with the error here, if it is an error. +/// } +/// +/// // If we want to stop the implementation, we can then finalize it (before +/// // optionally flushing the log). +/// auto fin_status = __xray_log_finalize(); +/// if (fin_status != XRayLogInitStatus::XRAY_LOG_FINALIZED) { +/// // deal with the error here, if it is an error. +/// } +/// +/// // We can optionally wait before flushing the log to give other threads a +/// // chance to see that the implementation is already finalized. Also, at +/// // this point we can optionally unpatch the sleds to reduce overheads at +/// // runtime. +/// auto unpatch_status = __xray_unpatch(); +/// if (unpatch_status != XRayPatchingStatus::SUCCESS) { +// // deal with the error here, if it is an error. +// } +/// +/// // If there are logs or data to be flushed somewhere, we can do so only +/// // after we've finalized the log. Some implementations may not actually +/// // have anything to log (it might keep the data in memory, or periodically +/// // be logging the data anyway). +/// auto flush_status = __xray_log_flushLog(); +/// if (flush_status != XRayLogFlushStatus::XRAY_LOG_FLUSHED) { +/// // deal with the error here, if it is an error. +/// } +/// +/// +/// NOTE: Before calling __xray_patch() again, consider re-initializing the +/// implementation first. Some implementations might stay in an "off" state when +/// they are finalized, while some might be in an invalid/unknown state. +/// #ifndef XRAY_XRAY_LOG_INTERFACE_H #define XRAY_XRAY_LOG_INTERFACE_H @@ -19,36 +85,141 @@ extern "C" { +/// This enum defines the valid states in which the logging implementation can +/// be at. enum XRayLogInitStatus { + /// The default state is uninitialized, and in case there were errors in the + /// initialization, the implementation MUST return XRAY_LOG_UNINITIALIZED. XRAY_LOG_UNINITIALIZED = 0, + + /// Some implementations support multi-stage init (or asynchronous init), and + /// may return XRAY_LOG_INITIALIZING to signal callers of the API that + /// there's an ongoing initialization routine running. This allows + /// implementations to support concurrent threads attempting to initialize, + /// while only signalling success in one. XRAY_LOG_INITIALIZING = 1, + + /// When an implementation is done initializing, it MUST return + /// XRAY_LOG_INITIALIZED. When users call `__xray_patch()`, they are + /// guaranteed that the implementation installed with + /// `__xray_set_log_impl(...)` has been initialized. XRAY_LOG_INITIALIZED = 2, + + /// Some implementations might support multi-stage finalization (or + /// asynchronous finalization), and may return XRAY_LOG_FINALIZING to signal + /// callers of the API that there's an ongoing finalization routine running. + /// This allows implementations to support concurrent threads attempting to + /// finalize, while only signalling success/completion in one. XRAY_LOG_FINALIZING = 3, + + /// When an implementation is done finalizing, it MUST return + /// XRAY_LOG_FINALIZED. It is up to the implementation to determine what the + /// semantics of a finalized implementation is. Some implementations might + /// allow re-initialization once the log is finalized, while some might always + /// be on (and that finalization is a no-op). XRAY_LOG_FINALIZED = 4, }; +/// This enum allows an implementation to signal log flushing operations via +/// `__xray_log_flushLog()`, and the state of flushing the log. enum XRayLogFlushStatus { XRAY_LOG_NOT_FLUSHING = 0, XRAY_LOG_FLUSHING = 1, XRAY_LOG_FLUSHED = 2, }; +/// A valid XRay logging implementation MUST provide all of the function +/// pointers in XRayLogImpl when being installed through `__xray_set_log_impl`. +/// To be precise, ALL the functions pointers MUST NOT be nullptr. struct XRayLogImpl { + /// The log initialization routine provided by the implementation, always + /// provided with the following parameters: + /// + /// - buffer size + /// - maximum number of buffers + /// - a pointer to an argument struct that the implementation MUST handle + /// - the size of the argument struct + /// + /// See XRayLogInitStatus for details on what the implementation MUST return + /// when called. + /// + /// If the implementation needs to install handlers aside from the 0-argument + /// function call handler, it MUST do so in this initialization handler. + /// + /// See xray_interface.h for available handler installation routines. XRayLogInitStatus (*log_init)(size_t, size_t, void *, size_t); + + /// The log finalization routine provided by the implementation. + /// + /// See XRayLogInitStatus for details on what the implementation MUST return + /// when called. XRayLogInitStatus (*log_finalize)(); + + /// The 0-argument function call handler. XRay logging implementations MUST + /// always have a handler for function entry and exit events. In case the + /// implementation wants to support arg1 (or other future extensions to XRay + /// logging) those MUST be installed by the installed 'log_init' handler. void (*handle_arg0)(int32_t, XRayEntryType); + + /// The log implementation provided routine for when __xray_log_flushLog() is + /// called. + /// + /// See XRayLogFlushStatus for details on what the implementation MUST return + /// when called. XRayLogFlushStatus (*flush_log)(); }; +/// This function installs a new logging implementation that XRay will use. In +/// case there are any nullptr members in Impl, XRay will *uninstall any +/// existing implementations*. It does NOT patch the instrumentation sleds. +/// +/// NOTE: This function does NOT attempt to finalize the currently installed +/// implementation. Use with caution. +/// +/// It is guaranteed safe to call this function in the following states: +/// +/// - When the implementation is UNINITIALIZED. +/// - When the implementation is FINALIZED. +/// - When there is no current implementation installed. +/// +/// It is logging implementation defined what happens when this function is +/// called while in any other states. void __xray_set_log_impl(XRayLogImpl Impl); + +/// This function removes the currently installed implementation. It will also +/// uninstall any handlers that have been previously installed. It does NOT +/// unpatch the instrumentation sleds. +/// +/// NOTE: This function does NOT attempt to finalize the currently installed +/// implementation. Use with caution. +/// +/// It is guaranteed safe to call this function in the following states: +/// +/// - When the implementation is UNINITIALIZED. +/// - When the implementation is FINALIZED. +/// - When there is no current implementation installed. +/// +/// It is logging implementation defined what happens when this function is +/// called while in any other states. +void __xray_remove_log_impl(); + +/// Invokes the installed implementation initialization routine. See +/// XRayLogInitStatus for what the return values mean. XRayLogInitStatus __xray_log_init(size_t BufferSize, size_t MaxBuffers, void *Args, size_t ArgsSize); + +/// Invokes the installed implementation finalization routine. See +/// XRayLogInitStatus for what the return values mean. XRayLogInitStatus __xray_log_finalize(); + +/// Invokes the install implementation log flushing routine. See +/// XRayLogFlushStatus for what the return values mean. XRayLogFlushStatus __xray_log_flushLog(); } // extern "C" namespace __xray { + // Options used by the LLVM XRay FDR implementation. struct FDRLoggingOptions { bool ReportErrors = false; Modified: projects/clang500-import/contrib/compiler-rt/lib/asan/asan_globals.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/asan/asan_globals.cc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/asan/asan_globals.cc Wed May 3 21:54:55 2017 (r317778) @@ -332,6 +332,26 @@ void __asan_unregister_image_globals(upt *flag = 0; } +void __asan_register_elf_globals(uptr *flag, void *start, void *stop) { + if (*flag) return; + if (!start) return; + CHECK_EQ(0, ((uptr)stop - (uptr)start) % sizeof(__asan_global)); + __asan_global *globals_start = (__asan_global*)start; + __asan_global *globals_stop = (__asan_global*)stop; + __asan_register_globals(globals_start, globals_stop - globals_start); + *flag = 1; +} + +void __asan_unregister_elf_globals(uptr *flag, void *start, void *stop) { + if (!*flag) return; + if (!start) return; + CHECK_EQ(0, ((uptr)stop - (uptr)start) % sizeof(__asan_global)); + __asan_global *globals_start = (__asan_global*)start; + __asan_global *globals_stop = (__asan_global*)stop; + __asan_unregister_globals(globals_start, globals_stop - globals_start); + *flag = 0; +} + // Register an array of globals. void __asan_register_globals(__asan_global *globals, uptr n) { if (!flags()->report_globals) return; Modified: projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interceptors.cc Wed May 3 21:54:55 2017 (r317778) @@ -37,12 +37,19 @@ namespace __asan { // Return true if we can quickly decide that the region is unpoisoned. +// We assume that a redzone is at least 16 bytes. static inline bool QuickCheckForUnpoisonedRegion(uptr beg, uptr size) { if (size == 0) return true; if (size <= 32) return !AddressIsPoisoned(beg) && !AddressIsPoisoned(beg + size - 1) && !AddressIsPoisoned(beg + size / 2); + if (size <= 64) + return !AddressIsPoisoned(beg) && + !AddressIsPoisoned(beg + size / 4) && + !AddressIsPoisoned(beg + size - 1) && + !AddressIsPoisoned(beg + 3 * size / 4) && + !AddressIsPoisoned(beg + size / 2); return false; } Modified: projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interface.inc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interface.inc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interface.inc Wed May 3 21:54:55 2017 (r317778) @@ -64,6 +64,7 @@ INTERFACE_FUNCTION(__asan_poison_stack_m INTERFACE_FUNCTION(__asan_print_accumulated_stats) INTERFACE_FUNCTION(__asan_region_is_poisoned) INTERFACE_FUNCTION(__asan_register_globals) +INTERFACE_FUNCTION(__asan_register_elf_globals) INTERFACE_FUNCTION(__asan_register_image_globals) INTERFACE_FUNCTION(__asan_report_error) INTERFACE_FUNCTION(__asan_report_exp_load1) @@ -149,6 +150,7 @@ INTERFACE_FUNCTION(__asan_unpoison_intra INTERFACE_FUNCTION(__asan_unpoison_memory_region) INTERFACE_FUNCTION(__asan_unpoison_stack_memory) INTERFACE_FUNCTION(__asan_unregister_globals) +INTERFACE_FUNCTION(__asan_unregister_elf_globals) INTERFACE_FUNCTION(__asan_unregister_image_globals) INTERFACE_FUNCTION(__asan_version_mismatch_check_v8) INTERFACE_FUNCTION(__sanitizer_finish_switch_fiber) Modified: projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/asan/asan_interface_internal.h Wed May 3 21:54:55 2017 (r317778) @@ -67,6 +67,11 @@ extern "C" { SANITIZER_INTERFACE_ATTRIBUTE void __asan_unregister_image_globals(uptr *flag); + SANITIZER_INTERFACE_ATTRIBUTE + void __asan_register_elf_globals(uptr *flag, void *start, void *stop); + SANITIZER_INTERFACE_ATTRIBUTE + void __asan_unregister_elf_globals(uptr *flag, void *start, void *stop); + // These two functions should be called by the instrumented code. // 'globals' is an array of structures describing 'n' globals. SANITIZER_INTERFACE_ATTRIBUTE Modified: projects/clang500-import/contrib/compiler-rt/lib/lsan/lsan_interceptors.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/lsan/lsan_interceptors.cc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/lsan/lsan_interceptors.cc Wed May 3 21:54:55 2017 (r317778) @@ -185,6 +185,20 @@ INTERCEPTOR(void, cfree, void *p) ALIAS( #define LSAN_MAYBE_INTERCEPT_CFREE #endif // SANITIZER_INTERCEPT_CFREE +#if SANITIZER_INTERCEPT_MCHECK_MPROBE +INTERCEPTOR(int, mcheck, void (*abortfunc)(int mstatus)) { + return 0; +} + +INTERCEPTOR(int, mcheck_pedantic, void (*abortfunc)(int mstatus)) { + return 0; +} + +INTERCEPTOR(int, mprobe, void *ptr) { + return 0; +} +#endif // SANITIZER_INTERCEPT_MCHECK_MPROBE + #define OPERATOR_NEW_BODY \ ENSURE_LSAN_INITED; \ GET_STACK_TRACE_MALLOC; \ Modified: projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc Wed May 3 21:54:55 2017 (r317778) @@ -6142,6 +6142,20 @@ INTERCEPTOR(int, getloadavg, double *loa #define INIT_GETLOADAVG #endif +#if SANITIZER_INTERCEPT_MCHECK_MPROBE +INTERCEPTOR(int, mcheck, void (*abortfunc)(int mstatus)) { + return 0; +} + +INTERCEPTOR(int, mcheck_pedantic, void (*abortfunc)(int mstatus)) { + return 0; +} + +INTERCEPTOR(int, mprobe, void *ptr) { + return 0; +} +#endif + static void InitializeCommonInterceptors() { static u64 metadata_mem[sizeof(MetadataHashMap) / sizeof(u64) + 1]; interceptor_metadata_map = new((void *)&metadata_mem) MetadataHashMap(); Modified: projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_format.inc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_format.inc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_format.inc Wed May 3 21:54:55 2017 (r317778) @@ -325,8 +325,8 @@ static void scanf_common(void *ctx, int continue; int size = scanf_get_value_size(&dir); if (size == FSS_INVALID) { - Report("WARNING: unexpected format specifier in scanf interceptor: " - "%.*s\n", dir.end - dir.begin, dir.begin); + Report("%s: WARNING: unexpected format specifier in scanf interceptor: ", + SanitizerToolName, "%.*s\n", dir.end - dir.begin, dir.begin); break; } void *argp = va_arg(aq, void *); @@ -520,8 +520,12 @@ static void printf_common(void *ctx, con continue; int size = printf_get_value_size(&dir); if (size == FSS_INVALID) { - Report("WARNING: unexpected format specifier in printf " - "interceptor: %.*s\n", dir.end - dir.begin, dir.begin); + static int ReportedOnce; + if (!ReportedOnce++) + Report( + "%s: WARNING: unexpected format specifier in printf " + "interceptor: %.*s (reported once per process)\n", + SanitizerToolName, dir.end - dir.begin, dir.begin); break; } if (dir.convSpecifier == 'n') { Modified: projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc Wed May 3 21:54:55 2017 (r317778) @@ -84,7 +84,6 @@ class CoverageData { void AfterFork(int child_pid); void Extend(uptr npcs); void Add(uptr pc, u32 *guard); - void DumpAsBitSet(); void DumpOffsets(); void DumpAll(); @@ -156,6 +155,13 @@ void CoverageData::DirectOpen() { void CoverageData::Init() { pc_fd = kInvalidFd; + + if (!common_flags()->coverage) return; + Printf("**\n***\n***\n"); + Printf("**WARNING: this implementation of SanitizerCoverage is deprecated\n"); + Printf("**WARNING: and will be removed in future versions\n"); + Printf("**WARNING: See https://clang.llvm.org/docs/SanitizerCoverage.html\n"); + Printf("**\n***\n***\n"); } void CoverageData::Enable() { @@ -165,6 +171,8 @@ void CoverageData::Enable() { MmapNoReserveOrDie(sizeof(uptr) * kPcArrayMaxSize, "CovInit")); atomic_store(&pc_array_index, 0, memory_order_relaxed); if (common_flags()->coverage_direct) { + Report("coverage_direct=1 is deprecated, don't use it.\n"); + Die(); atomic_store(&pc_array_size, 0, memory_order_relaxed); } else { atomic_store(&pc_array_size, kPcArrayMaxSize, memory_order_relaxed); @@ -419,35 +427,6 @@ static fd_t CovOpenFile(InternalScopedSt return fd; } -void CoverageData::DumpAsBitSet() { - if (!common_flags()->coverage_bitset) return; - if (!size()) return; - InternalScopedBuffer out(size()); - InternalScopedString path(kMaxPathLength); - for (uptr m = 0; m < module_name_vec.size(); m++) { - uptr n_set_bits = 0; - auto r = module_name_vec[m]; - CHECK(r.copied_module_name); - CHECK_LE(r.beg, r.end); - CHECK_LE(r.end, size()); - for (uptr i = r.beg; i < r.end; i++) { - uptr pc = UnbundlePc(pc_array[i]); - out[i] = pc ? '1' : '0'; - if (pc) - n_set_bits++; - } - const char *base_name = StripModuleName(r.copied_module_name); - fd_t fd = CovOpenFile(&path, /* packed */false, base_name, "bitset-sancov"); - if (fd == kInvalidFd) return; - WriteToFile(fd, out.data() + r.beg, r.end - r.beg); - CloseFile(fd); - VReport(1, - " CovDump: bitset of %zd bits written for '%s', %zd bits are set\n", - r.end - r.beg, base_name, n_set_bits); - } -} - - void CoverageData::GetRangeOffsets(const NamedPcRange& r, Symbolizer* sym, InternalMmapVector* offsets) const { offsets->clear(); @@ -565,7 +544,6 @@ void CoverageData::DumpAll() { if (!coverage_enabled || common_flags()->coverage_direct) return; if (atomic_fetch_add(&dump_once_guard, 1, memory_order_relaxed)) return; - DumpAsBitSet(); DumpOffsets(); } Modified: projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc Wed May 3 21:54:55 2017 (r317778) @@ -98,10 +98,6 @@ static void SanitizerDumpCoverage(const InternalFree(file_path); InternalFree(module_name); InternalFree(pcs); - - if (sancov_flags()->symbolize) { - Printf("TODO(aizatsky): call sancov to symbolize\n"); - } } // Collects trace-pc guard coverage. Modified: projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc Wed May 3 21:54:55 2017 (r317778) @@ -142,12 +142,6 @@ COMMON_FLAG(bool, coverage_pcs, true, COMMON_FLAG(bool, coverage_order_pcs, false, "If true, the PCs will be dumped in the order they've" " appeared during the execution.") -COMMON_FLAG(bool, coverage_bitset, false, - "If set (and if 'coverage' is set too), the coverage information " - "will also be dumped as a bitset to a separate file.") -COMMON_FLAG(bool, coverage_counters, false, - "If set (and if 'coverage' is set too), the bitmap that corresponds" - " to coverage counters will be dumped.") COMMON_FLAG(bool, coverage_direct, SANITIZER_ANDROID, "If set, coverage information will be dumped directly to a memory " "mapped file. This way data is not lost even if the process is " Modified: projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.h Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_linux.h Wed May 3 21:54:55 2017 (r317778) @@ -88,6 +88,46 @@ bool LibraryNameIs(const char *full_name // Call cb for each region mapped by map. void ForEachMappedRegion(link_map *map, void (*cb)(const void *, uptr)); + +#if SANITIZER_ANDROID + +#if defined(__aarch64__) +# define __get_tls() \ + ({ void** __v; __asm__("mrs %0, tpidr_el0" : "=r"(__v)); __v; }) +#elif defined(__arm__) +# define __get_tls() \ + ({ void** __v; __asm__("mrc p15, 0, %0, c13, c0, 3" : "=r"(__v)); __v; }) +#elif defined(__mips__) +// On mips32r1, this goes via a kernel illegal instruction trap that's +// optimized for v1. +# define __get_tls() \ + ({ register void** __v asm("v1"); \ + __asm__(".set push\n" \ + ".set mips32r2\n" \ + "rdhwr %0,$29\n" \ + ".set pop\n" : "=r"(__v)); \ + __v; }) +#elif defined(__i386__) +# define __get_tls() \ + ({ void** __v; __asm__("movl %%gs:0, %0" : "=r"(__v)); __v; }) +#elif defined(__x86_64__) +# define __get_tls() \ + ({ void** __v; __asm__("mov %%fs:0, %0" : "=r"(__v)); __v; }) +#else +#error "Unsupported architecture." +#endif + +// The Android Bionic team has allocated a TLS slot for TSan starting with N, +// given that Android currently doesn't support ELF TLS. It is used to store +// Sanitizers thread specific data. +static const int TLS_SLOT_TSAN = 8; + +ALWAYS_INLINE uptr *get_android_tls_ptr() { + return reinterpret_cast(&__get_tls()[TLS_SLOT_TSAN]); +} + +#endif // SANITIZER_ANDROID + } // namespace __sanitizer #endif // SANITIZER_FREEBSD || SANITIZER_LINUX Modified: projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h Wed May 3 21:54:55 2017 (r317778) @@ -339,5 +339,6 @@ #define SANITIZER_INTERCEPT_CFREE (!SI_FREEBSD && !SI_MAC) #define SANITIZER_INTERCEPT_ALIGNED_ALLOC (!SI_MAC) #define SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE (!SI_MAC) +#define SANITIZER_INTERCEPT_MCHECK_MPROBE SI_LINUX_NOT_ANDROID #endif // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H Modified: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp Wed May 3 21:54:55 2017 (r317778) @@ -15,6 +15,7 @@ //===----------------------------------------------------------------------===// #include "scudo_allocator.h" +#include "scudo_tls.h" #include "scudo_utils.h" #include "sanitizer_common/sanitizer_allocator_interface.h" @@ -26,44 +27,6 @@ namespace __scudo { -#if SANITIZER_CAN_USE_ALLOCATOR64 -const uptr AllocatorSpace = ~0ULL; -const uptr AllocatorSize = 0x40000000000ULL; -typedef DefaultSizeClassMap SizeClassMap; -struct AP { - static const uptr kSpaceBeg = AllocatorSpace; - static const uptr kSpaceSize = AllocatorSize; - static const uptr kMetadataSize = 0; - typedef __scudo::SizeClassMap SizeClassMap; - typedef NoOpMapUnmapCallback MapUnmapCallback; - static const uptr kFlags = - SizeClassAllocator64FlagMasks::kRandomShuffleChunks; -}; -typedef SizeClassAllocator64 PrimaryAllocator; -#else -// Currently, the 32-bit Sanitizer allocator has not yet benefited from all the -// security improvements brought to the 64-bit one. This makes the 32-bit -// version of Scudo slightly less toughened. -static const uptr RegionSizeLog = 20; -static const uptr NumRegions = SANITIZER_MMAP_RANGE_SIZE >> RegionSizeLog; -# if SANITIZER_WORDSIZE == 32 -typedef FlatByteMap ByteMap; -# elif SANITIZER_WORDSIZE == 64 -typedef TwoLevelByteMap<(NumRegions >> 12), 1 << 12> ByteMap; -# endif // SANITIZER_WORDSIZE -typedef DefaultSizeClassMap SizeClassMap; -typedef SizeClassAllocator32<0, SANITIZER_MMAP_RANGE_SIZE, 0, SizeClassMap, - RegionSizeLog, ByteMap> PrimaryAllocator; -#endif // SANITIZER_CAN_USE_ALLOCATOR64 - -typedef SizeClassAllocatorLocalCache AllocatorCache; -typedef ScudoLargeMmapAllocator SecondaryAllocator; -typedef CombinedAllocator - ScudoBackendAllocator; - -static ScudoBackendAllocator &getBackendAllocator(); - -static thread_local Xorshift128Plus Prng; // Global static cookie, initialized at start-up. static uptr Cookie; @@ -88,6 +51,8 @@ INLINE u32 computeCRC32(u32 Crc, uptr Da #endif // defined(__SSE4_2__) } +static ScudoBackendAllocator &getBackendAllocator(); + struct ScudoChunk : UnpackedHeader { // We can't use the offset member of the chunk itself, as we would double // fetch it without any warranty that it wouldn't have been tampered. To @@ -188,32 +153,44 @@ ScudoChunk *getScudoChunk(uptr UserBeg) return reinterpret_cast(UserBeg - AlignedChunkHeaderSize); } -static bool ScudoInitIsRunning = false; +struct AllocatorOptions { + u32 QuarantineSizeMb; + u32 ThreadLocalQuarantineSizeKb; + bool MayReturnNull; + s32 ReleaseToOSIntervalMs; + bool DeallocationTypeMismatch; + bool DeleteSizeMismatch; + bool ZeroContents; -static pthread_once_t GlobalInited = PTHREAD_ONCE_INIT; -static pthread_key_t PThreadKey; + void setFrom(const Flags *f, const CommonFlags *cf); + void copyTo(Flags *f, CommonFlags *cf) const; +}; + +void AllocatorOptions::setFrom(const Flags *f, const CommonFlags *cf) { + MayReturnNull = cf->allocator_may_return_null; + ReleaseToOSIntervalMs = cf->allocator_release_to_os_interval_ms; + QuarantineSizeMb = f->QuarantineSizeMb; + ThreadLocalQuarantineSizeKb = f->ThreadLocalQuarantineSizeKb; + DeallocationTypeMismatch = f->DeallocationTypeMismatch; + DeleteSizeMismatch = f->DeleteSizeMismatch; + ZeroContents = f->ZeroContents; +} -static thread_local bool ThreadInited = false; -static thread_local bool ThreadTornDown = false; -static thread_local AllocatorCache Cache; - -static void teardownThread(void *p) { - uptr v = reinterpret_cast(p); - // The glibc POSIX thread-local-storage deallocation routine calls user - // provided destructors in a loop of PTHREAD_DESTRUCTOR_ITERATIONS. - // We want to be called last since other destructors might call free and the - // like, so we wait until PTHREAD_DESTRUCTOR_ITERATIONS before draining the - // quarantine and swallowing the cache. - if (v < PTHREAD_DESTRUCTOR_ITERATIONS) { - pthread_setspecific(PThreadKey, reinterpret_cast(v + 1)); - return; - } - drainQuarantine(); - getBackendAllocator().DestroyCache(&Cache); - ThreadTornDown = true; +void AllocatorOptions::copyTo(Flags *f, CommonFlags *cf) const { + cf->allocator_may_return_null = MayReturnNull; + cf->allocator_release_to_os_interval_ms = ReleaseToOSIntervalMs; + f->QuarantineSizeMb = QuarantineSizeMb; + f->ThreadLocalQuarantineSizeKb = ThreadLocalQuarantineSizeKb; + f->DeallocationTypeMismatch = DeallocationTypeMismatch; + f->DeleteSizeMismatch = DeleteSizeMismatch; + f->ZeroContents = ZeroContents; } -static void initInternal() { +static void initScudoInternal(const AllocatorOptions &Options); + +static bool ScudoInitIsRunning = false; + +void initScudo() { SanitizerToolName = "Scudo"; CHECK(!ScudoInitIsRunning && "Scudo init calls itself!"); ScudoInitIsRunning = true; @@ -227,25 +204,13 @@ static void initInternal() { AllocatorOptions Options; Options.setFrom(getFlags(), common_flags()); - initAllocator(Options); + initScudoInternal(Options); - MaybeStartBackgroudThread(); + // TODO(kostyak): determine if MaybeStartBackgroudThread could be of some use. ScudoInitIsRunning = false; } -static void initGlobal() { - pthread_key_create(&PThreadKey, teardownThread); - initInternal(); -} - -static void NOINLINE initThread() { - pthread_once(&GlobalInited, initGlobal); - pthread_setspecific(PThreadKey, reinterpret_cast(1)); - getBackendAllocator().InitCache(&Cache); - ThreadInited = true; -} - struct QuarantineCallback { explicit QuarantineCallback(AllocatorCache *Cache) : Cache_(Cache) {} @@ -278,26 +243,20 @@ struct QuarantineCallback { typedef Quarantine ScudoQuarantine; typedef ScudoQuarantine::Cache ScudoQuarantineCache; -static thread_local ScudoQuarantineCache ThreadQuarantineCache; +COMPILER_CHECK(sizeof(ScudoQuarantineCache) <= + sizeof(ScudoThreadContext::QuarantineCachePlaceHolder)); -void AllocatorOptions::setFrom(const Flags *f, const CommonFlags *cf) { - MayReturnNull = cf->allocator_may_return_null; - ReleaseToOSIntervalMs = cf->allocator_release_to_os_interval_ms; - QuarantineSizeMb = f->QuarantineSizeMb; - ThreadLocalQuarantineSizeKb = f->ThreadLocalQuarantineSizeKb; - DeallocationTypeMismatch = f->DeallocationTypeMismatch; - DeleteSizeMismatch = f->DeleteSizeMismatch; - ZeroContents = f->ZeroContents; +AllocatorCache *getAllocatorCache(ScudoThreadContext *ThreadContext) { + return &ThreadContext->Cache; } -void AllocatorOptions::copyTo(Flags *f, CommonFlags *cf) const { - cf->allocator_may_return_null = MayReturnNull; - cf->allocator_release_to_os_interval_ms = ReleaseToOSIntervalMs; - f->QuarantineSizeMb = QuarantineSizeMb; - f->ThreadLocalQuarantineSizeKb = ThreadLocalQuarantineSizeKb; - f->DeallocationTypeMismatch = DeallocationTypeMismatch; - f->DeleteSizeMismatch = DeleteSizeMismatch; - f->ZeroContents = ZeroContents; +ScudoQuarantineCache *getQuarantineCache(ScudoThreadContext *ThreadContext) { + return reinterpret_cast< + ScudoQuarantineCache *>(ThreadContext->QuarantineCachePlaceHolder); +} + +Xorshift128Plus *getPrng(ScudoThreadContext *ThreadContext) { + return &ThreadContext->Prng; } struct ScudoAllocator { @@ -313,6 +272,7 @@ struct ScudoAllocator { StaticSpinMutex FallbackMutex; AllocatorCache FallbackAllocatorCache; ScudoQuarantineCache FallbackQuarantineCache; + Xorshift128Plus FallbackPrng; bool DeallocationTypeMismatch; bool ZeroContents; @@ -361,13 +321,13 @@ struct ScudoAllocator { static_cast(Options.QuarantineSizeMb) << 20, static_cast(Options.ThreadLocalQuarantineSizeKb) << 10); BackendAllocator.InitCache(&FallbackAllocatorCache); - Cookie = Prng.getNext(); + FallbackPrng.initFromURandom(); + Cookie = FallbackPrng.getNext(); } // Helper function that checks for a valid Scudo chunk. nullptr isn't. bool isValidPointer(const void *UserPtr) { - if (UNLIKELY(!ThreadInited)) - initThread(); + initThreadMaybe(); if (!UserPtr) return false; uptr UserBeg = reinterpret_cast(UserPtr); @@ -379,8 +339,7 @@ struct ScudoAllocator { // Allocates a chunk. void *allocate(uptr Size, uptr Alignment, AllocType Type, bool ForceZeroContents = false) { - if (UNLIKELY(!ThreadInited)) - initThread(); + initThreadMaybe(); if (UNLIKELY(!IsPowerOfTwo(Alignment))) { dieWithMessage("ERROR: alignment is not a power of 2\n"); } @@ -407,11 +366,16 @@ struct ScudoAllocator { bool FromPrimary = PrimaryAllocator::CanAllocate(NeededSize, MinAlignment); void *Ptr; + uptr Salt; uptr AllocationAlignment = FromPrimary ? MinAlignment : Alignment; - if (LIKELY(!ThreadTornDown)) { - Ptr = BackendAllocator.Allocate(&Cache, NeededSize, AllocationAlignment); + ScudoThreadContext *ThreadContext = getThreadContext(); + if (LIKELY(ThreadContext)) { + Salt = getPrng(ThreadContext)->getNext(); + Ptr = BackendAllocator.Allocate(getAllocatorCache(ThreadContext), + NeededSize, AllocationAlignment); } else { SpinMutexLock l(&FallbackMutex); + Salt = FallbackPrng.getNext(); Ptr = BackendAllocator.Allocate(&FallbackAllocatorCache, NeededSize, AllocationAlignment); } @@ -453,7 +417,7 @@ struct ScudoAllocator { if (TrailingBytes) Header.SizeOrUnusedBytes = PageSize - TrailingBytes; } - Header.Salt = static_cast(Prng.getNext()); + Header.Salt = static_cast(Salt); getScudoChunk(UserBeg)->storeHeader(&Header); void *UserPtr = reinterpret_cast(UserBeg); // if (&__sanitizer_malloc_hook) __sanitizer_malloc_hook(UserPtr, Size); @@ -462,16 +426,17 @@ struct ScudoAllocator { // Place a chunk in the quarantine. In the event of a zero-sized quarantine, // we directly deallocate the chunk, otherwise the flow would lead to the - // chunk being checksummed twice, once before Put and once in Recycle, with - // no additional security value. + // chunk being loaded (and checked) twice, and stored (and checksummed) once, + // with no additional security value. void quarantineOrDeallocateChunk(ScudoChunk *Chunk, UnpackedHeader *Header, uptr Size) { bool BypassQuarantine = (AllocatorQuarantine.GetCacheSize() == 0); if (BypassQuarantine) { Chunk->eraseHeader(); void *Ptr = Chunk->getAllocBeg(Header); - if (LIKELY(!ThreadTornDown)) { - getBackendAllocator().Deallocate(&Cache, Ptr); + ScudoThreadContext *ThreadContext = getThreadContext(); + if (LIKELY(ThreadContext)) { + getBackendAllocator().Deallocate(getAllocatorCache(ThreadContext), Ptr); } else { SpinMutexLock Lock(&FallbackMutex); getBackendAllocator().Deallocate(&FallbackAllocatorCache, Ptr); @@ -480,9 +445,12 @@ struct ScudoAllocator { UnpackedHeader NewHeader = *Header; NewHeader.State = ChunkQuarantine; Chunk->compareExchangeHeader(&NewHeader, Header); - if (LIKELY(!ThreadTornDown)) { - AllocatorQuarantine.Put(&ThreadQuarantineCache, - QuarantineCallback(&Cache), Chunk, Size); + ScudoThreadContext *ThreadContext = getThreadContext(); + if (LIKELY(ThreadContext)) { + AllocatorQuarantine.Put(getQuarantineCache(ThreadContext), + QuarantineCallback( + getAllocatorCache(ThreadContext)), + Chunk, Size); } else { SpinMutexLock l(&FallbackMutex); AllocatorQuarantine.Put(&FallbackQuarantineCache, @@ -495,8 +463,7 @@ struct ScudoAllocator { // Deallocates a Chunk, which means adding it to the delayed free list (or // Quarantine). void deallocate(void *UserPtr, uptr DeleteSize, AllocType Type) { - if (UNLIKELY(!ThreadInited)) - initThread(); + initThreadMaybe(); // if (&__sanitizer_free_hook) __sanitizer_free_hook(UserPtr); if (!UserPtr) return; @@ -542,8 +509,7 @@ struct ScudoAllocator { // Reallocates a chunk. We can save on a new allocation if the new requested // size still fits in the chunk. void *reallocate(void *OldPtr, uptr NewSize) { - if (UNLIKELY(!ThreadInited)) - initThread(); + initThreadMaybe(); uptr UserBeg = reinterpret_cast(OldPtr); if (UNLIKELY(!IsAligned(UserBeg, MinAlignment))) { dieWithMessage("ERROR: attempted to reallocate a chunk not properly " @@ -585,8 +551,7 @@ struct ScudoAllocator { // Helper function that returns the actual usable size of a chunk. uptr getUsableSize(const void *Ptr) { - if (UNLIKELY(!ThreadInited)) - initThread(); + initThreadMaybe(); if (!Ptr) return 0; uptr UserBeg = reinterpret_cast(Ptr); @@ -602,22 +567,22 @@ struct ScudoAllocator { } void *calloc(uptr NMemB, uptr Size) { - if (UNLIKELY(!ThreadInited)) - initThread(); + initThreadMaybe(); uptr Total = NMemB * Size; if (Size != 0 && Total / Size != NMemB) // Overflow check return BackendAllocator.ReturnNullOrDieOnBadRequest(); return allocate(Total, MinAlignment, FromMalloc, true); } - void drainQuarantine() { - AllocatorQuarantine.Drain(&ThreadQuarantineCache, - QuarantineCallback(&Cache)); + void commitBack(ScudoThreadContext *ThreadContext) { + AllocatorCache *Cache = getAllocatorCache(ThreadContext); + AllocatorQuarantine.Drain(getQuarantineCache(ThreadContext), + QuarantineCallback(Cache)); + BackendAllocator.DestroyCache(Cache); } uptr getStats(AllocatorStat StatType) { - if (UNLIKELY(!ThreadInited)) - initThread(); + initThreadMaybe(); uptr stats[AllocatorStatCount]; BackendAllocator.GetStats(stats); return stats[StatType]; @@ -630,12 +595,18 @@ static ScudoBackendAllocator &getBackend return Instance.BackendAllocator; } -void initAllocator(const AllocatorOptions &Options) { +static void initScudoInternal(const AllocatorOptions &Options) { Instance.init(Options); } -void drainQuarantine() { - Instance.drainQuarantine(); +void ScudoThreadContext::init() { + getBackendAllocator().InitCache(&Cache); + Prng.initFromURandom(); + memset(QuarantineCachePlaceHolder, 0, sizeof(QuarantineCachePlaceHolder)); +} + +void ScudoThreadContext::commitBack() { + Instance.commitBack(this); } void *scudoMalloc(uptr Size, AllocType Type) { Modified: projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h ============================================================================== --- projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h Wed May 3 21:44:04 2017 (r317777) +++ projects/clang500-import/contrib/compiler-rt/lib/scudo/scudo_allocator.h Wed May 3 21:54:55 2017 (r317778) @@ -53,7 +53,7 @@ struct UnpackedHeader { u64 Offset : 16; // Offset from the beginning of the backend // allocation to the beginning of the chunk // itself, in multiples of MinAlignment. See - /// comment about its maximum value and in init(). + // comment about its maximum value and in init(). u64 Salt : 8; }; @@ -62,7 +62,7 @@ COMPILER_CHECK(sizeof(UnpackedHeader) == // Minimum alignment of 8 bytes for 32-bit, 16 for 64-bit const uptr MinAlignmentLog = FIRST_32_SECOND_64(3, 4); -const uptr MaxAlignmentLog = 24; // 16 MB +const uptr MaxAlignmentLog = 24; // 16 MB const uptr MinAlignment = 1 << MinAlignmentLog; const uptr MaxAlignment = 1 << MaxAlignmentLog; @@ -70,21 +70,44 @@ const uptr ChunkHeaderSize = sizeof(Pack const uptr AlignedChunkHeaderSize = (ChunkHeaderSize + MinAlignment - 1) & ~(MinAlignment - 1); -struct AllocatorOptions { - u32 QuarantineSizeMb; - u32 ThreadLocalQuarantineSizeKb; - bool MayReturnNull; - s32 ReleaseToOSIntervalMs; - bool DeallocationTypeMismatch; - bool DeleteSizeMismatch; - bool ZeroContents; - - void setFrom(const Flags *f, const CommonFlags *cf); - void copyTo(Flags *f, CommonFlags *cf) const; +#if SANITIZER_CAN_USE_ALLOCATOR64 +const uptr AllocatorSpace = ~0ULL; +const uptr AllocatorSize = 0x40000000000ULL; // 4TB. +typedef DefaultSizeClassMap SizeClassMap; +struct AP { + static const uptr kSpaceBeg = AllocatorSpace; + static const uptr kSpaceSize = AllocatorSize; + static const uptr kMetadataSize = 0; + typedef __scudo::SizeClassMap SizeClassMap; + typedef NoOpMapUnmapCallback MapUnmapCallback; + static const uptr kFlags = + SizeClassAllocator64FlagMasks::kRandomShuffleChunks; }; +typedef SizeClassAllocator64 PrimaryAllocator; +#else +// Currently, the 32-bit Sanitizer allocator has not yet benefited from all the +// security improvements brought to the 64-bit one. This makes the 32-bit +// version of Scudo slightly less toughened. +static const uptr RegionSizeLog = 20; +static const uptr NumRegions = SANITIZER_MMAP_RANGE_SIZE >> RegionSizeLog; +# if SANITIZER_WORDSIZE == 32 +typedef FlatByteMap ByteMap; +# elif SANITIZER_WORDSIZE == 64 +typedef TwoLevelByteMap<(NumRegions >> 12), 1 << 12> ByteMap; +# endif // SANITIZER_WORDSIZE +typedef DefaultSizeClassMap SizeClassMap; +typedef SizeClassAllocator32<0, SANITIZER_MMAP_RANGE_SIZE, 0, SizeClassMap, *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Thu May 4 21:04:39 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9C606D5EBA8 for ; Thu, 4 May 2017 21:04:39 +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 mx1.freebsd.org (Postfix) with ESMTPS id 51BDC9F1; Thu, 4 May 2017 21:04:39 +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 v44L4c0A064518; Thu, 4 May 2017 21:04:38 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v44L4cNn064517; Thu, 4 May 2017 21:04:38 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201705042104.v44L4cNn064517@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Thu, 4 May 2017 21:04:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317807 - projects/clang500-import/lib/clang/libllvm X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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: Thu, 04 May 2017 21:04:39 -0000 Author: dim Date: Thu May 4 21:04:38 2017 New Revision: 317807 URL: https://svnweb.freebsd.org/changeset/base/317807 Log: Some more files in libllvm moved around. These only apply for WITH_CLANG_EXTRAS. Modified: projects/clang500-import/lib/clang/libllvm/Makefile Modified: projects/clang500-import/lib/clang/libllvm/Makefile ============================================================================== --- projects/clang500-import/lib/clang/libllvm/Makefile Thu May 4 20:42:31 2017 (r317806) +++ projects/clang500-import/lib/clang/libllvm/Makefile Thu May 4 21:04:38 2017 (r317807) @@ -324,6 +324,7 @@ SRCS_EXT+= DebugInfo/CodeView/ModuleDebu SRCS_EXT+= DebugInfo/CodeView/ModuleDebugInlineeLinesFragment.cpp SRCS_EXT+= DebugInfo/CodeView/ModuleDebugLineFragment.cpp SRCS_MIN+= DebugInfo/CodeView/RecordSerialization.cpp +SRCS_EXT+= DebugInfo/CodeView/StringTable.cpp SRCS_MIN+= DebugInfo/CodeView/SymbolDumper.cpp SRCS_MIN+= DebugInfo/CodeView/SymbolRecordMapping.cpp SRCS_EXT+= DebugInfo/CodeView/SymbolSerializer.cpp @@ -353,6 +354,7 @@ SRCS_MIW+= DebugInfo/DWARF/DWARFGdbIndex SRCS_MIW+= DebugInfo/DWARF/DWARFTypeUnit.cpp SRCS_MIW+= DebugInfo/DWARF/DWARFUnit.cpp SRCS_MIW+= DebugInfo/DWARF/DWARFUnitIndex.cpp +SRCS_MIW+= DebugInfo/DWARF/DWARFVerifier.cpp SRCS_MIW+= DebugInfo/DWARF/SyntaxHighlighting.cpp SRCS_MIN+= DebugInfo/MSF/MSFBuilder.cpp SRCS_MIN+= DebugInfo/MSF/MSFCommon.cpp @@ -382,8 +384,8 @@ SRCS_EXT+= DebugInfo/PDB/Native/PDBFile. SRCS_EXT+= DebugInfo/PDB/Native/PDBFileBuilder.cpp SRCS_EXT+= DebugInfo/PDB/Native/PublicsStream.cpp SRCS_EXT+= DebugInfo/PDB/Native/RawError.cpp -SRCS_EXT+= DebugInfo/PDB/Native/StringTable.cpp -SRCS_EXT+= DebugInfo/PDB/Native/StringTableBuilder.cpp +SRCS_EXT+= DebugInfo/PDB/Native/PDBStringTable.cpp +SRCS_EXT+= DebugInfo/PDB/Native/PDBStringTableBuilder.cpp SRCS_EXT+= DebugInfo/PDB/Native/SymbolStream.cpp SRCS_EXT+= DebugInfo/PDB/Native/TpiHashing.cpp SRCS_EXT+= DebugInfo/PDB/Native/TpiStream.cpp From owner-svn-src-projects@freebsd.org Thu May 4 21:30:32 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 91A92D5E1AD for ; Thu, 4 May 2017 21:30:32 +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 mx1.freebsd.org (Postfix) with ESMTPS id 3C204A85; Thu, 4 May 2017 21:30:32 +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 v44LUVxj072987; Thu, 4 May 2017 21:30:31 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v44LUR0j072942; Thu, 4 May 2017 21:30:27 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201705042130.v44LUR0j072942@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Thu, 4 May 2017 21:30:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317808 - in projects/clang500-import: . bin/sh bin/sh/tests/expansion contrib/blacklist contrib/blacklist/bin contrib/blacklist/etc/rc.d contrib/blacklist/lib contrib/blacklist/libexec... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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: Thu, 04 May 2017 21:30:32 -0000 Author: dim Date: Thu May 4 21:30:26 2017 New Revision: 317808 URL: https://svnweb.freebsd.org/changeset/base/317808 Log: Merge ^/head r317503 through r317807. Added: projects/clang500-import/bin/sh/tests/expansion/cmdsubst25.0 - copied unchanged from r317807, head/bin/sh/tests/expansion/cmdsubst25.0 projects/clang500-import/bin/sh/tests/expansion/cmdsubst26.0 - copied unchanged from r317807, head/bin/sh/tests/expansion/cmdsubst26.0 projects/clang500-import/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c - copied unchanged from r317807, head/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c projects/clang500-import/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.zip.uu - copied unchanged from r317807, head/contrib/libarchive/libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.zip.uu projects/clang500-import/contrib/netbsd-tests/usr.bin/grep/d_context_e.in - copied unchanged from r317807, head/contrib/netbsd-tests/usr.bin/grep/d_context_e.in projects/clang500-import/contrib/netbsd-tests/usr.bin/grep/d_context_e.out - copied unchanged from r317807, head/contrib/netbsd-tests/usr.bin/grep/d_context_e.out projects/clang500-import/contrib/netbsd-tests/usr.bin/grep/d_context_f.out - copied unchanged from r317807, head/contrib/netbsd-tests/usr.bin/grep/d_context_f.out projects/clang500-import/contrib/netbsd-tests/usr.bin/grep/d_context_g.out - copied unchanged from r317807, head/contrib/netbsd-tests/usr.bin/grep/d_context_g.out projects/clang500-import/lib/libc/tests/gen/glob2_test.c - copied unchanged from r317807, head/lib/libc/tests/gen/glob2_test.c projects/clang500-import/share/man/man4/cy.4 - copied unchanged from r317807, head/share/man/man4/cy.4 projects/clang500-import/sys/amd64/vmm/amd/amdvi_hw.c - copied unchanged from r317807, head/sys/amd64/vmm/amd/amdvi_hw.c projects/clang500-import/sys/amd64/vmm/amd/amdvi_priv.h - copied unchanged from r317807, head/sys/amd64/vmm/amd/amdvi_priv.h projects/clang500-import/sys/amd64/vmm/amd/ivrs_drv.c - copied unchanged from r317807, head/sys/amd64/vmm/amd/ivrs_drv.c projects/clang500-import/sys/compat/linuxkpi/common/include/asm/smp.h - copied unchanged from r317807, head/sys/compat/linuxkpi/common/include/asm/smp.h projects/clang500-import/sys/compat/linuxkpi/common/include/linux/smp.h - copied unchanged from r317807, head/sys/compat/linuxkpi/common/include/linux/smp.h projects/clang500-import/sys/contrib/ena-com/ - copied from r317807, head/sys/contrib/ena-com/ projects/clang500-import/sys/dev/cxgbe/t4_sched.c - copied unchanged from r317807, head/sys/dev/cxgbe/t4_sched.c projects/clang500-import/sys/dev/cy/ - copied from r317807, head/sys/dev/cy/ projects/clang500-import/sys/libkern/arm64/ - copied from r317807, head/sys/libkern/arm64/ projects/clang500-import/tests/sys/geom/class/mirror/8_test.sh - copied unchanged from r317807, head/tests/sys/geom/class/mirror/8_test.sh projects/clang500-import/tests/sys/geom/class/mirror/9_test.sh - copied unchanged from r317807, head/tests/sys/geom/class/mirror/9_test.sh Replaced: projects/clang500-import/contrib/blacklist/port/config.h - copied unchanged from r317807, head/contrib/blacklist/port/config.h Deleted: projects/clang500-import/share/man/man9/utopia.9 Modified: projects/clang500-import/ObsoleteFiles.inc projects/clang500-import/bin/sh/expand.c projects/clang500-import/bin/sh/tests/expansion/Makefile projects/clang500-import/contrib/blacklist/README projects/clang500-import/contrib/blacklist/bin/blacklistctl.8 projects/clang500-import/contrib/blacklist/bin/blacklistctl.c projects/clang500-import/contrib/blacklist/bin/blacklistd.c projects/clang500-import/contrib/blacklist/bin/blacklistd.conf.5 projects/clang500-import/contrib/blacklist/etc/rc.d/blacklistd projects/clang500-import/contrib/blacklist/lib/bl.c projects/clang500-import/contrib/blacklist/lib/libblacklist.3 projects/clang500-import/contrib/blacklist/libexec/blacklistd-helper projects/clang500-import/contrib/blacklist/port/Makefile.am projects/clang500-import/contrib/blacklist/port/sockaddr_snprintf.c projects/clang500-import/contrib/elftoolchain/cxxfilt/cxxfilt.c projects/clang500-import/contrib/hyperv/tools/hv_kvp_daemon.c projects/clang500-import/contrib/libarchive/cpio/cpio.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_Z_upper.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_a.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_b64encode.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_grzip.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_lrzip.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_lz4.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_lzma.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_lzop.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_uuencode.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_xz.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_y.c projects/clang500-import/contrib/libarchive/cpio/test/test_option_z.c projects/clang500-import/contrib/libarchive/libarchive/archive_entry_sparse.c projects/clang500-import/contrib/libarchive/libarchive/archive_getdate.c projects/clang500-import/contrib/libarchive/libarchive/archive_openssl_hmac_private.h projects/clang500-import/contrib/libarchive/libarchive/archive_read.c projects/clang500-import/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_format_cab.c projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_format_cpio.c projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_format_mtree.c projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_format_rar.c projects/clang500-import/contrib/libarchive/libarchive/archive_string.c projects/clang500-import/contrib/libarchive/libarchive/archive_write_set_format_pax.c projects/clang500-import/contrib/libarchive/libarchive/libarchive_changes.3 projects/clang500-import/contrib/libarchive/libarchive/test/test_read_format_mtree.c projects/clang500-import/contrib/libarchive/libarchive/test/test_write_format_pax.c projects/clang500-import/contrib/libarchive/libarchive/test/test_write_format_zip_compression_store.c projects/clang500-import/contrib/libarchive/libarchive/test/test_write_format_zip_large.c projects/clang500-import/contrib/libarchive/libarchive/xxhash.c projects/clang500-import/contrib/libarchive/test_utils/test_main.c projects/clang500-import/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c projects/clang500-import/contrib/netbsd-tests/usr.bin/grep/t_grep.sh projects/clang500-import/etc/autofs/special_media projects/clang500-import/etc/rc.d/ipfw projects/clang500-import/etc/rc.d/routing projects/clang500-import/include/stdio.h projects/clang500-import/lib/libarchive/tests/Makefile projects/clang500-import/lib/libbluetooth/bluetooth.h projects/clang500-import/lib/libc/gen/glob.c projects/clang500-import/lib/libc/gen/sem_new.c projects/clang500-import/lib/libc/regex/regcomp.c projects/clang500-import/lib/libc/riscv/SYS.h projects/clang500-import/lib/libc/riscv/sys/vfork.S projects/clang500-import/lib/libc/rpc/svc.c projects/clang500-import/lib/libc/sys/cpuset.2 projects/clang500-import/lib/libc/tests/gen/Makefile projects/clang500-import/lib/libedit/editline.3 projects/clang500-import/lib/libsysdecode/flags.c projects/clang500-import/lib/libsysdecode/mktables projects/clang500-import/libexec/getty/gettytab.5 projects/clang500-import/release/doc/en_US.ISO8859-1/hardware/article.xml projects/clang500-import/rescue/rescue/Makefile projects/clang500-import/sbin/camcontrol/camcontrol.8 projects/clang500-import/sbin/camcontrol/camcontrol.c projects/clang500-import/sbin/camcontrol/fwdownload.c projects/clang500-import/sbin/camcontrol/timestamp.c projects/clang500-import/sbin/geom/class/part/geom_part.c projects/clang500-import/sbin/ifconfig/af_inet6.c projects/clang500-import/sbin/ifconfig/af_nd6.c projects/clang500-import/sbin/ifconfig/ifclone.c projects/clang500-import/sbin/ifconfig/ifconfig.8 projects/clang500-import/sbin/ifconfig/ifconfig.c projects/clang500-import/sbin/ifconfig/iflagg.c projects/clang500-import/sbin/ifconfig/ifmedia.c projects/clang500-import/sbin/ifconfig/ifpfsync.c projects/clang500-import/sbin/ipfw/dummynet.c projects/clang500-import/sbin/ipfw/ipfw.8 projects/clang500-import/sbin/ipfw/ipfw2.c projects/clang500-import/sbin/ipfw/tables.c projects/clang500-import/sbin/kldconfig/kldconfig.8 projects/clang500-import/sbin/kldload/kldload.8 projects/clang500-import/share/man/man4/Makefile projects/clang500-import/share/man/man4/pass.4 projects/clang500-import/share/man/man4/usb.4 projects/clang500-import/share/man/man7/arch.7 projects/clang500-import/share/man/man7/hier.7 projects/clang500-import/share/man/man8/Makefile projects/clang500-import/share/man/man8/rc.8 projects/clang500-import/share/man/man9/Makefile projects/clang500-import/share/man/man9/netisr.9 projects/clang500-import/share/misc/committers-src.dot projects/clang500-import/share/mk/src.opts.mk projects/clang500-import/sys/Makefile projects/clang500-import/sys/amd64/pci/pci_cfgreg.c projects/clang500-import/sys/arm64/arm64/machdep.c projects/clang500-import/sys/boot/efi/loader/main.c projects/clang500-import/sys/boot/i386/zfsboot/zfsboot.c projects/clang500-import/sys/cam/cam_periph.c projects/clang500-import/sys/cam/scsi/scsi_all.c projects/clang500-import/sys/cam/scsi/scsi_all.h projects/clang500-import/sys/cam/scsi/scsi_pass.c projects/clang500-import/sys/cam/scsi/scsi_sa.h projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h projects/clang500-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/clang500-import/sys/cddl/dev/dtrace/dtrace_load.c projects/clang500-import/sys/compat/linux/linux_file.c projects/clang500-import/sys/compat/linux/linux_futex.c projects/clang500-import/sys/compat/linuxkpi/common/src/linux_compat.c projects/clang500-import/sys/compat/linuxkpi/common/src/linux_page.c projects/clang500-import/sys/conf/files projects/clang500-import/sys/conf/files.arm64 projects/clang500-import/sys/dev/acpica/acpi_pcib_acpi.c projects/clang500-import/sys/dev/acpica/acpivar.h projects/clang500-import/sys/dev/bnxt/bnxt.h projects/clang500-import/sys/dev/bnxt/if_bnxt.c projects/clang500-import/sys/dev/cxgbe/adapter.h projects/clang500-import/sys/dev/cxgbe/common/common.h projects/clang500-import/sys/dev/cxgbe/common/t4_hw.c projects/clang500-import/sys/dev/cxgbe/t4_main.c projects/clang500-import/sys/dev/cxgbe/t4_sge.c projects/clang500-import/sys/dev/cxgbe/t4_vf.c projects/clang500-import/sys/dev/drm2/radeon/radeon_drv.c projects/clang500-import/sys/dev/etherswitch/e6000sw/e6000sw.c projects/clang500-import/sys/dev/fdt/fdt_common.c projects/clang500-import/sys/dev/isp/isp.c projects/clang500-import/sys/dev/isp/isp_freebsd.c projects/clang500-import/sys/dev/isp/ispmbox.h projects/clang500-import/sys/dev/isp/ispvar.h projects/clang500-import/sys/dev/mlx4/mlx4_en/en.h projects/clang500-import/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c projects/clang500-import/sys/dev/mlx5/mlx5_en/mlx5_en_main.c projects/clang500-import/sys/dev/nand/nandsim.c projects/clang500-import/sys/dev/pci/pci_pci.c projects/clang500-import/sys/dev/pci/pcib_private.h projects/clang500-import/sys/dev/sdhci/sdhci_fdt.c projects/clang500-import/sys/dev/sound/pcm/feeder_matrix.c projects/clang500-import/sys/dev/uart/uart_dev_lpc.c projects/clang500-import/sys/dev/uart/uart_dev_ns8250.c projects/clang500-import/sys/dev/vt/vt_core.c projects/clang500-import/sys/fs/ext2fs/ext2_alloc.c projects/clang500-import/sys/fs/ext2fs/ext2_extattr.c projects/clang500-import/sys/fs/ext2fs/ext2_extattr.h projects/clang500-import/sys/fs/ext2fs/ext2_extern.h projects/clang500-import/sys/fs/ext2fs/ext2_inode.c projects/clang500-import/sys/fs/ext2fs/ext2_inode_cnv.c projects/clang500-import/sys/fs/ext2fs/ext2_vnops.c projects/clang500-import/sys/fs/nfsclient/nfs_clrpcops.c projects/clang500-import/sys/geom/mirror/g_mirror.c projects/clang500-import/sys/kern/kern_cpuset.c projects/clang500-import/sys/kern/kern_intr.c projects/clang500-import/sys/kern/kern_thread.c projects/clang500-import/sys/kern/subr_gtaskqueue.c projects/clang500-import/sys/kern/vfs_cache.c projects/clang500-import/sys/libkern/crc32.c projects/clang500-import/sys/mips/conf/CARAMBOLA2 projects/clang500-import/sys/mips/conf/std.AR933X projects/clang500-import/sys/mips/conf/std.AR934X projects/clang500-import/sys/modules/cxgbe/if_cxgbe/Makefile projects/clang500-import/sys/modules/vmm/Makefile projects/clang500-import/sys/net/if_bridge.c projects/clang500-import/sys/net/if_lagg.c projects/clang500-import/sys/net/if_lagg.h projects/clang500-import/sys/net/if_vlan.c projects/clang500-import/sys/netgraph/bluetooth/hci/ng_hci_evnt.c projects/clang500-import/sys/netgraph/bluetooth/hci/ng_hci_main.c projects/clang500-import/sys/netgraph/bluetooth/hci/ng_hci_var.h projects/clang500-import/sys/netgraph/bluetooth/include/ng_bluetooth.h projects/clang500-import/sys/netgraph/bluetooth/include/ng_btsocket.h projects/clang500-import/sys/netgraph/bluetooth/include/ng_hci.h projects/clang500-import/sys/netinet/sctp_output.c projects/clang500-import/sys/netinet/sctp_pcb.c projects/clang500-import/sys/netinet/sctp_timer.c projects/clang500-import/sys/netinet/sctp_usrreq.c projects/clang500-import/sys/netinet/sctputil.c projects/clang500-import/sys/netinet/sctputil.h projects/clang500-import/sys/netpfil/pf/pf_ioctl.c projects/clang500-import/sys/sparc64/pci/psycho.c projects/clang500-import/sys/sys/cpuset.h projects/clang500-import/sys/sys/interrupt.h projects/clang500-import/sys/sys/libkern.h projects/clang500-import/sys/vm/vm_meter.c projects/clang500-import/sys/x86/x86/mca.c projects/clang500-import/tests/sys/geom/class/mirror/Makefile projects/clang500-import/tests/sys/kern/Makefile projects/clang500-import/tests/sys/kern/libkern_crc32.c projects/clang500-import/tests/sys/kern/unix_seqpacket_test.c projects/clang500-import/tools/tools/net80211/scripts/setup.wdsmain projects/clang500-import/usr.bin/Makefile projects/clang500-import/usr.bin/csplit/csplit.c projects/clang500-import/usr.bin/grep/Makefile projects/clang500-import/usr.bin/grep/grep.c projects/clang500-import/usr.bin/grep/grep.h projects/clang500-import/usr.bin/grep/nls/C.msg projects/clang500-import/usr.bin/grep/nls/es_ES.ISO8859-1.msg projects/clang500-import/usr.bin/grep/nls/gl_ES.ISO8859-1.msg projects/clang500-import/usr.bin/grep/nls/hu_HU.ISO8859-2.msg projects/clang500-import/usr.bin/grep/nls/ja_JP.SJIS.msg projects/clang500-import/usr.bin/grep/nls/ja_JP.UTF-8.msg projects/clang500-import/usr.bin/grep/nls/ja_JP.eucJP.msg projects/clang500-import/usr.bin/grep/nls/pt_BR.ISO8859-1.msg projects/clang500-import/usr.bin/grep/nls/ru_RU.KOI8-R.msg projects/clang500-import/usr.bin/grep/nls/uk_UA.UTF-8.msg projects/clang500-import/usr.bin/grep/nls/zh_CN.UTF-8.msg projects/clang500-import/usr.bin/grep/queue.c projects/clang500-import/usr.bin/grep/regex/tre-fastmatch.c projects/clang500-import/usr.bin/grep/tests/Makefile projects/clang500-import/usr.bin/grep/util.c projects/clang500-import/usr.bin/printf/printf.c projects/clang500-import/usr.bin/proccontrol/Makefile projects/clang500-import/usr.bin/truss/syscall.h projects/clang500-import/usr.bin/truss/syscalls.c projects/clang500-import/usr.bin/unexpand/unexpand.c projects/clang500-import/usr.sbin/bhyve/bhyve.8 projects/clang500-import/usr.sbin/bhyve/pci_fbuf.c (contents, props changed) projects/clang500-import/usr.sbin/bhyve/pci_xhci.c (contents, props changed) projects/clang500-import/usr.sbin/bhyve/rfb.c (contents, props changed) projects/clang500-import/usr.sbin/bluetooth/hccontrol/node.c projects/clang500-import/usr.sbin/bsdconfig/share/device.subr projects/clang500-import/usr.sbin/bsdinstall/partedit/gpart_ops.c projects/clang500-import/usr.sbin/fdread/fdread.c projects/clang500-import/usr.sbin/makefs/cd9660.c projects/clang500-import/usr.sbin/makefs/ffs.c projects/clang500-import/usr.sbin/makefs/ffs/buf.c projects/clang500-import/usr.sbin/makefs/ffs/buf.h projects/clang500-import/usr.sbin/makefs/ffs/mkfs.c projects/clang500-import/usr.sbin/makefs/makefs.c projects/clang500-import/usr.sbin/mixer/mixer.c projects/clang500-import/usr.sbin/pkg/pkg.c projects/clang500-import/usr.sbin/tcpdrop/tcpdrop.c Directory Properties: projects/clang500-import/ (props changed) projects/clang500-import/contrib/blacklist/ (props changed) projects/clang500-import/contrib/elftoolchain/ (props changed) projects/clang500-import/contrib/libarchive/ (props changed) projects/clang500-import/contrib/netbsd-tests/ (props changed) projects/clang500-import/lib/libedit/ (props changed) projects/clang500-import/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/clang500-import/ObsoleteFiles.inc ============================================================================== --- projects/clang500-import/ObsoleteFiles.inc Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/ObsoleteFiles.inc Thu May 4 21:30:26 2017 (r317808) @@ -150,9 +150,7 @@ OLD_FILES+=usr/lib/clang/4.0.0/lib/freeb OLD_DIRS+=usr/lib/clang/4.0.0/lib/freebsd OLD_DIRS+=usr/lib/clang/4.0.0/lib OLD_DIRS+=usr/lib/clang/4.0.0 -# 20170426: Remove cy(4) -OLD_FILES+=usr/share/man/man4/cy.4.gz -# 20170425: NATM configuration support removed +# 20170427: NATM configuration support removed OLD_FILES+=etc/rc.d/atm1 OLD_FILES+=etc/rc.d/atm2 OLD_FILES+=etc/rc.d/atm3 @@ -190,6 +188,7 @@ OLD_FILES+=usr/share/man/man4/ng_atm.4.g OLD_FILES+=usr/share/man/man4/patm.4.gz OLD_FILES+=usr/share/man/man4/utopia.4.gz OLD_FILES+=usr/share/man/man8/atmconfig.8.gz +OLD_FILES+=usr/share/man/man9/utopia.9.gz OLD_FILES+=usr/share/snmp/defs/atm_freebsd.def OLD_FILES+=usr/share/snmp/defs/atm_tree.def OLD_FILES+=usr/share/snmp/mibs/BEGEMOT-ATM-FREEBSD-MIB.txt Modified: projects/clang500-import/bin/sh/expand.c ============================================================================== --- projects/clang500-import/bin/sh/expand.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/bin/sh/expand.c Thu May 4 21:30:26 2017 (r317808) @@ -462,6 +462,7 @@ expbackq(union node *cmd, int quoted, in int quotes = flag & (EXP_GLOB | EXP_CASE); size_t nnl; const char *ifs; + int startloc; INTOFF; p = grabstackstr(dest); @@ -469,6 +470,7 @@ expbackq(union node *cmd, int quoted, in ungrabstackstr(p, dest); p = in.buf; + startloc = dest - stackblock(); nnl = 0; if (!quoted && flag & EXP_SPLIT) ifs = ifsset() ? ifsval() : " \t\n"; @@ -490,31 +492,24 @@ expbackq(union node *cmd, int quoted, in lastc = *p++; if (lastc == '\0') continue; - if (lastc == '\n') { - nnl++; - } else { - if (nnl > 0) { - if (strchr(ifs, '\n') != NULL) { - NEXTWORD('\n', flag, dest, dst); - nnl = 0; - } else { - CHECKSTRSPACE(nnl + 2, dest); - while (nnl > 0) { - nnl--; - USTPUTC('\n', dest); - } - } - } - if (strchr(ifs, lastc) != NULL) + if (nnl > 0 && lastc != '\n') { + NEXTWORD('\n', flag, dest, dst); + nnl = 0; + } + if (strchr(ifs, lastc) != NULL) { + if (lastc == '\n') + nnl++; + else NEXTWORD(lastc, flag, dest, dst); - else { - CHECKSTRSPACE(2, dest); - if (quotes && syntax[(int)lastc] == CCTL) - USTPUTC(CTLESC, dest); - USTPUTC(lastc, dest); - } + } else { + CHECKSTRSPACE(2, dest); + if (quotes && syntax[(int)lastc] == CCTL) + USTPUTC(CTLESC, dest); + USTPUTC(lastc, dest); } } + while (dest > stackblock() + startloc && STTOPC(dest) == '\n') + STUNPUTC(dest); if (in.fd >= 0) close(in.fd); Modified: projects/clang500-import/bin/sh/tests/expansion/Makefile ============================================================================== --- projects/clang500-import/bin/sh/tests/expansion/Makefile Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/bin/sh/tests/expansion/Makefile Thu May 4 21:30:26 2017 (r317808) @@ -46,6 +46,8 @@ ${PACKAGE}FILES+= cmdsubst21.0 ${PACKAGE}FILES+= cmdsubst22.0 ${PACKAGE}FILES+= cmdsubst23.0 ${PACKAGE}FILES+= cmdsubst24.0 +${PACKAGE}FILES+= cmdsubst25.0 +${PACKAGE}FILES+= cmdsubst26.0 ${PACKAGE}FILES+= export1.0 ${PACKAGE}FILES+= export2.0 ${PACKAGE}FILES+= export3.0 Copied: projects/clang500-import/bin/sh/tests/expansion/cmdsubst25.0 (from r317807, head/bin/sh/tests/expansion/cmdsubst25.0) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/bin/sh/tests/expansion/cmdsubst25.0 Thu May 4 21:30:26 2017 (r317808, copy of r317807, head/bin/sh/tests/expansion/cmdsubst25.0) @@ -0,0 +1,7 @@ +# $FreeBSD$ + +IFS=' ' +set -- `printf '\n '` +IFS=: +[ "$*" = ' +' ] Copied: projects/clang500-import/bin/sh/tests/expansion/cmdsubst26.0 (from r317807, head/bin/sh/tests/expansion/cmdsubst26.0) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/bin/sh/tests/expansion/cmdsubst26.0 Thu May 4 21:30:26 2017 (r317808, copy of r317807, head/bin/sh/tests/expansion/cmdsubst26.0) @@ -0,0 +1,6 @@ +# $FreeBSD$ + +nl=' +' +v=$nl`printf '\n'` +[ "$v" = "$nl" ] Modified: projects/clang500-import/contrib/blacklist/README ============================================================================== --- projects/clang500-import/contrib/blacklist/README Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/README Thu May 4 21:30:26 2017 (r317808) @@ -1,4 +1,4 @@ -# $NetBSD: README,v 1.7 2015/01/26 00:34:50 christos Exp $ +# $NetBSD: README,v 1.8 2017/04/13 17:59:34 christos Exp $ This package contains library that can be used by network daemons to communicate with a packet filter via a daemon to enforce opening and @@ -98,6 +98,16 @@ group "internal" on $int_if { ... } +You can use 'blacklistctl dump -a' to list all the current entries +in the database; the ones that have nfail / where urrent +>= otal, should have an id assosiated with them; this means that +there is a packet filter rule added for that entry. For npf, you +can examine the packet filter dynamic rule entries using 'npfctl +rule list'. The number of current entries can exceed +the total. This happens because entering packet filter rules is +asynchronous; there could be other connection before the rule +becomes activated. + Enjoy, christos Modified: projects/clang500-import/contrib/blacklist/bin/blacklistctl.8 ============================================================================== --- projects/clang500-import/contrib/blacklist/bin/blacklistctl.8 Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/bin/blacklistctl.8 Thu May 4 21:30:26 2017 (r317808) @@ -1,4 +1,4 @@ -.\" $NetBSD: blacklistctl.8,v 1.7 2015/04/30 06:20:43 riz Exp $ +.\" $NetBSD: blacklistctl.8,v 1.9 2016/06/08 12:48:37 wiz Exp $ .\" .\" Copyright (c) 2015 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -77,7 +77,8 @@ it to make sure that there is only one r .Nm first appeared in .Nx 7 . -.Fx support for +.Fx +support for .Nm was implemented in .Fx 11 . Modified: projects/clang500-import/contrib/blacklist/bin/blacklistctl.c ============================================================================== --- projects/clang500-import/contrib/blacklist/bin/blacklistctl.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/bin/blacklistctl.c Thu May 4 21:30:26 2017 (r317808) @@ -1,4 +1,4 @@ -/* $NetBSD: blacklistctl.c,v 1.20 2016/04/04 15:52:56 christos Exp $ */ +/* $NetBSD: blacklistctl.c,v 1.21 2016/11/02 03:15:07 jnemeth Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #endif #include -__RCSID("$NetBSD: blacklistctl.c,v 1.20 2016/04/04 15:52:56 christos Exp $"); +__RCSID("$NetBSD: blacklistctl.c,v 1.21 2016/11/02 03:15:07 jnemeth Exp $"); #include #include Modified: projects/clang500-import/contrib/blacklist/bin/blacklistd.c ============================================================================== --- projects/clang500-import/contrib/blacklist/bin/blacklistd.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/bin/blacklistd.c Thu May 4 21:30:26 2017 (r317808) @@ -1,4 +1,4 @@ -/* $NetBSD: blacklistd.c,v 1.35 2016/09/26 19:43:43 christos Exp $ */ +/* $NetBSD: blacklistd.c,v 1.37 2017/02/18 00:26:16 christos Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #include "config.h" #endif #include -__RCSID("$NetBSD: blacklistd.c,v 1.35 2016/09/26 19:43:43 christos Exp $"); +__RCSID("$NetBSD: blacklistd.c,v 1.37 2017/02/18 00:26:16 christos Exp $"); #include #include @@ -403,12 +403,14 @@ int main(int argc, char *argv[]) { int c, tout, flags, flush, restore, ret; - const char *spath, *blsock; + const char *spath, **blsock; + size_t nblsock, maxblsock; setprogname(argv[0]); spath = NULL; - blsock = _PATH_BLSOCK; + blsock = NULL; + maxblsock = nblsock = 0; flush = 0; restore = 0; tout = 0; @@ -440,7 +442,17 @@ main(int argc, char *argv[]) restore++; break; case 's': - blsock = optarg; + if (nblsock >= maxblsock) { + maxblsock += 10; + void *p = realloc(blsock, + sizeof(*blsock) * maxblsock); + if (p == NULL) + err(EXIT_FAILURE, + "Can't allocate memory for %zu sockets", + maxblsock); + blsock = p; + } + blsock[nblsock++] = optarg; break; case 't': tout = atoi(optarg) * 1000; @@ -487,9 +499,11 @@ main(int argc, char *argv[]) size_t nfd = 0; size_t maxfd = 0; - if (spath == NULL) - addfd(&pfd, &bl, &nfd, &maxfd, blsock); - else { + for (size_t i = 0; i < nblsock; i++) + addfd(&pfd, &bl, &nfd, &maxfd, blsock[i]); + free(blsock); + + if (spath) { FILE *fp = fopen(spath, "r"); char *line; if (fp == NULL) @@ -499,6 +513,8 @@ main(int argc, char *argv[]) addfd(&pfd, &bl, &nfd, &maxfd, line); fclose(fp); } + if (nfd == 0) + addfd(&pfd, &bl, &nfd, &maxfd, _PATH_BLSOCK); state = state_open(dbfile, flags, 0600); if (state == NULL) Modified: projects/clang500-import/contrib/blacklist/bin/blacklistd.conf.5 ============================================================================== --- projects/clang500-import/contrib/blacklist/bin/blacklistd.conf.5 Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/bin/blacklistd.conf.5 Thu May 4 21:30:26 2017 (r317808) @@ -1,4 +1,4 @@ -.\" $NetBSD: blacklistd.conf.5,v 1.3 2015/04/30 06:20:43 riz Exp $ +.\" $NetBSD: blacklistd.conf.5,v 1.5 2016/06/08 12:48:37 wiz Exp $ .\" .\" Copyright (c) 2015 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -218,7 +218,8 @@ bnx0:ssh * * * * 3 6h .Nm first appeared in .Nx 7 . -.Fx support for +.Fx +support for .Nm was implemented in .Fx 11 . Modified: projects/clang500-import/contrib/blacklist/etc/rc.d/blacklistd ============================================================================== --- projects/clang500-import/contrib/blacklist/etc/rc.d/blacklistd Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/etc/rc.d/blacklistd Thu May 4 21:30:26 2017 (r317808) @@ -1,6 +1,6 @@ #!/bin/sh # -# $NetBSD: blacklistd,v 1.1 2015/01/22 17:49:41 christos Exp $ +# $NetBSD: blacklistd,v 1.2 2016/10/17 22:47:16 christos Exp $ # # PROVIDE: blacklistd @@ -18,7 +18,7 @@ start_precmd="${name}_precmd" extra_commands="reload" _sockfile="/var/run/${name}.sockets" -_sockname="blsock" +_sockname="blacklistd.sock" blacklistd_precmd() { Modified: projects/clang500-import/contrib/blacklist/lib/bl.c ============================================================================== --- projects/clang500-import/contrib/blacklist/lib/bl.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/lib/bl.c Thu May 4 21:30:26 2017 (r317808) @@ -1,4 +1,4 @@ -/* $NetBSD: bl.c,v 1.27 2015/12/30 16:42:48 christos Exp $ */ +/* $NetBSD: bl.c,v 1.28 2016/07/29 17:13:09 christos Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #endif #include -__RCSID("$NetBSD: bl.c,v 1.27 2015/12/30 16:42:48 christos Exp $"); +__RCSID("$NetBSD: bl.c,v 1.28 2016/07/29 17:13:09 christos Exp $"); #include #include Modified: projects/clang500-import/contrib/blacklist/lib/libblacklist.3 ============================================================================== --- projects/clang500-import/contrib/blacklist/lib/libblacklist.3 Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/lib/libblacklist.3 Thu May 4 21:30:26 2017 (r317808) @@ -1,4 +1,4 @@ -.\" $NetBSD: libblacklist.3,v 1.3 2015/01/25 23:09:28 wiz Exp $ +.\" $NetBSD: libblacklist.3,v 1.7 2017/02/04 23:33:56 wiz Exp $ .\" .\" Copyright (c) 2015 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -36,7 +36,7 @@ .Nm blacklist_r , .Nm blacklist , .Nm blacklist_sa -.Nm blacklist_sa_r , +.Nm blacklist_sa_r .Nd Blacklistd notification library .Sh LIBRARY .Lb libblacklist @@ -62,7 +62,7 @@ block or release port access to prevent .Pp The function .Fn blacklist_open -creates a the necessary state to communicate with +creates the necessary state to communicate with .Xr blacklistd 8 and returns a pointer to it, or .Dv NULL @@ -106,18 +106,25 @@ All functions log errors to .Xr syslogd 8 . .Sh RETURN VALUES The function -.Fn bl_open +.Fn blacklist_open returns a cookie on success and .Dv NULL -on failure setting errno to an appropriate value. -.Pp -The -.Fn bl_send -function returns +on failure setting +.Dv errno +to an appropriate value. +.Pp +The functions +.Fn blacklist , +.Fn blacklist_sa , +and +.Fn blacklist_sa_r +return .Dv 0 on success and -.Dv -1 -on failure setting errno to an appropriate value. +.Dv \-1 +on failure setting +.Dv errno +to an appropriate value. .Sh SEE ALSO .Xr blacklistd.conf 5 , .Xr blacklistd 8 Modified: projects/clang500-import/contrib/blacklist/libexec/blacklistd-helper ============================================================================== --- projects/clang500-import/contrib/blacklist/libexec/blacklistd-helper Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/libexec/blacklistd-helper Thu May 4 21:30:26 2017 (r317808) @@ -19,8 +19,8 @@ fi if [ -z "$pf" ]; then for f in npf pf ipf; do if [ -f "/etc/$f.conf" ]; then - pf="$f" - break + pf="$f" + break fi done fi Modified: projects/clang500-import/contrib/blacklist/port/Makefile.am ============================================================================== --- projects/clang500-import/contrib/blacklist/port/Makefile.am Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/port/Makefile.am Thu May 4 21:30:26 2017 (r317808) @@ -1,11 +1,11 @@ # ACLOCAL_AMFLAGS = -I m4 lib_LTLIBRARIES = libblacklist.la -include_HEADERS = blacklist.h +include_HEADERS = ../include/blacklist.h bin_PROGRAMS = blacklistd blacklistctl srvtest cltest -VPATH = ../bin:../lib:../test +VPATH = ../bin:../lib:../test:../include AM_CPPFLAGS = -I../include -DDOT="." AM_CFLAGS = @WARNINGS@ Copied: projects/clang500-import/contrib/blacklist/port/config.h (from r317807, head/contrib/blacklist/port/config.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/contrib/blacklist/port/config.h Thu May 4 21:30:26 2017 (r317808, copy of r317807, head/contrib/blacklist/port/config.h) @@ -0,0 +1,3 @@ +#if defined(__FreeBSD__) +#include "port.h" +#endif Modified: projects/clang500-import/contrib/blacklist/port/sockaddr_snprintf.c ============================================================================== --- projects/clang500-import/contrib/blacklist/port/sockaddr_snprintf.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/blacklist/port/sockaddr_snprintf.c Thu May 4 21:30:26 2017 (r317808) @@ -1,4 +1,4 @@ -/* $NetBSD: sockaddr_snprintf.c,v 1.10 2016/04/05 12:28:57 christos Exp $ */ +/* $NetBSD: sockaddr_snprintf.c,v 1.11 2016/06/01 22:57:51 christos Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: sockaddr_snprintf.c,v 1.10 2016/04/05 12:28:57 christos Exp $"); +__RCSID("$NetBSD: sockaddr_snprintf.c,v 1.11 2016/06/01 22:57:51 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include @@ -219,7 +219,7 @@ sockaddr_snprintf(char * const sbuf, con case AF_LINK: sdl = ((const struct sockaddr_dl *)(const void *)sa); (void)strlcpy(addr = abuf, link_ntoa(sdl), sizeof(abuf)); - if ((w = strchr(addr, ':')) != 0) { + if ((w = strchr(addr, ':')) != NULL) { *w++ = '\0'; addr = w; } Modified: projects/clang500-import/contrib/elftoolchain/cxxfilt/cxxfilt.c ============================================================================== --- projects/clang500-import/contrib/elftoolchain/cxxfilt/cxxfilt.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/elftoolchain/cxxfilt/cxxfilt.c Thu May 4 21:30:26 2017 (r317808) @@ -189,8 +189,6 @@ main(int argc, char **argv) if (c == EOF) break; putchar(c); - if (c == '\n') - fflush(stdout); } else { if ((size_t) p >= sizeof(buf) - 1) warnx("buffer overflowed"); Modified: projects/clang500-import/contrib/hyperv/tools/hv_kvp_daemon.c ============================================================================== --- projects/clang500-import/contrib/hyperv/tools/hv_kvp_daemon.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/hyperv/tools/hv_kvp_daemon.c Thu May 4 21:30:26 2017 (r317808) @@ -61,6 +61,10 @@ typedef uint16_t __u16; typedef uint32_t __u32; typedef uint64_t __u64; +#define POOL_FILE_MODE (S_IRUSR | S_IWUSR) +#define POOL_DIR_MODE (POOL_FILE_MODE | S_IXUSR) +#define POOL_DIR "/var/db/hyperv/pool" + /* * ENUM Data */ @@ -285,11 +289,12 @@ kvp_file_init(void) int i; int alloc_unit = sizeof(struct kvp_record) * ENTRIES_PER_BLOCK; - if (mkdir("/var/db/hyperv/pool", S_IRUSR | S_IWUSR | S_IROTH) < 0 && + if (mkdir(POOL_DIR, POOL_DIR_MODE) < 0 && (errno != EEXIST && errno != EISDIR)) { KVP_LOG(LOG_ERR, " Failed to create /var/db/hyperv/pool\n"); exit(EXIT_FAILURE); } + chmod(POOL_DIR, POOL_DIR_MODE); /* fix old mistake */ for (i = 0; i < HV_KVP_POOL_COUNT; i++) { @@ -297,11 +302,12 @@ kvp_file_init(void) records_read = 0; num_blocks = 1; snprintf(fname, MAX_FILE_NAME, "/var/db/hyperv/pool/.kvp_pool_%d", i); - fd = open(fname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IROTH); + fd = open(fname, O_RDWR | O_CREAT, POOL_FILE_MODE); if (fd == -1) { return (1); } + fchmod(fd, POOL_FILE_MODE); /* fix old mistake */ filep = fopen(fname, "r"); Modified: projects/clang500-import/contrib/libarchive/cpio/cpio.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/cpio.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/cpio.c Thu May 4 21:30:26 2017 (r317808) @@ -628,6 +628,7 @@ mode_out(struct cpio *cpio) blocks == 1 ? "block" : "blocks"); } archive_write_free(cpio->archive); + archive_entry_linkresolver_free(cpio->linkresolver); } static const char * @@ -1194,12 +1195,15 @@ mode_pass(struct cpio *cpio, const char struct lafe_line_reader *lr; const char *p; int r; + size_t destdir_len; /* Ensure target dir has a trailing '/' to simplify path surgery. */ - cpio->destdir = malloc(strlen(destdir) + 8); - strcpy(cpio->destdir, destdir); - if (destdir[strlen(destdir) - 1] != '/') - strcat(cpio->destdir, "/"); + destdir_len = strlen(destdir); + cpio->destdir = malloc(destdir_len + 8); + memcpy(cpio->destdir, destdir, destdir_len); + if (destdir_len == 0 || destdir[destdir_len - 1] != '/') + cpio->destdir[destdir_len++] = '/'; + cpio->destdir[destdir_len++] = '\0'; cpio->archive = archive_write_disk_new(); if (cpio->archive == NULL) @@ -1240,6 +1244,7 @@ mode_pass(struct cpio *cpio, const char } archive_write_free(cpio->archive); + free(cpio->pass_destpath); } /* Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_Z_upper.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_Z_upper.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_Z_upper.c Thu May 4 21:30:26 2017 (r317808) @@ -43,17 +43,18 @@ DEFINE_TEST(test_option_Z_upper) if (strstr(p, "compression not available") != NULL) { skipping("This version of bsdcpio was compiled " "without compress support"); + free(p); return; } failure("-Z option is broken"); assertEqualInt(r, 0); - goto done; + free(p); + return; } free(p); /* Check that the archive file has a compress signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\x1f\x9d", 2); -done: free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_a.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_a.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_a.c Thu May 4 21:30:26 2017 (r317808) @@ -96,7 +96,8 @@ DEFINE_TEST(test_option_a) test_create(); /* Sanity check; verify that atimes really do get modified. */ - assert((p = slurpfile(NULL, "f0")) != NULL); + p = slurpfile(NULL, "f0"); + assert(p != NULL); free(p); assertEqualInt(0, stat("f0", &st)); if (st.st_atime == files[0].atime_sec) { Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_b64encode.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_b64encode.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_b64encode.c Thu May 4 21:30:26 2017 (r317808) @@ -42,6 +42,7 @@ DEFINE_TEST(test_option_b64encode) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "begin-base64 644", 16); + free(p); /* Archive it with uuencode only. */ assertEqualInt(0, @@ -51,4 +52,5 @@ DEFINE_TEST(test_option_b64encode) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "begin-base64 644", 16); + free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_grzip.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_grzip.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_grzip.c Thu May 4 21:30:26 2017 (r317808) @@ -44,9 +44,10 @@ DEFINE_TEST(test_option_grzip) systemf("echo f | %s -o --grzip >archive.out 2>archive.err", testprog)); p = slurpfile(&s, "archive.err"); - p[s] = '\0'; + free(p); /* Check that the archive file has an grzip signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "GRZipII\x00\x02\x04:)", 12); + free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_lrzip.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_lrzip.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_lrzip.c Thu May 4 21:30:26 2017 (r317808) @@ -44,9 +44,10 @@ DEFINE_TEST(test_option_lrzip) systemf("echo f | %s -o --lrzip >archive.out 2>archive.err", testprog)); p = slurpfile(&s, "archive.err"); - p[s] = '\0'; + free(p); /* Check that the archive file has an lzma signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "LRZI\x00", 5); + free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_lz4.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_lz4.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_lz4.c Thu May 4 21:30:26 2017 (r317808) @@ -43,6 +43,7 @@ DEFINE_TEST(test_option_lz4) if (strstr(p, "compression not available") != NULL) { skipping("This version of bsdcpio was compiled " "without lz4 support"); + free(p); return; } /* POSIX permits different handling of the spawnp @@ -52,6 +53,7 @@ DEFINE_TEST(test_option_lz4) if (strstr(p, "Can't launch") != NULL && !canLz4()) { skipping("This version of bsdcpio uses an external lz4 program " "but no such program is available on this system."); + free(p); return; } /* Some systems successfully spawn the new process, @@ -61,6 +63,7 @@ DEFINE_TEST(test_option_lz4) if (strstr(p, "Can't write") != NULL && !canLz4()) { skipping("This version of bsdcpio uses an external lz4 program " "but no such program is available on this system."); + free(p); return; } /* On some systems the error won't be detected until closing @@ -68,14 +71,18 @@ DEFINE_TEST(test_option_lz4) if (strstr(p, "Error closing") != NULL && !canLz4()) { skipping("This version of bsdcpio uses an external lz4 program " "but no such program is available on this system."); + free(p); return; } + free(p); failure("--lz4 option is broken: %s", p); assertEqualInt(r, 0); return; } + free(p); /* Check that the archive file has an lz4 signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\x04\x22\x4d\x18", 4); + free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_lzma.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_lzma.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_lzma.c Thu May 4 21:30:26 2017 (r317808) @@ -43,14 +43,18 @@ DEFINE_TEST(test_option_lzma) if (strstr(p, "compression not available") != NULL) { skipping("This version of bsdcpio was compiled " "without lzma support"); + free(p); return; } failure("--lzma option is broken"); assertEqualInt(r, 0); + free(p); return; } + free(p); /* Check that the archive file has an lzma signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\x5d\00\00", 3); + free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_lzop.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_lzop.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_lzop.c Thu May 4 21:30:26 2017 (r317808) @@ -39,7 +39,7 @@ DEFINE_TEST(test_option_lzop) r = systemf("echo f | %s -o --lzop >archive.out 2>archive.err", testprog); p = slurpfile(&s, "archive.err"); - p[s] = '\0'; + free(p); if (r != 0) { if (!canLzop()) { skipping("lzop is not supported on this platform"); @@ -53,4 +53,5 @@ DEFINE_TEST(test_option_lzop) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a", 9); + free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_uuencode.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_uuencode.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_uuencode.c Thu May 4 21:30:26 2017 (r317808) @@ -42,6 +42,7 @@ DEFINE_TEST(test_option_uuencode) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "begin 644", 9); + free(p); /* Archive it with uuencode only. */ assertEqualInt(0, @@ -51,4 +52,5 @@ DEFINE_TEST(test_option_uuencode) p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "begin 644", 9); + free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_xz.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_xz.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_xz.c Thu May 4 21:30:26 2017 (r317808) @@ -44,14 +44,18 @@ DEFINE_TEST(test_option_xz) if (strstr(p, "compression not available") != NULL) { skipping("This version of bsdcpio was compiled " "without xz support"); + free(p); return; } + free(p); failure("--xz option is broken"); assertEqualInt(r, 0); return; } + free(p); /* Check that the archive file has an xz signature. */ p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "\xFD\x37\x7A\x58\x5A\x00", 6); + free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_y.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_y.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_y.c Thu May 4 21:30:26 2017 (r317808) @@ -38,7 +38,7 @@ DEFINE_TEST(test_option_y) r = systemf("echo f | %s -oy >archive.out 2>archive.err", testprog); p = slurpfile(&s, "archive.err"); - p[s] = '\0'; + free(p); if (r != 0) { if (!canBzip2()) { skipping("bzip2 is not supported on this platform"); @@ -46,14 +46,12 @@ DEFINE_TEST(test_option_y) } failure("-y option is broken"); assertEqualInt(r, 0); - goto done; + return; } assertTextFileContents("1 block\n", "archive.err"); /* Check that the archive file has a bzip2 signature. */ - free(p); p = slurpfile(&s, "archive.out"); assert(s > 2); assertEqualMem(p, "BZh9", 4); -done: free(p); } Modified: projects/clang500-import/contrib/libarchive/cpio/test/test_option_z.c ============================================================================== --- projects/clang500-import/contrib/libarchive/cpio/test/test_option_z.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/cpio/test/test_option_z.c Thu May 4 21:30:26 2017 (r317808) @@ -38,7 +38,7 @@ DEFINE_TEST(test_option_z) r = systemf("echo f | %s -oz >archive.out 2>archive.err", testprog); p = slurpfile(&s, "archive.err"); - p[s] = '\0'; + free(p); if (r != 0) { if (!canGzip()) { skipping("gzip is not supported on this platform"); @@ -52,4 +52,5 @@ DEFINE_TEST(test_option_z) p = slurpfile(&s, "archive.out"); assert(s > 4); assertEqualMem(p, "\x1f\x8b\x08\x00", 4); + free(p); } Modified: projects/clang500-import/contrib/libarchive/libarchive/archive_entry_sparse.c ============================================================================== --- projects/clang500-import/contrib/libarchive/libarchive/archive_entry_sparse.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/libarchive/archive_entry_sparse.c Thu May 4 21:30:26 2017 (r317808) @@ -51,7 +51,7 @@ archive_entry_sparse_clear(struct archiv void archive_entry_sparse_add_entry(struct archive_entry *entry, - int64_t offset, int64_t length) + la_int64_t offset, la_int64_t length) { struct ae_sparse *sp; @@ -135,7 +135,7 @@ archive_entry_sparse_reset(struct archiv int archive_entry_sparse_next(struct archive_entry * entry, - int64_t *offset, int64_t *length) + la_int64_t *offset, la_int64_t *length) { if (entry->sparse_p) { *offset = entry->sparse_p->offset; Modified: projects/clang500-import/contrib/libarchive/libarchive/archive_getdate.c ============================================================================== --- projects/clang500-import/contrib/libarchive/libarchive/archive_getdate.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/libarchive/archive_getdate.c Thu May 4 21:30:26 2017 (r317808) @@ -691,7 +691,7 @@ Convert(time_t Month, time_t Day, time_t time_t Hours, time_t Minutes, time_t Seconds, time_t Timezone, enum DSTMODE DSTmode) { - int DaysInMonth[12] = { + signed char DaysInMonth[12] = { 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; time_t Julian; Modified: projects/clang500-import/contrib/libarchive/libarchive/archive_openssl_hmac_private.h ============================================================================== --- projects/clang500-import/contrib/libarchive/libarchive/archive_openssl_hmac_private.h Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/libarchive/archive_openssl_hmac_private.h Thu May 4 21:30:26 2017 (r317808) @@ -28,7 +28,7 @@ #include #include -#if OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) #include /* malloc, free */ #include /* memset */ static inline HMAC_CTX *HMAC_CTX_new(void) Modified: projects/clang500-import/contrib/libarchive/libarchive/archive_read.c ============================================================================== --- projects/clang500-import/contrib/libarchive/libarchive/archive_read.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/libarchive/archive_read.c Thu May 4 21:30:26 2017 (r317808) @@ -881,7 +881,8 @@ archive_read_data(struct archive *_a, vo len = a->read_data_remaining; if (len > s) len = s; - memcpy(dest, a->read_data_block, len); + if (len) + memcpy(dest, a->read_data_block, len); s -= len; a->read_data_block += len; a->read_data_remaining -= len; Modified: projects/clang500-import/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c ============================================================================== --- projects/clang500-import/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c Thu May 4 21:30:26 2017 (r317808) @@ -928,11 +928,10 @@ setup_sparse(struct archive_read_disk *a return (ARCHIVE_OK); /* Does filesystem support the reporting of hole ? */ - if (*fd < 0) { + if (*fd < 0) path = archive_read_disk_entry_setup_path(a, entry, fd); - if (path == NULL) - return (ARCHIVE_FAILED); - } + else + path = NULL; if (*fd >= 0) { #ifdef _PC_MIN_HOLE_SIZE @@ -943,6 +942,8 @@ setup_sparse(struct archive_read_disk *a if (initial_off != 0) lseek(*fd, 0, SEEK_SET); } else { + if (path == NULL) + return (ARCHIVE_FAILED); #ifdef _PC_MIN_HOLE_SIZE if (pathconf(path, _PC_MIN_HOLE_SIZE) <= 0) return (ARCHIVE_OK); Modified: projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c ============================================================================== --- projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c Thu May 4 21:30:26 2017 (r317808) @@ -494,7 +494,7 @@ lz4_filter_read_data_block(struct archiv if (read_buf == NULL) goto truncated_error; compressed_size = archive_le32dec(read_buf); - if ((compressed_size & ~(1 << 31)) > state->flags.block_maximum_size) + if ((compressed_size & 0x7fffffff) > state->flags.block_maximum_size) goto malformed_error; /* A compressed size == 0 means the end of stream blocks. */ if (compressed_size == 0) { @@ -504,8 +504,8 @@ lz4_filter_read_data_block(struct archiv checksum_size = state->flags.block_checksum; /* Check if the block is uncompressed. */ - if (compressed_size & (1 << 31)) { - compressed_size &= ~(1 << 31); + if (compressed_size & 0x80000000U) { + compressed_size &= 0x7fffffff; uncompressed_size = compressed_size; } else uncompressed_size = 0;/* Unknown yet. */ Modified: projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_format_cab.c ============================================================================== --- projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_format_cab.c Thu May 4 21:04:38 2017 (r317807) +++ projects/clang500-import/contrib/libarchive/libarchive/archive_read_support_format_cab.c Thu May 4 21:30:26 2017 (r317808) @@ -116,19 +116,11 @@ struct lzx_dec { * coding tree, which is a binary tree. But a use of a large * index table causes L1 cache read miss many times. */ -#define HTBL_BITS 10 int max_bits; - int shift_bits; int tbl_bits; int tree_used; - int tree_avail; /* Direct access table. */ uint16_t *tbl; - /* Binary tree table for extra bits over the direct access. */ - struct htree_t { - uint16_t left; - uint16_t right; - } *tree; } at, lt, mt, pt; int loop; @@ -352,7 +344,6 @@ static int lzx_huffman_init(struct huffm static void lzx_huffman_free(struct huffman *); static int lzx_make_huffman_table(struct huffman *); static inline int lzx_decode_huffman(struct huffman *, unsigned); -static int lzx_decode_huffman_tree(struct huffman *, unsigned, int); int @@ -3127,7 +3118,6 @@ getdata: static int lzx_huffman_init(struct huffman *hf, size_t len_size, int tbl_bits) { - int bits; if (hf->bitlen == NULL || hf->len_size != (int)len_size) { free(hf->bitlen); @@ -3138,21 +3128,11 @@ lzx_huffman_init(struct huffman *hf, siz } else memset(hf->bitlen, 0, len_size * sizeof(hf->bitlen[0])); if (hf->tbl == NULL) { - if (tbl_bits < HTBL_BITS) - bits = tbl_bits; - else - bits = HTBL_BITS; - hf->tbl = malloc(((size_t)1 << bits) * sizeof(hf->tbl[0])); + hf->tbl = malloc(((size_t)1 << tbl_bits) * sizeof(hf->tbl[0])); if (hf->tbl == NULL) return (ARCHIVE_FATAL); hf->tbl_bits = tbl_bits; } - if (hf->tree == NULL && tbl_bits > HTBL_BITS) { - hf->tree_avail = 1 << (tbl_bits - HTBL_BITS + 4); - hf->tree = malloc(hf->tree_avail * sizeof(hf->tree[0])); - if (hf->tree == NULL) - return (ARCHIVE_FATAL); - } return (ARCHIVE_OK); } @@ -3161,7 +3141,6 @@ lzx_huffman_free(struct huffman *hf) { free(hf->bitlen); free(hf->tbl); - free(hf->tree); } /* @@ -3174,7 +3153,7 @@ lzx_make_huffman_table(struct huffman *h const unsigned char *bitlen; int bitptn[17], weight[17]; int i, maxbits = 0, ptn, tbl_size, w; - int diffbits, len_avail; + int len_avail; /* * Initialize bit patterns. @@ -3205,28 +3184,11 @@ lzx_make_huffman_table(struct huffman *h weight[i] >>= ebits; } } - if (maxbits > HTBL_BITS) { - int htbl_max; - uint16_t *p; - - diffbits = maxbits - HTBL_BITS; - for (i = 1; i <= HTBL_BITS; i++) { - bitptn[i] >>= diffbits; - weight[i] >>= diffbits; - } - htbl_max = bitptn[HTBL_BITS] + - weight[HTBL_BITS] * hf->freq[HTBL_BITS]; - p = &(hf->tbl[htbl_max]); - while (p < &hf->tbl[1U<shift_bits = diffbits; /* * Make the table. */ - tbl_size = 1 << HTBL_BITS; + tbl_size = 1 << hf->tbl_bits; tbl = hf->tbl; bitlen = hf->bitlen; len_avail = hf->len_size; @@ -3234,120 +3196,32 @@ lzx_make_huffman_table(struct huffman *h for (i = 0; i < len_avail; i++) { uint16_t *p; int len, cnt; - uint16_t bit; - int extlen; - struct htree_t *ht; if (bitlen[i] == 0) continue; /* Get a bit pattern */ len = bitlen[i]; + if (len > tbl_size) + return (0); ptn = bitptn[len]; cnt = weight[len]; - if (len <= HTBL_BITS) { - /* Calculate next bit pattern */ - if ((bitptn[len] = ptn + cnt) > tbl_size) - return (0);/* Invalid */ - /* Update the table */ - p = &(tbl[ptn]); - while (--cnt >= 0) - p[cnt] = (uint16_t)i; - continue; - } - - /* - * A bit length is too big to be housed to a direct table, *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Fri May 5 20:45:57 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1C66BD5FB9D for ; Fri, 5 May 2017 20:45:57 +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 mx1.freebsd.org (Postfix) with ESMTPS id E0F7BAB9; Fri, 5 May 2017 20:45:56 +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 v45Kjtft051768; Fri, 5 May 2017 20:45:55 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v45Kjttf051767; Fri, 5 May 2017 20:45:55 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201705052045.v45Kjttf051767@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Fri, 5 May 2017 20:45:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317853 - projects/clang500-import/lib/clang/include/llvm/Config X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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: Fri, 05 May 2017 20:45:57 -0000 Author: dim Date: Fri May 5 20:45:55 2017 New Revision: 317853 URL: https://svnweb.freebsd.org/changeset/base/317853 Log: Regenerate llvm's config.h file. Modified: projects/clang500-import/lib/clang/include/llvm/Config/config.h Modified: projects/clang500-import/lib/clang/include/llvm/Config/config.h ============================================================================== --- projects/clang500-import/lib/clang/include/llvm/Config/config.h Fri May 5 20:41:29 2017 (r317852) +++ projects/clang500-import/lib/clang/include/llvm/Config/config.h Fri May 5 20:45:55 2017 (r317853) @@ -65,9 +65,6 @@ /* Define to 1 if you have the header file. */ #define HAVE_ERRNO_H 1 -/* Define to 1 if you have the header file. */ -/* #undef HAVE_EXECINFO_H */ - /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 @@ -397,6 +394,9 @@ /* LLVM version information */ /* #undef LLVM_VERSION_INFO */ +/* Whether tools show host and target info when invoked with --version */ +#define LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO 1 + /* Major version of the LLVM API */ #define LLVM_VERSION_MAJOR 5 From owner-svn-src-projects@freebsd.org Sat May 6 22:47:06 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 66725D61876 for ; Sat, 6 May 2017 22:47:06 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id EF6819F8; Sat, 6 May 2017 22:47:05 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v46Ml4Cq093013; Sat, 6 May 2017 22:47:04 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v46Ml4RA093012; Sat, 6 May 2017 22:47:04 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201705062247.v46Ml4RA093012@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sat, 6 May 2017 22:47:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317889 - projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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: Sat, 06 May 2017 22:47:06 -0000 Author: rmacklem Date: Sat May 6 22:47:04 2017 New Revision: 317889 URL: https://svnweb.freebsd.org/changeset/base/317889 Log: Fix the search for a Read/Write Layout + Open/Write or Write Delegation for the case where these are held by a different client than the one doing the RPC. Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Sat May 6 21:43:55 2017 (r317888) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Sat May 6 22:47:04 2017 (r317889) @@ -188,6 +188,7 @@ static void nfsrv_allocdevid(struct nfsd static void nfsrv_freealldevids(void); static int nfsrv_findlayout(struct nfsrv_descript *nd, fhandle_t *fhp, NFSPROC_T *, struct nfslayout **lypp); +static int nfsrv_fndclid(nfsquad_t *clidvec, nfsquad_t clid, int clidcnt); /* * Scan the client list for a match and either return the current one, @@ -6816,6 +6817,7 @@ nfsrv_freealldevids(void) * This function is used by nfsrv_proxyds() to decide if doing a Proxy * Getattr RPC to the Data Server (DS) is necessary. */ +#define NFSCLIDVECSIZE 6 APPLESTATIC int nfsrv_checkdsattr(struct nfsrv_descript *nd, vnode_t vp, NFSPROC_T *p) { @@ -6825,24 +6827,30 @@ nfsrv_checkdsattr(struct nfsrv_descript struct nfslayouthash *lhyp; struct nfslockhashhead *hp; struct nfslockfile *lfp; - int ret; + nfsquad_t clid[NFSCLIDVECSIZE]; + int clidcnt, ret; - KASSERT((nd->nd_flag & ND_IMPLIEDCLID) != 0, - ("nfsrv_chechdsattr: no nd_clientid\n")); ret = nfsvno_getfh(vp, &fh, p); if (ret != 0) return (0); /* First check for a Read/Write Layout. */ + clidcnt = 0; lhyp = NFSLAYOUTHASH(&fh); NFSLOCKLAYOUT(lhyp); - ret = nfsrv_findlayout(nd, &fh, p, &lyp); - if (ret != 0 || lyp->lay_rw == 0) { + LIST_FOREACH(lyp, &lhyp->list, lay_list) { + if (NFSBCMP(&lyp->lay_fh, &fh, sizeof(fh)) == 0 && lyp->lay_rw + != 0) { + if (clidcnt < NFSCLIDVECSIZE) + clid[clidcnt].qval = lyp->lay_clientid.qval; + clidcnt++; + } + } + NFSUNLOCKLAYOUT(lhyp); + if (clidcnt == 0) { /* None found, so return 0. */ - NFSUNLOCKLAYOUT(lhyp); return (0); } - NFSUNLOCKLAYOUT(lhyp); /* Get the nfslockfile for this fh. */ NFSLOCKSTATE(); @@ -6861,7 +6869,7 @@ nfsrv_checkdsattr(struct nfsrv_descript /* Now, look for a Write delegation for this clientid. */ LIST_FOREACH(stp, &lfp->lf_deleg, ls_file) { if ((stp->ls_flags & NFSLCK_DELEGWRITE) != 0 && - stp->ls_clp->lc_clientid.qval == nd->nd_clientid.qval) + nfsrv_fndclid(clid, stp->ls_clp->lc_clientid, clidcnt) != 0) break; } if (stp != NULL) { @@ -6875,7 +6883,7 @@ nfsrv_checkdsattr(struct nfsrv_descript KASSERT((stp->ls_flags & NFSLCK_OPEN) != 0, ("nfsrv_checkdsattr: Non-open in Open list\n")); if ((stp->ls_flags & NFSLCK_WRITEACCESS) != 0 && - stp->ls_clp->lc_clientid.qval == nd->nd_clientid.qval) + nfsrv_fndclid(clid, stp->ls_clp->lc_clientid, clidcnt) != 0) break; } NFSUNLOCKSTATE(); @@ -6884,3 +6892,21 @@ nfsrv_checkdsattr(struct nfsrv_descript return (0); } +/* + * Look for a matching clientid in the vector. Return 1 if one might match. + */ +static int +nfsrv_fndclid(nfsquad_t *clidvec, nfsquad_t clid, int clidcnt) +{ + int i; + + /* If too many for the vector, return 1 since there might be a match. */ + if (clidcnt > NFSCLIDVECSIZE) + return (1); + + for (i = 0; i < clidcnt; i++) + if (clidvec[i].qval == clid.qval) + return (1); + return (0); +} + From owner-svn-src-projects@freebsd.org Sat May 6 23:01:36 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D6F37D61B99 for ; Sat, 6 May 2017 23:01:36 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id A247464A; Sat, 6 May 2017 23:01:36 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v46N1Z6A000260; Sat, 6 May 2017 23:01:35 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v46N1ZZH000257; Sat, 6 May 2017 23:01:35 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201705062301.v46N1ZZH000257@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sat, 6 May 2017 23:01:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317890 - in projects/pnfs-planb-server/sys/fs: nfs nfsserver X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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: Sat, 06 May 2017 23:01:37 -0000 Author: rmacklem Date: Sat May 6 23:01:35 2017 New Revision: 317890 URL: https://svnweb.freebsd.org/changeset/base/317890 Log: Add an attrbit argument to nfsvno_getattr() so that this function only needs to check the Data Server attributes (size, mtime, filerev) for NFSv4 cases that need them. Most calls are for NFSv3 and the argument can be NULL to indicate "yes, check them". Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h Sat May 6 22:47:04 2017 (r317889) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h Sat May 6 23:01:35 2017 (r317890) @@ -623,7 +623,7 @@ void ncl_invalcaches(vnode_t); /* nfs_nfsdport.c */ int nfsvno_getattr(vnode_t, struct nfsvattr *, struct nfsrv_descript *, - NFSPROC_T *, int); + NFSPROC_T *, int, nfsattrbit_t *); int nfsvno_setattr(vnode_t, struct nfsvattr *, struct ucred *, NFSPROC_T *, struct nfsexstuff *); int nfsvno_getfh(vnode_t, fhandle_t *, NFSPROC_T *); Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Sat May 6 22:47:04 2017 (r317889) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Sat May 6 23:01:35 2017 (r317890) @@ -238,7 +238,8 @@ nfsrv_sequential_heuristic(struct uio *u */ int nfsvno_getattr(struct vnode *vp, struct nfsvattr *nvap, - struct nfsrv_descript *nd, struct thread *p, int vpislocked) + struct nfsrv_descript *nd, struct thread *p, int vpislocked, + nfsattrbit_t *attrbitp) { int error, gotattr, lockedit = 0; struct nfsvattr na; @@ -256,15 +257,26 @@ nfsvno_getattr(struct vnode *vp, struct } /* - * Acquire the Change, Size and Modify Time attributes from the DS file - * for a pNFS server. A return of 0 indicates that there are - * DS file attributes to be merged into the returned attributes. + * Acquire the Change, Size and TimeModify attributes, as required. + * This needs to be done for regular files if: + * - non-NFSv4 RPCs or + * - when attrbitp == NULL or + * - an NFSv4 RPC with any of the above attributes in attrbitp. + * A return of 0 for nfsrv_proxyds() indicates that it has acquired + * these attributes. nfsrv_proxyds() will return an error if the + * server is not a pNFS one. */ gotattr = 0; - error = nfsrv_proxyds(nd, vp, 0, 0, nd->nd_cred, p, NFSPROC_GETATTR, - NULL, NULL, NULL, &na, NULL); - if (error == 0) - gotattr = 1; + if (vp->v_type == VREG && (attrbitp == NULL || + (nd->nd_flag & ND_NFSV4) == 0 || + NFSISSET_ATTRBIT(attrbitp, NFSATTRBIT_CHANGE) || + NFSISSET_ATTRBIT(attrbitp, NFSATTRBIT_SIZE) || + NFSISSET_ATTRBIT(attrbitp, NFSATTRBIT_TIMEMODIFY))) { + error = nfsrv_proxyds(nd, vp, 0, 0, nd->nd_cred, p, + NFSPROC_GETATTR, NULL, NULL, NULL, &na, NULL); + if (error == 0) + gotattr = 1; + } error = VOP_GETATTR(vp, &nvap->na_vattr, nd->nd_cred); if (lockedit != 0) @@ -1681,7 +1693,7 @@ nfsvno_updfilerev(struct vnode *vp, stru return (ESTALE); } (void) VOP_SETATTR(vp, &va, nd->nd_cred); - (void) nfsvno_getattr(vp, nvap, nd, p, 1); + (void) nfsvno_getattr(vp, nvap, nd, p, 1, NULL); return (0); } @@ -1765,7 +1777,8 @@ nfsrvd_readdir(struct nfsrv_descript *nd siz = ((cnt + DIRBLKSIZ - 1) & ~(DIRBLKSIZ - 1)); fullsiz = siz; if (nd->nd_flag & ND_NFSV3) { - nd->nd_repstat = getret = nfsvno_getattr(vp, &at, nd, p, 1); + nd->nd_repstat = getret = nfsvno_getattr(vp, &at, nd, p, 1, + NULL); #if 0 /* * va_filerev is not sufficient as a cookie verifier, @@ -1823,7 +1836,7 @@ again: if (!cookies && !nd->nd_repstat) nd->nd_repstat = NFSERR_PERM; if (nd->nd_flag & ND_NFSV3) { - getret = nfsvno_getattr(vp, &at, nd, p, 1); + getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); if (!nd->nd_repstat) nd->nd_repstat = getret; } @@ -2038,7 +2051,7 @@ nfsrvd_readdirplus(struct nfsrv_descript NFSZERO_ATTRBIT(&attrbits); } fullsiz = siz; - nd->nd_repstat = getret = nfsvno_getattr(vp, &at, nd, p, 1); + nd->nd_repstat = getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); if (!nd->nd_repstat) { if (off && verf != at.na_filerev) { /* @@ -2098,7 +2111,7 @@ again: if (io.uio_resid) siz -= io.uio_resid; - getret = nfsvno_getattr(vp, &at, nd, p, 1); + getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); if (!cookies && !nd->nd_repstat) nd->nd_repstat = NFSERR_PERM; @@ -2322,7 +2335,7 @@ again: r = nfsvno_getfh(nvp, &nfh, p); if (!r) r = nfsvno_getattr(nvp, nvap, nd, p, - 1); + 1, &attrbits); if (r == 0 && is_zfs == 1 && nfsrv_enable_crossmntpt != 0 && (nd->nd_flag & ND_NFSV4) != 0 && Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Sat May 6 22:47:04 2017 (r317889) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Sat May 6 23:01:35 2017 (r317890) @@ -156,7 +156,7 @@ nfsrvd_access(struct nfsrv_descript *nd, } nfsmode &= supported; if (nd->nd_flag & ND_NFSV3) { - getret = nfsvno_getattr(vp, &nva, nd, p, 1); + getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); nfsrv_postopattr(nd, getret, &nva); } vput(vp); @@ -240,7 +240,7 @@ nfsrvd_getattr(struct nfsrv_descript *nd } } if (!nd->nd_repstat) - nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1); + nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, &attrbits); if (!nd->nd_repstat) { if (nd->nd_flag & ND_NFSV4) { if (NFSISSET_ATTRBIT(&attrbits, NFSATTRBIT_FILEHANDLE)) @@ -328,7 +328,6 @@ nfsrvd_setattr(struct nfsrv_descript *nd #endif gotproxystateid = 0; NFSVNO_ATTRINIT(&nva); - NFSZERO_ATTRBIT(&retbits); if (nd->nd_flag & ND_NFSV4) { NFSM_DISSECT(tl, u_int32_t *, NFSX_STATEID); stateid.seqid = fxdr_unsigned(u_int32_t, *tl++); @@ -344,9 +343,15 @@ nfsrvd_setattr(struct nfsrv_descript *nd error = nfsrv_sattr(nd, vp, &nva, &attrbits, aclp, p); if (error) goto nfsmout; - preat_ret = nfsvno_getattr(vp, &nva2, nd, p, 1); + + /* For NFSv4, only va_uid is used from nva2. */ + NFSZERO_ATTRBIT(&retbits); + NFSSETBIT_ATTRBIT(&retbits, NFSATTRBIT_OWNER); + preat_ret = nfsvno_getattr(vp, &nva2, nd, p, 1, &retbits); if (!nd->nd_repstat) nd->nd_repstat = preat_ret; + + NFSZERO_ATTRBIT(&retbits); if (nd->nd_flag & ND_NFSV3) { NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); gcheck = fxdr_unsigned(int, *tl); @@ -469,7 +474,7 @@ nfsrvd_setattr(struct nfsrv_descript *nd exp); } if (nd->nd_flag & (ND_NFSV2 | ND_NFSV3)) { - postat_ret = nfsvno_getattr(vp, &nva, nd, p, 1); + postat_ret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); if (!nd->nd_repstat) nd->nd_repstat = postat_ret; } @@ -554,7 +559,7 @@ nfsrvd_lookup(struct nfsrv_descript *nd, if (dirp) { if (nd->nd_flag & ND_NFSV3) dattr_ret = nfsvno_getattr(dirp, &dattr, nd, p, - 0); + 0, NULL); vrele(dirp); } if (nd->nd_flag & ND_NFSV3) @@ -575,14 +580,15 @@ nfsrvd_lookup(struct nfsrv_descript *nd, if (nd->nd_repstat == 0) nd->nd_repstat = nfsvno_getfh(vp, fhp, p); if (!(nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) - nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1); + nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); if (vpp != NULL && nd->nd_repstat == 0) *vpp = vp; else vput(vp); if (dirp) { if (nd->nd_flag & ND_NFSV3) - dattr_ret = nfsvno_getattr(dirp, &dattr, nd, p, 0); + dattr_ret = nfsvno_getattr(dirp, &dattr, nd, p, 0, + NULL); vrele(dirp); } if (nd->nd_repstat) { @@ -630,7 +636,7 @@ nfsrvd_readlink(struct nfsrv_descript *n nd->nd_repstat = nfsvno_readlink(vp, nd->nd_cred, p, &mp, &mpend, &len); if (nd->nd_flag & ND_NFSV3) - getret = nfsvno_getattr(vp, &nva, nd, p, 1); + getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); vput(vp); if (nd->nd_flag & ND_NFSV3) nfsrv_postopattr(nd, getret, &nva); @@ -744,7 +750,7 @@ nfsrvd_read(struct nfsrv_descript *nd, _ nd->nd_repstat = (vnode_vtype(vp) == VDIR) ? EISDIR : EINVAL; } - getret = nfsvno_getattr(vp, &nva, nd, p, 1); + getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); if (!nd->nd_repstat) nd->nd_repstat = getret; if (!nd->nd_repstat && @@ -787,7 +793,7 @@ nfsrvd_read(struct nfsrv_descript *nd, _ nd->nd_repstat = nfsvno_read(vp, off, cnt, nd->nd_cred, p, &m3, &m2); if (!(nd->nd_flag & ND_NFSV4)) { - getret = nfsvno_getattr(vp, &nva, nd, p, 1); + getret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); if (!nd->nd_repstat) nd->nd_repstat = getret; } @@ -850,6 +856,7 @@ nfsrvd_write(struct nfsrv_descript *nd, struct nfslock lo, *lop = &lo; nfsv4stateid_t stateid; nfsquad_t clientid; + nfsattrbit_t attrbits; if (nd->nd_repstat) { nfsrv_wcc(nd, forat_ret, &forat, aftat_ret, &nva); @@ -952,7 +959,9 @@ nfsrvd_write(struct nfsrv_descript *nd, nd->nd_repstat = (vnode_vtype(vp) == VDIR) ? EISDIR : EINVAL; } - forat_ret = nfsvno_getattr(vp, &forat, nd, p, 1); + NFSZERO_ATTRBIT(&attrbits); + NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_OWNER); + forat_ret = nfsvno_getattr(vp, &forat, nd, p, 1, &attrbits); if (!nd->nd_repstat) nd->nd_repstat = forat_ret; if (!nd->nd_repstat && @@ -991,7 +1000,7 @@ nfsrvd_write(struct nfsrv_descript *nd, if (nd->nd_flag & ND_NFSV4) aftat_ret = 0; else - aftat_ret = nfsvno_getattr(vp, &nva, nd, p, 1); + aftat_ret = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); vput(vp); if (!nd->nd_repstat) nd->nd_repstat = aftat_ret; @@ -1113,7 +1122,8 @@ nfsrvd_create(struct nfsrv_descript *nd, if (nd->nd_repstat) { nfsvno_relpathbuf(&named); if (nd->nd_flag & ND_NFSV3) { - dirfor_ret = nfsvno_getattr(dp, &dirfor, nd, p, 1); + dirfor_ret = nfsvno_getattr(dp, &dirfor, nd, p, 1, + NULL); nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft); } @@ -1127,7 +1137,8 @@ nfsrvd_create(struct nfsrv_descript *nd, vrele(dirp); dirp = NULL; } else { - dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, + NULL); } } if (nd->nd_repstat) { @@ -1165,7 +1176,8 @@ nfsrvd_create(struct nfsrv_descript *nd, if (!nd->nd_repstat) { nd->nd_repstat = nfsvno_getfh(vp, &fh, p); if (!nd->nd_repstat) - nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1); + nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, + NULL); vput(vp); if (!nd->nd_repstat) { tverf[0] = nva.na_atime.tv_sec; @@ -1181,7 +1193,7 @@ nfsrvd_create(struct nfsrv_descript *nd, if (exclusive_flag && !nd->nd_repstat && (cverf[0] != tverf[0] || cverf[1] != tverf[1])) nd->nd_repstat = EEXIST; - diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0); + diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0, NULL); vrele(dirp); if (!nd->nd_repstat) { (void) nfsm_fhtom(nd, (u_int8_t *)&fh, 0, 1); @@ -1291,7 +1303,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, } } - dirfor_ret = nfsvno_getattr(dp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dp, &dirfor, nd, p, 0, NULL); if (!nd->nd_repstat && (nd->nd_flag & ND_NFSV4)) { if (!dirfor_ret && NFSVNO_ISSETGID(&nva) && dirfor.na_gid == nva.na_gid) @@ -1330,7 +1342,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, if (dirp) { if (nd->nd_flag & ND_NFSV3) dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, - p, 0); + p, 0, NULL); vrele(dirp); } #ifdef NFS4_ACL_EXTATTR_NAME @@ -1342,7 +1354,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, goto out; } if (dirp) - dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, NULL); if ((nd->nd_flag & ND_NFSV4) && (vtyp == VDIR || vtyp == VLNK)) { if (vtyp == VDIR) { @@ -1371,7 +1383,8 @@ nfsrvd_mknod(struct nfsrv_descript *nd, nfsrv_fixattr(nd, vp, &nva, aclp, p, &attrbits, exp); nd->nd_repstat = nfsvno_getfh(vp, fhp, p); if ((nd->nd_flag & ND_NFSV3) && !nd->nd_repstat) - nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1); + nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, + NULL); if (vpp != NULL && nd->nd_repstat == 0) { NFSVOPUNLOCK(vp, 0); *vpp = vp; @@ -1379,7 +1392,7 @@ nfsrvd_mknod(struct nfsrv_descript *nd, vput(vp); } - diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0); + diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0, NULL); vrele(dirp); if (!nd->nd_repstat) { if (nd->nd_flag & ND_NFSV3) { @@ -1453,7 +1466,8 @@ nfsrvd_remove(struct nfsrv_descript *nd, } if (dirp) { if (!(nd->nd_flag & ND_NFSV2)) { - dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, + NULL); } else { vrele(dirp); dirp = NULL; @@ -1477,7 +1491,8 @@ nfsrvd_remove(struct nfsrv_descript *nd, } if (!(nd->nd_flag & ND_NFSV2)) { if (dirp) { - diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0); + diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0, + NULL); vrele(dirp); } if (nd->nd_flag & ND_NFSV3) { @@ -1523,7 +1538,7 @@ nfsrvd_rename(struct nfsrv_descript *nd, goto out; } if (!(nd->nd_flag & ND_NFSV2)) - fdirfor_ret = nfsvno_getattr(dp, &fdirfor, nd, p, 1); + fdirfor_ret = nfsvno_getattr(dp, &fdirfor, nd, p, 1, NULL); tond.ni_cnd.cn_nameiop = 0; tond.ni_startdir = NULL; NFSNAMEICNDSET(&fromnd.ni_cnd, nd->nd_cred, DELETE, WANTPARENT | SAVESTART); @@ -1547,9 +1562,11 @@ nfsrvd_rename(struct nfsrv_descript *nd, if (dp != tdp) { NFSVOPUNLOCK(dp, 0); /* Might lock tdp. */ - tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 0); + tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 0, + NULL); } else { - tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 1); + tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 1, + NULL); NFSVOPUNLOCK(dp, 0); } } else { @@ -1570,7 +1587,8 @@ nfsrvd_rename(struct nfsrv_descript *nd, VREF(dp); tdp = dp; tnes = *exp; - tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 1); + tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, p, 1, + NULL); NFSVOPUNLOCK(dp, 0); } else { NFSVOPUNLOCK(dp, 0); @@ -1579,7 +1597,7 @@ nfsrvd_rename(struct nfsrv_descript *nd, 0, p); /* Locks tdp. */ if (tdp) { tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd, - p, 1); + p, 1, NULL); NFSVOPUNLOCK(tdp, 0); } } @@ -1636,9 +1654,9 @@ nfsrvd_rename(struct nfsrv_descript *nd, nd->nd_repstat = nfsvno_rename(&fromnd, &tond, nd->nd_repstat, nd->nd_flag, nd->nd_cred, p); if (fdirp) - fdiraft_ret = nfsvno_getattr(fdirp, &fdiraft, nd, p, 0); + fdiraft_ret = nfsvno_getattr(fdirp, &fdiraft, nd, p, 0, NULL); if (tdirp) - tdiraft_ret = nfsvno_getattr(tdirp, &tdiraft, nd, p, 0); + tdiraft_ret = nfsvno_getattr(tdirp, &tdiraft, nd, p, 0, NULL); if (fdirp) vrele(fdirp); if (tdirp) @@ -1739,15 +1757,16 @@ nfsrvd_link(struct nfsrv_descript *nd, i vrele(dirp); dirp = NULL; } else { - dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, + NULL); } } if (!nd->nd_repstat) nd->nd_repstat = nfsvno_link(&named, vp, nd->nd_cred, p, exp); if (nd->nd_flag & ND_NFSV3) - getret = nfsvno_getattr(vp, &at, nd, p, 0); + getret = nfsvno_getattr(vp, &at, nd, p, 0, NULL); if (dirp) { - diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0); + diraft_ret = nfsvno_getattr(dirp, &diraft, nd, p, 0, NULL); vrele(dirp); } vrele(vp); @@ -1817,12 +1836,13 @@ nfsrvd_symlink(struct nfsrv_descript *nd */ if (!nd->nd_repstat) { if (dirp != NULL) - dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, + NULL); nfsrvd_symlinksub(nd, &named, &nva, fhp, vpp, dirp, &dirfor, &diraft, &diraft_ret, NULL, NULL, p, exp, pathcp, pathlen); } else if (dirp != NULL) { - dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, NULL); vrele(dirp); } if (pathcp) @@ -1862,7 +1882,7 @@ nfsrvd_symlinksub(struct nfsrv_descript nd->nd_repstat = nfsvno_getfh(ndp->ni_vp, fhp, p); if (!nd->nd_repstat) nd->nd_repstat = nfsvno_getattr(ndp->ni_vp, - nvap, nd, p, 1); + nvap, nd, p, 1, NULL); } if (vpp != NULL && nd->nd_repstat == 0) { NFSVOPUNLOCK(ndp->ni_vp, 0); @@ -1871,7 +1891,7 @@ nfsrvd_symlinksub(struct nfsrv_descript vput(ndp->ni_vp); } if (dirp) { - *diraft_retp = nfsvno_getattr(dirp, diraftp, nd, p, 0); + *diraft_retp = nfsvno_getattr(dirp, diraftp, nd, p, 0, NULL); vrele(dirp); } if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) { @@ -1935,7 +1955,8 @@ nfsrvd_mkdir(struct nfsrv_descript *nd, } if (nd->nd_repstat) { if (dirp != NULL) { - dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, + NULL); vrele(dirp); } if (nd->nd_flag & ND_NFSV3) @@ -1944,7 +1965,7 @@ nfsrvd_mkdir(struct nfsrv_descript *nd, goto out; } if (dirp != NULL) - dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0); + dirfor_ret = nfsvno_getattr(dirp, &dirfor, nd, p, 0, NULL); /* * Call nfsrvd_mkdirsub() for the code common to V4 as well. @@ -1994,7 +2015,8 @@ nfsrvd_mkdirsub(struct nfsrv_descript *n nfsrv_fixattr(nd, vp, nvap, aclp, p, attrbitp, exp); nd->nd_repstat = nfsvno_getfh(vp, fhp, p); if (!(nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) - nd->nd_repstat = nfsvno_getattr(vp, nvap, nd, p, 1); + nd->nd_repstat = nfsvno_getattr(vp, nvap, nd, p, 1, + NULL); if (vpp && !nd->nd_repstat) { NFSVOPUNLOCK(vp, 0); *vpp = vp; @@ -2003,7 +2025,7 @@ nfsrvd_mkdirsub(struct nfsrv_descript *n } } if (dirp) { - *diraft_retp = nfsvno_getattr(dirp, diraftp, nd, p, 0); + *diraft_retp = nfsvno_getattr(dirp, diraftp, nd, p, 0, NULL); vrele(dirp); } if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) { @@ -2053,10 +2075,10 @@ nfsrvd_commit(struct nfsrv_descript *nd, tl += 2; cnt = fxdr_unsigned(int, *tl); if (nd->nd_flag & ND_NFSV3) - for_ret = nfsvno_getattr(vp, &bfor, nd, p, 1); + for_ret = nfsvno_getattr(vp, &bfor, nd, p, 1, NULL); nd->nd_repstat = nfsvno_fsync(vp, off, cnt, nd->nd_cred, p); if (nd->nd_flag & ND_NFSV3) { - aft_ret = nfsvno_getattr(vp, &aft, nd, p, 1); + aft_ret = nfsvno_getattr(vp, &aft, nd, p, 1, NULL); nfsrv_wcc(nd, for_ret, &bfor, aft_ret, &aft); } vput(vp); @@ -2095,7 +2117,7 @@ nfsrvd_statfs(struct nfsrv_descript *nd, } sf = malloc(sizeof(struct statfs), M_STATFS, M_WAITOK); nd->nd_repstat = nfsvno_statfs(vp, sf); - getret = nfsvno_getattr(vp, &at, nd, p, 1); + getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); vput(vp); if (nd->nd_flag & ND_NFSV3) nfsrv_postopattr(nd, getret, &at); @@ -2150,7 +2172,7 @@ nfsrvd_fsinfo(struct nfsrv_descript *nd, nfsrv_postopattr(nd, getret, &at); goto out; } - getret = nfsvno_getattr(vp, &at, nd, p, 1); + getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); nfsvno_getfs(&fs, isdgram); vput(vp); nfsrv_postopattr(nd, getret, &at); @@ -2200,7 +2222,7 @@ nfsrvd_pathconf(struct nfsrv_descript *n if (!nd->nd_repstat) nd->nd_repstat = nfsvno_pathconf(vp, _PC_NO_TRUNC, ¬runc, nd->nd_cred, p); - getret = nfsvno_getattr(vp, &at, nd, p, 1); + getret = nfsvno_getattr(vp, &at, nd, p, 1, NULL); vput(vp); nfsrv_postopattr(nd, getret, &at); if (!nd->nd_repstat) { @@ -2808,7 +2830,7 @@ nfsrvd_open(struct nfsrv_descript *nd, _ NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); create = fxdr_unsigned(int, *tl); if (!nd->nd_repstat) - nd->nd_repstat = nfsvno_getattr(dp, &dirfor, nd, p, 0); + nd->nd_repstat = nfsvno_getattr(dp, &dirfor, nd, p, 0, NULL); if (create == NFSV4OPEN_CREATE) { nva.na_type = VREG; nva.na_mode = 0; @@ -3007,7 +3029,7 @@ nfsrvd_open(struct nfsrv_descript *nd, _ } if (!nd->nd_repstat) { - nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1); + nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); if (!nd->nd_repstat) { tverf[0] = nva.na_atime.tv_sec; tverf[1] = nva.na_atime.tv_nsec; @@ -3033,7 +3055,7 @@ nfsrvd_open(struct nfsrv_descript *nd, _ if (stp) FREE((caddr_t)stp, M_NFSDSTATE); if (!nd->nd_repstat && dirp) - nd->nd_repstat = nfsvno_getattr(dirp, &diraft, nd, p, 0); + nd->nd_repstat = nfsvno_getattr(dirp, &diraft, nd, p, 0, NULL); if (!nd->nd_repstat) { /* For NFSv4.1, set the Current StateID. */ if ((nd->nd_flag & ND_NFSV41) != 0) { @@ -3780,7 +3802,7 @@ nfsrvd_verify(struct nfsrv_descript *nd, fhandle_t fh; sf = malloc(sizeof(struct statfs), M_STATFS, M_WAITOK); - nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1); + nd->nd_repstat = nfsvno_getattr(vp, &nva, nd, p, 1, NULL); if (!nd->nd_repstat) nd->nd_repstat = nfsvno_statfs(vp, sf); if (!nd->nd_repstat) From owner-svn-src-projects@freebsd.org Sat May 6 23:05:51 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 118F1D61CE2 for ; Sat, 6 May 2017 23:05:51 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id A29B719AD; Sat, 6 May 2017 23:05:50 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v46N5n9d001287; Sat, 6 May 2017 23:05:49 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v46N5n5W001285; Sat, 6 May 2017 23:05:49 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201705062305.v46N5n5W001285@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sat, 6 May 2017 23:05:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317891 - projects/pnfs-planb-server/sys/fs/nfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 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: Sat, 06 May 2017 23:05:51 -0000 Author: rmacklem Date: Sat May 6 23:05:49 2017 New Revision: 317891 URL: https://svnweb.freebsd.org/changeset/base/317891 Log: Add support for some recommended attributes related to NFSv4.1/pNFS although I do know of a client that actually uses them. Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Sat May 6 23:01:35 2017 (r317890) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Sat May 6 23:05:49 2017 (r317891) @@ -1791,6 +1791,40 @@ nfsv4_loadattr(struct nfsrv_descript *nd } attrsum += cnt; break; + case NFSATTRBIT_FSLAYOUTTYPE: + case NFSATTRBIT_LAYOUTTYPE: + NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); + attrsum += NFSX_UNSIGNED; + i = fxdr_unsigned(int, *tl); + if (i > 0) { + NFSM_DISSECT(tl, u_int32_t *, i * + NFSX_UNSIGNED); + attrsum += i * NFSX_UNSIGNED; + for (j = 0; j < i; j++) { + k = fxdr_unsigned(int, *tl++); + if (compare && !(*retcmpp) && + k != NFSLAYOUT_NFSV4_1_FILES) + *retcmpp = NFSERR_NOTSAME; + } + } + NFSDDSLOCK(); + if (TAILQ_EMPTY(&nfsrv_devidhead)) { + if (compare && !(*retcmpp) && i > 0) + *retcmpp = NFSERR_NOTSAME; + } else { + if (compare && !(*retcmpp) && i != 1) + *retcmpp = NFSERR_NOTSAME; + } + NFSDDSUNLOCK(); + break; + case NFSATTRBIT_LAYOUTALIGNMENT: + case NFSATTRBIT_LAYOUTBLKSIZE: + NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); + attrsum += NFSX_UNSIGNED; + i = fxdr_unsigned(int, *tl); + if (compare && !(*retcmpp) && i != NFS_SRVMAXIO) + *retcmpp = NFSERR_NOTSAME; + break; default: printf("EEK! nfsv4_loadattr unknown attr=%d\n", bitpos); @@ -2538,6 +2572,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd retnum += nfsrv_putattrbit(nd, &attrbits); break; case NFSATTRBIT_FSLAYOUTTYPE: + case NFSATTRBIT_LAYOUTTYPE: NFSDDSLOCK(); if (TAILQ_EMPTY(&nfsrv_devidhead)) siz = 1; @@ -2546,14 +2581,20 @@ nfsv4_fillattr(struct nfsrv_descript *nd NFSDDSUNLOCK(); if (siz == 2) { NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); - *tl++ = txdr_unsigned(1); + *tl++ = txdr_unsigned(1); /* One entry. */ *tl = txdr_unsigned(NFSLAYOUT_NFSV4_1_FILES); } else { NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED); - *tl = txdr_unsigned(0); + *tl = 0; } retnum += siz * NFSX_UNSIGNED; break; + case NFSATTRBIT_LAYOUTALIGNMENT: + case NFSATTRBIT_LAYOUTBLKSIZE: + NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED); + *tl = txdr_unsigned(NFS_SRVMAXIO); + retnum += NFSX_UNSIGNED; + break; default: printf("EEK! Bad V4 attribute bitpos=%d\n", bitpos); } Modified: projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Sat May 6 23:01:35 2017 (r317890) +++ projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Sat May 6 23:05:49 2017 (r317891) @@ -1048,7 +1048,11 @@ struct nfsv3_sattr { #define NFSATTRBIT_SUPP1 NFSATTRBIT_S1 #endif -#define NFSATTRBIT_SUPP2 NFSATTRBM_SUPPATTREXCLCREAT +#define NFSATTRBIT_SUPP2 \ + (NFSATTRBM_LAYOUTTYPE | \ + NFSATTRBM_LAYOUTBLKSIZE | \ + NFSATTRBM_LAYOUTALIGNMENT | \ + NFSATTRBM_SUPPATTREXCLCREAT) /* * NFSATTRBIT_SUPPSETONLY is the OR of NFSATTRBIT_TIMEACCESSSET and