Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:67024 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 84751 invoked from network); 10 Apr 2013 11:57:31 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 10 Apr 2013 11:57:31 -0000 Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=unknown; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain zend.com does not designate 209.85.212.53 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 209.85.212.53 mail-vb0-f53.google.com Received: from [209.85.212.53] ([209.85.212.53:34193] helo=mail-vb0-f53.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id FE/33-59188-AA355615 for ; Wed, 10 Apr 2013 07:57:31 -0400 Received: by mail-vb0-f53.google.com with SMTP id i3so272763vbh.40 for ; Wed, 10 Apr 2013 04:57:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to:cc :content-type:x-gm-message-state; bh=4UWAPJzhvcPxzLevhXxC3GDFCkLyoQFnSSouRuF86l4=; b=HurAoaJTxIKw7O7sSgwEK4eA+05y61PgJ1bEG/rR5x4QG39x+02FPD4MwgbsheTByS DBjwJhXk3DMRUX3IOj84cfjoldDaaZQhsEcMEk1m/mfL5M1PEpUg1Ty8loTIXt36v7wd tHiwNTGeSJSWnMwGgJHJhqtYI7meSxVyVCNTLYlVe5fGDlYcqxZ9DdepscYb6owt8Hw6 7ju/8zdvaiTVNDRjywOy22+R7/Wtg6Uz2ye2NTEG+gxvs2gZV+Ms2E9ryhA1rIVwu8Jc K65CGEQhwRK5oeOYw4ToDLY9oURQtUKih0GLGIOlXU/uNXk53g1a+2ew1Csh+BFgB0PW BVHQ== MIME-Version: 1.0 X-Received: by 10.220.76.129 with SMTP id c1mr1139383vck.48.1365595047226; Wed, 10 Apr 2013 04:57:27 -0700 (PDT) Received: by 10.58.95.226 with HTTP; Wed, 10 Apr 2013 04:57:27 -0700 (PDT) Date: Wed, 10 Apr 2013 15:57:27 +0400 Message-ID: To: PHP Internals , Julien Pauli Cc: Rasmus Lerdorf , Zeev Suraski Content-Type: multipart/mixed; boundary=001a11c2af00b2819004da005f5b X-Gm-Message-State: ALoCoQm12QbjepL+4avPj4IjVfMqEOslnjVF3YS2+D9WdXZYAZ6U801dkTFWZPCOxqqEoAWeH0z7BoJ3G21DxGW8mvL5VReF+fLHLFLi3/AI3a0OU1BXWWvdprd/VzB5XAiwCEBcPa8I Subject: OPcache optimizer improvement in PHP-5.5? From: dmitry@zend.com (Dmitry Stogov) --001a11c2af00b2819004da005f5b Content-Type: multipart/alternative; boundary=001a11c2af00b2818c04da005f59 --001a11c2af00b2818c04da005f59 Content-Type: text/plain; charset=UTF-8 Hi, Recently, I've found that OPcache optimizer misses a lot of abilities, because it handles only one op_array at once. So it definitely can't perform any inter-function optimizations (e.g. inlining). Actually, it was not very difficult to switch to "script at once" approach. The attached patch demonstrates it and adds per script constants substitution explained in the following script Of course, I ran the PHP test suite and it passed all the same tests. Personally, I think it's safe to include this patch into 5.5 and make a green light to some other advanced optimizations in 5.5. (e.g. conversion INIT_FCALL_BY_NAME into DO_FCALL). Any thoughts? Thanks. Dmitry. --001a11c2af00b2818c04da005f59 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Recently, I've found that O= Pcache optimizer misses a lot of abilities, because it handles only one op_= array at once. So it definitely can't perform any inter-function optimi= zations (e.g. inlining).

Actually, it was not very difficult to switch to "scrip= t at once" approach.
The attached patch demonstrates it = and adds per script constants substitution explained in the following scrip= t

<?php
define("FOO", 1);
=
function foo() {
=C2=A0=C2=A0=C2=A0 echo FOO . "\n&= quot;; // optimizer will replace it with: echo "1\n";
}
?>

Of course, I ran the PHP test suite and it p= assed all the same tests.
Personally, I think it's safe t= o include this patch into 5.5 and make a green light to some other advanced= optimizations in 5.5. (e.g. conversion INIT_FCALL_BY_NAME into DO_FCALL).<= br>
Any thoughts?

Thanks. Dmitry.
--001a11c2af00b2818c04da005f59-- --001a11c2af00b2819004da005f5b Content-Type: text/plain; charset=US-ASCII; name="opcache.diff.txt" Content-Disposition: attachment; filename="opcache.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hfcfz5yw0 ZGlmZiAtLWdpdCBhL2V4dC9vcGNhY2hlL09wdGltaXplci9wYXNzMV81LmMgYi9leHQvb3BjYWNo ZS9PcHRpbWl6ZXIvcGFzczFfNS5jCmluZGV4IGRjOWU3MzEuLjNhMzI5NzAgMTAwNjQ0Ci0tLSBh L2V4dC9vcGNhY2hlL09wdGltaXplci9wYXNzMV81LmMKKysrIGIvZXh0L29wY2FjaGUvT3B0aW1p emVyL3Bhc3MxXzUuYwpAQCAtMTAsNiArMTAsNyBAQCBpZiAoWkVORF9PUFRJTUlaRVJfUEFTU18x ICYgT1BUSU1JWkFUSU9OX0xFVkVMKSB7CiAJaW50IGkgPSAwOwogCXplbmRfb3AgKm9wbGluZSA9 IG9wX2FycmF5LT5vcGNvZGVzOwogCXplbmRfb3AgKmVuZCA9IG9wbGluZSArIG9wX2FycmF5LT5s YXN0OworCXplbmRfYm9vbCBjb2xsZWN0X2NvbnN0YW50cyA9IChvcF9hcnJheSA9PSAmc2NyaXB0 LT5tYWluX29wX2FycmF5KTsKIAogCXdoaWxlIChvcGxpbmUgPCBlbmQpIHsKIAkJc3dpdGNoIChv cGxpbmUtPm9wY29kZSkgewpAQCAtMzU3LDcgKzM1OCw5IEBAIGlmIChaRU5EX09QVElNSVpFUl9Q QVNTXzEgJiBPUFRJTUlaQVRJT05fTEVWRUwpIHsKIAkJCQl6dmFsIGM7CiAKIAkJCQlpZiAoIXpl bmRfZ2V0X3BlcnNpc3RlbnRfY29uc3RhbnQoWl9TVFJWQUwoWkVORF9PUDJfTElURVJBTChvcGxp bmUpKSwgWl9TVFJMRU4oWkVORF9PUDJfTElURVJBTChvcGxpbmUpKSwgJmMsIDEgVFNSTUxTX0ND KSkgewotCQkJCQlicmVhazsKKwkJCQkJaWYgKCEqY29uc3RhbnRzIHx8ICF6ZW5kX29wdGltaXpl cl9nZXRfY29sbGVjdGVkX2NvbnN0YW50KCpjb25zdGFudHMsICZaRU5EX09QMl9MSVRFUkFMKG9w bGluZSksICZjKSkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQl9CiAJCQkJbGl0ZXJhbF9k dG9yKCZaRU5EX09QMl9MSVRFUkFMKG9wbGluZSkpOwogCQkJCVpFTkRfT1AxX1RZUEUob3BsaW5l KSA9IElTX0NPTlNUOwpAQCAtMzg4LDYgKzM5MSw3MSBAQCBpZiAoWkVORF9PUFRJTUlaRVJfUEFT U18xICYgT1BUSU1JWkFUSU9OX0xFVkVMKSB7CiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CisJCWNh c2UgWkVORF9ET19GQ0FMTDoKKwkJCS8qIGRlZmluZSgibmFtZSIsIHNjYWxhcik7ICovCisJCQlp ZiAoY29sbGVjdF9jb25zdGFudHMgJiYKKwkJCSAgICBvcGxpbmUtPmV4dGVuZGVkX3ZhbHVlID09 IDIgJiYKKwkJCSAgICBaRU5EX09QMV9UWVBFKG9wbGluZSkgPT0gSVNfQ09OU1QgJiYKKwkJCSAg ICBaX1RZUEUoWkVORF9PUDFfTElURVJBTChvcGxpbmUpKSA9PSBJU19TVFJJTkcgJiYKKwkJCSAg ICBaX1NUUkxFTihaRU5EX09QMV9MSVRFUkFMKG9wbGluZSkpID09IHNpemVvZigiZGVmaW5lIikt MSAmJgorCQkJICAgIHplbmRfYmluYXJ5X3N0cmNhc2VjbXAoWl9TVFJWQUwoWkVORF9PUDFfTElU RVJBTChvcGxpbmUpKSwgWl9TVFJMRU4oWkVORF9PUDFfTElURVJBTChvcGxpbmUpKSwgImRlZmlu ZSIsIHNpemVvZigiZGVmaW5lIiktMSkgPT0gMCAmJgorCQkJICAgIChvcGxpbmUtMSktPm9wY29k ZSA9PSBaRU5EX1NFTkRfVkFMICYmCisJCQkgICAgWkVORF9PUDFfVFlQRShvcGxpbmUtMSkgPT0g SVNfQ09OU1QgJiYKKwkJCSAgICAoWl9UWVBFKFpFTkRfT1AxX0xJVEVSQUwob3BsaW5lLTEpKSA8 PSBJU19CT09MIHx8CisJCQkgICAgIFpfVFlQRShaRU5EX09QMV9MSVRFUkFMKG9wbGluZS0xKSkg PT0gSVNfU1RSSU5HKSAmJgorCQkJICAgIChvcGxpbmUtMiktPm9wY29kZSA9PSBaRU5EX1NFTkRf VkFMICYmCisJCQkgICAgWkVORF9PUDFfVFlQRShvcGxpbmUtMikgPT0gSVNfQ09OU1QgJiYKKwkJ CSAgICBaX1RZUEUoWkVORF9PUDFfTElURVJBTChvcGxpbmUtMikpID09IElTX1NUUklORykgewor CQkJCXplbmRfb3B0aW1pemVyX2NvbGxlY3RfY29uc3RhbnQoY29uc3RhbnRzLCAmWkVORF9PUDFf TElURVJBTChvcGxpbmUtMiksICZaRU5EX09QMV9MSVRFUkFMKG9wbGluZS0xKSk7CisJCQl9CisJ CQlicmVhazsKKyNpZiBaRU5EX0VYVEVOU0lPTl9BUElfTk8gPiBQSFBfNV8yX1hfQVBJX05PCisJ CWNhc2UgWkVORF9ERUNMQVJFX0NPTlNUOgorCQkJaWYgKGNvbGxlY3RfY29uc3RhbnRzICYmCisJ CQkgICAgWl9UWVBFKFpFTkRfT1AxX0xJVEVSQUwob3BsaW5lKSkgPT0gSVNfU1RSSU5HICYmCisJ CQkgICAgKFpfVFlQRShaRU5EX09QMl9MSVRFUkFMKG9wbGluZSkpIDw9IElTX0JPT0wgfHwKKwkJ CSAgICAgWl9UWVBFKFpFTkRfT1AyX0xJVEVSQUwob3BsaW5lKSkgPT0gSVNfU1RSSU5HKSkgewor CQkJCXplbmRfb3B0aW1pemVyX2NvbGxlY3RfY29uc3RhbnQoY29uc3RhbnRzLCAmWkVORF9PUDFf TElURVJBTChvcGxpbmUpLCAmWkVORF9PUDJfTElURVJBTChvcGxpbmUpKTsKKwkJCX0KKwkJCWJy ZWFrOworI2VuZGlmCisKKwkJY2FzZSBaRU5EX1JFVFVSTjoKKyNpZiBaRU5EX0VYVEVOU0lPTl9B UElfTk8gPiBQSFBfNV8zX1hfQVBJX05PCisJCWNhc2UgWkVORF9SRVRVUk5fQllfUkVGOgorI2Vu ZGlmCisjaWYgWkVORF9FWFRFTlNJT05fQVBJX05PID4gUEhQXzVfNF9YX0FQSV9OTworCQljYXNl IFpFTkRfR0VORVJBVE9SX1JFVFVSTjoKKyNlbmRpZgorCQljYXNlIFpFTkRfRVhJVDoKKwkJY2Fz ZSBaRU5EX1RIUk9XOgorCQljYXNlIFpFTkRfQ0FUQ0g6CisJCWNhc2UgWkVORF9CUks6CisJCWNh c2UgWkVORF9DT05UOgorI2lmIFpFTkRfRVhURU5TSU9OX0FQSV9OTyA+PSBQSFBfNV8zX1hfQVBJ X05PCisJCWNhc2UgWkVORF9HT1RPOgorI2VuZGlmCisjaWYgWkVORF9FWFRFTlNJT05fQVBJX05P ID4gUEhQXzVfNF9YX0FQSV9OTworCQljYXNlIFpFTkRfRkFTVF9DQUxMOgorCQljYXNlIFpFTkRf RkFTVF9SRVQ6CisjZW5kaWYKKwkJY2FzZSBaRU5EX0pNUDoKKwkJY2FzZSBaRU5EX0pNUFpOWjoK KwkJY2FzZSBaRU5EX0pNUFo6CisJCWNhc2UgWkVORF9KTVBOWjoKKwkJY2FzZSBaRU5EX0pNUFpf RVg6CisJCWNhc2UgWkVORF9KTVBOWl9FWDoKKwkJY2FzZSBaRU5EX0ZFX1JFU0VUOgorCQljYXNl IFpFTkRfRkVfRkVUQ0g6CisJCWNhc2UgWkVORF9ORVc6CisjaWYgWkVORF9FWFRFTlNJT05fQVBJ X05PID49IFBIUF81XzNfWF9BUElfTk8KKwkJY2FzZSBaRU5EX0pNUF9TRVQ6CisjZW5kaWYKKyNp ZiBaRU5EX0VYVEVOU0lPTl9BUElfTk8gPiBQSFBfNV8zX1hfQVBJX05PCisJCWNhc2UgWkVORF9K TVBfU0VUX1ZBUjoKKyNlbmRpZgorCQkJY29sbGVjdF9jb25zdGFudHMgPSAwOworCQkJYnJlYWs7 CiAJCX0KIAkJb3BsaW5lKys7CiAJCWkrKzsKZGlmZiAtLWdpdCBhL2V4dC9vcGNhY2hlL09wdGlt aXplci96ZW5kX29wdGltaXplci5jIGIvZXh0L29wY2FjaGUvT3B0aW1pemVyL3plbmRfb3B0aW1p emVyLmMKaW5kZXggYjU3NGVjYy4uOTJmNWY0YSAxMDA2NDQKLS0tIGEvZXh0L29wY2FjaGUvT3B0 aW1pemVyL3plbmRfb3B0aW1pemVyLmMKKysrIGIvZXh0L29wY2FjaGUvT3B0aW1pemVyL3plbmRf b3B0aW1pemVyLmMKQEAgLTI0LDI4ICsyNCw0NyBAQAogI2luY2x1ZGUgInplbmRfQVBJLmgiDQog I2luY2x1ZGUgInplbmRfY29uc3RhbnRzLmgiDQogI2luY2x1ZGUgInplbmRfZXhlY3V0ZS5oIg0K KyNpbmNsdWRlICJ6ZW5kX3ZtLmgiDQogDQogI2RlZmluZSBPUFRJTUlaQVRJT05fTEVWRUwgXA0K IAlaQ0coYWNjZWxfZGlyZWN0aXZlcykub3B0aW1pemF0aW9uX2xldmVsDQogDQorc3RhdGljIHZv aWQgemVuZF9vcHRpbWl6ZXJfenZhbF9kdG9yX3dyYXBwZXIoenZhbCAqenZhbHVlKQ0KK3sNCisJ enZhbF9kdG9yKHp2YWx1ZSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHplbmRfb3B0aW1pemVyX2Nv bGxlY3RfY29uc3RhbnQoSGFzaFRhYmxlICoqY29uc3RhbnRzLCB6dmFsICpuYW1lLCB6dmFsKiB2 YWx1ZSkNCit7DQorCXp2YWwgdmFsOw0KKw0KKwlpZiAoISpjb25zdGFudHMpIHsNCisJCSpjb25z dGFudHMgPSBlbWFsbG9jKHNpemVvZihIYXNoVGFibGUpKTsNCisJCXplbmRfaGFzaF9pbml0KCpj b25zdGFudHMsIDE2LCBOVUxMLCAodm9pZCAoKikodm9pZCAqKSl6ZW5kX29wdGltaXplcl96dmFs X2R0b3Jfd3JhcHBlciwgMCk7DQorCX0NCisJdmFsID0gKnZhbHVlOw0KKwl6dmFsX2NvcHlfY3Rv cigmdmFsKTsNCisJemVuZF9oYXNoX2FkZCgqY29uc3RhbnRzLCBaX1NUUlZBTF9QKG5hbWUpLCBa X1NUUkxFTl9QKG5hbWUpKzEsICh2b2lkKiopJnZhbCwgc2l6ZW9mKHp2YWwpLCBOVUxMKTsNCit9 DQorDQorc3RhdGljIGludCB6ZW5kX29wdGltaXplcl9nZXRfY29sbGVjdGVkX2NvbnN0YW50KEhh c2hUYWJsZSAqY29uc3RhbnRzLCB6dmFsICpuYW1lLCB6dmFsKiB2YWx1ZSkNCit7DQorCXp2YWwg KnZhbDsNCisNCisJaWYgKHplbmRfaGFzaF9maW5kKGNvbnN0YW50cywgWl9TVFJWQUxfUChuYW1l KSwgWl9TVFJMRU5fUChuYW1lKSsxLCAodm9pZCoqKSZ2YWwpID09IFNVQ0NFU1MpIHsNCisJCSp2 YWx1ZSA9ICp2YWw7DQorCQl6dmFsX2NvcHlfY3Rvcih2YWx1ZSk7DQorCQlyZXR1cm4gMTsNCisJ fQ0KKwlyZXR1cm4gMDsNCit9DQorDQogI2lmIFpFTkRfRVhURU5TSU9OX0FQSV9OTyA+IFBIUF81 XzNfWF9BUElfTk8NCiBpbnQgemVuZF9vcHRpbWl6ZXJfYWRkX2xpdGVyYWwoemVuZF9vcF9hcnJh eSAqb3BfYXJyYXksIGNvbnN0IHp2YWwgKnp2IFRTUk1MU19EQykNCiB7DQogCWludCBpID0gb3Bf YXJyYXktPmxhc3RfbGl0ZXJhbDsNCiAJb3BfYXJyYXktPmxhc3RfbGl0ZXJhbCsrOw0KLSNpZiBa RU5EX0VYVEVOU0lPTl9BUElfTk8gPiBQSFBfNV8zX1hfQVBJX05PDQotCXsNCi0JCWlmIChpID49 IENHKGNvbnRleHQpLmxpdGVyYWxzX3NpemUpIHsNCi0JCQlDRyhjb250ZXh0KS5saXRlcmFsc19z aXplICs9IDE2OyAvKiBGSVhNRSAqLw0KLQkJCW9wX2FycmF5LT5saXRlcmFscyA9ICh6ZW5kX2xp dGVyYWwqKWVyZWFsbG9jKG9wX2FycmF5LT5saXRlcmFscywgQ0coY29udGV4dCkubGl0ZXJhbHNf c2l6ZSAqIHNpemVvZih6ZW5kX2xpdGVyYWwpKTsNCi0JCX0NCi0JfQ0KLSNlbHNlDQotCWlmIChp ID49IG9wX2FycmF5LT5zaXplX2xpdGVyYWwpIHsNCi0JCW9wX2FycmF5LT5zaXplX2xpdGVyYWwg Kz0gMTY7IC8qIEZJWE1FICovDQotCQlvcF9hcnJheS0+bGl0ZXJhbHMgPSAoemVuZF9saXRlcmFs KillcmVhbGxvYyhvcF9hcnJheS0+bGl0ZXJhbHMsIG9wX2FycmF5LT5zaXplX2xpdGVyYWwgKiBz aXplb2YoemVuZF9saXRlcmFsKSk7DQotCX0NCi0jZW5kaWYNCisJb3BfYXJyYXktPmxpdGVyYWxz ID0gKHplbmRfbGl0ZXJhbCopZXJlYWxsb2Mob3BfYXJyYXktPmxpdGVyYWxzLCBvcF9hcnJheS0+ bGFzdF9saXRlcmFsICogc2l6ZW9mKHplbmRfbGl0ZXJhbCkpOw0KIAlvcF9hcnJheS0+bGl0ZXJh bHNbaV0uY29uc3RhbnQgPSAqenY7DQogCVpfU0VUX1JFRkNPVU5UKG9wX2FycmF5LT5saXRlcmFs c1tpXS5jb25zdGFudCwgMik7DQogCVpfU0VUX0lTUkVGKG9wX2FycmF5LT5saXRlcmFsc1tpXS5j b25zdGFudCk7DQpAQCAtOTIsNyArMTExLDkgQEAgaW50IHplbmRfb3B0aW1pemVyX2FkZF9saXRl cmFsKHplbmRfb3BfYXJyYXkgKm9wX2FycmF5LCBjb25zdCB6dmFsICp6diBUU1JNTFNfREMKICNp bmNsdWRlICJPcHRpbWl6ZXIvYmxvY2tfcGFzcy5jIg0KICNpbmNsdWRlICJPcHRpbWl6ZXIvb3B0 aW1pemVfdGVtcF92YXJzXzUuYyINCiANCi12b2lkIHplbmRfb3B0aW1pemVyKHplbmRfb3BfYXJy YXkgKm9wX2FycmF5IFRTUk1MU19EQykNCitzdGF0aWMgdm9pZCB6ZW5kX29wdGltaXplKHplbmRf b3BfYXJyYXkgICAgICAgICAgICpvcF9hcnJheSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg IHplbmRfcGVyc2lzdGVudF9zY3JpcHQgICpzY3JpcHQsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICBIYXNoVGFibGUgICAgICAgICAgICAgICoqY29uc3RhbnRzIFRTUk1MU19EQykNCiB7DQog CWlmIChvcF9hcnJheS0+dHlwZSA9PSBaRU5EX0VWQUxfQ09ERSB8fA0KIAkgICAgKG9wX2FycmF5 LT5mbl9mbGFncyAmIFpFTkRfQUNDX0lOVEVSQUNUSVZFKSkgew0KQEAgLTEzNywzICsxNTgsMTMz IEBAIHZvaWQgemVuZF9vcHRpbWl6ZXIoemVuZF9vcF9hcnJheSAqb3BfYXJyYXkgVFNSTUxTX0RD KQogCSAqLw0KICNpbmNsdWRlICJPcHRpbWl6ZXIvcGFzczEwLmMiDQogfQ0KKw0KK3N0YXRpYyB2 b2lkIHplbmRfYWNjZWxfb3B0aW1pemUoemVuZF9vcF9hcnJheSAgICAgICAgICAgKm9wX2FycmF5 LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVuZF9wZXJzaXN0ZW50X3Njcmlw dCAgKnNjcmlwdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2hUYWJsZSAg ICAgICAgICAgICAgKipjb25zdGFudHMgVFNSTUxTX0RDKQ0KK3sNCisJemVuZF9vcCAqb3BsaW5l LCAqZW5kOw0KKw0KKwkvKiBSZXZlcnQgcGFzc190d28oKSAqLw0KKwlvcGxpbmUgPSBvcF9hcnJh eS0+b3Bjb2RlczsNCisJZW5kID0gb3BsaW5lICsgb3BfYXJyYXktPmxhc3Q7DQorCXdoaWxlIChv cGxpbmUgPCBlbmQpIHsNCisjaWYgWkVORF9FWFRFTlNJT05fQVBJX05PID4gUEhQXzVfM19YX0FQ SV9OTw0KKwkJaWYgKG9wbGluZS0+b3AxX3R5cGUgPT0gSVNfQ09OU1QpIHsNCisJCQlvcGxpbmUt Pm9wMS5jb25zdGFudCA9IG9wbGluZS0+b3AxLmxpdGVyYWwgLSBvcF9hcnJheS0+bGl0ZXJhbHM7 DQorCQl9DQorCQlpZiAob3BsaW5lLT5vcDJfdHlwZSA9PSBJU19DT05TVCkgew0KKwkJCW9wbGlu ZS0+b3AyLmNvbnN0YW50ID0gb3BsaW5lLT5vcDIubGl0ZXJhbCAtIG9wX2FycmF5LT5saXRlcmFs czsNCisJCX0NCisjZW5kaWYNCisJCXN3aXRjaCAob3BsaW5lLT5vcGNvZGUpIHsNCisJCQljYXNl IFpFTkRfSk1QOg0KKyNpZiBaRU5EX0VYVEVOU0lPTl9BUElfTk8gPiBQSFBfNV8yX1hfQVBJX05P DQorCQkJY2FzZSBaRU5EX0dPVE86DQorI2VuZGlmDQorI2lmIFpFTkRfRVhURU5TSU9OX0FQSV9O TyA+IFBIUF81XzRfWF9BUElfTk8NCisJCQljYXNlIFpFTkRfRkFTVF9DQUxMOg0KKyNlbmRpZg0K KwkJCQlaRU5EX09QMShvcGxpbmUpLm9wbGluZV9udW0gPSBaRU5EX09QMShvcGxpbmUpLmptcF9h ZGRyIC0gb3BfYXJyYXktPm9wY29kZXM7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgWkVORF9KTVBa Og0KKwkJCWNhc2UgWkVORF9KTVBOWjoNCisJCQljYXNlIFpFTkRfSk1QWl9FWDoNCisJCQljYXNl IFpFTkRfSk1QTlpfRVg6DQorI2lmIFpFTkRfRVhURU5TSU9OX0FQSV9OTyA+IFBIUF81XzJfWF9B UElfTk8NCisJCQljYXNlIFpFTkRfSk1QX1NFVDoNCisjZW5kaWYNCisjaWYgWkVORF9FWFRFTlNJ T05fQVBJX05PID4gUEhQXzVfM19YX0FQSV9OTw0KKwkJCWNhc2UgWkVORF9KTVBfU0VUX1ZBUjoN CisjZW5kaWYNCisJCQkJWkVORF9PUDIob3BsaW5lKS5vcGxpbmVfbnVtID0gWkVORF9PUDIob3Bs aW5lKS5qbXBfYWRkciAtIG9wX2FycmF5LT5vcGNvZGVzOw0KKwkJCQlicmVhazsNCisJCX0NCisJ CW9wbGluZSsrOw0KKwl9DQorDQorCS8qIERvIGFjdHVhbCBvcHRpbWl6YXRpb25zICovDQorCXpl bmRfb3B0aW1pemUob3BfYXJyYXksIHNjcmlwdCwgY29uc3RhbnRzIFRTUk1MU19DQyk7CQ0KKwkN CisJLyogUmVkbyBwYXNzX3R3bygpICovDQorCW9wbGluZSA9IG9wX2FycmF5LT5vcGNvZGVzOw0K KwllbmQgPSBvcGxpbmUgKyBvcF9hcnJheS0+bGFzdDsNCisJd2hpbGUgKG9wbGluZSA8IGVuZCkg ew0KKyNpZiBaRU5EX0VYVEVOU0lPTl9BUElfTk8gPiBQSFBfNV8zX1hfQVBJX05PDQorCQlpZiAo b3BsaW5lLT5vcDFfdHlwZSA9PSBJU19DT05TVCkgew0KKwkJCW9wbGluZS0+b3AxLnp2ID0gJm9w X2FycmF5LT5saXRlcmFsc1tvcGxpbmUtPm9wMS5jb25zdGFudF0uY29uc3RhbnQ7DQorCQl9DQor CQlpZiAob3BsaW5lLT5vcDJfdHlwZSA9PSBJU19DT05TVCkgew0KKwkJCW9wbGluZS0+b3AyLnp2 ID0gJm9wX2FycmF5LT5saXRlcmFsc1tvcGxpbmUtPm9wMi5jb25zdGFudF0uY29uc3RhbnQ7DQor CQl9DQorI2VuZGlmDQorCQlzd2l0Y2ggKG9wbGluZS0+b3Bjb2RlKSB7DQorCQkJY2FzZSBaRU5E X0pNUDoNCisjaWYgWkVORF9FWFRFTlNJT05fQVBJX05PID4gUEhQXzVfMl9YX0FQSV9OTw0KKwkJ CWNhc2UgWkVORF9HT1RPOg0KKyNlbmRpZg0KKyNpZiBaRU5EX0VYVEVOU0lPTl9BUElfTk8gPiBQ SFBfNV80X1hfQVBJX05PDQorCQkJY2FzZSBaRU5EX0ZBU1RfQ0FMTDoNCisjZW5kaWYNCisJCQkJ WkVORF9PUDEob3BsaW5lKS5qbXBfYWRkciA9ICZvcF9hcnJheS0+b3Bjb2Rlc1taRU5EX09QMShv cGxpbmUpLm9wbGluZV9udW1dOw0KKwkJCQlicmVhazsNCisJCQljYXNlIFpFTkRfSk1QWjoNCisJ CQljYXNlIFpFTkRfSk1QTlo6DQorCQkJY2FzZSBaRU5EX0pNUFpfRVg6DQorCQkJY2FzZSBaRU5E X0pNUE5aX0VYOg0KKyNpZiBaRU5EX0VYVEVOU0lPTl9BUElfTk8gPiBQSFBfNV8yX1hfQVBJX05P DQorCQkJY2FzZSBaRU5EX0pNUF9TRVQ6DQorI2VuZGlmDQorI2lmIFpFTkRfRVhURU5TSU9OX0FQ SV9OTyA+IFBIUF81XzNfWF9BUElfTk8NCisJCQljYXNlIFpFTkRfSk1QX1NFVF9WQVI6DQorI2Vu ZGlmDQorCQkJCVpFTkRfT1AyKG9wbGluZSkuam1wX2FkZHIgPSAmb3BfYXJyYXktPm9wY29kZXNb WkVORF9PUDIob3BsaW5lKS5vcGxpbmVfbnVtXTsNCisJCQkJYnJlYWs7DQorCQl9DQorCQlaRU5E X1ZNX1NFVF9PUENPREVfSEFORExFUihvcGxpbmUpOw0KKwkJb3BsaW5lKys7DQorCX0NCit9DQor DQoraW50IHplbmRfYWNjZWxfc2NyaXB0X29wdGltaXplKHplbmRfcGVyc2lzdGVudF9zY3JpcHQg KnNjcmlwdCBUU1JNTFNfREMpDQorew0KKwlCdWNrZXQgKnAsICpxOw0KKwlIYXNoVGFibGUgKmNv bnN0YW50cyA9IE5VTEw7DQorDQorCXplbmRfYWNjZWxfb3B0aW1pemUoJnNjcmlwdC0+bWFpbl9v cF9hcnJheSwgc2NyaXB0LCAmY29uc3RhbnRzIFRTUk1MU19DQyk7DQorDQorCXAgPSBzY3JpcHQt PmZ1bmN0aW9uX3RhYmxlLnBMaXN0SGVhZDsNCisJd2hpbGUgKHApIHsNCisJCXplbmRfb3BfYXJy YXkgKm9wX2FycmF5ID0gKHplbmRfb3BfYXJyYXkqKXAtPnBEYXRhOw0KKwkJemVuZF9hY2NlbF9v cHRpbWl6ZShvcF9hcnJheSwgc2NyaXB0LCAmY29uc3RhbnRzIFRTUk1MU19DQyk7DQorCQlwID0g cC0+cExpc3ROZXh0Ow0KKwl9DQorDQorCXAgPSBzY3JpcHQtPmNsYXNzX3RhYmxlLnBMaXN0SGVh ZDsNCisJd2hpbGUgKHApIHsNCisJCXplbmRfY2xhc3NfZW50cnkgKmNlID0gKHplbmRfY2xhc3Nf ZW50cnkqKXAtPnBEYXRhUHRyOw0KKwkJcSA9IGNlLT5mdW5jdGlvbl90YWJsZS5wTGlzdEhlYWQ7 DQorCQl3aGlsZSAocSkgew0KKwkJCXplbmRfb3BfYXJyYXkgKm9wX2FycmF5ID0gKHplbmRfb3Bf YXJyYXkqKXEtPnBEYXRhOw0KKwkJCWlmIChvcF9hcnJheS0+c2NvcGUgPT0gY2UpIHsNCisJCQkJ emVuZF9hY2NlbF9vcHRpbWl6ZShvcF9hcnJheSwgc2NyaXB0LCAmY29uc3RhbnRzIFRTUk1MU19D Qyk7DQorCQkJfSBlbHNlIGlmIChvcF9hcnJheS0+dHlwZSA9PSBaRU5EX1VTRVJfRlVOQ1RJT04p IHsNCisJCQkJemVuZF9vcF9hcnJheSAqb3JpZ19vcF9hcnJheTsNCisJCQkJaWYgKHplbmRfaGFz aF9maW5kKCZvcF9hcnJheS0+c2NvcGUtPmZ1bmN0aW9uX3RhYmxlLCBxLT5hcktleSwgcS0+bktl eUxlbmd0aCwgKHZvaWQqKikmb3JpZ19vcF9hcnJheSkgPT0gU1VDQ0VTUykgew0KKwkJCQkJSGFz aFRhYmxlICpodCA9IG9wX2FycmF5LT5zdGF0aWNfdmFyaWFibGVzOw0KKwkJCQkJKm9wX2FycmF5 ID0gKm9yaWdfb3BfYXJyYXk7DQorCQkJCQlvcF9hcnJheS0+c3RhdGljX3ZhcmlhYmxlcyA9IGh0 Ow0KKwkJCQl9DQorCQkJfQ0KKwkJCXEgPSBxLT5wTGlzdE5leHQ7DQorCQl9DQorCQlwID0gcC0+ cExpc3ROZXh0Ow0KKwl9DQorDQorCWlmIChjb25zdGFudHMpIHsNCisJCXplbmRfaGFzaF9kZXN0 cm95KGNvbnN0YW50cyk7DQorCQllZnJlZShjb25zdGFudHMpOw0KKwl9DQorDQorCXJldHVybiAx Ow0KK30NCmRpZmYgLS1naXQgYS9leHQvb3BjYWNoZS9PcHRpbWl6ZXIvemVuZF9vcHRpbWl6ZXIu aCBiL2V4dC9vcGNhY2hlL09wdGltaXplci96ZW5kX29wdGltaXplci5oCmluZGV4IDk4Mjc1YTIu LjE3NzU5OTQgMTAwNjQ0Ci0tLSBhL2V4dC9vcGNhY2hlL09wdGltaXplci96ZW5kX29wdGltaXpl ci5oCisrKyBiL2V4dC9vcGNhY2hlL09wdGltaXplci96ZW5kX29wdGltaXplci5oCkBAIC00NCw2 ICs0NCw0IEBACiANCiAjZGVmaW5lIERFRkFVTFRfT1BUSU1JWkFUSU9OX0xFVkVMICAiMHhGRkZG RkZGRiINCiANCi12b2lkIHplbmRfb3B0aW1pemVyKHplbmRfb3BfYXJyYXkgKm9wX2FycmF5IFRT Uk1MU19EQyk7DQotDQogI2VuZGlmDQpkaWZmIC0tZ2l0IGEvZXh0L29wY2FjaGUvWmVuZEFjY2Vs ZXJhdG9yLmMgYi9leHQvb3BjYWNoZS9aZW5kQWNjZWxlcmF0b3IuYwppbmRleCBiNjJmMjQ1Li45 YTZjNzYzIDEwMDY0NAotLS0gYS9leHQvb3BjYWNoZS9aZW5kQWNjZWxlcmF0b3IuYworKysgYi9l eHQvb3BjYWNoZS9aZW5kQWNjZWxlcmF0b3IuYwpAQCAtMTEyNiw2ICsxMTI2LDEwIEBAIHN0YXRp YyB6ZW5kX3BlcnNpc3RlbnRfc2NyaXB0ICpjYWNoZV9zY3JpcHRfaW5fc2hhcmVkX21lbW9yeSh6 ZW5kX3BlcnNpc3RlbnRfc2NyCiAJCXJldHVybiBuZXdfcGVyc2lzdGVudF9zY3JpcHQ7CiAJfQog CisJaWYgKCF6ZW5kX2FjY2VsX3NjcmlwdF9vcHRpbWl6ZShuZXdfcGVyc2lzdGVudF9zY3JpcHQg VFNSTUxTX0NDKSkgeworCQlyZXR1cm4gbmV3X3BlcnNpc3RlbnRfc2NyaXB0OworCX0KKwogCS8q IGV4Y2x1c2l2ZSBsb2NrICovCiAJemVuZF9zaGFyZWRfYWxsb2NfbG9jayhUU1JNTFNfQyk7CiAK QEAgLTI3MzEsMTkgKzI3MzUsNiBAQCB2b2lkIGFjY2VsZXJhdG9yX3NobV9yZWFkX3VubG9jayhU U1JNTFNfRCkKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFjY2VsX29wX2FycmF5X2hhbmRsZXIoemVu ZF9vcF9hcnJheSAqb3BfYXJyYXkpCi17Ci0JVFNSTUxTX0ZFVENIKCk7Ci0KLQlpZiAoWkNHKGVu YWJsZWQpICYmCi0JICAgIGFjY2VsX3N0YXJ0dXBfb2sgJiYKLQkgICAgWkNTRyhhY2NlbGVyYXRv cl9lbmFibGVkKSAmJgotCSAgICAhWlNNTUcobWVtb3J5X2V4aGF1c3RlZCkgJiYKLQkgICAgIVpD U0cocmVzdGFydF9wZW5kaW5nKSkgewotCQl6ZW5kX29wdGltaXplcihvcF9hcnJheSBUU1JNTFNf Q0MpOwotCX0KLX0KLQogWkVORF9FWFRfQVBJIHplbmRfZXh0ZW5zaW9uIHplbmRfZXh0ZW5zaW9u X2VudHJ5ID0gewogCUFDQ0VMRVJBVE9SX1BST0RVQ1RfTkFNRSwgICAgICAgICAgICAgICAvKiBu YW1lICovCiAJQUNDRUxFUkFUT1JfVkVSU0lPTiwJCQkJCS8qIHZlcnNpb24gKi8KQEAgLTI3NTUs NyArMjc0Niw3IEBAIFpFTkRfRVhUX0FQSSB6ZW5kX2V4dGVuc2lvbiB6ZW5kX2V4dGVuc2lvbl9l bnRyeSA9IHsKIAlhY2NlbF9hY3RpdmF0ZSwJCQkJCQkJLyogcGVyLXNjcmlwdCBhY3RpdmF0aW9u ICovCiAJYWNjZWxfZGVhY3RpdmF0ZSwJCQkJCQkvKiBwZXItc2NyaXB0IGRlYWN0aXZhdGlvbiAq LwogCU5VTEwsCQkJCQkJCQkJLyogbWVzc2FnZSBoYW5kbGVyICovCi0JYWNjZWxfb3BfYXJyYXlf aGFuZGxlciwJCQkJCS8qIG9wX2FycmF5IGhhbmRsZXIgKi8KKwlOVUxMLAkJCQkJCQkJCS8qIG9w X2FycmF5IGhhbmRsZXIgKi8KIAlOVUxMLAkJCQkJCQkJCS8qIGV4dGVuZGVkIHN0YXRlbWVudCBo YW5kbGVyICovCiAJTlVMTCwJCQkJCQkJCQkvKiBleHRlbmRlZCBmY2FsbCBiZWdpbiBoYW5kbGVy ICovCiAJTlVMTCwJCQkJCQkJCQkvKiBleHRlbmRlZCBmY2FsbCBlbmQgaGFuZGxlciAqLwpkaWZm IC0tZ2l0IGEvZXh0L29wY2FjaGUvWmVuZEFjY2VsZXJhdG9yLmggYi9leHQvb3BjYWNoZS9aZW5k QWNjZWxlcmF0b3IuaAppbmRleCA4NWY5NTcwLi4wNjNjOTUxIDEwMDY0NAotLS0gYS9leHQvb3Bj YWNoZS9aZW5kQWNjZWxlcmF0b3IuaAorKysgYi9leHQvb3BjYWNoZS9aZW5kQWNjZWxlcmF0b3Iu aApAQCAtMzE5LDYgKzMxOSw3IEBAIGV4dGVybiBjaGFyICp6cHNfYXBpX2ZhaWx1cmVfcmVhc29u Owogdm9pZCB6ZW5kX2FjY2VsX3NjaGVkdWxlX3Jlc3RhcnQoemVuZF9hY2NlbF9yZXN0YXJ0X3Jl YXNvbiByZWFzb24gVFNSTUxTX0RDKTsKIHZvaWQgemVuZF9hY2NlbF9zY2hlZHVsZV9yZXN0YXJ0 X2lmX25lY2Vzc2FyeSh6ZW5kX2FjY2VsX3Jlc3RhcnRfcmVhc29uIHJlYXNvbiBUU1JNTFNfREMp OwogaW50ICB6ZW5kX2FjY2VsX2ludmFsaWRhdGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBm aWxlbmFtZV9sZW4sIHplbmRfYm9vbCBmb3JjZSBUU1JNTFNfREMpOworaW50ICB6ZW5kX2FjY2Vs X3NjcmlwdF9vcHRpbWl6ZSh6ZW5kX3BlcnNpc3RlbnRfc2NyaXB0ICpwZXJzaXN0ZW50X3Njcmlw dCBUU1JNTFNfREMpOwogaW50ICBhY2NlbGVyYXRvcl9zaG1fcmVhZF9sb2NrKFRTUk1MU19EKTsK IHZvaWQgYWNjZWxlcmF0b3Jfc2htX3JlYWRfdW5sb2NrKFRTUk1MU19EKTsKIAo= --001a11c2af00b2819004da005f5b--