From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26119 invoked by alias); 20 Jul 2005 04:51:24 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 26042 invoked by uid 22791); 20 Jul 2005 04:51:00 -0000 Received: from viper.snap.net.nz (HELO viper.snap.net.nz) (202.37.101.8) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Wed, 20 Jul 2005 04:51:00 +0000 Received: from farnswood.snap.net.nz (p128-tnt2.snap.net.nz [202.124.108.128]) by viper.snap.net.nz (Postfix) with ESMTP id CB2D55E2A13 for ; Wed, 20 Jul 2005 16:50:47 +1200 (NZST) Received: by farnswood.snap.net.nz (Postfix, from userid 501) id BEA1162A99; Wed, 20 Jul 2005 05:51:05 +0100 (BST) From: Nick Roberts MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: base64 Message-ID: <17117.55351.716393.763492@farnswood.snap.net.nz> Date: Wed, 20 Jul 2005 04:51:00 -0000 To: gdb-patches@sources.redhat.com Subject: PATCH: tests for MI commands X-SW-Source: 2005-07/txt/msg00163.txt.bz2 DQpUaGlzIHBhdGNoIHByb3ZpZGVzIHRlc3RzIGZvciB0aGUgcmVjZW50IGNo YW5nZXMgdG8gLXZhci11cGRhdGUgYW5kDQotdmFyLWxpc3QtY2hpbGRyZW4u ICBJIGhhdmUgYWxzbyByZXZpc2VkIHRoZSB0ZXN0IGZvciBzdGFjay1saXN0 LWxvY2Fscw0Kc28gdGhhdCBpdCBwcm9wZXJseSB0ZXN0cyB0aGUgLS1zaW1w bGUtdmFsdWVzIG9wdGlvbi4NCg0KVGhlcmUgaXMgbm8gdGVzdCBmb3IgIi12 YXItdXBkYXRlIC0tc2ltcGxlLXZhbHVlcyIgYXMgSSBjb3VsZCBub3QgZ2V0 IGl0DQp0byBiZWhhdmUgZGlmZmVyZW50bHkgZm9yICItdmFyLXVwZGF0ZSAt LWFsbC12YWx1ZXMiLiAgSSB0aGluayB0aGlzIGlzDQpiZWNhdXNlIHRoZSBj aGFuZ2VsaXN0IG9ubHkgY29uc2lzdHMgb2Ygc2ltcGxlIHR5cGVzOyBpZiBp dCBpcyBjb21wbGV4DQppdHMgYHZhbHVlJyBpcyBkZWVtZWQgbm90IGhhdmUg Y2hhbmdlZC4NCg0KTmljaw0KDQoNCjIwMDUtMDctMjAgIE5pY2sgUm9iZXJ0 cyAgPG5pY2tyb2JAc25hcC5uZXQubno+DQoNCgkqIGdkYi5taS92YXItY21k LmM6IEdpdmUgbG9uZ19hcnJheSBpbiBfc3RydWN0X2RlY2wgMTIgZWxlbWVu dHMuDQoJKGRvX2NoaWxkcmVuX3Rlc3RzKTogQXNzaWduIHZhbHVlcyB0byB0 aGUgZXh0cmEgZWxlbWVudHMuDQoNCgkqIGdkYi5taS9taS12YXItY2hpbGQu ZXhwOiBBZGFwdCB0ZXN0cyBmb3IgZXh0cmEgZWxlbWVudHMgYW5kIHVzZQ0K CXRoZW0gZm9yIHRlc3RzIGZvciAiLXZhci11cGRhdGUgLS1uby12YWx1ZXMi IGFuZA0KCSItdmFyLXVwZGF0ZSAtLWFsbC12YWx1ZXMiLiAgDQoJQWRkIHRl c3QgZm9yICItdmFyLWxpc3QtY2hpbGRyZW4gLS1zaW1wbGUtdmFsdWVzLg0K DQoJKiBnZGIubWkvYmFzaWNzLmMgKGNhbGxlZTQpOiBBZGQgaW50ZWdlciBh cnJheSBEWzNdLi4uDQoNCgkqIGdkYi5taS9taS1zdGFjay5leHAgKHRlc3Rf c3RhY2tfbG9jYWxzX2xpc3RpbmcpOiAuLi50byB0ZXN0DQoJIi1zdGFjay1s aXN0LWxvY2FscyAtLXNpbXBsZS12YWx1ZXMiLiAgSW1wcm92ZSBkb2Mgc3Ry aW5ncyBhbmQNCgljb21tZW50cy4NCg0KDQoqKiogZ2RiLm1pL3Zhci1jbWQu Yy5+MS4zLn4JMjAwNC0wOS0yOCAyMzo1NDo1MS4wMDAwMDAwMDAgKzEyMDAN Ci0tLSBnZGIubWkvdmFyLWNtZC5jCTIwMDUtMDctMjAgMTY6MjA6NDAuMDAw MDAwMDAwICsxMjAwDQoqKioqKioqKioqKioqKioNCioqKiAxLDQgKioqKg0K ISAvKiBDb3B5cmlnaHQgMTk5OSwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4NCiAgDQogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdE Qi4NCiAgDQotLS0gMSw0IC0tLS0NCiEgLyogQ29weXJpZ2h0IDE5OTksIDIw MDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQogIA0K ICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuDQogIA0KKioqKioqKioq KioqKioqIHR5cGVkZWYgc3RydWN0IF9zdHJ1Y3RfZGVjbCB7DQoqKiogNTEs NTcgKioqKg0KICAgIGNoYXIgKmNoYXJfcHRyOw0KICAgIGxvbmcgIGxvbmdf aW50Ow0KICAgIGludCAgKippbnRfcHRyX3B0cjsNCiEgICBsb25nICBsb25n X2FycmF5WzEwXTsNCiAgDQogICAgdm9pZCAoKmZ1bmNfcHRyKSAodm9pZCk7 DQogICAgc3RydWN0IF9zdHJ1Y3RfZGVjbCAoKmZ1bmNfcHRyX3N0cnVjdCkg KGludCwgY2hhciAqLCBsb25nKTsNCi0tLSA1MSw1NyAtLS0tDQogICAgY2hh ciAqY2hhcl9wdHI7DQogICAgbG9uZyAgbG9uZ19pbnQ7DQogICAgaW50ICAq KmludF9wdHJfcHRyOw0KISAgIGxvbmcgIGxvbmdfYXJyYXlbMTJdOw0KICAN CiAgICB2b2lkICgqZnVuY19wdHIpICh2b2lkKTsNCiAgICBzdHJ1Y3QgX3N0 cnVjdF9kZWNsICgqZnVuY19wdHJfc3RydWN0KSAoaW50LCBjaGFyICosIGxv bmcpOw0KKioqKioqKioqKioqKioqIGRvX2NoaWxkcmVuX3Rlc3RzICh2b2lk KQ0KKioqIDIyNywyMzIgKioqKg0KLS0tIDIyNywyMzQgLS0tLQ0KICAgIHN0 cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheVs5XSA9IDEyMzQ7DQogIA0K ICAgIHdlaXJkLT5mdW5jX3B0ciA9IG5vdGhpbmc7DQorICAgc3RydWN0X2Rl Y2xhcmF0aW9ucy5sb25nX2FycmF5WzEwXSA9IDM0NTY7DQorICAgc3RydWN0 X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5WzExXSA9IDU2Nzg7DQogIA0KICAg IC8qIFN0cnVjdC9wb2ludGVyL2FycmF5IHRlc3RzICovDQogICAgYTAgPSAn MCc7DQoNCioqKiBnZGIubWkvbWktdmFyLWNoaWxkLmV4cC5+MS4xN34JMjAw NS0wNy0xNSAxNTowMzowMy4wMDAwMDAwMDAgKzEyMDANCi0tLSBnZGIubWkv bWktdmFyLWNoaWxkLmV4cAkyMDA1LTA3LTIwIDE2OjIxOjUyLjAwMDAwMDAw MCArMTIwMA0KKioqKioqKioqKioqKioqDQoqKiogMSw0ICoqKioNCiEgIyBD b3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24NCiAgDQogICMgVGhpcyBQcm9ncmFtIElzIEZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkNCiAgIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KLS0tIDEsNCAt LS0tDQohICMgQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIw MDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQogIA0KICAjIFRo aXMgUHJvZ3JhbSBJcyBGcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogICMgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkNCioqKioqKioqKioqKioqKiBtaV9nZGJfdGVzdCAiLXZhci1jcmVh dGUgc3RydWN0X2RlY2xhcmF0DQoqKiogNTksNjUgKioqKg0KICAjIFNUQUJT IGRvZXNuJ3QgZ2l2ZSB1cyBhcmd1bWVudCB0eXBlcyBmb3IgdGhlIGZ1bmMg cHRyIHN0cnVjdHMsIGJ1dA0KICAjIER3YXJmIDIgZG9lcy4NCiAgbWlfZ2Ri X3Rlc3QgIi12YXItbGlzdC1jaGlsZHJlbiBzdHJ1Y3RfZGVjbGFyYXRpb25z IiBcDQohIAkiXFxeZG9uZSxudW1jaGlsZD1cIjExXCIsY2hpbGRyZW49XFxc W2NoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMuaW50ZWdlclwi LGV4cD1cImludGVnZXJcIixudW1jaGlsZD1cIjBcIix0eXBlPVwiaW50XCJc fSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmNoYXJhY3Rl clwiLGV4cD1cImNoYXJhY3RlclwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJj aGFyXCJcfSxjaGlsZD17bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMuY2hh cl9wdHJcIixleHA9XCJjaGFyX3B0clwiLG51bWNoaWxkPVwiMVwiLHR5cGU9 XCJjaGFyIFxcKlwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0 aW9ucy5sb25nX2ludFwiLGV4cD1cImxvbmdfaW50XCIsbnVtY2hpbGQ9XCIw XCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3Rf ZGVjbGFyYXRpb25zLmludF9wdHJfcHRyXCIsZXhwPVwiaW50X3B0cl9wdHJc IixudW1jaGlsZD1cIjFcIix0eXBlPVwiaW50IFxcKlxcKlwiXH0sY2hpbGQ9 XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5XCIsZXhw PVwibG9uZ19hcnJheVwiLG51bWNoaWxkPVwiMTBcIix0eXBlPVwibG9uZyBp bnQgXFxcWzEwXFxcXVwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xh cmF0aW9ucy5mdW5jX3B0clwiLGV4cD1cImZ1bmNfcHRyXCIsbnVtY2hpbGQ9 XCIwXCIsdHlwZT1cInZvaWQgXFwoXFwqXFwpXFwoKHZvaWQpP1xcKVwiXH0s Y2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5mdW5jX3B0cl9z dHJ1Y3RcIixleHA9XCJmdW5jX3B0cl9zdHJ1Y3RcIixudW1jaGlsZD1cIjBc Iix0eXBlPVwic3RydWN0IF9zdHJ1Y3RfZGVjbCBcXChcXCpcXClcXCgoaW50 LCBjaGFyIFxcKiwgbG9uZyBpbnQpP1xcKVwiXH0sY2hpbGQ9XHtuYW1lPVwi c3RydWN0X2RlY2xhcmF0aW9ucy5mdW5jX3B0cl9wdHJcIixleHA9XCJmdW5j X3B0cl9wdHJcIixudW1jaGlsZD1cIjBcIix0eXBlPVwic3RydWN0IF9zdHJ1 Y3RfZGVjbCBcXCpcXChcXCpcXClcXCgoaW50LCBjaGFyIFxcKiwgbG9uZyBp bnQpP1xcKVwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9u cy51MVwiLGV4cD1cInUxXCIsbnVtY2hpbGQ9XCI0XCIsdHlwZT1cInVuaW9u IFx7XFwuXFwuXFwuXH1cIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNs YXJhdGlvbnMuczJcIixleHA9XCJzMlwiLG51bWNoaWxkPVwiNFwiLHR5cGU9 XCJzdHJ1Y3QgXHtcXC5cXC5cXC5cfVwiXH1cXFxdIiBcDQogIAkiZ2V0IGNo aWxkcmVuIG9mIHN0cnVjdF9kZWNsYXJhdGlvbnMiDQogIA0KICAjZ2RidGtf dGVzdCBjX3ZhcmlhYmxlLTQuMyB7Y2hpbGRyZW4gb2Ygc3RydWN0X2RlY2xh cmF0aW9uc30gew0KLS0tIDU5LDY1IC0tLS0NCiAgIyBTVEFCUyBkb2Vzbid0 IGdpdmUgdXMgYXJndW1lbnQgdHlwZXMgZm9yIHRoZSBmdW5jIHB0ciBzdHJ1 Y3RzLCBidXQNCiAgIyBEd2FyZiAyIGRvZXMuDQogIG1pX2dkYl90ZXN0ICIt dmFyLWxpc3QtY2hpbGRyZW4gc3RydWN0X2RlY2xhcmF0aW9ucyIgXA0KISAJ IlxcXmRvbmUsbnVtY2hpbGQ9XCIxMVwiLGNoaWxkcmVuPVxcXFtjaGlsZD1c e25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmludGVnZXJcIixleHA9XCJp bnRlZ2VyXCIsbnVtY2hpbGQ9XCIwXCIsdHlwZT1cImludFwiXH0sY2hpbGQ9 XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5jaGFyYWN0ZXJcIixleHA9 XCJjaGFyYWN0ZXJcIixudW1jaGlsZD1cIjBcIix0eXBlPVwiY2hhclwiXH0s Y2hpbGQ9e25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmNoYXJfcHRyXCIs ZXhwPVwiY2hhcl9wdHJcIixudW1jaGlsZD1cIjFcIix0eXBlPVwiY2hhciBc XCpcIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9u Z19pbnRcIixleHA9XCJsb25nX2ludFwiLG51bWNoaWxkPVwiMFwiLHR5cGU9 XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0 aW9ucy5pbnRfcHRyX3B0clwiLGV4cD1cImludF9wdHJfcHRyXCIsbnVtY2hp bGQ9XCIxXCIsdHlwZT1cImludCBcXCpcXCpcIlx9LGNoaWxkPVx7bmFtZT1c InN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheVwiLGV4cD1cImxvbmdf YXJyYXlcIixudW1jaGlsZD1cIjEyXCIsdHlwZT1cImxvbmcgaW50IFxcXFsx MlxcXF1cIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMu ZnVuY19wdHJcIixleHA9XCJmdW5jX3B0clwiLG51bWNoaWxkPVwiMFwiLHR5 cGU9XCJ2b2lkIFxcKFxcKlxcKVxcKCh2b2lkKT9cXClcIlx9LGNoaWxkPVx7 bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMuZnVuY19wdHJfc3RydWN0XCIs ZXhwPVwiZnVuY19wdHJfc3RydWN0XCIsbnVtY2hpbGQ9XCIwXCIsdHlwZT1c InN0cnVjdCBfc3RydWN0X2RlY2wgXFwoXFwqXFwpXFwoKGludCwgY2hhciBc XCosIGxvbmcgaW50KT9cXClcIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9k ZWNsYXJhdGlvbnMuZnVuY19wdHJfcHRyXCIsZXhwPVwiZnVuY19wdHJfcHRy XCIsbnVtY2hpbGQ9XCIwXCIsdHlwZT1cInN0cnVjdCBfc3RydWN0X2RlY2wg XFwqXFwoXFwqXFwpXFwoKGludCwgY2hhciBcXCosIGxvbmcgaW50KT9cXClc Ilx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMudTFcIixl eHA9XCJ1MVwiLG51bWNoaWxkPVwiNFwiLHR5cGU9XCJ1bmlvbiBce1xcLlxc LlxcLlx9XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25z LnMyXCIsZXhwPVwiczJcIixudW1jaGlsZD1cIjRcIix0eXBlPVwic3RydWN0 IFx7XFwuXFwuXFwuXH1cIlx9XFxcXSIgXA0KICAJImdldCBjaGlsZHJlbiBv ZiBzdHJ1Y3RfZGVjbGFyYXRpb25zIg0KICANCiAgI2dkYnRrX3Rlc3QgY192 YXJpYWJsZS00LjMge2NoaWxkcmVuIG9mIHN0cnVjdF9kZWNsYXJhdGlvbnN9 IHsNCioqKioqKioqKioqKioqKiBtaV9nZGJfdGVzdCAiLXZhci1pbmZvLW51 bS1jaGlsZHJlbiBzdHJ1DQoqKiogMTQwLDE1MiAqKioqDQogICMgVGVzdDog Y192YXJpYWJsZS00LjE1DQogICMgRGVzYzogY2hpbGRyZW4gb2Ygc3RydWN0 X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5DQogIG1pX2dkYl90ZXN0ICItdmFy LWxpc3QtY2hpbGRyZW4gc3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5 IiBcDQohIAkiXFxeZG9uZSxudW1jaGlsZD1cIjEwXCIsY2hpbGRyZW49XFxc W2NoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJh eS4wXCIsZXhwPVwiMFwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGlu dFwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25n X2FycmF5LjFcIixleHA9XCIxXCIsbnVtY2hpbGQ9XCIwXCIsdHlwZT1cImxv bmcgaW50XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25z LmxvbmdfYXJyYXkuMlwiLGV4cD1cIjJcIixudW1jaGlsZD1cIjBcIix0eXBl PVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJh dGlvbnMubG9uZ19hcnJheS4zXCIsZXhwPVwiM1wiLG51bWNoaWxkPVwiMFwi LHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2Rl Y2xhcmF0aW9ucy5sb25nX2FycmF5LjRcIixleHA9XCI0XCIsbnVtY2hpbGQ9 XCIwXCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1 Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuNVwiLGV4cD1cIjVcIixudW1j aGlsZD1cIjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1c InN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS42XCIsZXhwPVwiNlwi LG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtu YW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5LjdcIixleHA9 XCI3XCIsbnVtY2hpbGQ9XCIwXCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGls ZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuOFwi LGV4cD1cIjhcIixudW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBpbnRcIlx9 LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJh eS45XCIsZXhwPVwiOVwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGlu dFwiXH1cXFxdIiBcDQogIAkiZ2V0IGNoaWxkcmVuIG9mIHN0cnVjdF9kZWNs YXJhdGlvbnMubG9uZ19hcnJheSINCiAgDQogICMgVGVzdDogY192YXJpYWJs ZS00LjE2DQogICMgRGVzYzogbnVtYmVyIG9mIGNoaWxkcmVuIG9mIHN0cnVj dF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheQ0KICBtaV9nZGJfdGVzdCAiLXZh ci1pbmZvLW51bS1jaGlsZHJlbiBzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdf YXJyYXkiIFwNCiEgCSJcXF5kb25lLG51bWNoaWxkPVwiMTBcIiIgXA0KICAJ ImdldCBudW1iZXIgb2YgY2hpbGRyZW4gb2Ygc3RydWN0X2RlY2xhcmF0aW9u cy5sb25nX2FycmF5Ig0KICANCiAgIyBUZXN0OiBjX3ZhcmlhYmxlLTQuMTcN Ci0tLSAxNDAsMTUyIC0tLS0NCiAgIyBUZXN0OiBjX3ZhcmlhYmxlLTQuMTUN CiAgIyBEZXNjOiBjaGlsZHJlbiBvZiBzdHJ1Y3RfZGVjbGFyYXRpb25zLmxv bmdfYXJyYXkNCiAgbWlfZ2RiX3Rlc3QgIi12YXItbGlzdC1jaGlsZHJlbiBz dHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkiIFwNCiEgCSJcXF5kb25l LG51bWNoaWxkPVwiMTJcIixjaGlsZHJlbj1cXFxbY2hpbGQ9XHtuYW1lPVwi c3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5LjBcIixleHA9XCIwXCIs bnVtY2hpbGQ9XCIwXCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGlsZD1ce25h bWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuMVwiLGV4cD1c IjFcIixudW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxk PVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS4yXCIs ZXhwPVwiMlwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0s Y2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5 LjNcIixleHA9XCIzXCIsbnVtY2hpbGQ9XCIwXCIsdHlwZT1cImxvbmcgaW50 XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdf YXJyYXkuNFwiLGV4cD1cIjRcIixudW1jaGlsZD1cIjBcIix0eXBlPVwibG9u ZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMu bG9uZ19hcnJheS41XCIsZXhwPVwiNVwiLG51bWNoaWxkPVwiMFwiLHR5cGU9 XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0 aW9ucy5sb25nX2FycmF5LjZcIixleHA9XCI2XCIsbnVtY2hpbGQ9XCIwXCIs dHlwZT1cImxvbmcgaW50XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVj bGFyYXRpb25zLmxvbmdfYXJyYXkuN1wiLGV4cD1cIjdcIixudW1jaGlsZD1c IjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVj dF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS44XCIsZXhwPVwiOFwiLG51bWNo aWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwi c3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5LjlcIixleHA9XCI5XCIs bnVtY2hpbGQ9XCIwXCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGlsZD1ce25h bWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuMTBcIixleHA9 XCIxMFwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0sY2hp bGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5LjEx XCIsZXhwPVwiMTFcIixudW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBpbnRc Ilx9XFxcXSIgXA0KICAJImdldCBjaGlsZHJlbiBvZiBzdHJ1Y3RfZGVjbGFy YXRpb25zLmxvbmdfYXJyYXkiDQogIA0KICAjIFRlc3Q6IGNfdmFyaWFibGUt NC4xNg0KICAjIERlc2M6IG51bWJlciBvZiBjaGlsZHJlbiBvZiBzdHJ1Y3Rf ZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkNCiAgbWlfZ2RiX3Rlc3QgIi12YXIt aW5mby1udW0tY2hpbGRyZW4gc3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2Fy cmF5IiBcDQohIAkiXFxeZG9uZSxudW1jaGlsZD1cIjEyXCIiIFwNCiAgCSJn ZXQgbnVtYmVyIG9mIGNoaWxkcmVuIG9mIHN0cnVjdF9kZWNsYXJhdGlvbnMu bG9uZ19hcnJheSINCiAgDQogICMgVGVzdDogY192YXJpYWJsZS00LjE3DQoq KioqKioqKioqKioqKiogbWlfZ2RiX3Rlc3QgIi12YXItY3JlYXRlIHdlaXJk ICogd2VpcmQiIA0KKioqIDU2NSw1NzEgKioqKg0KICAjIFRlc3Q6IGNfdmFy aWFibGUtNC44Mg0KICAjIERlc2M6IGNoaWxkcmVuIG9mIHdlaXJkDQogIG1p X2dkYl90ZXN0ICItdmFyLWxpc3QtY2hpbGRyZW4gd2VpcmQiIFwNCiEgCSJc XF5kb25lLG51bWNoaWxkPVwiMTFcIixjaGlsZHJlbj1cXFxbY2hpbGQ9XHtu YW1lPVwid2VpcmQuaW50ZWdlclwiLGV4cD1cImludGVnZXJcIixudW1jaGls ZD1cIjBcIix0eXBlPVwiaW50XCJcfSxjaGlsZD1ce25hbWU9XCJ3ZWlyZC5j aGFyYWN0ZXJcIixleHA9XCJjaGFyYWN0ZXJcIixudW1jaGlsZD1cIjBcIix0 eXBlPVwiY2hhclwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQuY2hhcl9wdHJc IixleHA9XCJjaGFyX3B0clwiLG51bWNoaWxkPVwiMVwiLHR5cGU9XCJjaGFy IFxcKlwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19pbnRcIixleHA9 XCJsb25nX2ludFwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwi XH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQuaW50X3B0cl9wdHJcIixleHA9XCJp bnRfcHRyX3B0clwiLG51bWNoaWxkPVwiMVwiLHR5cGU9XCJpbnQgXFwqXFwq XCJcfSxjaGlsZD1ce25hbWU9XCJ3ZWlyZC5sb25nX2FycmF5XCIsZXhwPVwi bG9uZ19hcnJheVwiLG51bWNoaWxkPVwiMTBcIix0eXBlPVwibG9uZyBpbnQg XFxcWzEwXFxcXVwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQuZnVuY19wdHJc IixleHA9XCJmdW5jX3B0clwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJ2b2lk IFxcKFxcKlxcKVxcKCh2b2lkKT9cXClcIlx9LGNoaWxkPVx7bmFtZT1cIndl aXJkLmZ1bmNfcHRyX3N0cnVjdFwiLGV4cD1cImZ1bmNfcHRyX3N0cnVjdFwi LG51bWNoaWxkPVwiMFwiLHR5cGU9XCJzdHJ1Y3QgX3N0cnVjdF9kZWNsIFxc KFxcKlxcKVxcKChpbnQsIGNoYXIgXFwqLCBsb25nIGludCk/XFwpXCJcfSxj aGlsZD1ce25hbWU9XCJ3ZWlyZC5mdW5jX3B0cl9wdHJcIixleHA9XCJmdW5j X3B0cl9wdHJcIixudW1jaGlsZD1cIjBcIix0eXBlPVwic3RydWN0IF9zdHJ1 Y3RfZGVjbCBcXCpcXChcXCpcXClcXCgoaW50LCBjaGFyIFxcKiwgbG9uZyBp bnQpP1xcKVwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQudTFcIixleHA9XCJ1 MVwiLG51bWNoaWxkPVwiNFwiLHR5cGU9XCJ1bmlvbiBce1xcLlxcLlxcLlx9 XCJcfSxjaGlsZD1ce25hbWU9XCJ3ZWlyZC5zMlwiLGV4cD1cInMyXCIsbnVt Y2hpbGQ9XCI0XCIsdHlwZT1cInN0cnVjdCBce1xcLlxcLlxcLlx9XCJcfVxc XF0iIFwNCiAgCSJnZXQgY2hpbGRyZW4gb2Ygd2VpcmQiDQogIA0KICAjIFRl c3Q6IGNfdmFyaWFibGUtNC44Mw0KLS0tIDU2NSw1NzEgLS0tLQ0KICAjIFRl c3Q6IGNfdmFyaWFibGUtNC44Mg0KICAjIERlc2M6IGNoaWxkcmVuIG9mIHdl aXJkDQogIG1pX2dkYl90ZXN0ICItdmFyLWxpc3QtY2hpbGRyZW4gd2VpcmQi IFwNCiEgCSJcXF5kb25lLG51bWNoaWxkPVwiMTFcIixjaGlsZHJlbj1cXFxb Y2hpbGQ9XHtuYW1lPVwid2VpcmQuaW50ZWdlclwiLGV4cD1cImludGVnZXJc IixudW1jaGlsZD1cIjBcIix0eXBlPVwiaW50XCJcfSxjaGlsZD1ce25hbWU9 XCJ3ZWlyZC5jaGFyYWN0ZXJcIixleHA9XCJjaGFyYWN0ZXJcIixudW1jaGls ZD1cIjBcIix0eXBlPVwiY2hhclwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQu Y2hhcl9wdHJcIixleHA9XCJjaGFyX3B0clwiLG51bWNoaWxkPVwiMVwiLHR5 cGU9XCJjaGFyIFxcKlwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19p bnRcIixleHA9XCJsb25nX2ludFwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJs b25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQuaW50X3B0cl9wdHJc IixleHA9XCJpbnRfcHRyX3B0clwiLG51bWNoaWxkPVwiMVwiLHR5cGU9XCJp bnQgXFwqXFwqXCJcfSxjaGlsZD1ce25hbWU9XCJ3ZWlyZC5sb25nX2FycmF5 XCIsZXhwPVwibG9uZ19hcnJheVwiLG51bWNoaWxkPVwiMTJcIix0eXBlPVwi bG9uZyBpbnQgXFxcWzEyXFxcXVwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQu ZnVuY19wdHJcIixleHA9XCJmdW5jX3B0clwiLG51bWNoaWxkPVwiMFwiLHR5 cGU9XCJ2b2lkIFxcKFxcKlxcKVxcKCh2b2lkKT9cXClcIlx9LGNoaWxkPVx7 bmFtZT1cIndlaXJkLmZ1bmNfcHRyX3N0cnVjdFwiLGV4cD1cImZ1bmNfcHRy X3N0cnVjdFwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJzdHJ1Y3QgX3N0cnVj dF9kZWNsIFxcKFxcKlxcKVxcKChpbnQsIGNoYXIgXFwqLCBsb25nIGludCk/ XFwpXCJcfSxjaGlsZD1ce25hbWU9XCJ3ZWlyZC5mdW5jX3B0cl9wdHJcIixl eHA9XCJmdW5jX3B0cl9wdHJcIixudW1jaGlsZD1cIjBcIix0eXBlPVwic3Ry dWN0IF9zdHJ1Y3RfZGVjbCBcXCpcXChcXCpcXClcXCgoaW50LCBjaGFyIFxc KiwgbG9uZyBpbnQpP1xcKVwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQudTFc IixleHA9XCJ1MVwiLG51bWNoaWxkPVwiNFwiLHR5cGU9XCJ1bmlvbiBce1xc LlxcLlxcLlx9XCJcfSxjaGlsZD1ce25hbWU9XCJ3ZWlyZC5zMlwiLGV4cD1c InMyXCIsbnVtY2hpbGQ9XCI0XCIsdHlwZT1cInN0cnVjdCBce1xcLlxcLlxc Llx9XCJcfVxcXF0iIFwNCiAgCSJnZXQgY2hpbGRyZW4gb2Ygd2VpcmQiDQog IA0KICAjIFRlc3Q6IGNfdmFyaWFibGUtNC44Mw0KKioqKioqKioqKioqKioq IG1pX2dkYl90ZXN0ICItdmFyLWluZm8tbnVtLWNoaWxkcmVuIHdlaXINCioq KiA1NzgsNTkzICoqKioNCiAgIyBUZXN0OiBjX3ZhcmlhYmxlLTQuODQNCiAg IyBEZXNjOiBjaGlsZHJlbiBvZiB3ZWlyZC0+bG9uZ19hcnJheQ0KICBtaV9n ZGJfdGVzdCAiLXZhci1saXN0LWNoaWxkcmVuIHdlaXJkLmxvbmdfYXJyYXki IFwNCiEgCSJcXF5kb25lLG51bWNoaWxkPVwiMTBcIixjaGlsZHJlbj1cXFxb Y2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19hcnJheS4wXCIsZXhwPVwiMFwi LG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtu YW1lPVwid2VpcmQubG9uZ19hcnJheS4xXCIsZXhwPVwiMVwiLG51bWNoaWxk PVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwid2Vp cmQubG9uZ19hcnJheS4yXCIsZXhwPVwiMlwiLG51bWNoaWxkPVwiMFwiLHR5 cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19h cnJheS4zXCIsZXhwPVwiM1wiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25n IGludFwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19hcnJheS40XCIs ZXhwPVwiNFwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0s Y2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19hcnJheS41XCIsZXhwPVwiNVwi LG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtu YW1lPVwid2VpcmQubG9uZ19hcnJheS42XCIsZXhwPVwiNlwiLG51bWNoaWxk PVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwid2Vp cmQubG9uZ19hcnJheS43XCIsZXhwPVwiN1wiLG51bWNoaWxkPVwiMFwiLHR5 cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19h cnJheS44XCIsZXhwPVwiOFwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25n IGludFwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19hcnJheS45XCIs ZXhwPVwiOVwiLG51bWNoaWxkPVwiMFwiLHR5cGU9XCJsb25nIGludFwiXH1c XFxdIiBcDQogIAkiZ2V0IGNoaWxkcmVuIG9mIHdlaXJkLmxvbmdfYXJyYXki DQogICNnZGJ0a190ZXN0IGNfdmFyaWFibGUtNC44NCB7Y2hpbGRyZW4gb2Yg d2VpcmQtPmxvbmdfYXJyYXl9IHsNCiAgIyAgZ2V0X2NoaWxkcmVuIHdlaXJk LmxvbmdfYXJyYXkNCiEgI30gezAgMSAyIDMgNCA1IDYgNyA4IDl9DQogIA0K ICAjIFRlc3Q6IGNfdmFyaWFibGUtNC44NQ0KICAjIERlc2M6IG51bWJlciBv ZiBjaGlsZHJlbiBvZiB3ZWlyZC5sb25nX2FycmF5DQogIG1pX2dkYl90ZXN0 ICItdmFyLWluZm8tbnVtLWNoaWxkcmVuIHdlaXJkLmxvbmdfYXJyYXkiIFwN CiEgCSJcXF5kb25lLG51bWNoaWxkPVwiMTBcIiIgXA0KICAJImdldCBudW1i ZXIgb2YgY2hpbGRyZW4gb2Ygd2VpcmQubG9uZ19hcnJheSINCiAgDQogICMg VGVzdDogY192YXJpYWJsZS00Ljg2DQotLS0gNTc4LDU5MyAtLS0tDQogICMg VGVzdDogY192YXJpYWJsZS00Ljg0DQogICMgRGVzYzogY2hpbGRyZW4gb2Yg d2VpcmQtPmxvbmdfYXJyYXkNCiAgbWlfZ2RiX3Rlc3QgIi12YXItbGlzdC1j aGlsZHJlbiB3ZWlyZC5sb25nX2FycmF5IiBcDQohIAkiXFxeZG9uZSxudW1j aGlsZD1cIjEyXCIsY2hpbGRyZW49XFxcW2NoaWxkPVx7bmFtZT1cIndlaXJk LmxvbmdfYXJyYXkuMFwiLGV4cD1cIjBcIixudW1jaGlsZD1cIjBcIix0eXBl PVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cIndlaXJkLmxvbmdfYXJy YXkuMVwiLGV4cD1cIjFcIixudW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBp bnRcIlx9LGNoaWxkPVx7bmFtZT1cIndlaXJkLmxvbmdfYXJyYXkuMlwiLGV4 cD1cIjJcIixudW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNo aWxkPVx7bmFtZT1cIndlaXJkLmxvbmdfYXJyYXkuM1wiLGV4cD1cIjNcIixu dW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFt ZT1cIndlaXJkLmxvbmdfYXJyYXkuNFwiLGV4cD1cIjRcIixudW1jaGlsZD1c IjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cIndlaXJk LmxvbmdfYXJyYXkuNVwiLGV4cD1cIjVcIixudW1jaGlsZD1cIjBcIix0eXBl PVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cIndlaXJkLmxvbmdfYXJy YXkuNlwiLGV4cD1cIjZcIixudW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBp bnRcIlx9LGNoaWxkPVx7bmFtZT1cIndlaXJkLmxvbmdfYXJyYXkuN1wiLGV4 cD1cIjdcIixudW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNo aWxkPVx7bmFtZT1cIndlaXJkLmxvbmdfYXJyYXkuOFwiLGV4cD1cIjhcIixu dW1jaGlsZD1cIjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFt ZT1cIndlaXJkLmxvbmdfYXJyYXkuOVwiLGV4cD1cIjlcIixudW1jaGlsZD1c IjBcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cIndlaXJk LmxvbmdfYXJyYXkuMTBcIixleHA9XCIxMFwiLG51bWNoaWxkPVwiMFwiLHR5 cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwid2VpcmQubG9uZ19h cnJheS4xMVwiLGV4cD1cIjExXCIsbnVtY2hpbGQ9XCIwXCIsdHlwZT1cImxv bmcgaW50XCJcfVxcXF0iIFwNCiAgCSJnZXQgY2hpbGRyZW4gb2Ygd2VpcmQu bG9uZ19hcnJheSINCiAgI2dkYnRrX3Rlc3QgY192YXJpYWJsZS00Ljg0IHtj aGlsZHJlbiBvZiB3ZWlyZC0+bG9uZ19hcnJheX0gew0KICAjICBnZXRfY2hp bGRyZW4gd2VpcmQubG9uZ19hcnJheQ0KISAjfSB7MCAxIDIgMyA0IDUgNiA3 IDggOSAxMCAxMX0NCiAgDQogICMgVGVzdDogY192YXJpYWJsZS00Ljg1DQog ICMgRGVzYzogbnVtYmVyIG9mIGNoaWxkcmVuIG9mIHdlaXJkLmxvbmdfYXJy YXkNCiAgbWlfZ2RiX3Rlc3QgIi12YXItaW5mby1udW0tY2hpbGRyZW4gd2Vp cmQubG9uZ19hcnJheSIgXA0KISAJIlxcXmRvbmUsbnVtY2hpbGQ9XCIxMlwi IiBcDQogIAkiZ2V0IG51bWJlciBvZiBjaGlsZHJlbiBvZiB3ZWlyZC5sb25n X2FycmF5Ig0KICANCiAgIyBUZXN0OiBjX3ZhcmlhYmxlLTQuODYNCioqKioq KioqKioqKioqKiBtaV9nZGJfdGVzdCAiLXZhci1zaG93LWF0dHJpYnV0ZXMg c3RydWN0DQoqKiogNzM2LDc0MiAqKioqDQogIAkiaXMgc3RydWN0X2RlY2xh cmF0aW9ucyBlZGl0YWJsZSINCiAgDQogIG1pX2dkYl90ZXN0ICItdmFyLWRl bGV0ZSB3ZWlyZCIgXA0KISAJIlxcXmRvbmUsbmRlbGV0ZWQ9XCIyNFwiIiBc DQogIAkiZGVsZXRlIHZhciB3ZWlyZCINCiAgDQogICMjIyMjICAgICAgICAg ICAgICAgICAgICAgICAgICMjIyMjDQotLS0gNzM2LDc0MiAtLS0tDQogIAki aXMgc3RydWN0X2RlY2xhcmF0aW9ucyBlZGl0YWJsZSINCiAgDQogIG1pX2dk Yl90ZXN0ICItdmFyLWRlbGV0ZSB3ZWlyZCIgXA0KISAJIlxcXmRvbmUsbmRl bGV0ZWQ9XCIyNlwiIiBcDQogIAkiZGVsZXRlIHZhciB3ZWlyZCINCiAgDQog ICMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjDQoqKioqKioq KioqKioqKiogbWlfZ2RiX3Rlc3QgIi12YXItdXBkYXRlICoiIFwNCioqKiA4 MzMsODQ2ICoqKioNCiAgCSJcXF5kb25lLGNoYW5nZWxpc3Q9XFxcW1x7bmFt ZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS4zXCIsaW5fc2Nv cGU9XCJ0cnVlXCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1c InN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS40XCIsaW5fc2NvcGU9 XCJ0cnVlXCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0 cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS41XCIsaW5fc2NvcGU9XCJ0 cnVlXCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0cnVj dF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS42XCIsaW5fc2NvcGU9XCJ0cnVl XCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0cnVjdF9k ZWNsYXJhdGlvbnMubG9uZ19hcnJheS43XCIsaW5fc2NvcGU9XCJ0cnVlXCIs dHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0cnVjdF9kZWNs YXJhdGlvbnMubG9uZ19hcnJheS44XCIsaW5fc2NvcGU9XCJ0cnVlXCIsdHlw ZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0cnVjdF9kZWNsYXJh dGlvbnMubG9uZ19hcnJheS45XCIsaW5fc2NvcGU9XCJ0cnVlXCIsdHlwZV9j aGFuZ2VkPVwiZmFsc2VcIlx9XFxcXSIgXA0KICAJInVwZGF0ZSBhbGwgdmFy cyBzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuMy05IGNoYW5nZWQi DQogIA0KLSBtaV9nZGJfdGVzdCAiLXZhci1saXN0LWNoaWxkcmVuIC0tYWxs LXZhbHVlcyBzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkiIFwNCi0g ICAgICAgICAiXFxeZG9uZSxudW1jaGlsZD1cIjEwXCIsY2hpbGRyZW49XFxc W2NoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJh eS4wXCIsZXhwPVwiMFwiLG51bWNoaWxkPVwiMFwiLHZhbHVlPVwiMTIzNFwi LHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2Rl Y2xhcmF0aW9ucy5sb25nX2FycmF5LjFcIixleHA9XCIxXCIsbnVtY2hpbGQ9 XCIwXCIsdmFsdWU9XCIyMzQ1XCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGls ZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuMlwi LGV4cD1cIjJcIixudW1jaGlsZD1cIjBcIix2YWx1ZT1cIjM0NTZcIix0eXBl PVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJh dGlvbnMubG9uZ19hcnJheS4zXCIsZXhwPVwiM1wiLG51bWNoaWxkPVwiMFwi LHZhbHVlPVwiNDU2N1wiLHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtu YW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5LjRcIixleHA9 XCI0XCIsbnVtY2hpbGQ9XCIwXCIsdmFsdWU9XCI1Njc4XCIsdHlwZT1cImxv bmcgaW50XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25z LmxvbmdfYXJyYXkuNVwiLGV4cD1cIjVcIixudW1jaGlsZD1cIjBcIix2YWx1 ZT1cIjY3ODlcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1c InN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS42XCIsZXhwPVwiNlwi LG51bWNoaWxkPVwiMFwiLHZhbHVlPVwiNzg5MFwiLHR5cGU9XCJsb25nIGlu dFwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25n X2FycmF5LjdcIixleHA9XCI3XCIsbnVtY2hpbGQ9XCIwXCIsdmFsdWU9XCI4 OTAxXCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1 Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuOFwiLGV4cD1cIjhcIixudW1j aGlsZD1cIjBcIix2YWx1ZT1cIjkwMTJcIix0eXBlPVwibG9uZyBpbnRcIlx9 LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJh eS45XCIsZXhwPVwiOVwiLG51bWNoaWxkPVwiMFwiLHZhbHVlPVwiMTIzNFwi LHR5cGU9XCJsb25nIGludFwiXH1cXFxdIiBcDQotICAgICAgICAgICAgICAg ICAibGlzdGluZyBvZiBuYW1lcyBhbmQgdmFsdWVzIG9mIGNoaWxkcmVuIg0K ICANCiEgIyBTdGVwIG92ZXIgIndlaXJkLT5mdW5jX3B0ciA9IG5vdGhpbmc7 Ig0KISBzZXQgbGluZV9kY3RfYTBfMCBbZ2RiX2dldF9saW5lX251bWJlciAi YTAgPSAnMCc7Il0NCiAgbWlfc3RlcF90byBkb19jaGlsZHJlbl90ZXN0cyB7 fSB7Lip2YXItY21kLmN9IFwNCiEgICAgICRsaW5lX2RjdF9hMF8wICJzdGVw IFwkbGluZV9kY3RfYTBfMCINCiAgDQogICMgVGVzdDogY192YXJpYWJsZS01 LjkNCiAgIyBEZXNjOiBjaGVjayB0aGF0IGZ1bmNfcHRyIGNoYW5nZWQNCi0t LSA4MzMsODQyIC0tLS0NCiAgCSJcXF5kb25lLGNoYW5nZWxpc3Q9XFxcW1x7 bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS4zXCIsaW5f c2NvcGU9XCJ0cnVlXCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFt ZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS40XCIsaW5fc2Nv cGU9XCJ0cnVlXCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1c InN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS41XCIsaW5fc2NvcGU9 XCJ0cnVlXCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0 cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS42XCIsaW5fc2NvcGU9XCJ0 cnVlXCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0cnVj dF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS43XCIsaW5fc2NvcGU9XCJ0cnVl XCIsdHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0cnVjdF9k ZWNsYXJhdGlvbnMubG9uZ19hcnJheS44XCIsaW5fc2NvcGU9XCJ0cnVlXCIs dHlwZV9jaGFuZ2VkPVwiZmFsc2VcIlx9LFx7bmFtZT1cInN0cnVjdF9kZWNs YXJhdGlvbnMubG9uZ19hcnJheS45XCIsaW5fc2NvcGU9XCJ0cnVlXCIsdHlw ZV9jaGFuZ2VkPVwiZmFsc2VcIlx9XFxcXSIgXA0KICAJInVwZGF0ZSBhbGwg dmFycyBzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuMy05IGNoYW5n ZWQiDQogIA0KICANCiEgIyBTdGVwIG92ZXIgd2VpcmQtPmZ1bmNfcHRyID0g bm90aGluZzsNCiAgbWlfc3RlcF90byBkb19jaGlsZHJlbl90ZXN0cyB7fSB7 Lip2YXItY21kLmN9IFwNCiEgICAgIFtleHByICRsaW5lX2RjdF9ub3RoaW5n ICsgMV0gInN0ZXAgXCRsaW5lX2RjdF9ub3RoaW5nICsgMSINCiAgDQogICMg VGVzdDogY192YXJpYWJsZS01LjkNCiAgIyBEZXNjOiBjaGVjayB0aGF0IGZ1 bmNfcHRyIGNoYW5nZWQNCioqKioqKioqKioqKioqKiBtaV9nZGJfdGVzdCAi LXZhci11cGRhdGUgKiIgXA0KKioqIDg0OCw4NTYgKioqKg0KICAJIlxcXmRv bmUsY2hhbmdlbGlzdD1cXFxbXHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9u cy5mdW5jX3B0clwiLGluX3Njb3BlPVwidHJ1ZVwiLHR5cGVfY2hhbmdlZD1c ImZhbHNlXCJcfVxcXF0iIFwNCiAgCSJ1cGRhdGUgYWxsIHZhcnMgc3RydWN0 X2RlY2xhcmF0aW9ucy5mdW5jX3B0ciBjaGFuZ2VkIg0KICANCiAgIyBEZWxl dGUgYWxsIHZhcmlhYmxlcw0KICBtaV9nZGJfdGVzdCAiLXZhci1kZWxldGUg c3RydWN0X2RlY2xhcmF0aW9ucyIgXA0KISAJIlxcXmRvbmUsbmRlbGV0ZWQ9 XCI2NVwiIiBcDQogIAkiZGVsZXRlIHZhciBzdHJ1Y3RfZGVjbGFyYXRpb25z Ig0KICANCiAgbWlfZ2RiX3Rlc3QgIi12YXItZGVsZXRlIHdlaXJkLT5pbnRf cHRyX3B0ciIgXA0KLS0tIDg0NCw4NzcgLS0tLQ0KICAJIlxcXmRvbmUsY2hh bmdlbGlzdD1cXFxbXHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5mdW5j X3B0clwiLGluX3Njb3BlPVwidHJ1ZVwiLHR5cGVfY2hhbmdlZD1cImZhbHNl XCJcfVxcXF0iIFwNCiAgCSJ1cGRhdGUgYWxsIHZhcnMgc3RydWN0X2RlY2xh cmF0aW9ucy5mdW5jX3B0ciBjaGFuZ2VkIg0KICANCisgIyBTdGVwIG92ZXJz dHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXlbMTBdID0gMzQ1NjsNCisg bWlfc3RlcF90byBkb19jaGlsZHJlbl90ZXN0cyB7fSB7Lip2YXItY21kLmN9 IFwNCisgICAgIFtleHByICRsaW5lX2RjdF9ub3RoaW5nICsgMl0gInN0ZXAg XCRsaW5lX2RjdF9ub3RoaW5nICsgMiINCisgDQorIG1pX2dkYl90ZXN0ICIt dmFyLXVwZGF0ZSAtLW5vLXZhbHVlcyAqIiBcDQorIAkiXFxeZG9uZSxjaGFu Z2VsaXN0PVxcXFtce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdf YXJyYXkuMTBcIixpbl9zY29wZT1cInRydWVcIix0eXBlX2NoYW5nZWQ9XCJm YWxzZVwiXH1cXFxdIiBcDQorICAidXBkYXRlICBhbGwgdmFycyBzdHJ1Y3Rf ZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuMTAgY2hhbmdlZCwgZG9uJ3QgcHJp bnQgdmFsdWVzLiINCisgDQorICMgU3RlcCBvdmVyIHN0cnVjdF9kZWNsYXJh dGlvbnMubG9uZ19hcnJheVsxMV0gPSA1Njc4Ow0KKyBzZXQgbGluZV9kY3Rf YTBfMCBbZ2RiX2dldF9saW5lX251bWJlciAiYTAgPSAnMCc7Il0NCisgbWlf c3RlcF90byAgZG9fY2hpbGRyZW5fdGVzdHMge30gey4qdmFyLWNtZC5jfSBc DQorICAgICAkbGluZV9kY3RfYTBfMCAic3RlcCBcJGxpbmVfZGN0X2EwXzAi DQorIA0KKyBtaV9nZGJfdGVzdCAiLXZhci11cGRhdGUgLS1hbGwtdmFsdWVz ICoiIFwNCisgCSJcXF5kb25lLGNoYW5nZWxpc3Q9XFxcW1x7bmFtZT1cInN0 cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS4xMVwiLHZhbHVlPVwiNTY3 OFwiLGluX3Njb3BlPVwidHJ1ZVwiLHR5cGVfY2hhbmdlZD1cImZhbHNlXCJc fVxcXF0iIFwNCisgICJ1cGRhdGUgYWxsIHZhcnMgc3RydWN0X2RlY2xhcmF0 aW9ucy5sb25nX2FycmF5LjExIGNoYW5nZWQsIHByaW50IHZhbHVlcy4iDQor IA0KKyBtaV9nZGJfdGVzdCAiLXZhci1saXN0LWNoaWxkcmVuIC0tYWxsLXZh bHVlcyBzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkiIFwNCisgICAg ICAgICAiXFxeZG9uZSxudW1jaGlsZD1cIjEyXCIsY2hpbGRyZW49XFxcW2No aWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS4w XCIsZXhwPVwiMFwiLG51bWNoaWxkPVwiMFwiLHZhbHVlPVwiMTIzNFwiLHR5 cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xh cmF0aW9ucy5sb25nX2FycmF5LjFcIixleHA9XCIxXCIsbnVtY2hpbGQ9XCIw XCIsdmFsdWU9XCIyMzQ1XCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGlsZD1c e25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuMlwiLGV4 cD1cIjJcIixudW1jaGlsZD1cIjBcIix2YWx1ZT1cIjM0NTZcIix0eXBlPVwi bG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlv bnMubG9uZ19hcnJheS4zXCIsZXhwPVwiM1wiLG51bWNoaWxkPVwiMFwiLHZh bHVlPVwiNDU2N1wiLHR5cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1l PVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5LjRcIixleHA9XCI0 XCIsbnVtY2hpbGQ9XCIwXCIsdmFsdWU9XCI1Njc4XCIsdHlwZT1cImxvbmcg aW50XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmxv bmdfYXJyYXkuNVwiLGV4cD1cIjVcIixudW1jaGlsZD1cIjBcIix2YWx1ZT1c IjY3ODlcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxkPVx7bmFtZT1cInN0 cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS42XCIsZXhwPVwiNlwiLG51 bWNoaWxkPVwiMFwiLHZhbHVlPVwiNzg5MFwiLHR5cGU9XCJsb25nIGludFwi XH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2Fy cmF5LjdcIixleHA9XCI3XCIsbnVtY2hpbGQ9XCIwXCIsdmFsdWU9XCI4OTAx XCIsdHlwZT1cImxvbmcgaW50XCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3Rf ZGVjbGFyYXRpb25zLmxvbmdfYXJyYXkuOFwiLGV4cD1cIjhcIixudW1jaGls ZD1cIjBcIix2YWx1ZT1cIjkwMTJcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNo aWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS45 XCIsZXhwPVwiOVwiLG51bWNoaWxkPVwiMFwiLHZhbHVlPVwiMTIzNFwiLHR5 cGU9XCJsb25nIGludFwiXH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xh cmF0aW9ucy5sb25nX2FycmF5LjEwXCIsZXhwPVwiMTBcIixudW1jaGlsZD1c IjBcIix2YWx1ZT1cIjM0NTZcIix0eXBlPVwibG9uZyBpbnRcIlx9LGNoaWxk PVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheS4xMVwi LGV4cD1cIjExXCIsbnVtY2hpbGQ9XCIwXCIsdmFsdWU9XCI1Njc4XCIsdHlw ZT1cImxvbmcgaW50XCJcfVxcXF0iIFwNCisgICAgICAgICAgICAgICAgICJs aXN0aW5nIG9mIG5hbWVzIGFuZCB2YWx1ZXMgb2YgY2hpbGRyZW4iDQorIA0K KyBtaV9nZGJfdGVzdCAiLXZhci1saXN0LWNoaWxkcmVuIC0tc2ltcGxlLXZh bHVlcyBzdHJ1Y3RfZGVjbGFyYXRpb25zIiBcDQorICAgICAgICAgIlxcXmRv bmUsbnVtY2hpbGQ9XCIxMVwiLGNoaWxkcmVuPVxcXFtjaGlsZD1ce25hbWU9 XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmludGVnZXJcIixleHA9XCJpbnRlZ2Vy XCIsbnVtY2hpbGQ9XCIwXCIsdmFsdWU9XCIxMjNcIix0eXBlPVwiaW50XCJc fSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmNoYXJhY3Rl clwiLGV4cD1cImNoYXJhY3RlclwiLG51bWNoaWxkPVwiMFwiLHZhbHVlPVwi MCAnXFxcXFxcXFwwJ1wiLHR5cGU9XCJjaGFyXCJcfSxjaGlsZD1ce25hbWU9 XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLmNoYXJfcHRyXCIsZXhwPVwiY2hhcl9w dHJcIixudW1jaGlsZD1cIjFcIix2YWx1ZT1cIiRoZXggXFxcXFwiaGVsbG9c XFxcXCJcIix0eXBlPVwiY2hhciBcXCpcIlx9LGNoaWxkPVx7bmFtZT1cInN0 cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19pbnRcIixleHA9XCJsb25nX2ludFwi LG51bWNoaWxkPVwiMFwiLHZhbHVlPVwiMFwiLHR5cGU9XCJsb25nIGludFwi XH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5pbnRfcHRy X3B0clwiLGV4cD1cImludF9wdHJfcHRyXCIsbnVtY2hpbGQ9XCIxXCIsdmFs dWU9XCIkaGV4XCIsdHlwZT1cImludCBcXCpcXCpcIlx9LGNoaWxkPVx7bmFt ZT1cInN0cnVjdF9kZWNsYXJhdGlvbnMubG9uZ19hcnJheVwiLGV4cD1cImxv bmdfYXJyYXlcIixudW1jaGlsZD1cIjEyXCIsdHlwZT1cImxvbmcgaW50IFxc XFsxMlxcXF1cIlx9LGNoaWxkPVx7bmFtZT1cInN0cnVjdF9kZWNsYXJhdGlv bnMuZnVuY19wdHJcIixleHA9XCJmdW5jX3B0clwiLG51bWNoaWxkPVwiMFwi LHZhbHVlPVwiJGhleCA8bm90aGluZz5cIix0eXBlPVwidm9pZCBcXChcXCpc XClcXCh2b2lkXFwpXCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFy YXRpb25zLmZ1bmNfcHRyX3N0cnVjdFwiLGV4cD1cImZ1bmNfcHRyX3N0cnVj dFwiLG51bWNoaWxkPVwiMFwiLHZhbHVlPVwiMFwiLHR5cGU9XCJzdHJ1Y3Qg X3N0cnVjdF9kZWNsIFxcKFxcKlxcKVxcKGludCwgY2hhciBcXCosIGxvbmcg aW50XFwpXCJcfSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25z LmZ1bmNfcHRyX3B0clwiLGV4cD1cImZ1bmNfcHRyX3B0clwiLG51bWNoaWxk PVwiMFwiLHZhbHVlPVwiMFwiLHR5cGU9XCJzdHJ1Y3QgX3N0cnVjdF9kZWNs IFxcKlxcKFxcKlxcKVxcKGludCwgY2hhciBcXCosIGxvbmcgaW50XFwpXCJc fSxjaGlsZD1ce25hbWU9XCJzdHJ1Y3RfZGVjbGFyYXRpb25zLnUxXCIsZXhw PVwidTFcIixudW1jaGlsZD1cIjRcIix0eXBlPVwidW5pb24gXHsuLi5cfVwi XH0sY2hpbGQ9XHtuYW1lPVwic3RydWN0X2RlY2xhcmF0aW9ucy5zMlwiLGV4 cD1cInMyXCIsbnVtY2hpbGQ9XCI0XCIsdHlwZT1cInN0cnVjdCBcey4uLlx9 XCJcfVxcXF0iIFwNCisgICAibGlzdGluZyBvZiBjaGlsZHJlbiwgc2ltcGxl IHR5cGVzOiBuYW1lcywgdHlwZSBhbmQgdmFsdWVzLCBjb21wbGV4IHR5cGVz OiBuYW1lcyBhbmQgdHlwZXMiDQorIA0KICAjIERlbGV0ZSBhbGwgdmFyaWFi bGVzDQogIG1pX2dkYl90ZXN0ICItdmFyLWRlbGV0ZSBzdHJ1Y3RfZGVjbGFy YXRpb25zIiBcDQohIAkiXFxeZG9uZSxuZGVsZXRlZD1cIjY3XCIiIFwNCiAg CSJkZWxldGUgdmFyIHN0cnVjdF9kZWNsYXJhdGlvbnMiDQogIA0KICBtaV9n ZGJfdGVzdCAiLXZhci1kZWxldGUgd2VpcmQtPmludF9wdHJfcHRyIiBcDQoN CioqKiBnZGIubWkvbWktc3RhY2suZXhwLn4xLjE2Ln4JMjAwNS0wNi0xOSAx ODo0OToxOC4wMDAwMDAwMDAgKzEyMDANCi0tLSBnZGIubWkvbWktc3RhY2su ZXhwCTIwMDUtMDctMjAgMTY6MjA6MDcuMDAwMDAwMDAwICsxMjAwDQoqKioq KioqKioqKioqKiogcHJvYyB0ZXN0X3N0YWNrX2xvY2Fsc19saXN0aW5nIHt9 IHsNCioqKiAxNTIsMTcwICoqKioNCiAgDQogICAgICAjIE9idGFpbiBsaXN0 cyBmb3IgbG9jYWxzIGZvciB0aGUgc3RhY2sgZnJhbWVzDQogICAgICAjIFRl c3RzOg0KISAgICAgIyAtc3RhY2stbGlzdC1sb2NhbHMgMA0KISAgICAgIyAt c3RhY2stbGlzdC1sb2NhbHMgMQ0KISAgICAgIyAtc3RhY2stbGlzdC1sb2Nh bHMgMg0KICAgICAgIyAtc3RhY2stbGlzdC1hcmd1bWVudHMgDQogIA0KICAg ICAgbWlfZ2RiX3Rlc3QgIjIzMi1zdGFjay1saXN0LWxvY2FscyAwIiBcDQoh IAkgICAgIjIzMlxcXmRvbmUsbG9jYWxzPVxcXFtuYW1lPVwiQVwiLG5hbWU9 XCJCXCIsbmFtZT1cIkNcIlxcXF0iIFwNCiEgICAgICAgICAgICAgICAgICJz dGFjayBsb2NhbHMgbGlzdGluZyAwIg0KICANCiAgc2V0IGxpbmVfY2FsbGVl NF9yZXR1cm5fMCBbZ2RiX2dldF9saW5lX251bWJlciAicmV0dXJuIDA7Il0N CiAgDQohICMgc3RlcCB1bnRpbCBBLCBCLCBDLCBoYXZlIHNvbWUgcmVhc29u YWJsZSB2YWx1ZXMuDQohIHNlbmRfZ2RiICItZXhlYy1uZXh0IDNcbiINCiAg Z2RiX2V4cGVjdCB7DQogICAgICAtcmUgIlxcXnJ1bm5pbmdcclxuJHttaV9n ZGJfcHJvbXB0fVxcKnN0b3BwZWQscmVhc29uPVwiZW5kLXN0ZXBwaW5nLXJh bmdlXCIsdGhyZWFkLWlkPVwiXFswMVxdXCIsZnJhbWU9XHthZGRyPVwiJGhl eFwiLGZ1bmM9XCJjYWxsZWU0XCIsYXJncz1cXFxbXFxcXSxmaWxlPVwiLipi YXNpY3MuY1wiLGZ1bGxuYW1lPVwiJHtmdWxsbmFtZV9zeW50YXh9JHtzcmNm aWxlfVwiLGxpbmU9XCIkbGluZV9jYWxsZWU0X3JldHVybl8wXCJcfVxyXG4k bWlfZ2RiX3Byb21wdCQiIHsNCiAgCXBhc3MgIm5leHQncyBpbiBjYWxsZWU0 Ig0KLS0tIDE1MiwxNzAgLS0tLQ0KICANCiAgICAgICMgT2J0YWluIGxpc3Rz IGZvciBsb2NhbHMgZm9yIHRoZSBzdGFjayBmcmFtZXMNCiAgICAgICMgVGVz dHM6DQohICAgICAjIC1zdGFjay1saXN0LWxvY2FscyAwICgtLW5vLXZhbHVl cykNCiEgICAgICMgLXN0YWNrLWxpc3QtbG9jYWxzIDEgKC0tYWxsLXZhbHVl cykNCiEgICAgICMgLXN0YWNrLWxpc3QtbG9jYWxzIDIgKC0tc2ltcGxlLXZh bHVlcykNCiAgICAgICMgLXN0YWNrLWxpc3QtYXJndW1lbnRzIA0KICANCiAg ICAgIG1pX2dkYl90ZXN0ICIyMzItc3RhY2stbGlzdC1sb2NhbHMgMCIgXA0K ISAgICIyMzJcXF5kb25lLGxvY2Fscz1cXFxbbmFtZT1cIkFcIixuYW1lPVwi QlwiLG5hbWU9XCJDXCIsbmFtZT1cIkRcIlxcXF0iIFwNCiEgICAgICAgICAg ICAgICAgICJzdGFjayBsb2NhbHMgbGlzdGluZyBvZiBuYW1lcyINCiAgDQog IHNldCBsaW5lX2NhbGxlZTRfcmV0dXJuXzAgW2dkYl9nZXRfbGluZV9udW1i ZXIgInJldHVybiAwOyJdDQogIA0KISAjIHN0ZXAgdW50aWwgQSwgQiwgQywg RCBoYXZlIHNvbWUgcmVhc29uYWJsZSB2YWx1ZXMuDQohIHNlbmRfZ2RiICIt ZXhlYy1uZXh0IDRcbiINCiAgZ2RiX2V4cGVjdCB7DQogICAgICAtcmUgIlxc XnJ1bm5pbmdcclxuJHttaV9nZGJfcHJvbXB0fVxcKnN0b3BwZWQscmVhc29u PVwiZW5kLXN0ZXBwaW5nLXJhbmdlXCIsdGhyZWFkLWlkPVwiXFswMVxdXCIs ZnJhbWU9XHthZGRyPVwiJGhleFwiLGZ1bmM9XCJjYWxsZWU0XCIsYXJncz1c XFxbXFxcXSxmaWxlPVwiLipiYXNpY3MuY1wiLGZ1bGxuYW1lPVwiJHtmdWxs bmFtZV9zeW50YXh9JHtzcmNmaWxlfVwiLGxpbmU9XCIkbGluZV9jYWxsZWU0 X3JldHVybl8wXCJcfVxyXG4kbWlfZ2RiX3Byb21wdCQiIHsNCiAgCXBhc3Mg Im5leHQncyBpbiBjYWxsZWU0Ig0KKioqKioqKioqKioqKioqIGdkYl9leHBl Y3Qgew0KKioqIDE3MywxODQgKioqKg0KICB9DQogIA0KICAgICAgbWlfZ2Ri X3Rlc3QgIjIzMi1zdGFjay1saXN0LWxvY2FscyAxIiBcDQohIAkgICAgIjIz MlxcXmRvbmUsbG9jYWxzPVxcXFtce25hbWU9XCJBXCIsdmFsdWU9XCIxXCJc fSxce25hbWU9XCJCXCIsdmFsdWU9XCIyXCJcfSxce25hbWU9XCJDXCIsdmFs dWU9XCIzXCJcfVxcXF0iIFwNCiEgICAgICAgICAgICAgICAgICJzdGFjayBs b2NhbHMgbGlzdGluZyAxIg0KICANCiAgICAgIG1pX2dkYl90ZXN0ICIyMzIt c3RhY2stbGlzdC1sb2NhbHMgMiIgXA0KISAJICAgICIyMzJcXF5kb25lLGxv Y2Fscz1cXFxbXHtuYW1lPVwiQVwiLHR5cGU9XCJpbnRcIix2YWx1ZT1cIjFc Ilx9LFx7bmFtZT1cIkJcIix0eXBlPVwiaW50XCIsdmFsdWU9XCIyXCJcfSxc e25hbWU9XCJDXCIsdHlwZT1cImludFwiLHZhbHVlPVwiM1wiXH1cXFxdIiBc DQohICAgICAgICAgICAgICAgICAic3RhY2sgbG9jYWxzIGxpc3RpbmcgMiIN CiAgDQogICAgICBtaV9nZGJfdGVzdCAiMjM0LXN0YWNrLWxpc3QtbG9jYWxz IiBcDQogIAkgICAgIjIzNFxcXmVycm9yLG1zZz1cIm1pX2NtZF9zdGFja19s aXN0X2xvY2FsczogVXNhZ2UuKlBSSU5UX1ZBTFVFUy4qXCIiIFwNCi0tLSAx NzMsMTg0IC0tLS0NCiAgfQ0KICANCiAgICAgIG1pX2dkYl90ZXN0ICIyMzIt c3RhY2stbGlzdC1sb2NhbHMgMSIgXA0KISAgICAgIjIzMlxcXmRvbmUsbG9j YWxzPVxcXFtce25hbWU9XCJBXCIsdmFsdWU9XCIxXCJcfSxce25hbWU9XCJC XCIsdmFsdWU9XCIyXCJcfSxce25hbWU9XCJDXCIsdmFsdWU9XCIzXCJcfSxc e25hbWU9XCJEXCIsdmFsdWU9XCJcXHswLCAxLCAyXFx9XCJcfVxcXF0iIFwN CiEgICAgICAgICAgICAgICAgICJzdGFjayBsb2NhbHMgbGlzdGluZyBvZiBu YW1lcyBhbmQgdmFsdWVzIg0KICANCiAgICAgIG1pX2dkYl90ZXN0ICIyMzIt c3RhY2stbGlzdC1sb2NhbHMgMiIgXA0KISAJICAgICIyMzJcXF5kb25lLGxv Y2Fscz1cXFxbXHtuYW1lPVwiQVwiLHR5cGU9XCJpbnRcIix2YWx1ZT1cIjFc Ilx9LFx7bmFtZT1cIkJcIix0eXBlPVwiaW50XCIsdmFsdWU9XCIyXCJcfSxc e25hbWU9XCJDXCIsdHlwZT1cImludFwiLHZhbHVlPVwiM1wiXH0sXHtuYW1l PVwiRFwiLHR5cGU9XCJpbnQgXFxcWzNcXFxdXCJcfVxcXF0iIFwNCiEgICAi c3RhY2sgbG9jYWxzIGxpc3RpbmcsIHNpbXBsZSB0eXBlczogbmFtZXMgYW5k IHZhbHVlcywgY29tcGxleCB0eXBlOiBuYW1lcyBhbmQgdHlwZXMiDQogIA0K ICAgICAgbWlfZ2RiX3Rlc3QgIjIzNC1zdGFjay1saXN0LWxvY2FscyIgXA0K ICAJICAgICIyMzRcXF5lcnJvcixtc2c9XCJtaV9jbWRfc3RhY2tfbGlzdF9s b2NhbHM6IFVzYWdlLipQUklOVF9WQUxVRVMuKlwiIiBcDQoNCioqKiBnZGIu bWkvdmFyLWNtZC5jLn4xLjMufgkyMDA0LTA5LTI4IDIzOjU0OjUxLjAwMDAw MDAwMCArMTIwMA0KLS0tIGdkYi5taS92YXItY21kLmMJMjAwNS0wNy0yMCAx NjoyMDo0MC4wMDAwMDAwMDAgKzEyMDANCioqKioqKioqKioqKioqKg0KKioq IDEsNCAqKioqDQohIC8qIENvcHlyaWdodCAxOTk5LCAyMDA0IEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KICANCiAgICAgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0RCLg0KICANCi0tLSAxLDQgLS0tLQ0KISAvKiBDb3B5cmln aHQgMTk5OSwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4NCiAgDQogICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4NCiAg DQoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgX3N0cnVjdF9kZWNs IHsNCioqKiA1MSw1NyAqKioqDQogICAgY2hhciAqY2hhcl9wdHI7DQogICAg bG9uZyAgbG9uZ19pbnQ7DQogICAgaW50ICAqKmludF9wdHJfcHRyOw0KISAg IGxvbmcgIGxvbmdfYXJyYXlbMTBdOw0KICANCiAgICB2b2lkICgqZnVuY19w dHIpICh2b2lkKTsNCiAgICBzdHJ1Y3QgX3N0cnVjdF9kZWNsICgqZnVuY19w dHJfc3RydWN0KSAoaW50LCBjaGFyICosIGxvbmcpOw0KLS0tIDUxLDU3IC0t LS0NCiAgICBjaGFyICpjaGFyX3B0cjsNCiAgICBsb25nICBsb25nX2ludDsN CiAgICBpbnQgICoqaW50X3B0cl9wdHI7DQohICAgbG9uZyAgbG9uZ19hcnJh eVsxMl07DQogIA0KICAgIHZvaWQgKCpmdW5jX3B0cikgKHZvaWQpOw0KICAg IHN0cnVjdCBfc3RydWN0X2RlY2wgKCpmdW5jX3B0cl9zdHJ1Y3QpIChpbnQs IGNoYXIgKiwgbG9uZyk7DQoqKioqKioqKioqKioqKiogZG9fY2hpbGRyZW5f dGVzdHMgKHZvaWQpDQoqKiogMjI3LDIzMiAqKioqDQotLS0gMjI3LDIzNCAt LS0tDQogICAgc3RydWN0X2RlY2xhcmF0aW9ucy5sb25nX2FycmF5WzldID0g MTIzNDsNCiAgDQogICAgd2VpcmQtPmZ1bmNfcHRyID0gbm90aGluZzsNCisg ICBzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXlbMTBdID0gMzQ1NjsN CisgICBzdHJ1Y3RfZGVjbGFyYXRpb25zLmxvbmdfYXJyYXlbMTFdID0gNTY3 ODsNCiAgDQogICAgLyogU3RydWN0L3BvaW50ZXIvYXJyYXkgdGVzdHMgKi8N CiAgICBhMCA9ICcwJzs= >From gdb-patches-return-40326-listarch-gdb-patches=sources.redhat.com@sources.redhat.com Wed Jul 20 13:26:02 2005 Return-Path: Delivered-To: listarch-gdb-patches@sources.redhat.com Received: (qmail 32164 invoked by alias); 20 Jul 2005 13:25:59 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Delivered-To: mailing list gdb-patches@sources.redhat.com Received: (qmail 32080 invoked by uid 22791); 20 Jul 2005 13:25:43 -0000 Received: from sibelius.xs4all.nl (HELO sibelius.xs4all.nl) (82.92.89.47) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Wed, 20 Jul 2005 13:25:43 +0000 Received: from elgar.sibelius.xs4all.nl (root@elgar.sibelius.xs4all.nl [192.168.0.2]) by sibelius.xs4all.nl (8.13.0/8.13.0) with ESMTP id j6KDPb4N021100 for ; Wed, 20 Jul 2005 15:25:37 +0200 (CEST) Received: from elgar.sibelius.xs4all.nl (kettenis@localhost.sibelius.xs4all.nl [127.0.0.1]) by elgar.sibelius.xs4all.nl (8.13.4/8.13.3) with ESMTP id j6KDPafq007556 for ; Wed, 20 Jul 2005 15:25:36 +0200 (CEST) Received: (from kettenis@localhost) by elgar.sibelius.xs4all.nl (8.13.4/8.13.4/Submit) id j6KDPZvi030460; Wed, 20 Jul 2005 15:25:35 +0200 (CEST) Date: Wed, 20 Jul 2005 13:25:00 -0000 Message-Id: <200507201325.j6KDPZvi030460@elgar.sibelius.xs4all.nl> From: Mark Kettenis To: gdb-patches@sourceware.org Subject: [commit] Follow forks on HP-UX 11.xx X-SW-Source: 2005-07/txt/msg00164.txt.bz2 Content-length: 9966 This patch adds back the feature that was lost when I revised the HP-UX native code. There are still a few rough edges, but it works well enough to be useful. So I committed this. I'll try to polish up the testsuite and fix the bugs that uncovers. Mark Index: ChangeLog from Mark Kettenis * inf-ttrace.c (inf_ttrace_vfork_ppid): New variable. (inf_ttrace_follow_fork): New function. (inf_ttrace_him, inf_ttrace_attach): Ask for TTEVT_FORK and TTEVT_VFORK events. Replace TTEO_NOSTRCHLD option with TTEO_PROC_INHERIT. (inf_ttrace_create_inferior, inf_ttrace_attach): Add checks for inf_ttrace_vfork_ppid. (inf_ttrace_kill_inferior, inf_ttrace_detach): Detach from waiting parent if appropriate. (inf_ttrace_wait): Handle TTEVT_FORK and TTEVT_VFORK. (inf_ttrace_target): Set to_follow_fork. Index: inf-ttrace.c =================================================================== RCS file: /cvs/src/src/gdb/inf-ttrace.c,v retrieving revision 1.11 diff -u -p -r1.11 inf-ttrace.c --- inf-ttrace.c 18 Jul 2005 21:00:50 -0000 1.11 +++ inf-ttrace.c 20 Jul 2005 13:21:23 -0000 @@ -397,6 +397,132 @@ inf_ttrace_stopped_by_watchpoint (void) } +/* When tracking a vfork(2), we cannot detach from the parent until + after the child has called exec(3) or has exited. If we are still + attached to the parent, this variable will be set to the process ID + of the parent. Otherwise it will be set to zero. */ +static pid_t inf_ttrace_vfork_ppid = -1; + +static int +inf_ttrace_follow_fork (int follow_child) +{ + pid_t pid, fpid; + lwpid_t lwpid, flwpid; + ttstate_t tts; + + /* FIXME: kettenis/20050720: This stuff should really be passed as + an argument by our caller. */ + { + ptid_t ptid; + struct target_waitstatus status; + + get_last_target_status (&ptid, &status); + gdb_assert (status.kind == TARGET_WAITKIND_FORKED + || status.kind == TARGET_WAITKIND_VFORKED); + + pid = ptid_get_pid (ptid); + lwpid = ptid_get_lwp (ptid); + } + + /* Get all important details that core GDB doesn't (and shouldn't) + know about. */ + if (ttrace (TT_LWP_GET_STATE, pid, lwpid, + (uintptr_t)&tts, sizeof tts, 0) == -1) + perror_with_name (("ttrace")); + + gdb_assert (tts.tts_event == TTEVT_FORK || tts.tts_event == TTEVT_VFORK); + + if (tts.tts_u.tts_fork.tts_isparent) + { + pid = tts.tts_pid; + lwpid = tts.tts_lwpid; + fpid = tts.tts_u.tts_fork.tts_fpid; + flwpid = tts.tts_u.tts_fork.tts_flwpid; + } + else + { + pid = tts.tts_u.tts_fork.tts_fpid; + lwpid = tts.tts_u.tts_fork.tts_flwpid; + fpid = tts.tts_pid; + flwpid = tts.tts_lwpid; + } + + if (follow_child) + { + inferior_ptid = ptid_build (fpid, flwpid, 0); + detach_breakpoints (pid); + + target_terminal_ours (); + fprintf_unfiltered (gdb_stdlog, _("\ +Attaching after fork to child process %ld.\n"), (long)fpid); + } + else + { + inferior_ptid = ptid_build (pid, lwpid, 0); + detach_breakpoints (fpid); + + target_terminal_ours (); + fprintf_unfiltered (gdb_stdlog, _("\ +Detaching after fork from child process %ld.\n"), (long)fpid); + } + + if (tts.tts_event == TTEVT_VFORK) + { + gdb_assert (!tts.tts_u.tts_fork.tts_isparent); + + if (follow_child) + { + /* We can't detach from the parent yet. */ + inf_ttrace_vfork_ppid = pid; + + reattach_breakpoints (fpid); + } + else + { + if (ttrace (TT_PROC_DETACH, fpid, 0, 0, 0, 0) == -1) + perror_with_name (("ttrace")); + + /* Wait till we get the TTEVT_VFORK event in the parent. + This indicates that the child has called exec(3) or has + exited and that the parent is ready to be traced again. */ + if (ttrace_wait (pid, lwpid, TTRACE_WAITOK, &tts, sizeof tts) == -1) + perror_with_name (("ttrace_wait")); + gdb_assert (tts.tts_event == TTEVT_VFORK); + gdb_assert (tts.tts_u.tts_fork.tts_isparent); + + reattach_breakpoints (pid); + } + } + else + { + gdb_assert (tts.tts_u.tts_fork.tts_isparent); + + if (follow_child) + { + if (ttrace (TT_PROC_DETACH, pid, 0, 0, 0, 0) == -1) + perror_with_name (("ttrace")); + } + else + { + if (ttrace (TT_PROC_DETACH, fpid, 0, 0, 0, 0) == -1) + perror_with_name (("ttrace")); + } + } + + if (follow_child) + { + /* The child will start out single-threaded. */ + inf_ttrace_num_lwps = 0; + inf_ttrace_num_lwps_in_syscall = 0; + + /* Reset breakpoints in the child as appropriate. */ + follow_inferior_reset_breakpoints (); + } + + return 0; +} + + /* File descriptors for pipes used as semaphores during initial startup of an inferior. */ static int inf_ttrace_pfd1[2]; @@ -463,12 +589,12 @@ inf_ttrace_him (int pid) /* Set the initial event mask. */ memset (&tte, 0, sizeof (tte)); - tte.tte_events |= TTEVT_EXEC | TTEVT_EXIT; + tte.tte_events |= TTEVT_EXEC | TTEVT_EXIT | TTEVT_FORK | TTEVT_VFORK; tte.tte_events |= TTEVT_LWP_CREATE | TTEVT_LWP_EXIT | TTEVT_LWP_TERMINATE; #ifdef TTEVT_BPT_SSTEP tte.tte_events |= TTEVT_BPT_SSTEP; #endif - tte.tte_opts = TTEO_NOSTRCCHLD; + tte.tte_opts |= TTEO_PROC_INHERIT; if (ttrace (TT_PROC_SET_EVENT_MASK, pid, 0, (uintptr_t)&tte, sizeof tte, 0) == -1) perror_with_name (("ttrace")); @@ -506,6 +632,7 @@ inf_ttrace_create_inferior (char *exec_f gdb_assert (inf_ttrace_num_lwps_in_syscall == 0); gdb_assert (inf_ttrace_page_dict.count == 0); gdb_assert (inf_ttrace_reenable_page_protections == 0); + gdb_assert (inf_ttrace_vfork_ppid == -1); fork_inferior (exec_file, allargs, env, inf_ttrace_me, inf_ttrace_him, inf_ttrace_prepare, NULL); @@ -528,6 +655,14 @@ inf_ttrace_kill_inferior (void) if (ttrace (TT_PROC_EXIT, pid, 0, 0, 0, 0) == -1) perror_with_name (("ttrace")); /* ??? Is it necessary to call ttrace_wait() here? */ + + if (inf_ttrace_vfork_ppid != -1) + { + if (ttrace (TT_PROC_DETACH, inf_ttrace_vfork_ppid, 0, 0, 0, 0) == -1) + perror_with_name (("ttrace")); + inf_ttrace_vfork_ppid = -1; + } + target_mourn_inferior (); } @@ -594,6 +729,7 @@ inf_ttrace_attach (char *args, int from_ gdb_assert (inf_ttrace_num_lwps == 0); gdb_assert (inf_ttrace_num_lwps_in_syscall == 0); + gdb_assert (inf_ttrace_vfork_ppid == -1); if (ttrace (TT_PROC_ATTACH, pid, 0, TT_KILL_ON_EXIT, TT_VERSION, 0) == -1) perror_with_name (("ttrace")); @@ -601,12 +737,12 @@ inf_ttrace_attach (char *args, int from_ /* Set the initial event mask. */ memset (&tte, 0, sizeof (tte)); - tte.tte_events |= TTEVT_EXEC | TTEVT_EXIT; + tte.tte_events |= TTEVT_EXEC | TTEVT_EXIT | TTEVT_FORK | TTEVT_VFORK; tte.tte_events |= TTEVT_LWP_CREATE | TTEVT_LWP_EXIT | TTEVT_LWP_TERMINATE; #ifdef TTEVT_BPT_SSTEP tte.tte_events |= TTEVT_BPT_SSTEP; #endif - tte.tte_opts = TTEO_NOSTRCCHLD; + tte.tte_opts |= TTEO_PROC_INHERIT; if (ttrace (TT_PROC_SET_EVENT_MASK, pid, 0, (uintptr_t)&tte, sizeof tte, 0) == -1) perror_with_name (("ttrace")); @@ -642,6 +778,13 @@ inf_ttrace_detach (char *args, int from_ if (ttrace (TT_PROC_DETACH, pid, 0, 0, sig, 0) == -1) perror_with_name (("ttrace")); + if (inf_ttrace_vfork_ppid != -1) + { + if (ttrace (TT_PROC_DETACH, inf_ttrace_vfork_ppid, 0, 0, 0, 0) == -1) + perror_with_name (("ttrace")); + inf_ttrace_vfork_ppid = -1; + } + inf_ttrace_num_lwps = 0; inf_ttrace_num_lwps_in_syscall = 0; @@ -699,9 +842,9 @@ inf_ttrace_wait (ptid_t ptid, struct tar ourstatus->kind = TARGET_WAITKIND_SPURIOUS; if (pid == -1) - pid = 0; + pid = lwpid = 0; - gdb_assert (lwpid == 0 || pid != 0); + gdb_assert (pid != 0 || lwpid == 0); do { @@ -711,6 +854,20 @@ inf_ttrace_wait (ptid_t ptid, struct tar if (ttrace_wait (pid, lwpid, TTRACE_WAITOK, &tts, sizeof tts) == -1) perror_with_name (("ttrace_wait")); + if (tts.tts_event == TTEVT_VFORK && tts.tts_u.tts_fork.tts_isparent) + { + if (inf_ttrace_vfork_ppid != -1) + { + gdb_assert (inf_ttrace_vfork_ppid == tts.tts_pid); + + if (ttrace (TT_PROC_DETACH, tts.tts_pid, 0, 0, 0, 0) == -1) + perror_with_name (("ttrace")); + inf_ttrace_vfork_ppid = -1; + } + + tts.tts_event = TTEVT_NONE; + } + clear_sigio_trap (); clear_sigint_trap (); } @@ -747,6 +904,35 @@ inf_ttrace_wait (ptid_t ptid, struct tar inf_ttrace_num_lwps = 0; break; + case TTEVT_FORK: + ourstatus->kind = TARGET_WAITKIND_FORKED; + ourstatus->value.related_pid = tts.tts_u.tts_fork.tts_fpid; + + /* Make sure the other end of the fork is stopped too. */ + if (ttrace_wait (tts.tts_u.tts_fork.tts_fpid, + tts.tts_u.tts_fork.tts_flwpid, + TTRACE_WAITOK, &tts, sizeof tts) == -1) + perror_with_name (("ttrace_wait")); + + gdb_assert (tts.tts_event == TTEVT_FORK); + if (tts.tts_u.tts_fork.tts_isparent) + { + ptid = ptid_build (tts.tts_pid, tts.tts_lwpid, 0); + ourstatus->value.related_pid = tts.tts_u.tts_fork.tts_fpid; + } + break; + + case TTEVT_VFORK: + gdb_assert (!tts.tts_u.tts_fork.tts_isparent); + + ourstatus->kind = TARGET_WAITKIND_VFORKED; + ourstatus->value.related_pid = tts.tts_u.tts_fork.tts_fpid; + + /* HACK: To avoid touching the parent during the vfork, switch + away from it. */ + inferior_ptid = ptid; + break; + case TTEVT_LWP_CREATE: lwpid = tts.tts_u.tts_thread.tts_target_lwpid; ptid = ptid_build (tts.tts_pid, lwpid, 0); @@ -935,6 +1121,7 @@ inf_ttrace_target (void) t->to_files_info = inf_ttrace_files_info; t->to_thread_alive = inf_ttrace_thread_alive; t->to_pid_to_str = inf_ttrace_pid_to_str; + t->to_follow_fork = inf_ttrace_follow_fork; t->to_can_use_hw_breakpoint = inf_ttrace_can_use_hw_breakpoint; t->to_region_size_ok_for_hw_watchpoint = inf_ttrace_region_size_ok_for_hw_watchpoint;