From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: Enabling --enable-check-lisp-object-type by default on x86 and AMD64 Date: Tue, 2 May 2017 15:14:17 -0700 Organization: UCLA Computer Science Department Message-ID: <60379b71-bd6a-5f6f-dec1-523d6f4b2016@cs.ucla.edu> References: <83mvb8riq0.fsf@gnu.org> <83a878r2d0.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------315D76D9A6BC521EABA538C7" X-Trace: blaine.gmane.org 1493763333 23810 195.159.176.226 (2 May 2017 22:15:33 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 2 May 2017 22:15:33 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.0 Cc: Emacs developers To: Philipp Stephani Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed May 03 00:15:18 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d5g4j-0005yq-2n for ged-emacs-devel@m.gmane.org; Wed, 03 May 2017 00:15:17 +0200 Original-Received: from localhost ([::1]:33894 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d5g4o-0006fr-P6 for ged-emacs-devel@m.gmane.org; Tue, 02 May 2017 18:15:22 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49571) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d5g3w-0006by-7m for emacs-devel@gnu.org; Tue, 02 May 2017 18:14:35 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d5g3s-0003zP-ET for emacs-devel@gnu.org; Tue, 02 May 2017 18:14:28 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:60480) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d5g3s-0003zC-3j for emacs-devel@gnu.org; Tue, 02 May 2017 18:14:24 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id A8168160076; Tue, 2 May 2017 15:14:22 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id VqxICjzQhWvo; Tue, 2 May 2017 15:14:18 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 7689516006B; Tue, 2 May 2017 15:14:18 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id KLnA5WhxSztm; Tue, 2 May 2017 15:14:18 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 35737160083; Tue, 2 May 2017 15:14:18 -0700 (PDT) In-Reply-To: Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 131.179.128.68 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:214528 Archived-At: This is a multi-part message in MIME format. --------------315D76D9A6BC521EABA538C7 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Originally, the Lisp_Object type was a struct containing bitfields. This was significantly slower than using integer shifting and masking on many platforms, so long ago the default Lisp_Object type was changed to be an integer. Nowadays Lisp_Object no longer contains bitfields even when --enable-check-lisp-object-type is used, so this old motivation is no longer relevant. For x86-64 there should be little difference nowadays when --enable-check-lisp-object-type is used. For other platforms (e.g., x86), however, I suppose there can still be a significant (though small) difference. So when compiling emacs for production, it makes sense to omit --enable-check-lisp-object-type, for the benefit of x86 and similar platforms. When developing, the advantages of --enable-check-lisp-object-type outweigh the small increase in runtime cost, particularly considering that x86-64 is the most common development platform nowadays and there the runtime cost is insignificant. So it makes sense to default --enable-check-lisp-object-type to "yes" if --enable-gcc-warnings is also enabled (which it is by default, in developer builds). I did this by installing the attached patch; comments welcome. As a result, if you build master from a developer (Git-based) directory, --enable-check-lisp-object-type should now be the default. If you don't build from Git, I suggest configuring with --enable-gcc-warnings. --------------315D76D9A6BC521EABA538C7 Content-Type: text/plain; charset=UTF-8; name="0001-Check-list-object-type-if-enable-gcc-warnings.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Check-list-object-type-if-enable-gcc-warnings.txt" RnJvbSBmMTU1MGY3MGExZTEzOTAyMmU2MjM4YzNjNWMyMmNiN2JkNjkyM2ExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUdWUsIDIgTWF5IDIwMTcgMTQ6NTI6MjEgLTA3MDAKU3ViamVjdDogW1BBVENI XSBDaGVjayBsaXN0IG9iamVjdCB0eXBlIGlmIC0tZW5hYmxlLWdjYy13YXJuaW5ncwpNSU1F LVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgK Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKKiBjb25maWd1cmUuYWMgKC0tZW5h YmxlLWNoZWNrLWxpc3Atb2JqZWN0LXR5cGUpOgpEZWZhdWx0IHRvICJ5ZXMiIGlmIC0tZW5h YmxlLWdjYy13YXJuaW5ncyBpcyBub3QgIm5vIi4KKiBldGMvTkVXUzogTWVudGlvbiB0aGlz LgoqIHNyYy9ldmFsLmMgKGludGVybmFsX2xpc3BfY29uZGl0aW9uX2Nhc2UpOiBGaXggc29t ZSBnbGl0Y2hlcwp3aXRoICd2b2xhdGlsZScgdW5jb3ZlcmVkIGJ5IHRoZSBhYm92ZTogaW4g cGFydGljdWxhciwgJ2NsYXVzZXMnCnNob3VsZCBiZSBhIHBvaW50ZXIgdG8gdm9sYXRpbGUg c3RvcmFnZSBvbiB0aGUgc3RhY2ssIGFuZCBuZWVkIG5vdApiZSB2b2xhdGlsZSBpdHNlbGYu ICBVc2UgYW4gaW50LCBub3QgcHRyZGlmZl90LCB0byBjb3VudCBjbGF1c2VzLgpEb27igJl0 IGJvdGhlciBnYXRoZXJpbmcgYmluZGluZyBjb3VudCBpZiBWQVIgaXMgbmlsLiAgVXNlCm1v cmUtc3BlY2lmaWMgbG9jYWwgbmFtZXMgdG8gdHJ5IHRvIGNsYXJpZnkgd2hhdOKAmXMgZ29p bmcgb24uCi0tLQogY29uZmlndXJlLmFjIHwgIDI1ICsrKysrKystLS0tLS0tCiBldGMvTkVX UyAgICAgfCAgIDUgKystCiBzcmMvZXZhbC5jICAgfCAxMDUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hh bmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDQ1Y2ZkZmMuLmQ2YjgwMDEgMTAw NjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTUwNywxNiAr NTA3LDYgQEAgQUNfREVGVU4KIFtEZWZpbmUgdGhpcyB0byBlbmFibGUgZ2x5cGhzIGRlYnVn Z2luZyBjb2RlLl0pCiBmaQogCi1BQ19BUkdfRU5BQkxFKGNoZWNrLWxpc3Atb2JqZWN0LXR5 cGUsCi1bQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNoZWNrLWxpc3Atb2JqZWN0LXR5cGVd LAotICAgICAgICAgICAgICAgIFtlbmFibGUgY29tcGlsZSB0aW1lIGNoZWNrcyBmb3IgdGhl IExpc3BfT2JqZWN0IGRhdGEgdHlwZS4KLQkJVGhpcyBpcyB1c2VmdWwgZm9yIGRldmVsb3Bt ZW50IGZvciBjYXRjaGluZyBjZXJ0YWluIHR5cGVzIG9mIGJ1Z3MuXSldLAotaWYgdGVzdCAi JHtlbmFibGV2YWx9IiAhPSAibm8iOyB0aGVuCi0gICBBQ19ERUZJTkUoQ0hFQ0tfTElTUF9P QkpFQ1RfVFlQRSwgMSwKLSAgIFtEZWZpbmUgdGhpcyB0byBlbmFibGUgY29tcGlsZSB0aW1l IGNoZWNrcyBmb3IgdGhlIExpc3BfT2JqZWN0IGRhdGEgdHlwZS5dKQotZmkpCi0KLQogZG5s IFRoZSBuYW1lIG9mIHRoaXMgb3B0aW9uIGlzIHVuZm9ydHVuYXRlLiAgSXQgcHJlZGF0ZXMs IGFuZCBoYXMgbm8KIGRubCByZWxhdGlvbiB0bywgdGhlICJzYW1wbGluZy1iYXNlZCBlbGlz cCBwcm9maWxlciIgYWRkZWQgaW4gMjQuMy4KIGRubCBBY3R1YWxseSwgaXQgc3RvcHMgaXQg d29ya2luZy4KQEAgLTg3Nyw5ICs4NjcsMTggQEAgQUNfREVGVU4KICAgICMganVzdCBhIHJl bGVhc2UgaW1wb3J0ZWQgaW50byBHaXQgZm9yIHBhdGNoIG1hbmFnZW1lbnQuCiAgICBnbF9n Y2Nfd2FybmluZ3M9bm8KICAgIGlmIHRlc3QgLWUgIiRzcmNkaXIiLy5naXQgJiYgdGVzdCAh IC1mICIkc3JjZGlyIi8udGFyYmFsbC12ZXJzaW9uOyB0aGVuCi0gICAgIGdsX0dDQ19WRVJT SU9OX0lGRUxTRShbNV0sIFszXSwgW2dsX2djY193YXJuaW5ncz13YXJuLW9ubHldKV0KLSAg IGZpCi0pCisgICAgIGdsX0dDQ19WRVJTSU9OX0lGRUxTRShbNV0sIFszXSwgW2dsX2djY193 YXJuaW5ncz13YXJuLW9ubHldKQorICAgZmldKQorCitBQ19BUkdfRU5BQkxFKFtjaGVjay1s aXNwLW9iamVjdC10eXBlXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jaGVjay1s aXNwLW9iamVjdC10eXBlXSwKKyAgICAgW0VuYWJsZSBjb21waWxlLXRpbWUgY2hlY2tzIGZv ciB0aGUgTGlzcF9PYmplY3QgZGF0YSB0eXBlLAorICAgICAgd2hpY2ggY2FuIGNhdGNoIHNv bWUgYnVncyBkdXJpbmcgZGV2ZWxvcG1lbnQuCisgICAgICBUaGUgZGVmYXVsdCBpcyAibm8i IGlmIC0tZW5hYmxlLWdjYy13YXJuaW5ncyBpcyAibm8iLl0pXSkKK2lmIHRlc3QgIiR7ZW5h YmxlX2NoZWNrX2xpc3Bfb2JqZWN0X3R5cGUtJGdsX2djY193YXJuaW5nc30iICE9ICJubyI7 IHRoZW4KKyAgQUNfREVGSU5FKFtDSEVDS19MSVNQX09CSkVDVF9UWVBFXSwgMSwKKyAgICBb RGVmaW5lIHRvIGVuYWJsZSBjb21waWxlLXRpbWUgY2hlY2tzIGZvciB0aGUgTGlzcF9PYmpl Y3QgZGF0YSB0eXBlLl0pCitmaQogCiAjIGNsYW5nIGlzIHVuZHVseSBwaWNreSBhYm91dCBz b21lIHRoaW5ncy4KIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyBj bGFuZ10sIFtlbWFjc19jdl9jbGFuZ10sCmRpZmYgLS1naXQgYS9ldGMvTkVXUyBiL2V0Yy9O RVdTCmluZGV4IDE3M2M0ZTQuLjQxMGU2ODEgMTAwNjQ0Ci0tLSBhL2V0Yy9ORVdTCisrKyBi L2V0Yy9ORVdTCkBAIC00Miw2ICs0Miw5IEBAIG5vdyB0aGUgZGVmYXVsdCBpbiBkZXZlbG9w ZXIgYnVpbGRzLiAgQXMgYmVmb3JlLCB1c2UKICctLWRpc2FibGUtZ2NjLXdhcm5pbmdzJyB0 byBzdXBwcmVzcyBHQ0MncyB3YXJuaW5ncywgYW5kCiAnLS1lbmFibGUtZ2NjLXdhcm5pbmdz JyB0byBzdG9wIHRoZSBidWlsZCBpZiBHQ0MgaXNzdWVzIHdhcm5pbmdzLgogCisqKiBXaGVu IEdDQyB3YXJuaW5ncyBhcmUgZW5hYmxlZCwgJy0tZW5hYmxlLWNoZWNrLWxpc3Atb2JqZWN0 LXR5cGUnIGlzCitub3cgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gY29uZmlndXJpbmcuCisK ICsrKwogKiogVGhlIEVtYWNzIHNlcnZlciBub3cgaGFzIHNvY2tldC1sYXVuY2hpbmcgc3Vw cG9ydC4gIFRoaXMgYWxsb3dzCiBzb2NrZXQgYmFzZWQgYWN0aXZhdGlvbiwgd2hlcmUgYW4g ZXh0ZXJuYWwgcHJvY2VzcyBsaWtlIHN5c3RlbWQgY2FuCkBAIC0zOTMsNyArMzk2LDcgQEAg cHJvY2VkdXJlIGFuZCB0aGVyZWZvcmUgb2JleXMgc2F2aW5nIGhvb2tzLgogKiBDaGFuZ2Vz IGluIFNwZWNpYWxpemVkIE1vZGVzIGFuZCBQYWNrYWdlcyBpbiBFbWFjcyAyNi4xCiAKICoq KiBJbmZvIG1lbnUgYW5kIGluZGV4IGNvbXBsZXRpb24gdXNlcyBzdWJzdHJpbmcgY29tcGxl dGlvbiBieSBkZWZhdWx0LgotVGhpcyBjYW4gYmUgY3VzdG9taXplZCB2aWEgdGhlIGBpbmZv LW1lbnVgIGNhdGVnb3J5IGluCitUaGlzIGNhbiBiZSBjdXN0b21pemVkIHZpYSB0aGUgaW5m by1tZW51IGNhdGVnb3J5IGluCiBjb21wbGV0aW9uLWNhdGVnb3J5LW92ZXJyaWRlLgogCiAr KysKZGlmZiAtLWdpdCBhL3NyYy9ldmFsLmMgYi9zcmMvZXZhbC5jCmluZGV4IGFmMDkxMmYu LjAwMzAyNzEgMTAwNjQ0Ci0tLSBhL3NyYy9ldmFsLmMKKysrIGIvc3JjL2V2YWwuYwpAQCAt MTIyNSwxOCArMTIyNSwxNyBAQCB1c2FnZTogKGNvbmRpdGlvbi1jYXNlIFZBUiBCT0RZRk9S TSAmcmVzdCBIQU5ETEVSUykgICovKQogICAgcmF0aGVyIHRoYW4gcGFzc2VkIGluIGEgbGlz dC4gIFVzZWQgYnkgRmJ5dGVfY29kZS4gICovCiAKIExpc3BfT2JqZWN0Ci1pbnRlcm5hbF9s aXNwX2NvbmRpdGlvbl9jYXNlICh2b2xhdGlsZSBMaXNwX09iamVjdCB2YXIsIExpc3BfT2Jq ZWN0IGJvZHlmb3JtLAoraW50ZXJuYWxfbGlzcF9jb25kaXRpb25fY2FzZSAoTGlzcF9PYmpl Y3QgdmFyLCBMaXNwX09iamVjdCBib2R5Zm9ybSwKIAkJCSAgICAgIExpc3BfT2JqZWN0IGhh bmRsZXJzKQogewotICBMaXNwX09iamVjdCB2YWw7CiAgIHN0cnVjdCBoYW5kbGVyICpvbGRo YW5kbGVybGlzdCA9IGhhbmRsZXJsaXN0OwotICBpbnQgY2xhdXNlbmIgPSAwOworICBwdHJk aWZmX3QgY2xhdXNlbmIgPSAwOwogCiAgIENIRUNLX1NZTUJPTCAodmFyKTsKIAotICBmb3Ig KHZhbCA9IGhhbmRsZXJzOyBDT05TUCAodmFsKTsgdmFsID0gWENEUiAodmFsKSkKKyAgZm9y IChMaXNwX09iamVjdCB0YWlsID0gaGFuZGxlcnM7IENPTlNQICh0YWlsKTsgdGFpbCA9IFhD RFIgKHRhaWwpKQogICAgIHsKLSAgICAgIExpc3BfT2JqZWN0IHRlbSA9IFhDQVIgKHZhbCk7 CisgICAgICBMaXNwX09iamVjdCB0ZW0gPSBYQ0FSICh0YWlsKTsKICAgICAgIGNsYXVzZW5i Kys7CiAgICAgICBpZiAoISAoTklMUCAodGVtKQogCSAgICAgfHwgKENPTlNQICh0ZW0pCkBA IC0xMjQ2LDU1ICsxMjQ1LDU3IEBAIGludGVybmFsX2xpc3BfY29uZGl0aW9uX2Nhc2UgKHZv bGF0aWxlIExpc3BfT2JqZWN0IHZhciwgTGlzcF9PYmplY3QgYm9keWZvcm0sCiAJICAgICAg IFNEQVRBIChGcHJpbjFfdG9fc3RyaW5nICh0ZW0sIFF0KSkpOwogICAgIH0KIAotICB7IC8q IFRoZSBmaXJzdCBjbGF1c2UgaXMgdGhlIG9uZSB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZp cnN0LCBzbyBpdCBzaG91bGQKLSAgICAgICBiZSBhZGRlZCB0byBoYW5kbGVybGlzdCBsYXN0 LiAgU28gd2UgYnVpbGQgaW4gYGNsYXVzZXMnIGEgdGFibGUgdGhhdAotICAgICAgIGNvbnRh aW5zIGBoYW5kbGVycycgYnV0IGluIHJldmVyc2Ugb3JkZXIuICBTQUZFX0FMTE9DQSB3b24n dCB3b3JrCi0gICAgICAgaGVyZSBkdWUgdG8gdGhlIHNldGptcCwgc28gaW1wb3NlIGEgTUFY X0FMTE9DQSBsaW1pdC4gICovCi0gICAgaWYgKE1BWF9BTExPQ0EgLyB3b3JkX3NpemUgPCBj bGF1c2VuYikKLSAgICAgIG1lbW9yeV9mdWxsIChTSVpFX01BWCk7Ci0gICAgTGlzcF9PYmpl Y3QgKmNsYXVzZXMgPSBhbGxvY2EgKGNsYXVzZW5iICogc2l6ZW9mICpjbGF1c2VzKTsKLSAg ICBMaXNwX09iamVjdCAqdm9sYXRpbGUgY2xhdXNlc192b2xhdGlsZSA9IGNsYXVzZXM7Ci0g ICAgaW50IGkgPSBjbGF1c2VuYjsKLSAgICBmb3IgKHZhbCA9IGhhbmRsZXJzOyBDT05TUCAo dmFsKTsgdmFsID0gWENEUiAodmFsKSkKLSAgICAgIGNsYXVzZXNbLS1pXSA9IFhDQVIgKHZh bCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNsYXVzZW5iOyBpKyspCi0gICAgICB7Ci0JTGlz cF9PYmplY3QgY2xhdXNlID0gY2xhdXNlc1tpXTsKLQlMaXNwX09iamVjdCBjb25kaXRpb24g PSBDT05TUCAoY2xhdXNlKSA/IFhDQVIgKGNsYXVzZSkgOiBRbmlsOwotCWlmICghQ09OU1Ag KGNvbmRpdGlvbikpCi0JICBjb25kaXRpb24gPSBGY29ucyAoY29uZGl0aW9uLCBRbmlsKTsK LQlzdHJ1Y3QgaGFuZGxlciAqYyA9IHB1c2hfaGFuZGxlciAoY29uZGl0aW9uLCBDT05ESVRJ T05fQ0FTRSk7Ci0JaWYgKHN5c19zZXRqbXAgKGMtPmptcCkpCi0JICB7Ci0JICAgIHB0cmRp ZmZfdCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7Ci0JICAgIExpc3BfT2JqZWN0IHZhbCA9 IGhhbmRsZXJsaXN0LT52YWw7Ci0JICAgIExpc3BfT2JqZWN0ICpjaG9zZW5fY2xhdXNlID0g Y2xhdXNlc192b2xhdGlsZTsKLQkgICAgZm9yIChjID0gaGFuZGxlcmxpc3QtPm5leHQ7IGMg IT0gb2xkaGFuZGxlcmxpc3Q7IGMgPSBjLT5uZXh0KQotCSAgICAgIGNob3Nlbl9jbGF1c2Ur KzsKLQkgICAgaGFuZGxlcmxpc3QgPSBvbGRoYW5kbGVybGlzdDsKLQkgICAgaWYgKCFOSUxQ ICh2YXIpKQotCSAgICAgIHsKLQkJaWYgKCFOSUxQIChWaW50ZXJuYWxfaW50ZXJwcmV0ZXJf ZW52aXJvbm1lbnQpKQotCQkgIHNwZWNiaW5kIChRaW50ZXJuYWxfaW50ZXJwcmV0ZXJfZW52 aXJvbm1lbnQsCi0JCQkgICAgRmNvbnMgKEZjb25zICh2YXIsIHZhbCksCi0JCQkJICAgVmlu dGVybmFsX2ludGVycHJldGVyX2Vudmlyb25tZW50KSk7Ci0JCWVsc2UKLQkJICBzcGVjYmlu ZCAodmFyLCB2YWwpOwotCSAgICAgIH0KLQkgICAgdmFsID0gRnByb2duIChYQ0RSICgqY2hv c2VuX2NsYXVzZSkpOwotCSAgICAvKiBOb3RlIHRoYXQgdGhpcyBqdXN0IHVuZG9lcyB0aGUg YmluZGluZyBvZiB2YXI7IHdob2V2ZXIKLQkgICAgICAgbG9uZ2p1bXBlZCB0byB1cyB1bndv dW5kIHRoZSBzdGFjayB0byBjLnBkbGNvdW50IGJlZm9yZQotCSAgICAgICB0aHJvd2luZy4g ICovCi0JICAgIGlmICghTklMUCAodmFyKSkKLQkgICAgICB1bmJpbmRfdG8gKGNvdW50LCBR bmlsKTsKLQkgICAgcmV0dXJuIHZhbDsKLQkgIH0KLSAgICAgIH0KLSAgfQorICAvKiBUaGUg Zmlyc3QgY2xhdXNlIGlzIHRoZSBvbmUgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBmaXJzdCwg c28gaXQKKyAgICAgc2hvdWxkIGJlIGFkZGVkIHRvIGhhbmRsZXJsaXN0IGxhc3QuICBTbyBi dWlsZCBpbiBDTEFVU0VTIGEgdGFibGUKKyAgICAgdGhhdCBjb250YWlucyBIQU5ETEVSUyBi dXQgaW4gcmV2ZXJzZSBvcmRlci4gIENMQVVTRVMgaXMgcG9pbnRlcgorICAgICB0byB2b2xh dGlsZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBzZXRqbXAgYW5kIGxvY2FsIHN0b3JhZ2UuCisg ICAgIFNBRkVfQUxMT0NBIHdvbid0IHdvcmsgaGVyZSBkdWUgdG8gdGhlIHNldGptcCwgc28g aW1wb3NlIGEKKyAgICAgTUFYX0FMTE9DQSBsaW1pdC4gICovCisgIGlmIChNQVhfQUxMT0NB IC8gd29yZF9zaXplIDwgY2xhdXNlbmIpCisgICAgbWVtb3J5X2Z1bGwgKFNJWkVfTUFYKTsK KyAgTGlzcF9PYmplY3Qgdm9sYXRpbGUgKmNsYXVzZXMgPSBhbGxvY2EgKGNsYXVzZW5iICog c2l6ZW9mICpjbGF1c2VzKTsKKyAgY2xhdXNlcyArPSBjbGF1c2VuYjsKKyAgZm9yIChMaXNw X09iamVjdCB0YWlsID0gaGFuZGxlcnM7IENPTlNQICh0YWlsKTsgdGFpbCA9IFhDRFIgKHRh aWwpKQorICAgICotLWNsYXVzZXMgPSBYQ0FSICh0YWlsKTsKKyAgZm9yIChwdHJkaWZmX3Qg aSA9IDA7IGkgPCBjbGF1c2VuYjsgaSsrKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGNs YXVzZSA9IGNsYXVzZXNbaV07CisgICAgICBMaXNwX09iamVjdCBjb25kaXRpb24gPSBDT05T UCAoY2xhdXNlKSA/IFhDQVIgKGNsYXVzZSkgOiBRbmlsOworICAgICAgaWYgKCFDT05TUCAo Y29uZGl0aW9uKSkKKwljb25kaXRpb24gPSBsaXN0MSAoY29uZGl0aW9uKTsKKyAgICAgIHN0 cnVjdCBoYW5kbGVyICpjID0gcHVzaF9oYW5kbGVyIChjb25kaXRpb24sIENPTkRJVElPTl9D QVNFKTsKKyAgICAgIGlmIChzeXNfc2V0am1wIChjLT5qbXApKQorCXsKKwkgIExpc3BfT2Jq ZWN0IHZhbCA9IGhhbmRsZXJsaXN0LT52YWw7CisJICBMaXNwX09iamVjdCB2b2xhdGlsZSAq Y2hvc2VuX2NsYXVzZSA9IGNsYXVzZXM7CisJICBmb3IgKHN0cnVjdCBoYW5kbGVyICpoID0g aGFuZGxlcmxpc3QtPm5leHQ7IGggIT0gb2xkaGFuZGxlcmxpc3Q7CisJICAgICAgIGggPSBo LT5uZXh0KQorCSAgICBjaG9zZW5fY2xhdXNlKys7CisJICBMaXNwX09iamVjdCBoYW5kbGVy X2JvZHkgPSBYQ0RSICgqY2hvc2VuX2NsYXVzZSk7CisJICBoYW5kbGVybGlzdCA9IG9sZGhh bmRsZXJsaXN0OworCisJICBpZiAoTklMUCAodmFyKSkKKwkgICAgcmV0dXJuIEZwcm9nbiAo aGFuZGxlcl9ib2R5KTsKKworCSAgaWYgKCFOSUxQIChWaW50ZXJuYWxfaW50ZXJwcmV0ZXJf ZW52aXJvbm1lbnQpKQorCSAgICB7CisJICAgICAgdmFsID0gRmNvbnMgKEZjb25zICh2YXIs IHZhbCksCisJCQkgICBWaW50ZXJuYWxfaW50ZXJwcmV0ZXJfZW52aXJvbm1lbnQpOworCSAg ICAgIHZhciA9IFFpbnRlcm5hbF9pbnRlcnByZXRlcl9lbnZpcm9ubWVudDsKKwkgICAgfQor CisJICAvKiBCaW5kIFZBUiB0byBWQUwgd2hpbGUgZXZhbHVhdGluZyBIQU5ETEVSX0JPRFku ICBUaGUKKwkgICAgIHVuYmluZF90byBqdXN0IHVuZG9lcyBWQVIncyBiaW5kaW5nOyB3aG9l dmVyIGxvbmdqdW1wZWQKKwkgICAgIHRvIHVzIHVud291bmQgdGhlIHN0YWNrIHRvIEMtPnBk bGNvdW50IGJlZm9yZSB0aHJvd2luZy4gICovCisJICBwdHJkaWZmX3QgY291bnQgPSBTUEVD UERMX0lOREVYICgpOworCSAgc3BlY2JpbmQgKHZhciwgdmFsKTsKKwkgIHJldHVybiB1bmJp bmRfdG8gKGNvdW50LCBGcHJvZ24gKGhhbmRsZXJfYm9keSkpOworCX0KKyAgICB9CiAKLSAg dmFsID0gZXZhbF9zdWIgKGJvZHlmb3JtKTsKKyAgTGlzcF9PYmplY3QgcmVzdWx0ID0gZXZh bF9zdWIgKGJvZHlmb3JtKTsKICAgaGFuZGxlcmxpc3QgPSBvbGRoYW5kbGVybGlzdDsKLSAg cmV0dXJuIHZhbDsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogQ2FsbCB0aGUgZnVuY3Rp b24gQkZVTiB3aXRoIG5vIGFyZ3VtZW50cywgY2F0Y2hpbmcgZXJyb3JzIHdpdGhpbiBpdAot LSAKMi45LjMKCg== --------------315D76D9A6BC521EABA538C7--