Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Oct 2001 04:33:35 -0700 (PDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        ppc@FreeBSD.org, gehicks@pacbell.net
Subject:   trap() and friends
Message-ID:  <XFMail.011026043335.jhb@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
This message is in MIME format
--_=XFMail.1.4.0.FreeBSD:011026043333:6073=_
Content-Type: text/plain; charset=us-ascii

I was bored last night, so I cleaned up the powerpc trap() function.  I don't
have anything setup to test it, but I think it should compile and handle most
kernel and user faults ok.  (I haven't looked at the ALI faults yet, so they
always fail right now.)  (This is assuming the pmap code is done, it's just the
necessary changes for trap() itself.)  I also think that syscalls might work
now, assuming that the NetBSD code this was cribbed from worked.  Since my

Note that some of the assembly stuff in locore.s still needs some work. 
Specifically, on return from interrupts and exceptions, we need to call the
ast() function instead of doing an EXC_AST fake trap.  I've got some comments
to that effect in the patch.  There are no guarantees that this compiles, but
it should be a lot closer now to the final version.

http://www.FreeBSD.org/~jhb/patches/ppc.patch

-- 

John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

--_=XFMail.1.4.0.FreeBSD:011026043333:6073=_
Content-Disposition: attachment; filename="ppc.patch"
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream; name=ppc.patch; SizeOnDisk=20103

SW5kZXg6IGluY2x1ZGUvY3B1LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Vzci9jdnMvc3JjL3N5
cy9wb3dlcnBjL2luY2x1ZGUvY3B1LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11
IC1yMS42IGNwdS5oCi0tLSBpbmNsdWRlL2NwdS5oCTE1IE9jdCAyMDAxIDEyOjIzOjA2IC0wMDAw
CTEuNgorKysgaW5jbHVkZS9jcHUuaAkxOSBPY3QgMjAwMSAyMDo0MToxOSAtMDAwMApAQCAtNTMs
OSArNTMsNiBAQAogdm9pZAlkZWxheShpbnQpOwogI2RlZmluZQlERUxBWShuKQkJZGVsYXkobikK
IAotZXh0ZXJuIGludCB3YW50X3Jlc2NoZWQ7Ci1leHRlcm4gaW50IGFzdHBlbmRpbmc7Ci0KIGV4
dGVybiBjaGFyIGJvb3RwYXRoW107CiAKICNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQo
X1NUQU5EQUxPTkUpCkluZGV4OiBpbmNsdWRlL3RyYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
dXNyL2N2cy9zcmMvc3lzL3Bvd2VycGMvaW5jbHVkZS90cmFwLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC11IC1yMS4xIHRyYXAuaAotLS0gaW5jbHVkZS90cmFwLmgJMTAgSnVuIDIw
MDEgMDI6Mzk6MjggLTAwMDAJMS4xCisrKyBpbmNsdWRlL3RyYXAuaAkyNiBPY3QgMjAwMSAxMTow
MDoyNiAtMDAwMApAQCAtNTIsNyArNTIsNyBAQAogLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSBh
dmFpbGFibGUgb24gNjA0OiAqLwogI2RlZmluZQlFWENfUEVSRgkweDBmMDAJCS8qIFBlcmZvcm1h
bmNlIE1vbml0b3JpbmcgKi8KICNkZWZpbmUJRVhDX0JQVAkJMHgxMzAwCQkvKiBJbnN0cnVjdGlv
biBCcmVha3BvaW50ICovCi0jZGVmaW5lCUVYQ19TTUkJCTB4MTQwMAkJLyogU3lzdGVtIE1hbmFn
bWVudCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUJRVhDX1NNSQkJMHgxNDAwCQkvKiBTeXN0ZW0gTWFu
YWdlbWVudCBJbnRlcnJ1cHQgKi8KIAogLyogQW5kIHRoZXNlIGFyZSBvbmx5IG9uIHRoZSA2MDM6
ICovCiAjZGVmaW5lCUVYQ19JTUlTUwkweDEwMDAJCS8qIEluc3RydWN0aW9uIHRyYW5zbGF0aW9u
IG1pc3MgKi8KQEAgLTYxLDggKzYxLDYgQEAKIAogI2RlZmluZQlFWENfTEFTVAkweDJmMDAJCS8q
IExhc3QgcG9zc2libGUgZXhjZXB0aW9uIHZlY3RvciAqLwogCi0jZGVmaW5lCUVYQ19BU1QJCTB4
MzAwMAkJLyogRmFrZSBBU1QgdmVjdG9yICovCi0KIC8qIFRyYXAgd2FzIGluIHVzZXIgbW9kZSAq
LwogI2RlZmluZQlFWENfVVNFUgkweDEwMDAwCiAKQEAgLTg3LDYgKzg1LDcgQEAKICNpZm5kZWYJ
TE9DT1JFCiAKIHZvaWQJdHJhcChzdHJ1Y3QgdHJhcGZyYW1lICopOwordm9pZAlzeXNjYWxsKHN0
cnVjdCB0cmFwZnJhbWUgKik7CiAKICNlbmRpZiAvKiAhTE9DT1JFICovCiAKSW5kZXg6IHBvd2Vy
cGMvbG9jb3JlLnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Vzci9jdnMvc3JjL3N5cy9wb3dlcnBj
L3Bvd2VycGMvbG9jb3JlLnMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1yMS40
IGxvY29yZS5zCi0tLSBwb3dlcnBjL2xvY29yZS5zCTIwIFNlcCAyMDAxIDAwOjQ3OjEzIC0wMDAw
CTEuNAorKysgcG93ZXJwYy9sb2NvcmUucwkyNCBTZXAgMjAwMSAyMToxNzo1MiAtMDAwMApAQCAt
OTQzLDE1ICs5NDMsMTEgQEAKIAlsd3oJNSxGUkFNRV9TUlIxKzgoMSkKIAltdGNyCTUKIAliYwk0
LDE3LDFmCQkJLyogYnJhbmNoIGlmIFBTTF9QUiBpcyBmYWxzZSAqLwotCWxpcwkzLGFzdHBlbmRp
bmdAaGEKLQlsd3oJNCxhc3RwZW5kaW5nQGwoMykKLQlhbmRpLgk0LDQsMQotCWJlcQkxZgogI2lm
IDAgLyogWFhYICovCiAJbGkJNixFWENfQVNUCiAjZW5kaWYKIAlzdHcJNixGUkFNRV9FWEMrOCgx
KQotCWIJdHJhcGFnYWluCisJYgl0cmFwYWdhaW4JCS8qIFhYWDoJc2hvdWxkIGNhbGwgYXN0KGZy
YW1lIHB0cikgKi8KIDE6CiAjaWYgMAogCUZSQU1FX0xFQVZFKHRlbXBzYXZlKQpAQCAtMTEyOSwx
MCArMTEyNSw2IEBACiAJbHd6CTMsR0RfQ1VSUENCKDMpCQkvKiBnZXQgY3VycGNiIGZyb20gZ2xv
YmFsZGF0YSAqLwogCWx3egkzLFBDQl9QTVIoMykJCS8qIGdldCBwbWFwIHJlYWwgYWRkcmVzcyBm
cm9tIGN1cnBjYiAqLwogCW10c3IJS0VSTkVMX1NSLDMKLQlsaXMJMyxhc3RwZW5kaW5nQGhhCQkv
KiBUZXN0IEFTVCBwZW5kaW5nICovCi0JbHd6CTQsYXN0cGVuZGluZ0BsKDMpCi0JYW5kaS4JNCw0
LDEKLQliZXEJMWYKIC8qIFNldHVwIGZvciBlbnRyeSB0byByZWFsdHJhcDogKi8KIAlsd3oJMyww
KDEpCQkJLyogZ2V0IHNhdmVkIFNQICovCiAJbXRzcHJnCTEsMwpAQCAtMTE1Miw3ICsxMTQ0LDcg
QEAKIAlsd3oJMzEsaW50cl9kZXB0aEBsKDMwKQogCWFkZGkJMzEsMzEsLTEKIAlzdHcJMzEsaW50
cl9kZXB0aEBsKDMwKQotCWIJcmVhbHRyYXAKKwliCXJlYWx0cmFwCQkvKiBYWFg6CXNob3VsZCBj
YWxsIGFzdChmcmFtZSBwdHIpICovCiAxOgogLyogSGVyZSBpcyB0aGUgbm9ybWFsIGV4aXQgb2Yg
ZXh0aW50cjogKi8KIAlsd3oJNSwzNigxKQpJbmRleDogcG93ZXJwYy90cmFwLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL3Vzci9jdnMvc3JjL3N5cy9wb3dlcnBjL3Bvd2VycGMvdHJhcC5jLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcjEuNCB0cmFwLmMKLS0tIHBvd2VycGMvdHJh
cC5jCTI0IFNlcCAyMDAxIDAyOjU4OjQ5IC0wMDAwCTEuNAorKysgcG93ZXJwYy90cmFwLmMJMjYg
T2N0IDIwMDEgMTE6MjQ6MjkgLTAwMDAKQEAgLTYzLDMwNiArNjMsNDc4IEBACiAjZGVmaW5lCU5B
UkdSRUcJCTgJCS8qIDggYXJncyBhcmUgaW4gcmVnaXN0ZXJzICovCiAjZGVmaW5lCU1PUkVBUkdT
KHNwKQkoKGNhZGRyX3QpKChpbnQpKHNwKSArIDgpKSAvKiBtb3JlIGFyZ3MgZ28gaGVyZSAqLwog
Ci12b2xhdGlsZSBpbnQJYXN0cGVuZGluZzsKLXZvbGF0aWxlIGludAl3YW50X3Jlc2NoZWQ7Cisj
aWZkZWYgV0lUTkVTUworZXh0ZXJuIGNoYXIgKnN5c2NhbGxuYW1lc1tdOworI2VuZGlmCiAKICNp
ZiAwIC8qIFhYWDogbm90IHVzZWQgeWV0ICovCiBzdGF0aWMgaW50IGZpeF91bmFsaWduZWQgX19Q
KChzdHJ1Y3QgcHJvYyAqcCwgc3RydWN0IHRyYXBmcmFtZSAqZnJhbWUpKTsKICNlbmRpZgorc3Rh
dGljIHZvaWQgdHJhcF9mYXRhbCBfX1AoKHN0cnVjdCB0cmFwZnJhbWUgKmZyYW1lcCkpOworc3Rh
dGljIHZvaWQgcHJpbnR0cmFwIF9fUCgoaW50IHZlY3Rvciwgc3RydWN0IHRyYXBmcmFtZSAqZnJh
bWVwLCBpbnQgaXNmYXRhbCwKKwkJCSAgICAgIGludCB1c2VyLCB2bV9vZmZzZXRfdCBldmEpKTsK
K3N0YXRpYyBpbnQgdHJhcF9wZmF1bHQgX19QKChzdHJ1Y3QgdHJhcGZyYW1lICpmcmFtZSwgaW50
IHVzZXIpOworc3RhdGljIGludCBoYW5kbGVfb25mYXVsdCBfX1AoKHN0cnVjdCB0cmFwZnJhbWUg
KmZyYW1lKSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcGNfZXhjZXB0aW9uX25hbWVzW10gPSB7
CisJIlJlc2VydmVkIDAiLAkJCQkvKiAwICovCisJIlJlc2V0IiwJCQkJLyogMSAqLworCSJNYWNo
aW5lIENoZWNrIiwJCQkvKiAyICovCisJIkRhdGEgU3RvcmFnZSBJbnRlcnJ1cHQiLAkJLyogMyAq
LworCSJJbnN0cnVjdGlvbiBTdG9yYWdlIEludGVycnVwdCIsCS8qIDQgKi8KKwkiRXh0ZXJuYWwg
SW50ZXJydXB0IiwJCQkvKiA1ICovCisJIkFsaWdubWVudCBJbnRlcnJ1cHQiLAkJCS8qIDYgKi8K
KwkiUHJvZ3JhbSBJbnRlcnJ1cHQiLAkJCS8qIDcgKi8KKwkiRmxvYXRpbmcgUG9pbnQgVW5hdmFp
bGFibGUiLAkJLyogOCAqLworCSJEZWNyZW1lbnRlciBJbnRlcnJ1cHQiLAkJLyogOSAqLworCSJS
ZXNlcnZlZCIsCQkJCS8qIDEwICovCisJIlJlc2VydmVkIiwJCQkJLyogMTEgKi8KKwkiU3lzdGVt
IENhbGwiLAkJCQkvKiAxMiAqLworCSJUcmFjZSIsCQkJCS8qIDEzICovCisJIkZsb2F0aW5nIFBv
aW50IEFzc2lzdCIsCQkvKiAxNCAqLworCSJQZXJmb3JtYW5jZSBNb25pdG9yaW5nIiwJCS8qIDE1
ICovCisJIkluc3RydWN0aW9uIFRMQiBNaXNzIiwJCQkvKiAxNiAqLworCSJEYXRhIExvYWQgVExC
IE1pc3MiLAkJCS8qIDE3ICovCisJIkRhdGEgU3RvcmUgVExCIE1pc3MiLAkJCS8qIDE4ICovCisJ
Ikluc3RydWN0aW9uIEJyZWFrcG9pbnQiLAkJLyogMTkgKi8KKwkiU3lzdGVtIE1hbmFnZW1lbnQg
SW50ZXJydXB0IiwJCS8qIDIwICovCisJIlJlc2VydmVkIDIxIiwJCQkJLyogMjEgKi8KKwkiUmVz
ZXJ2ZWQgMjIiLAkJCQkvKiAyMiAqLworCSJSZXNlcnZlZCAyMyIsCQkJCS8qIDIzICovCisJIlJl
c2VydmVkIDI0IiwJCQkJLyogMjQgKi8KKwkiUmVzZXJ2ZWQgMjUiLAkJCQkvKiAyNSAqLworCSJS
ZXNlcnZlZCAyNiIsCQkJCS8qIDI2ICovCisJIlJlc2VydmVkIDI3IiwJCQkJLyogMjcgKi8KKwki
UmVzZXJ2ZWQgMjgiLAkJCQkvKiAyOCAqLworCSJSZXNlcnZlZCAyOSIsCQkJCS8qIDI5ICovCisJ
IlJlc2VydmVkIDMwIiwJCQkJLyogMzAgKi8KKwkiUmVzZXJ2ZWQgMzEiLAkJCQkvKiAzMSAqLwor
CSJSZXNlcnZlZCAzMiIsCQkJCS8qIDMyICovCisJIlJlc2VydmVkIDMzIiwJCQkJLyogMzMgKi8K
KwkiUmVzZXJ2ZWQgMzQiLAkJCQkvKiAzNCAqLworCSJSZXNlcnZlZCAzNSIsCQkJCS8qIDM1ICov
CisJIlJlc2VydmVkIDM2IiwJCQkJLyogMzYgKi8KKwkiUmVzZXJ2ZWQgMzciLAkJCQkvKiAzNyAq
LworCSJSZXNlcnZlZCAzOCIsCQkJCS8qIDM4ICovCisJIlJlc2VydmVkIDM5IiwJCQkJLyogMzkg
Ki8KKwkiUmVzZXJ2ZWQgNDAiLAkJCQkvKiA0MCAqLworCSJSZXNlcnZlZCA0MSIsCQkJCS8qIDQx
ICovCisJIlJlc2VydmVkIDQyIiwJCQkJLyogNDIgKi8KKwkiUmVzZXJ2ZWQgNDMiLAkJCQkvKiA0
MyAqLworCSJSZXNlcnZlZCA0NCIsCQkJCS8qIDQ0ICovCisJIlJlc2VydmVkIDQ1IiwJCQkJLyog
NDUgKi8KKwkiUmVzZXJ2ZWQgNDYiLAkJCQkvKiA0NiAqLworCSJSZXNlcnZlZCA0NyIsCQkJCS8q
IDQ3ICovCit9OworCitzdGF0aWMgdm9pZAorcHJpbnR0cmFwKGludCB2ZWN0b3IsIHN0cnVjdCB0
cmFwZnJhbWUgKmZyYW1lcCwgaW50IGlzZmF0YWwsIGludCB1c2VyLCBpbnQgZXZhKQoreworCisJ
cHJpbnRmKCJcbiIpOworCXByaW50ZigiJXMgJXMgdHJhcDpcbiIsIGlzZmF0YWwgPyAiZmF0YWwi
IDogImhhbmRsZWQiLAorCSAgICB1c2VyID8gInVzZXIiIDogImtlcm5lbCIpOworCXByaW50Zigi
XG4iKTsKKwlwcmludGYoIiAgIGV4Y2VwdGlvbiAgICAgICA9IDB4JXggKCVzKVxuIiwgdHlwZSwK
KwkgICAgcHBjX2V4Y2VwdGlvbl9uYW1lc1t2ZWN0b3IgPj4gOF0pOworCXN3aXRjaCAodmVjdG9y
KSB7CisJY2FzZSBFWENfRFNJOgorCQlwcmludGYoIiAgIHZpcnR1YWwgYWRkcmVzcyA9IDB4JXhc
biIsIGZyYW1lcC0+ZGFyKTsKKwkJYnJlYWs7CisJY2FzZSBFWENfSVNJOgorCQlwcmludGYoIiAg
IHZpcnR1YWwgYWRkcmVzcyA9IDB4JXhcbiIsIGZyYW1lcC0+c3JyMCk7CisJCWJyZWFrOworCX0K
KwlwcmludGYoIiAgIHNycjAgICAgICAgICAgICA9IDB4JXgiLCBmcmFtZS0+c3JyMCk7CisJcHJp
bnRmKCIgICBjdXJ0aHJlYWQgICAgICAgPSAlcFxuIiwgY3VydGhyZWFkKTsKKwlpZiAoY3VydGhy
ZWFkICE9IE5VTEwpCisJCXByaW50ZigiICAgICAgICAgIHBpZCA9ICVkLCBjb21tID0gJXNcbiIs
CisJCSAgICBjdXJ0aHJlYWQtPnRkX3Byb2MtPnBfcGlkLCBjdXJ0aHJlYWQtPnRkX3Byb2MtPnBf
Y29tbSk7CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgdm9pZAordHJhcF9mYXRhbChzdHJ1
Y3QgdHJhcGZyYW1lICpmcmFtZXApCit7CisKKwlwcmludHRyYXAoZnJhbWUtPmV4YywgZnJhbWUs
IDEsIChmcmFtZS0+c3NyMSAmIFBTTF9QUikpOworI2lmZGVmIEREQgorCWlmICgoZGVidWdnZXJf
b25fcGFuaWMgfHwgZGJfYWN0aXZlKSAmJiBrZGJfdHJhcChmcmFtZS0+ZXhjLCAwLCBmcmFtZSkp
CisJCXJldHVybjsKKyNlbmRpZgorCXBhbmljKCIlcyBUcmFwIiwgcHBjX2V4Y2VwdGlvbl9uYW1l
c1tmcmFtZS0+ZXhjID4+IDhdKTsKK30KKworLyoKKyAqIEhhbmRsZXMgYSBmYXRhbCBmYXVsdCB3
aGVuIHdlIGhhdmUgb25mYXVsdCBzdGF0ZSB0byByZWNvdmVyLiAgUmV0dXJucworICogbm9uLXpl
cm8gaWYgdGhlcmUgd2FzIG9uZmF1bHQgcmVjb3Zlcnkgc3RhdGUgYXZhaWxhYmxlLgorICovCitz
dGF0aWMgdm9pZAoraGFuZGxlX29uZmF1bHQgX19QKChzdHJ1Y3QgdHJhcGZyYW1lICpmcmFtZSkK
K3sKKwlzdHJ1Y3QgdGhyZWFkICp0ZDsKKwlmYXVsdGJ1ZiAqZmI7CisKKwl0ZCA9IGN1cnRocmVh
ZDsKKwlmYiA9IHRkLT50ZF9wY2IucGNiX29uZmF1bHQ7CisJaWYgKGZiICE9IE5VTEwpIHsKKwkJ
ZnJhbWUtPnNycjAgPSAoKmZiKVswXTsKKwkJZnJhbWUtPmZpeHJlZ1sxXSA9ICgqZmIpWzFdOwor
CQlmcmFtZS0+Zml4cmVnWzJdID0gKCpmYilbMl07CisJCWZyYW1lLT5jciA9ICgqZmIpWzNdOwor
CQliY29weSgmKCpmYilbNF0sICZmcmFtZS0+Zml4cmVnWzEzXSwKKwkJICAgIDE5ICogc2l6ZW9m
KHJlZ2lzdGVyX3QpKTsKKwkJcmV0dXJuICgxKTsKKwl9CisJcmV0dXJuICgwKTsKK30KIAogdm9p
ZAogdHJhcChzdHJ1Y3QgdHJhcGZyYW1lICpmcmFtZSkKIHsKLSNpZiAwIC8qIFhYWDogVGhpcyBj
b2RlIGhhc24ndCBiZWVuIHJld29ya2VkIHlldC4gKi8KKwlzdHJ1Y3QgdGhyZWFkICp0ZDsKIAlz
dHJ1Y3QgcHJvYyAqcDsKLQlpbnQgdHlwZTsKLQl1X2ludCBzdGlja3M7CisJaW50IHNpZywgdHlw
ZSwgdXNlcjsKKwl1X2ludCBzdGlja3MsIHVjb2RlOwogCi0JcCA9IGN1cnByb2M7Ci0JdHlwZSA9
IGZyYW1lLT5leGM7CisJYXRvbWljX2FkZF9pbnQoJmNudC52X3RyYXAsIDEpOwogCi0JaWYgKGZy
YW1lLT5zcnIxICYgUFNMX1BSKSB7Ci0JCXR5cGUgfD0gRVhDX1VTRVI7Ci0JCXN0aWNrcyA9IHAt
PnBfc3RpY2tzOwotCX0KKwl0ZCA9IGN1cnRocmVhZDsKKwlwID0gdGQtPnRkX3Byb2M7CisKKwl0
eXBlID0gZnJhbWUtPmV4YzsKKwl1Y29kZSA9IHR5cGU7CisJc2lnID0gMDsKKwl1c2VyID0gKGZy
YW1lLT5zc3IxICYgUFNMX1BSKTsKKwlzdGlja3MgPSAwOworCisJQ1RSMyhLVFJfVFJBUCwgInRy
YXA6ICVzIHR5cGU9JXMgKCVzKSIsIHAtPnBfY29tbSwKKwkgICAgcHBjX2V4Y2VwdGlvbl9uYW1l
c1t0eXBlID4+IDhdLAorCSAgICB1c2VyID8gInVzZXIiIDogImtlcm5lbCIpOworCisJaWYgKHVz
ZXIpIHsKKwkJc3RpY2tzID0gdGQtPnRkX2tzZS0+a2Vfc3RpY2tzOworCQl0ZC0+dGRfZnJhbWUg
PSBmcmFtZTsKKwkJS0FTU0VSVCh0ZC0+dGRfdWNyZWQgPT0gTlVMTCwgKCJhbHJlYWR5IGhhdmUg
YSB1Y3JlZCIpKTsKKwkJUFJPQ19MT0NLKHApOworCQl0ZC0+dGRfdWNyZWQgPSBjcmhvbGQocC0+
cF91Y3JlZCk7CisJCVBST0NfVU5MT0NLKHApOworCisJCS8qIFVzZXIgTW9kZSBUcmFwcyAqLwor
CQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBFWENfVFJDOgorCQkJZnJhbWUtPnNycjEgJj0gflBT
TF9TRTsKKwkJCXNpZyA9IFNJR1RSQVA7CisJCQlicmVhazsKKwkJY2FzZSBFWENfRFNJOgorCQlj
YXNlIEVYQ19JU0k6CisJCQlzaWcgPSB0cmFwX3BmYXVsdChmcmFtZSwgMSk7CisJCQlicmVhazsK
KwkJY2FzZSBFWENfU0M6CisJCQlzeXNjYWxsKGZyYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIEVY
Q19GUFU6CisJCQlpZiAoZnB1cHJvYykKKwkJCQlzYXZlX2ZwdShmcHVwcm9jKTsKKwkJCWZwdXBy
b2MgPSBwOworCQkJZW5hYmxlX2ZwdShwKTsKKwkJCWJyZWFrOwogCi0Jc3dpdGNoICh0eXBlKSB7
Ci0JY2FzZSBFWENfVFJDfEVYQ19VU0VSOgotCQlmcmFtZS0+c3JyMSAmPSB+UFNMX1NFOwotCQl0
cmFwc2lnbmFsKHAsIFNJR1RSQVAsIEVYQ19UUkMpOworCQljYXNlIEVYQ19BTEk6CisjaWYgMAkJ
CQorCQlpZiAoZml4X3VuYWxpZ25lZChwLCBmcmFtZSkgIT0gMCkKKyNlbmRpZgkKKwkJCXNpZyA9
IFNJR0JVUzsKKyNpZiAwCQkKKwkJZWxzZQorCQkJZnJhbWUtPnNycjAgKz0gNDsKKyNlbmRpZgkJ
CiAJCWJyZWFrOwotCWNhc2UgRVhDX0RTSToKLQkJewotCQkJdm1fbWFwX3QgbWFwOwotCQkJdmFk
ZHJfdCB2YTsKLQkJCWludCBmdHlwZTsKLQkJCWZhdWx0YnVmICpmYjsKLQkJCQotCQkJbWFwID0g
a2VybmVsX21hcDsKLQkJCXZhID0gZnJhbWUtPmRhcjsKLQkJCWlmICgodmEgPj4gQUREUl9TUl9T
SEZUKSA9PSBVU0VSX1NSKSB7Ci0JCQkJc3JfdCB1c2VyX3NyOwotCQkJCQotCQkJCV9fYXNtICgi
bWZzciAlMCwgJTEiCi0JCQkJICAgICA6ICI9ciIodXNlcl9zcikgOiAiSyIoVVNFUl9TUikpOwot
CQkJCXZhICY9IEFERFJfUElEWCB8IEFERFJfUE9GRjsKLQkJCQl2YSB8PSB1c2VyX3NyIDw8IEFE
RFJfU1JfU0hGVDsKLQkJCQltYXAgPSAmcC0+cF92bXNwYWNlLT52bV9tYXA7Ci0JCQl9Ci0JCQlp
ZiAoZnJhbWUtPmRzaXNyICYgRFNJU1JfU1RPUkUpCi0JCQkJZnR5cGUgPSBWTV9QUk9UX1JFQUQg
fCBWTV9QUk9UX1dSSVRFOworCisJCWNhc2UgRVhDX1BHTToKKwkJCS8qIFhYWCB0ZW1wb3Jhcmls
eSAqLworCQkJLyogWFhYOiBNYWdpYyBOdW1iZXI/ICovCisJCQlpZiAoZnJhbWUtPnNycjEgJiAw
eDAwMDIwMDApCisJCQkJc2lnID0gU0lHVFJBUDsKIAkJCWVsc2UKLQkJCQlmdHlwZSA9IFZNX1BS
T1RfUkVBRDsKLQkJCWlmICh1dm1fZmF1bHQobWFwLCB0cnVuY19wYWdlKHZhKSwgMCwgZnR5cGUp
Ci0JCQkgICAgPT0gS0VSTl9TVUNDRVNTKQorCQkJCXNpZyA9IFNJR0lMTDsKKwkJCWJyZWFrOwor
CisJCWRlZmF1bHQ6CisJCQl0cmFwX2ZhdGFsKGZyYW1lKTsKKwkJfQorCX0gZWxzZSB7CisJCS8q
IEtlcm5lbCBNb2RlIFRyYXBzICovCisKKwkJS0FTU0VSVChjb2xkIHx8IHRkLT50ZF91Y3JlZCAh
PSBOVUxMLAorCQkgICAgKCJrZXJuZWwgdHJhcCBkb2Vzbid0IGhhdmUgdWNyZWQiKSk7CisJCXN3
aXRjaCAodHlwZSkgeworCQljYXNlIEVYQ19EU0k6CisJCQlpZiAodHJhcF9wZmF1bHQoZnJhbWUs
IDApID09IDApCiAJCQkJcmV0dXJuOwotCQkJaWYgKGZiID0gcC0+cF9hZGRyLT51X3BjYi5wY2Jf
b25mYXVsdCkgewotCQkJCWZyYW1lLT5zcnIwID0gKCpmYilbMF07Ci0JCQkJZnJhbWUtPmZpeHJl
Z1sxXSA9ICgqZmIpWzFdOwotCQkJCWZyYW1lLT5maXhyZWdbMl0gPSAoKmZiKVsyXTsKLQkJCQlm
cmFtZS0+Y3IgPSAoKmZiKVszXTsKLQkJCQliY29weSgmKCpmYilbNF0sICZmcmFtZS0+Zml4cmVn
WzEzXSwKLQkJCQkgICAgICAxOSAqIHNpemVvZihyZWdpc3Rlcl90KSk7CisJCQlicmVhazsKKwkJ
Y2FzZSBFWENfTUNISzoKKwkJCWlmIChoYW5kbGVfb25mYXVsdChmcmFtZSkpCiAJCQkJcmV0dXJu
OwotCQkJfQotCQkJbWFwID0ga2VybmVsX21hcDsKLQkJfQotCQlnb3RvIGJyYWluX2RhbWFnZTsK
LQljYXNlIEVYQ19EU0l8RVhDX1VTRVI6Ci0JCXsKLQkJCWludCBmdHlwZSwgcnY7Ci0JCQkKLQkJ
CWlmIChmcmFtZS0+ZHNpc3IgJiBEU0lTUl9TVE9SRSkKLQkJCQlmdHlwZSA9IFZNX1BST1RfUkVB
RCB8IFZNX1BST1RfV1JJVEU7Ci0JCQllbHNlCi0JCQkJZnR5cGUgPSBWTV9QUk9UX1JFQUQ7Ci0J
CQlpZiAoKHJ2ID0gdXZtX2ZhdWx0KCZwLT5wX3Ztc3BhY2UtPnZtX21hcCwKLQkJCQkJICAgIHRy
dW5jX3BhZ2UoZnJhbWUtPmRhciksIDAsIGZ0eXBlKSkKLQkJCSAgICA9PSBLRVJOX1NVQ0NFU1Mp
Ci0JCQkJYnJlYWs7Ci0JCQlpZiAocnYgPT0gS0VSTl9SRVNPVVJDRV9TSE9SVEFHRSkgewotCQkJ
CXByaW50ZigiVVZNOiBwaWQgJWQgKCVzKSwgdWlkICVkIGtpbGxlZDogIgotCQkJCSAgICAgICAi
b3V0IG9mIHN3YXBcbiIsCi0JCQkJICAgICAgIHAtPnBfcGlkLCBwLT5wX2NvbW0sCi0JCQkJICAg
ICAgIHAtPnBfY3JlZCAmJiBwLT5wX3VjcmVkID8KLQkJCQkgICAgICAgcC0+cF91Y3JlZC0+Y3Jf
dWlkIDogLTEpOwotCQkJCXRyYXBzaWduYWwocCwgU0lHS0lMTCwgRVhDX0RTSSk7Ci0JCQl9IGVs
c2UgewotCQkJCXRyYXBzaWduYWwocCwgU0lHU0VHViwgRVhDX0RTSSk7Ci0JCQl9Ci0JCX0KLQkJ
YnJlYWs7Ci0JY2FzZSBFWENfSVNJfEVYQ19VU0VSOgotCQl7Ci0JCQlpbnQgZnR5cGU7Ci0JCQkK
LQkJCWZ0eXBlID0gVk1fUFJPVF9SRUFEIHwgVk1fUFJPVF9FWEVDVVRFOwotCQkJaWYgKHV2bV9m
YXVsdCgmcC0+cF92bXNwYWNlLT52bV9tYXAsCi0JCQkJICAgICB0cnVuY19wYWdlKGZyYW1lLT5z
cnIwKSwgMCwgZnR5cGUpCi0JCQkgICAgPT0gS0VSTl9TVUNDRVNTKQotCQkJCWJyZWFrOworCQkJ
YnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0cmFwX2ZhdGFsKGZyYW1lKTsKIAkJfQotCQl0cmFwc2ln
bmFsKHAsIFNJR1NFR1YsIEVYQ19JU0kpOwotCQlicmVhazsKLQljYXNlIEVYQ19TQ3xFWENfVVNF
UjoKLQkJewotCQkJc3RydWN0IHN5c2VudCAqY2FsbHA7Ci0JCQlzaXplX3QgYXJnc2l6ZTsKLQkJ
CXJlZ2lzdGVyX3QgY29kZSwgZXJyb3I7Ci0JCQlyZWdpc3Rlcl90ICpwYXJhbXMsIHJ2YWxbMl07
Ci0JCQlpbnQgbnN5cywgbjsKLQkJCXJlZ2lzdGVyX3QgYXJnc1sxMF07Ci0JCQkKLQkJCXV2bWV4
cC5zeXNjYWxscysrOwotCQkJCi0JCQluc3lzID0gcC0+cF9lbXVsLT5lX25zeXNlbnQ7Ci0JCQlj
YWxscCA9IHAtPnBfZW11bC0+ZV9zeXNlbnQ7CisJfQorCWlmIChzaWcgIT0gMCkgeworCQlpZiAo
cC0+cF9zeXNlbnQtPnN2X3RyYW5zdHJhcCAhPSBOVUxMKQorCQkJc2lnID0gKHAtPnBfc3lzZW50
LT5zdl90cmFuc3RyYXApKHNpZywgdHlwZSk7CisJCXRyYXBzaWduYWwocCwgc2lnLCB1Y29kZSk7
CisJfQorCXVzZXJyZXQocCwgZnJhbWUsIHN0aWNrcyk7CisJbXR4X2Fzc2VydCgmR2lhbnQsIE1B
X05PVE9XTkVEKTsKKwltdHhfbG9jaygmR2lhbnQpOworCWNyZnJlZSh0ZC0+dGRfdWNyZWQpOwor
CW10eF91bmxvY2soJkdpYW50KTsKKwl0ZC0+dGRfdWNyZWQgPSBOVUxMOworI2lmZGVmIE5PVFlF
VAkKKwkvKgorCSAqIFhYWDogdGhpcyBuZWVkcyB0byBiZSBoYW5kbGVkIHNvbWV3aGVyZSBlbHNl
PworCSAqCisJICogSWYgc29tZW9uZSBzdG9sZSB0aGUgZnB1IHdoaWxlIHdlIHdlcmUgYXdheSwg
ZGlzYWJsZSBpdAorCSAqLworCWlmIChwICE9IGZwdXByb2MpCisJCWZyYW1lLT5zcnIxICY9IH5Q
U0xfRlA7CisJY3VyY3B1KCktPmNpX3NjaGVkc3RhdGUuc3BjX2N1cnByaW9yaXR5ID0gcC0+cF9w
cmlvcml0eTsKKyNlbmRpZgorfQorCit2b2lkCitzeXNjYWxsKHN0cnVjdCB0cmFwZnJhbWUgKmZy
YW1lKQoreworCWNhZGRyX3QgcGFyYW1zOworCXN0cnVjdCBzeXNlbnQgKmNhbGxwOworCXN0cnVj
dCB0aHJlYWQgKnRkOworCXN0cnVjdCBwcm9jICpwOworCWludCBlcnJvcjsKKwlzaXplX3QgbmFy
ZzsKKwlyZWdpc3Rlcl90IGFyZ3NbMTBdOworCXVfaW50IGNvZGU7CisKKwl0ZCA9IGN1cnRocmVh
ZDsKKwlwID0gdGQtPnRkX3Byb2M7CisKKwlhdG9taWNfYWRkX2ludCgmY250LnZfc3lzY2FsbCwg
MSk7CiAJCQkKLQkJCWNvZGUgPSBmcmFtZS0+Zml4cmVnWzBdOwotCQkJcGFyYW1zID0gZnJhbWUt
PmZpeHJlZyArIEZJUlNUQVJHOworCWNvZGUgPSBmcmFtZS0+Zml4cmVnWzBdOworCXBhcmFtcyA9
IGZyYW1lLT5maXhyZWcgKyBGSVJTVEFSRzsKIAkJCQotCQkJc3dpdGNoIChjb2RlKSB7Ci0JCQlj
YXNlIFNZU19zeXNjYWxsOgotCQkJCS8qCi0JCQkJICogY29kZSBpcyBmaXJzdCBhcmd1bWVudCwK
LQkJCQkgKiBmb2xsb3dlZCBieSBhY3R1YWwgYXJncy4KLQkJCQkgKi8KLQkJCQljb2RlID0gKnBh
cmFtcysrOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTWVNfX19zeXNjYWxsOgotCQkJCS8qCi0JCQkJ
ICogTGlrZSBzeXNjYWxsLCBidXQgY29kZSBpcyBhIHF1YWQsCi0JCQkJICogc28gYXMgdG8gbWFp
bnRhaW4gcXVhZCBhbGlnbm1lbnQKLQkJCQkgKiBmb3IgdGhlIHJlc3Qgb2YgdGhlIGFyZ3MuCi0J
CQkJICovCi0JCQkJaWYgKGNhbGxwICE9IHN5c2VudCkKLQkJCQkJYnJlYWs7Ci0JCQkJcGFyYW1z
Kys7Ci0JCQkJY29kZSA9ICpwYXJhbXMrKzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJ
YnJlYWs7Ci0JCQl9Ci0JCQlpZiAoY29kZSA8IDAgfHwgY29kZSA+PSBuc3lzKQotCQkJCWNhbGxw
ICs9IHAtPnBfZW11bC0+ZV9ub3N5czsKLQkJCWVsc2UKLQkJCQljYWxscCArPSBjb2RlOwotCQkJ
YXJnc2l6ZSA9IGNhbGxwLT5zeV9hcmdzaXplOwotCQkJbiA9IE5BUkdSRUcgLSAocGFyYW1zIC0g
KGZyYW1lLT5maXhyZWcgKyBGSVJTVEFSRykpOwotCQkJaWYgKGFyZ3NpemUgPiBuICogc2l6ZW9m
KHJlZ2lzdGVyX3QpKSB7Ci0JCQkJYmNvcHkocGFyYW1zLCBhcmdzLCBuICogc2l6ZW9mKHJlZ2lz
dGVyX3QpKTsKLQkJCQlpZiAoZXJyb3IgPSBjb3B5aW4oTU9SRUFSR1MoZnJhbWUtPmZpeHJlZ1sx
XSksCi0JCQkJCQkgICBhcmdzICsgbiwKLQkJCQkJCSAgIGFyZ3NpemUgLSBuICogc2l6ZW9mKHJl
Z2lzdGVyX3QpKSkgewotI2lmZGVmCUtUUkFDRQotCQkJCQkvKiBDYW4ndCBnZXQgYWxsIHRoZSBh
cmd1bWVudHMhICovCi0JCQkJCWlmIChLVFJQT0lOVChwLCBLVFJfU1lTQ0FMTCkpCi0JCQkJCQlr
dHJzeXNjYWxsKHAsIGNvZGUsIGFyZ3NpemUsCi0JCQkJCQkgICAgYXJncyk7Ci0jZW5kaWYKLQkJ
CQkJZ290byBzeXNjYWxsX2JhZDsKLQkJCQl9Ci0JCQkJcGFyYW1zID0gYXJnczsKLQkJCX0KKwlp
ZiAocC0+cF9zeXNlbnQtPnN2X3ByZXBzeXNjYWxsKQorCQkvKgorCQkgKiBUaGUgcHJlcCBjb2Rl
IGlzIE1QIGF3YXJlLgorCQkgKi8KKwkJKCpwLT5wX3N5c2VudC0+c3ZfcHJlcHN5c2NhbGwpKCZm
cmFtZSwgYXJncywgJmNvZGUsICZwYXJhbXMpOworCWVsc2UgaWYgKGNvZGUgPT0gU1lTX3N5c2Nh
bGwpCisJCS8qCisJCSAqIGNvZGUgaXMgZmlyc3QgYXJndW1lbnQsCisJCSAqIGZvbGxvd2VkIGJ5
IGFjdHVhbCBhcmdzLgorCQkgKi8KKwkJY29kZSA9ICpwYXJhbXMrKzsKKwllbHNlIGlmIChjb2Rl
ID09IFNZU19fX3N5c2NhbGwpIHsKKwkJLyoKKwkJICogTGlrZSBzeXNjYWxsLCBidXQgY29kZSBp
cyBhIHF1YWQsCisJCSAqIHNvIGFzIHRvIG1haW50YWluIHF1YWQgYWxpZ25tZW50CisJCSAqIGZv
ciB0aGUgcmVzdCBvZiB0aGUgYXJncy4KKwkJICovCisJCXBhcmFtcysrOworCQljb2RlID0gKnBh
cmFtcysrOworCX0KKworIAlpZiAocC0+cF9zeXNlbnQtPnN2X21hc2spCisgCQljb2RlICY9IHAt
PnBfc3lzZW50LT5zdl9tYXNrOworCisgCWlmIChjb2RlID49IHAtPnBfc3lzZW50LT5zdl9zaXpl
KQorIAkJY2FsbHAgPSAmcC0+cF9zeXNlbnQtPnN2X3RhYmxlWzBdOworICAJZWxzZQorIAkJY2Fs
bHAgPSAmcC0+cF9zeXNlbnQtPnN2X3RhYmxlW2NvZGVdOworCisJbmFyZyA9IGNhbGxwLT5zeV9u
YXJnICYgU1lGX0FSR01BU0s7CisKKwluID0gTkFSR1JFRyAtIChwYXJhbXMgLSAoZnJhbWUtPmZp
eHJlZyArIEZJUlNUQVJHKSk7CisJaWYgKGFyZ3NpemUgPiBuICogc2l6ZW9mKHJlZ2lzdGVyX3Qp
KSB7CisJCWJjb3B5KHBhcmFtcywgYXJncywgbiAqIHNpemVvZihyZWdpc3Rlcl90KSk7CisJCWlm
IChlcnJvciA9IGNvcHlpbihNT1JFQVJHUyhmcmFtZS0+Zml4cmVnWzFdKSwgYXJncyArIG4sCisJ
CQlhcmdzaXplIC0gbiAqIHNpemVvZihyZWdpc3Rlcl90KSkpIHsKICNpZmRlZglLVFJBQ0UKKwkJ
CS8qIENhbid0IGdldCBhbGwgdGhlIGFyZ3VtZW50cyEgKi8KIAkJCWlmIChLVFJQT0lOVChwLCBL
VFJfU1lTQ0FMTCkpCi0JCQkJa3Ryc3lzY2FsbChwLCBjb2RlLCBhcmdzaXplLCBwYXJhbXMpOwor
CQkJCWt0cnN5c2NhbGwocC0+cF90cmFjZXAsIGNvZGUsIG5hcmcsIGFyZ3MpOwogI2VuZGlmCi0J
CQlydmFsWzBdID0gMDsKLQkJCXJ2YWxbMV0gPSBmcmFtZS0+Zml4cmVnW0ZJUlNUQVJHICsgMV07
Ci0JCQkKLQkJCXN3aXRjaCAoZXJyb3IgPSAoKmNhbGxwLT5zeV9jYWxsKShwLCBwYXJhbXMsIHJ2
YWwpKSB7Ci0JCQljYXNlIDA6Ci0JCQkJZnJhbWUtPmZpeHJlZ1tGSVJTVEFSR10gPSBydmFsWzBd
OwotCQkJCWZyYW1lLT5maXhyZWdbRklSU1RBUkcgKyAxXSA9IHJ2YWxbMV07Ci0JCQkJZnJhbWUt
PmNyICY9IH4weDEwMDAwMDAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUkVTVEFSVDoKLQkJCQkv
KgotCQkJCSAqIFNldCB1c2VyJ3MgcGMgYmFjayB0byByZWRvIHRoZSBzeXN0ZW0gY2FsbC4KLQkJ
CQkgKi8KLQkJCQlmcmFtZS0+c3JyMCAtPSA0OwotCQkJCWJyZWFrOwotCQkJY2FzZSBFSlVTVFJF
VFVSTjoKLQkJCQkvKiBub3RoaW5nIHRvIGRvICovCi0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0Ogot
c3lzY2FsbF9iYWQ6Ci0JCQkJaWYgKHAtPnBfZW11bC0+ZV9lcnJubykKLQkJCQkJZXJyb3IgPSBw
LT5wX2VtdWwtPmVfZXJybm9bZXJyb3JdOwotCQkJCWZyYW1lLT5maXhyZWdbRklSU1RBUkddID0g
ZXJyb3I7Ci0JCQkJZnJhbWUtPmNyIHw9IDB4MTAwMDAwMDA7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJ
CQlnb3RvIGJhZDsKKwkJfQorCQlwYXJhbXMgPSBhcmdzOworCX0KKworCS8qCisJICogVHJ5IHRv
IHJ1biB0aGUgc3lzY2FsbCB3aXRob3V0IEdpYW50IGlmIHRoZSBzeXNjYWxsIGlzIE1QIHNhZmUu
CisJICovCisJaWYgKChjYWxscC0+c3lfbmFyZyAmIFNZRl9NUFNBRkUpID09IDApCisJCW10eF9s
b2NrKCZHaWFudCk7CisKICNpZmRlZglLVFJBQ0UKLQkJCWlmIChLVFJQT0lOVChwLCBLVFJfU1lT
UkVUKSkKLQkJCQlrdHJzeXNyZXQocCwgY29kZSwgZXJyb3IsIHJ2YWxbMF0pOworCWlmIChLVFJQ
T0lOVChwLCBLVFJfU1lTQ0FMTCkpCisJCWt0cnN5c2NhbGwocC0+cF90cmFjZXAsIGNvZGUsIG5h
cmcsIHBhcmFtcyk7CiAjZW5kaWYKLQkJfQotCQlicmVhazsKKwl0ZC0+dGRfcmV0dmFsWzBdID0g
MDsKKwl0ZC0+dGRfcmV0dmFsWzFdID0gZnJhbWUtPmZpeHJlZ1tGSVJTVEFSRyArIDFdOwogCi0J
Y2FzZSBFWENfRlBVfEVYQ19VU0VSOgotCQlpZiAoZnB1cHJvYykKLQkJCXNhdmVfZnB1KGZwdXBy
b2MpOwotCQlmcHVwcm9jID0gcDsKLQkJZW5hYmxlX2ZwdShwKTsKLQkJYnJlYWs7CisJU1RPUEVW
RU5UKHAsIFNfU0NFLCBuYXJnKTsKIAotCWNhc2UgRVhDX0FTVHxFWENfVVNFUjoKLQkJLyogVGhp
cyBpcyBqdXN0IGhlcmUgdGhhdCB3ZSB0cmFwICovCisJZXJyb3IgPSAoKmNhbGxwLT5zeV9jYWxs
KSh0ZCwgYXJncyk7CisJc3dpdGNoIChlcnJvcikgeworCWNhc2UgMDoKKwkJZnJhbWUtPmZpeHJl
Z1tGSVJTVEFSR10gPSB0ZC0+dGRfcmV0dmFsWzBdOworCQlmcmFtZS0+Zml4cmVnW0ZJUlNUQVJH
ICsgMV0gPSB0ZC0+dGRfcmV0dmFsWzFdOworCQkvKiBYWFg6IE1hZ2ljIG51bWJlciAqLworCQlm
cmFtZS0+Y3IgJj0gfjB4MTAwMDAwMDA7CiAJCWJyZWFrOwotCi0JY2FzZSBFWENfQUxJfEVYQ19V
U0VSOgotCQlpZiAoZml4X3VuYWxpZ25lZChwLCBmcmFtZSkgIT0gMCkKLQkJCXRyYXBzaWduYWwo
cCwgU0lHQlVTLCBFWENfQUxJKTsKLQkJZWxzZQotCQkJZnJhbWUtPnNycjAgKz0gNDsKKwljYXNl
IEVSRVNUQVJUOgorCQkvKgorCQkgKiBTZXQgdXNlcidzIHBjIGJhY2sgdG8gcmVkbyB0aGUgc3lz
dGVtIGNhbGwuCisJCSAqLworCQlmcmFtZS0+c3JyMCAtPSA0OwogCQlicmVhazsKLQotCWNhc2Ug
RVhDX1BHTXxFWENfVVNFUjoKLS8qIFhYWCB0ZW1wb3JhcmlseSAqLwotCQlpZiAoZnJhbWUtPnNy
cjEgJiAweDAwMDIwMDApCi0JCQl0cmFwc2lnbmFsKHAsIFNJR1RSQVAsIEVYQ19QR00pOwotCQll
bHNlCi0JCQl0cmFwc2lnbmFsKHAsIFNJR0lMTCwgRVhDX1BHTSk7CisJY2FzZSBFSlVTVFJFVFVS
TjoKKwkJLyogbm90aGluZyB0byBkbyAqLwogCQlicmVhazsKLQotCWNhc2UgRVhDX01DSEs6Ci0J
CXsKLQkJCWZhdWx0YnVmICpmYjsKLQotCQkJaWYgKGZiID0gcC0+cF9hZGRyLT51X3BjYi5wY2Jf
b25mYXVsdCkgewotCQkJCWZyYW1lLT5zcnIwID0gKCpmYilbMF07Ci0JCQkJZnJhbWUtPmZpeHJl
Z1sxXSA9ICgqZmIpWzFdOwotCQkJCWZyYW1lLT5maXhyZWdbMl0gPSAoKmZiKVsyXTsKLQkJCQlm
cmFtZS0+Y3IgPSAoKmZiKVszXTsKLQkJCQliY29weSgmKCpmYilbNF0sICZmcmFtZS0+Zml4cmVn
WzEzXSwKLQkJCQkgICAgICAxOSAqIHNpemVvZihyZWdpc3Rlcl90KSk7Ci0JCQkJcmV0dXJuOwot
CQkJfQorCWRlZmF1bHQ6CitiYWQ6CisJCWlmIChwLT5wX3N5c2VudC0+c3ZfZXJyc2l6ZSkgewor
CQkJaWYgKGVycm9yID49IHAtPnBfc3lzZW50LT5zdl9lcnJzaXplKQorCQkJCWVycm9yID0gLTE7
CS8qIFhYWCAqLworCQkJZWxzZQorCQkJCWVycm9yID0gcC0+cF9zeXNlbnQtPnN2X2VycnRibFtl
cnJvcl07CiAJCX0KLQkJZ290byBicmFpbl9kYW1hZ2U7CisJCWZyYW1lLT5maXhyZWdbRklSU1RB
UkddID0gZXJyb3I7CisJCS8qIFhYWDogTWFnaWMgbnVtYmVyOiBDYXJyeSBGbGFnIEVxdWl2YWxl
bnQ/ICovCisJCWZyYW1lLT5jciB8PSAweDEwMDAwMDAwOworCQlicmVhazsKKwl9CiAKLQlkZWZh
dWx0OgotYnJhaW5fZGFtYWdlOgotCQlwcmludGYoInRyYXAgdHlwZSAleCBhdCAleFxuIiwgdHlw
ZSwgZnJhbWUtPnNycjApOwotI2lmZGVmIEREQgotCQlEZWJ1Z2dlcigpOwkJCSAvKiBYWFggdGVt
cG9yYXJpbHkgKi8KLSNlbmRpZgotI2lmZGVmIFRSQVBfUEFOSUNXQUlUCi0JCXByaW50ZigiUHJl
c3MgYSBrZXkgdG8gcGFuaWMuXG4iKTsKLQkJY25nZXRjKCk7CisJCisjaWZkZWYJS1RSQUNFCisJ
aWYgKEtUUlBPSU5UKHAsIEtUUl9TWVNSRVQpKQorCQlrdHJzeXNyZXQocC0+cF90cmFjZXAsIGNv
ZGUsIGVycm9yLCB0ZC0+dGRfcmV0dmFsWzBdKTsKICNlbmRpZgotCQlwYW5pYygidHJhcCIpOwot
CX0KIAotCWFzdHBlbmRpbmcgPSAwOwkJLyogd2UgYXJlIGFib3V0IHRvIGRvIGl0ICovCisJaWYg
KChjYWxscC0+c3lzX25hcmcgJiBTWUZfTVBTQUZFKSA9PSAwKQorCQltdHhfdW5sb2NrKCZHaWFu
dCk7CiAKLQl1dm1leHAuc29mdHMrKzsKKwkvKgorCSAqIERvZXMgdGhlIGNvbW1lbnQgaW4gdGhl
IGkzODYgY29kZSBhYm91dCBlcnJubyBhcHBseSBoZXJlPworCSAqLworCVNUT1BFVkVOVChwLCBT
X1NDWCwgY29kZSk7CisKKyNpZmRlZiBXSVRORVNTCisJaWYgKHdpdG5lc3NfbGlzdCh0ZCkpIHsK
KwkJcGFuaWMoInN5c3RlbSBjYWxsICVzIHJldHVybmluZyB3aXRoIG11dGV4KHMpIGhlbGRcbiIs
CisJCSAgICBzeXNjYWxsbmFtZXNbY29kZV0pOworCX0KKyNlbmRpZgorCW10eF9hc3NlcnQoJnNj
aGVkX2xvY2ssIE1BX05PVE9XTkVEKTsKKwltdHhfYXNzZXJ0KCZHaWFudCwgTUFfTk9UT1dORUQp
OwkKK30KIAotCWlmIChwLT5wX2ZsYWcgJiBQX09XRVVQQykgewotCQlwLT5wX2ZsYWcgJj0gflBf
T1dFVVBDOwotCQlBRERVUFJPRihwKTsKK3N0YXRpYyBpbnQKK3RyYXBfcGZhdWx0KHN0cnVjdCB0
cmFwZnJhbWUgKmZyYW1lLCBpbnQgdXNlcikKK3sKKwl2bV9vZmZzZXRfdCBldmEsIHZhOworCXN0
cnVjdCB0aHJlYWQgKnRkOworCXN0cnVjdCBwcm9jICpwOworCXZtX21hcF90IG1hcDsKKwl2bV9w
cm90X3QgZnR5cGU7CisJaW50IHJ2OworCisJdGQgPSBjdXJ0aHJlYWQ7CisJcCA9IHRkLT50ZF9w
cm9jOworCWlmIChmcmFtZS0+ZXhjID09IEVYQ19JU0kpIHsKKwkJZXZhID0gZnJhbWUtPnNycjA7
CisJCWZ0eXBlID0gVk1fUFJPVF9SRUFEIHwgVk1fUFJPVF9FWEVDVVRFOworCX0gZWxzZSB7CisJ
CWV2YSA9IGZyYW1lLT5kYXI7CisJCWlmIChmcmFtZS0+ZHNpc3IgJiBEU0lTUl9TVE9SRSkKKwkJ
CWZ0eXBlID0gVk1fUFJPVF9SRUFEIHwgVk1fUFJPVF9XUklURTsKKwkJZWxzZQorCQkJZnR5cGUg
PSBWTV9QUk9UX1JFQUQ7CiAJfQogCi0JLyogdGFrZSBwZW5kaW5nIHNpZ25hbHMgKi8KLQl7Ci0J
CWludCBzaWc7CisJaWYgKChldmEgPj4gQUREUl9TUl9TSEZUKSAhPSBVU0VSX1NSKSB7CisJCWlm
ICh1c2VyKQorCQkJcmV0dXJuIChTSUdTRUdWKTsKKwkJbWFwID0ga2VybmVsX21hcDsKKwl9IGVs
c2UgeworCQlzcl90IHVzZXJfc3I7CiAKLQkJd2hpbGUgKHNpZyA9IENVUlNJRyhwKSkKLQkJCXBv
c3RzaWcoc2lnKTsKKwkJaWYgKHAtPnBfdm1zcGFjZSA9PSBOVUxMKQorCQkJcmV0dXJuIChTSUdT
RUdWKTsKKwkJCQkKKwkJX19hc20gKCJtZnNyICUwLCAlMSIKKwkJICAgIDogIj1yIih1c2VyX3Ny
KQorCQkgICAgOiAiSyIoVVNFUl9TUikpOworCQlldmEgJj0gQUREUl9QSURYIHwgQUREUl9QT0ZG
OworCQlldmEgfD0gdXNlcl9zciA8PCBBRERSX1NSX1NIRlQ7CisJCW1hcCA9ICZwLT5wX3Ztc3Bh
Y2UtPnZtX21hcDsKIAl9CisJdmEgPSB0cnVuY19wYWdlKGV2YSk7CisKKwltdHhfbG9jaygmR2lh
bnQpOworCWlmIChtYXAgIT0ga2VybmVsX21hcCkgeworCQkvKgorCQkgKiBLZWVwIHN3YXBvdXQg
ZnJvbSBtZXNzaW5nIHdpdGggdXMgZHVyaW5nIHRoaXMKKwkJICoJY3JpdGljYWwgdGltZS4KKwkJ
ICovCisJCVBST0NfTE9DSyhwKTsKKwkJKytwLT5wX2xvY2s7CisJCVBST0NfVU5MT0NLKHApOwog
Ci0JcC0+cF9wcmlvcml0eSA9IHAtPnBfdXNycHJpOwotCWlmICh3YW50X3Jlc2NoZWQpIHsKLQkJ
aW50IHNpZzsKIAkJLyoKLQkJICogV2UgYXJlIGJlaW5nIHByZWVtcHRlZC4KKwkJICogR3JvdyB0
aGUgc3RhY2sgaWYgbmVjZXNzYXJ5CisJCSAqLworCQkvKiBncm93X3N0YWNrIHJldHVybnMgZmFs
c2Ugb25seSBpZiB2YSBmYWxscyBpbnRvCisJCSAqIGEgZ3Jvd2FibGUgc3RhY2sgcmVnaW9uIGFu
ZCB0aGUgc3RhY2sgZ3Jvd3RoCisJCSAqIGZhaWxzLiAgSXQgcmV0dXJucyB0cnVlIGlmIHZhIHdh
cyBub3Qgd2l0aGluCisJCSAqIGEgZ3Jvd2FibGUgc3RhY2sgcmVnaW9uLCBvciBpZiB0aGUgc3Rh
Y2sgCisJCSAqIGdyb3d0aCBzdWNjZWVkZWQuCisJCSAqLworCQlpZiAoIWdyb3dfc3RhY2sgKHAs
IHZhKSkKKwkJCXJ2ID0gS0VSTl9GQUlMVVJFOworCQllbHNlCisJCQkvKiBGYXVsdCBpbiB0aGUg
dXNlciBwYWdlOiAqLworCQkJcnYgPSB2bV9mYXVsdChtYXAsIHZhLCBmdHlwZSwKKwkJCSAgICAg
IChmdHlwZSAmIFZNX1BST1RfV1JJVEUpID8gVk1fRkFVTFRfRElSVFkKKwkJCQkJCSAgICAgIDog
Vk1fRkFVTFRfTk9STUFMKTsKKworCQlQUk9DX0xPQ0socCk7CisJCS0tcC0+cF9sb2NrOworCQlQ
Uk9DX1VOTE9DSyhwKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBEb24ndCBoYXZlIHRvIHdvcnJ5
IGFib3V0IHByb2Nlc3MgbG9ja2luZyBvciBzdGFja3MgaW4gdGhlCisJCSAqIGtlcm5lbC4KIAkJ
ICovCi0JCXByZWVtcHQoTlVMTCk7Ci0JCXdoaWxlIChzaWcgPSBDVVJTSUcocCkpCi0JCQlwb3N0
c2lnKHNpZyk7CisJCXJ2ID0gdm1fZmF1bHQobWFwLCB2YSwgZnR5cGUsIFZNX0ZBVUxUX05PUk1B
TCk7CiAJfQorCW10eF91bmxvY2soJkdpYW50KTsKIAotCS8qCi0JICogSWYgcHJvZmlsaW5nLCBj
aGFyZ2UgcmVjZW50IHN5c3RlbSB0aW1lIHRvIHRoZSB0cmFwcGVkIHBjLgotCSAqLwotCWlmIChw
LT5wX2ZsYWcgJiBQX1BST0ZJTCkgewotCQlleHRlcm4gaW50IHBzcmF0aW87CisJaWYgKHJ2ID09
IEtFUk5fU1VDQ0VTUykKKwkJcmV0dXJuICgwKTsKIAotCQlhZGR1cGNfdGFzayhwLCBmcmFtZS0+
c3JyMCwKLQkJCSAgICAoaW50KShwLT5wX3N0aWNrcyAtIHN0aWNrcykgKiBwc3JhdGlvKTsKLQl9
Ci0JLyoKLQkgKiBJZiBzb21lb25lIHN0b2xlIHRoZSBmcHUgd2hpbGUgd2Ugd2VyZSBhd2F5LCBk
aXNhYmxlIGl0Ci0JICovCi0JaWYgKHAgIT0gZnB1cHJvYykKLQkJZnJhbWUtPnNycjEgJj0gflBT
TF9GUDsKLQljdXJjcHUoKS0+Y2lfc2NoZWRzdGF0ZS5zcGNfY3VycHJpb3JpdHkgPSBwLT5wX3By
aW9yaXR5OwotI2VuZGlmCisJaWYgKCF1c2VyICYmIGhhbmRsZV9vbmZhdWx0KGZyYW1lKSkKKwkJ
cmV0dXJuICgwKTsKKworCXJldHVybiAoU0lHU0VHVik7CiB9CiAKICNpZiAwIC8qIFhYWDogY2hp
bGRfcmV0dXJuIG5vdCB1c2VkICovCisvKgorICogWFhYOiB0aGUgdHJhcGZyYW1lIHJldHVybiB2
YWx1ZXMgc2hvdWxkIGJlIHNldHVwIGluIHZtX21hY2hkZXAuYyBpbgorICogY3B1X2ZvcmsoKS4K
KyAqLwogdm9pZAogY2hpbGRfcmV0dXJuKHZvaWQgKmFyZykKIHsK

--_=XFMail.1.4.0.FreeBSD:011026043333:6073=_--
End of MIME message

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ppc" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.011026043335.jhb>