From: Shugo Maeda Date: 2005-02-07T11:46:45+09:00 Subject: [ruby-dev:25647] C level set_trace_func This is a multi-part message in MIME format. --------------090205010805000300070200 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 前田です。 今Cでプロファイラを書いているのですが、Cレベルでset_trace_funcのような ことができるようにしていただけないでしょうか。 今考えているのは、 static void prof_event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass) { ... } のような関数を用意しておいて、 rb_set_event_hook(prof_event_hook, RUBY_EVENT_CALL | RUBY_EVENT_RETURN | RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN); とすると、rb_set_event_hook()の第二引数で指定したイベントだけフック できる、というものです。 パッチを添付していますが、オーバーへッドはほとんどないと思います。 ちなみに、このパッチではset_trace_funcも上記の機能で実現しています。 -- 前田 修吾 --------------090205010805000300070200 Content-Type: text/plain; name="ruby-event-hook.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="ruby-event-hook.diff" SW5kZXg6IGV2YWwuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc3JjL3J1YnkvZXZhbC5j LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc0OApkaWZmIC11IC1yMS43NDggZXZhbC5jCi0t LSBldmFsLmMJNSBKYW4gMjAwNSAwMzo0OTo1MCAtMDAwMAkxLjc0OAorKysgZXZhbC5jCTUg RmViIDIwMDUgMTU6NDc6MzYgLTAwMDAKQEAgLTEwMTcsOSArMTAxNywxOCBAQAogc3RhdGlj IFZBTFVFIG1hc3NpZ24gXygoVkFMVUUsTk9ERSosVkFMVUUsaW50KSk7CiBzdGF0aWMgdm9p ZCBhc3NpZ24gXygoVkFMVUUsTk9ERSosVkFMVUUsaW50KSk7CiAKK3N0YXRpYyByYl9ldmVu dF90IGhvb2tlZF9ldmVudHM7CitzdGF0aWMgcmJfZXZlbnRfaG9va190IGV2ZW50X2hvb2s7 CisKKyNkZWZpbmUgRVhFQ19FVkVOVF9IT09LKGV2ZW50LCBub2RlLCBzZWxmLCBpZCwga2xh c3MpIFwKKyAgICBkbyB7IFwKKwlpZiAoaG9va2VkX2V2ZW50cyAmIGV2ZW50KSBcCisJICAg ICgqZXZlbnRfaG9vaykoZXZlbnQsIG5vZGUsIHNlbGYsIGlkLCBrbGFzcyk7IFwKKyAgICB9 IHdoaWxlICgwKQorCiBzdGF0aWMgVkFMVUUgdHJhY2VfZnVuYyA9IDA7CiBzdGF0aWMgaW50 IHRyYWNpbmcgPSAwOwotc3RhdGljIHZvaWQgY2FsbF90cmFjZV9mdW5jIF8oKGNoYXIqLE5P REUqLFZBTFVFLElELFZBTFVFKSk7CitzdGF0aWMgdm9pZCBjYWxsX3RyYWNlX2Z1bmMgXygo cmJfZXZlbnRfdCxOT0RFKixWQUxVRSxJRCxWQUxVRSkpOwogCiAjaWYgMAogI2RlZmluZSBT RVRfQ1VSUkVOVF9TT1VSQ0UoKSAocnVieV9zb3VyY2VmaWxlID0gcnVieV9jdXJyZW50X25v ZGUtPm5kX2ZpbGUsIFwKQEAgLTIzNzAsNiArMjM3OSwxOCBAQAogICAgIHJldHVybiBRZmFs c2U7CiB9CiAKK3ZvaWQKK3JiX3NldF9ldmVudF9ob29rKHJiX2V2ZW50X2hvb2tfdCBob29r LCByYl9ldmVudF90IGV2ZW50cykKK3sKKyAgICBldmVudF9ob29rID0gaG9vazsKKyAgICBp ZiAoZXZlbnRfaG9vayA9PSAwKSB7CisJaG9va2VkX2V2ZW50cyA9IFJVQllfRVZFTlRfTk9O RTsKKyAgICB9CisgICAgZWxzZSB7CisJaG9va2VkX2V2ZW50cyA9IGV2ZW50czsKKyAgICB9 Cit9CisKIC8qCiAgKiAgY2FsbC1zZXE6CiAgKiAgICAgc2V0X3RyYWNlX2Z1bmMocHJvYykg ICAgPT4gcHJvYwpAQCAtMjQyMCwxNyArMjQ0MSw0NSBAQAogewogICAgIGlmIChOSUxfUCh0 cmFjZSkpIHsKIAl0cmFjZV9mdW5jID0gMDsKKwlyYl9zZXRfZXZlbnRfaG9vaygwLCBSVUJZ X0VWRU5UX05PTkUpOwogCXJldHVybiBRbmlsOwogICAgIH0KICAgICBpZiAoIXJiX29ial9p c19wcm9jKHRyYWNlKSkgewogCXJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsICJ0cmFjZV9mdW5j IG5lZWRzIHRvIGJlIFByb2MiKTsKICAgICB9Ci0gICAgcmV0dXJuIHRyYWNlX2Z1bmMgPSB0 cmFjZTsKKyAgICB0cmFjZV9mdW5jID0gdHJhY2U7CisgICAgcmJfc2V0X2V2ZW50X2hvb2so Y2FsbF90cmFjZV9mdW5jLCBSVUJZX0VWRU5UX0FMTCk7CisgICAgcmV0dXJuIHRyYWNlOwor fQorCitzdGF0aWMgY2hhciAqCitnZXRfZXZlbnRfbmFtZShyYl9ldmVudF90IGV2ZW50KQor eworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICBjYXNlIFJVQllfRVZFTlRfTElORToKKwly ZXR1cm4gImxpbmUiOworICAgIGNhc2UgUlVCWV9FVkVOVF9DTEFTUzoKKwlyZXR1cm4gImNs YXNzIjsKKyAgICBjYXNlIFJVQllfRVZFTlRfRU5EOgorCXJldHVybiAiZW5kIjsKKyAgICBj YXNlIFJVQllfRVZFTlRfQ0FMTDoKKwlyZXR1cm4gImNhbGwiOworICAgIGNhc2UgUlVCWV9F VkVOVF9SRVRVUk46CisJcmV0dXJuICJyZXR1cm4iOworICAgIGNhc2UgUlVCWV9FVkVOVF9D X0NBTEw6CisJcmV0dXJuICJjLWNhbGwiOworICAgIGNhc2UgUlVCWV9FVkVOVF9DX1JFVFVS TjoKKwlyZXR1cm4gImMtcmV0dXJuIjsKKyAgICBjYXNlIFJVQllfRVZFTlRfUkFJU0U6CisJ cmV0dXJuICJyYWlzZSI7CisgICAgZGVmYXVsdDoKKwlyZXR1cm4gInVua25vd24iOworICAg IH0KIH0KIAogc3RhdGljIHZvaWQKIGNhbGxfdHJhY2VfZnVuYyhldmVudCwgbm9kZSwgc2Vs ZiwgaWQsIGtsYXNzKQotICAgIGNoYXIgKmV2ZW50OworICAgIHJiX2V2ZW50X3QgZXZlbnQ7 CiAgICAgTk9ERSAqbm9kZTsKICAgICBWQUxVRSBzZWxmOwogICAgIElEIGlkOwpAQCAtMjQ0 MCw2ICsyNDg5LDcgQEAKICAgICBzdHJ1Y3QgRlJBTUUgKnByZXY7CiAgICAgTk9ERSAqbm9k ZV9zYXZlOwogICAgIFZBTFVFIHNyY2ZpbGU7CisgICAgY2hhciAqZXZlbnRfbmFtZTsKIAog ICAgIGlmICghdHJhY2VfZnVuYykgcmV0dXJuOwogICAgIGlmICh0cmFjaW5nKSByZXR1cm47 CkBAIC0yNDc0LDcgKzI1MjQsOCBAQAogICAgIHJhaXNlZCA9IHRocmVhZF9yZXNldF9yYWlz ZWQoKTsKICAgICBpZiAoKHN0YXRlID0gRVhFQ19UQUcoKSkgPT0gMCkgewogCXNyY2ZpbGUg PSByYl9zdHJfbmV3MihydWJ5X3NvdXJjZWZpbGU/cnVieV9zb3VyY2VmaWxlOiIocnVieSki KTsKLQlwcm9jX2ludm9rZSh0cmFjZV9mdW5jLCByYl9hcnlfbmV3Myg2LCByYl9zdHJfbmV3 MihldmVudCksCisJZXZlbnRfbmFtZSA9IGdldF9ldmVudF9uYW1lKGV2ZW50KTsKKwlwcm9j X2ludm9rZSh0cmFjZV9mdW5jLCByYl9hcnlfbmV3Myg2LCByYl9zdHJfbmV3MihldmVudF9u YW1lKSwKIAkJCQkJICAgIHNyY2ZpbGUsCiAJCQkJCSAgICBJTlQyRklYKHJ1Ynlfc291cmNl bGluZSksCiAJCQkJCSAgICBpZD9JRDJTWU0oaWQpOlFuaWwsCkBAIC0yNjQxLDggKzI2OTIs OCBAQAogICAgIGlmICghbm9kZSkgUkVUVVJOKFFuaWwpOwogCiAgICAgcnVieV9jdXJyZW50 X25vZGUgPSBub2RlOwotICAgIGlmICh0cmFjZV9mdW5jICYmIChub2RlLT5mbGFncyAmIE5P REVfTkVXTElORSkpIHsKLQljYWxsX3RyYWNlX2Z1bmMoImxpbmUiLCBub2RlLCBzZWxmLAor ICAgIGlmIChub2RlLT5mbGFncyAmIE5PREVfTkVXTElORSkgeworCUVYRUNfRVZFTlRfSE9P SyhSVUJZX0VWRU5UX0xJTkUsIG5vZGUsIHNlbGYsIAogCQkJcnVieV9mcmFtZS0+bGFzdF9m dW5jLAogCQkJcnVieV9mcmFtZS0+bGFzdF9jbGFzcyk7CiAgICAgfQpAQCAtMjczOCwxMSAr Mjc4OSw5IEBACiAJUkVUVVJOKHJ1YnlfZXJyaW5mbyk7CiAKICAgICAgIGNhc2UgTk9ERV9J RjoKLQlpZiAodHJhY2VfZnVuYykgewotCSAgICBjYWxsX3RyYWNlX2Z1bmMoImxpbmUiLCBu b2RlLCBzZWxmLAotCQkJICAgIHJ1YnlfZnJhbWUtPmxhc3RfZnVuYywKLQkJCSAgICBydWJ5 X2ZyYW1lLT5sYXN0X2NsYXNzKTsKLQl9CisJRVhFQ19FVkVOVF9IT09LKFJVQllfRVZFTlRf TElORSwgbm9kZSwgc2VsZiwKKwkJCXJ1YnlfZnJhbWUtPmxhc3RfZnVuYywKKwkJCXJ1Ynlf ZnJhbWUtPmxhc3RfY2xhc3MpOwogCWlmIChSVEVTVChyYl9ldmFsKHNlbGYsIG5vZGUtPm5k X2NvbmQpKSkgewogCSAgICBub2RlID0gbm9kZS0+bmRfYm9keTsKIAl9CkBAIC0yNzU4LDEx ICsyODA3LDkgQEAKIAkgICAgaWYgKG5kX3R5cGUobm9kZSkgIT0gTk9ERV9XSEVOKSBnb3Rv IGFnYWluOwogCSAgICB0YWcgPSBub2RlLT5uZF9oZWFkOwogCSAgICB3aGlsZSAodGFnKSB7 Ci0JCWlmICh0cmFjZV9mdW5jKSB7Ci0JCSAgICBjYWxsX3RyYWNlX2Z1bmMoImxpbmUiLCB0 YWcsIHNlbGYsCi0JCQkJICAgIHJ1YnlfZnJhbWUtPmxhc3RfZnVuYywKLQkJCQkgICAgcnVi eV9mcmFtZS0+bGFzdF9jbGFzcyk7Ci0JCX0KKwkJRVhFQ19FVkVOVF9IT09LKFJVQllfRVZF TlRfTElORSwgdGFnLCBzZWxmLAorCQkJCXJ1YnlfZnJhbWUtPmxhc3RfZnVuYywKKwkJCQly dWJ5X2ZyYW1lLT5sYXN0X2NsYXNzKTsKIAkJaWYgKHRhZy0+bmRfaGVhZCAmJiBuZF90eXBl KHRhZy0+bmRfaGVhZCkgPT0gTk9ERV9XSEVOKSB7CiAJCSAgICBWQUxVRSB2ID0gcmJfZXZh bChzZWxmLCB0YWctPm5kX2hlYWQtPm5kX2hlYWQpOwogCQkgICAgbG9uZyBpOwpAQCAtMjgw MSwxMSArMjg0OCw5IEBACiAJCX0KIAkJdGFnID0gbm9kZS0+bmRfaGVhZDsKIAkJd2hpbGUg KHRhZykgewotCQkgICAgaWYgKHRyYWNlX2Z1bmMpIHsKLQkJCWNhbGxfdHJhY2VfZnVuYygi bGluZSIsIHRhZywgc2VsZiwKLQkJCQkJcnVieV9mcmFtZS0+bGFzdF9mdW5jLAotCQkJCQly dWJ5X2ZyYW1lLT5sYXN0X2NsYXNzKTsKLQkJICAgIH0KKwkJICAgIEVYRUNfRVZFTlRfSE9P SyhSVUJZX0VWRU5UX0xJTkUsIHRhZywgc2VsZiwKKwkJCQkgICAgcnVieV9mcmFtZS0+bGFz dF9mdW5jLAorCQkJCSAgICBydWJ5X2ZyYW1lLT5sYXN0X2NsYXNzKTsKIAkJICAgIGlmICh0 YWctPm5kX2hlYWQgJiYgbmRfdHlwZSh0YWctPm5kX2hlYWQpID09IE5PREVfV0hFTikgewog CQkJVkFMVUUgdiA9IHJiX2V2YWwoc2VsZiwgdGFnLT5uZF9oZWFkLT5uZF9oZWFkKTsKIAkJ CWxvbmcgaTsKQEAgLTM5MTEsOSArMzk1Niw3IEBACiAgICAgUFVTSF9DUkVGKG1vZHVsZSk7 CiAgICAgUFVTSF9UQUcoUFJPVF9OT05FKTsKICAgICBpZiAoKHN0YXRlID0gRVhFQ19UQUco KSkgPT0gMCkgewotCWlmICh0cmFjZV9mdW5jKSB7Ci0JICAgIGNhbGxfdHJhY2VfZnVuYygi Y2xhc3MiLCBuLCBydWJ5X2NiYXNlLCBydWJ5X2ZyYW1lLT5sYXN0X2Z1bmMsIHJ1YnlfZnJh bWUtPmxhc3RfY2xhc3MpOwotCX0KKwlFWEVDX0VWRU5UX0hPT0soUlVCWV9FVkVOVF9DTEFT UywgbiwgcnVieV9jYmFzZSwgcnVieV9mcmFtZS0+bGFzdF9mdW5jLCBydWJ5X2ZyYW1lLT5s YXN0X2NsYXNzKTsKIAlyZXN1bHQgPSByYl9ldmFsKHJ1YnlfY2Jhc2UsIG5vZGUtPm5kX25l eHQpOwogICAgIH0KICAgICBQT1BfVEFHKCk7CkBAIC0zOTIzLDkgKzM5NjYsNyBAQAogICAg IFBPUF9DTEFTUygpOwogCiAgICAgcnVieV9mcmFtZSA9IGZyYW1lLnRtcDsKLSAgICBpZiAo dHJhY2VfZnVuYykgewotCWNhbGxfdHJhY2VfZnVuYygiZW5kIiwgbiwgMCwgcnVieV9mcmFt ZS0+bGFzdF9mdW5jLCBydWJ5X2ZyYW1lLT5sYXN0X2NsYXNzKTsKLSAgICB9CisgICAgRVhF Q19FVkVOVF9IT09LKFJVQllfRVZFTlRfRU5ELCBuLCAwLCBydWJ5X2ZyYW1lLT5sYXN0X2Z1 bmMsIHJ1YnlfZnJhbWUtPmxhc3RfY2xhc3MpOwogICAgIGlmIChzdGF0ZSkgSlVNUF9UQUco c3RhdGUpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQzMjAsOCArNDM2MSw4IEBACiAg ICAgfQogCiAgICAgcmJfdHJhcF9yZXN0b3JlX21hc2soKTsKLSAgICBpZiAodHJhY2VfZnVu YyAmJiB0YWcgIT0gVEFHX0ZBVEFMKSB7Ci0JY2FsbF90cmFjZV9mdW5jKCJyYWlzZSIsIHJ1 YnlfY3VycmVudF9ub2RlLAorICAgIGlmICh0YWcgIT0gVEFHX0ZBVEFMKSB7CisJRVhFQ19F VkVOVF9IT09LKFJVQllfRVZFTlRfUkFJU0UsIHJ1YnlfY3VycmVudF9ub2RlLAogCQkJcnVi eV9mcmFtZS0+c2VsZiwKIAkJCXJ1YnlfZnJhbWUtPmxhc3RfZnVuYywKIAkJCXJ1YnlfZnJh bWUtPmxhc3RfY2xhc3MpOwpAQCAtNDU0MSwxMCArNDU4Miw5IEBACiAJeyAKIAkgICAgdHQt PmRzdCA9IChWQUxVRSl0dC0+ZnJhbWUtPnVuaXE7CiAJICAgIHR0LT5yZXR2YWwgPSByZXR2 YWw7Ci0JICAgIGlmICh0cmFjZV9mdW5jKSB7Ci0JCXN0cnVjdCBGUkFNRSAqZiA9IHR0LT5m cmFtZTsKLQkJY2FsbF90cmFjZV9mdW5jKCJyZXR1cm4iLCBmLT5ub2RlLCBmLT5zZWxmLCBm LT5sYXN0X2Z1bmMsIGYtPmxhc3RfY2xhc3MpOwotCSAgICB9CisJICAgIEVYRUNfRVZFTlRf SE9PSyhSVUJZX0VWRU5UX1JFVFVSTiwKKwkJCSAgICB0dC0+ZnJhbWUtPm5vZGUsIHR0LT5m cmFtZS0+c2VsZiwKKwkJCSAgICB0dC0+ZnJhbWUtPmxhc3RfZnVuYywgdHQtPmZyYW1lLT5s YXN0X2NsYXNzKTsKIAkgICAgSlVNUF9UQUcoVEFHX1JFVFVSTik7CiAJfQogCWlmICh0dC0+ dGFnID09IFBST1RfVEhSRUFEKSB7CkBAIC01NTQyLDE3ICs1NTgyLDE5IEBACiAJCXJiX2J1 ZygiYmFkIGFyZ2MoJWQpIHNwZWNpZmllZCBmb3IgYCVzKCVzKSciLAogCQkgICAgICAgbGVu LCByYl9jbGFzczJuYW1lKGtsYXNzKSwgcmJfaWQybmFtZShpZCkpOwogCSAgICB9Ci0JICAg IGlmICh0cmFjZV9mdW5jKSB7CisJICAgIGlmIChob29rZWRfZXZlbnRzICYgKFJVQllfRVZF TlRfQ19DQUxMIHwgUlVCWV9FVkVOVF9DX1JFVFVSTikpIHsKIAkJaW50IHN0YXRlOwogCi0J CWNhbGxfdHJhY2VfZnVuYygiYy1jYWxsIiwgcnVieV9jdXJyZW50X25vZGUsIHJlY3YsIGlk LCBrbGFzcyk7CisJCUVYRUNfRVZFTlRfSE9PSyhSVUJZX0VWRU5UX0NfQ0FMTCwgcnVieV9j dXJyZW50X25vZGUsCisJCQkJcmVjdiwgaWQsIGtsYXNzKTsKIAkJUFVTSF9UQUcoUFJPVF9G VU5DKTsKIAkJaWYgKChzdGF0ZSA9IEVYRUNfVEFHKCkpID09IDApIHsKIAkJICAgIHJlc3Vs dCA9IGNhbGxfY2Z1bmMoYm9keS0+bmRfY2ZuYywgcmVjdiwgbGVuLCBhcmdjLCBhcmd2KTsK IAkJfQogCQlQT1BfVEFHKCk7CiAJCXJ1YnlfY3VycmVudF9ub2RlID0gcnVieV9mcmFtZS0+ bm9kZTsKLQkJY2FsbF90cmFjZV9mdW5jKCJjLXJldHVybiIsIHJ1YnlfY3VycmVudF9ub2Rl LCByZWN2LCBpZCwga2xhc3MpOworCQlFWEVDX0VWRU5UX0hPT0soUlVCWV9FVkVOVF9DX1JF VFVSTiwgcnVieV9jdXJyZW50X25vZGUsCisJCQkJcmVjdiwgaWQsIGtsYXNzKTsKIAkJaWYg KHN0YXRlKSBKVU1QX1RBRyhzdGF0ZSk7CiAJICAgIH0KIAkgICAgZWxzZSB7CkBAIC01Njgy LDEzICs1NzI0LDkgQEAKIAkJICAgIHJ1YnlfZnJhbWUtPmFyZ2MgPSAtKHJ1YnlfZnJhbWUt PmFyZ2MgLSBhcmdjKS0xOwogCQl9CiAKLQkJaWYgKHRyYWNlX2Z1bmMpIHsKLQkJICAgIGNh bGxfdHJhY2VfZnVuYygiY2FsbCIsIGIyLCByZWN2LCBpZCwga2xhc3MpOwotCQl9CisJCUVY RUNfRVZFTlRfSE9PSyhSVUJZX0VWRU5UX0NBTEwsIGIyLCByZWN2LCBpZCwga2xhc3MpOwog CQlyZXN1bHQgPSByYl9ldmFsKHJlY3YsIGJvZHkpOwotCQlpZiAodHJhY2VfZnVuYykgewot CQkgICAgY2FsbF90cmFjZV9mdW5jKCJyZXR1cm4iLCBib2R5LCByZWN2LCBpZCwga2xhc3Mp OwotCQl9CisJCUVYRUNfRVZFTlRfSE9PSyhSVUJZX0VWRU5UX1JFVFVSTiwgYm9keSwgcmVj diwgaWQsIGtsYXNzKTsKIAkgICAgfQogCSAgICBlbHNlIGlmIChzdGF0ZSA9PSBUQUdfUkVU VVJOICYmIFRBR19EU1QoKSkgewogCQlyZXN1bHQgPSBwcm90X3RhZy0+cmV0dmFsOwpJbmRl eDogbm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9zcmMvcnVieS9ub2RlLmgsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuNjEKZGlmZiAtdSAtcjEuNjEgbm9kZS5oCi0tLSBub2Rl LmgJMTYgRGVjIDIwMDQgMTU6MDE6NDkgLTAwMDAJMS42MQorKysgbm9kZS5oCTUgRmViIDIw MDUgMTU6NDc6MzYgLTAwMDAKQEAgLTM2NCw2ICszNjQsMjIgQEAKIFZBTFVFIHJiX2d2YXJf c2V0IF8oKHN0cnVjdCBnbG9iYWxfZW50cnkgKiwgVkFMVUUpKTsKIFZBTFVFIHJiX2d2YXJf ZGVmaW5lZCBfKChzdHJ1Y3QgZ2xvYmFsX2VudHJ5ICopKTsKIAordHlwZWRlZiB1bnNpZ25l ZCBpbnQgcmJfZXZlbnRfdDsKKworI2RlZmluZSBSVUJZX0VWRU5UX05PTkUgICAgIDB4MDAK KyNkZWZpbmUgUlVCWV9FVkVOVF9MSU5FICAgICAweDAxCisjZGVmaW5lIFJVQllfRVZFTlRf Q0xBU1MgICAgMHgwMgorI2RlZmluZSBSVUJZX0VWRU5UX0VORCAgICAgIDB4MDQKKyNkZWZp bmUgUlVCWV9FVkVOVF9DQUxMICAgICAweDA4CisjZGVmaW5lIFJVQllfRVZFTlRfUkVUVVJO ICAgMHgxMAorI2RlZmluZSBSVUJZX0VWRU5UX0NfQ0FMTCAgIDB4MjAKKyNkZWZpbmUgUlVC WV9FVkVOVF9DX1JFVFVSTiAweDQwCisjZGVmaW5lIFJVQllfRVZFTlRfUkFJU0UgICAgMHg4 MAorI2RlZmluZSBSVUJZX0VWRU5UX0FMTCAgICAgIDB4ZmYKKwordHlwZWRlZiB2b2lkICgq cmJfZXZlbnRfaG9va190KV8oKHJiX2V2ZW50X3QsTk9ERSosVkFMVUUsSUQsVkFMVUUpKTsK K3ZvaWQgcmJfc2V0X2V2ZW50X2hvb2socmJfZXZlbnRfaG9va190LHJiX2V2ZW50X3QpOwor CiAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKIH0gIC8qIGV4dGVybiAiQyIgeyAqLwogI2Vu ZGlmCg== --------------090205010805000300070200--