From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1K50iO-00038P-6P for mharc-grub-devel@gnu.org; Sat, 07 Jun 2008 11:52:24 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1K50iM-00036B-2H for grub-devel@gnu.org; Sat, 07 Jun 2008 11:52:22 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1K50iI-00031i-ML for grub-devel@gnu.org; Sat, 07 Jun 2008 11:52:20 -0400 Received: from [199.232.76.173] (port=56915 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1K50iH-00031Q-Qv for grub-devel@gnu.org; Sat, 07 Jun 2008 11:52:17 -0400 Received: from ug-out-1314.google.com ([66.249.92.173]:48147) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1K50iG-0001v9-PP for grub-devel@gnu.org; Sat, 07 Jun 2008 11:52:17 -0400 Received: by ug-out-1314.google.com with SMTP id l31so887119ugc.48 for ; Sat, 07 Jun 2008 08:52:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:in-reply-to :references:content-type:date:message-id:mime-version:x-mailer; bh=LZHa+Hq1gQcOTypJHt5VS9R7O3qA8mFvpOgduYPHBwI=; b=DdWLcqbTNrRISFiSFqr7/usBPpcPl9QDy7pVbVGMEPK5/XUc6UlZyNA+6diw5xyVTD 8bAK0YSwXzsW+yzruoK2IGEXAQR1fwnr20RaWJeDRDODg/spaUaD3r5j69gr9arGGJ0U GUopHeUkG3SR/fraoXzZU9Xj8u0bsHReuDHRs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:in-reply-to:references:content-type:date:message-id :mime-version:x-mailer; b=Y4Oy2ruH+YlUtGEmKCOn0NixB6o2JzSV2K3WWg0WoeEza4Kl7CWXWr0+WQqx9dMvl8 lhvlryXmpfBMimlwPe4SPXWfLKcNak3somPhzlDS/UKLOaoD1XLFxVNZUIEGsnaoLopQ frv6Pc1L8cxgM/fRJb1lRVuARNNskXTc9i/ao= Received: by 10.67.19.13 with SMTP id w13mr458197ugi.78.1212853935346; Sat, 07 Jun 2008 08:52:15 -0700 (PDT) Received: from ?192.168.1.101? ( [213.37.137.93]) by mx.google.com with ESMTPS id 31sm1811637ugg.25.2008.06.07.08.52.12 (version=SSLv3 cipher=RC4-MD5); Sat, 07 Jun 2008 08:52:13 -0700 (PDT) From: Javier =?ISO-8859-1?Q?Mart=EDn?= To: The development of GRUB 2 In-Reply-To: <484AA2ED.3040709@nic.fi> References: <1212701730.3141.25.camel@localhost> <48496649.6060905@nic.fi> <1212843337.13883.20.camel@localhost> <484AA2ED.3040709@nic.fi> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-UMRsneJXVapz57SVweME" Date: Sat, 07 Jun 2008 17:52:41 +0200 Message-Id: <1212853961.17897.23.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.22.2 X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) Subject: Re: [PATCH] Reimplementing the legacy "map" command X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Jun 2008 15:52:22 -0000 --=-UMRsneJXVapz57SVweME Content-Type: multipart/mixed; boundary="=-NWgkuGW3BE4HgYAEVUz6" --=-NWgkuGW3BE4HgYAEVUz6 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable El s=C3=A1b, 07-06-2008 a las 18:02 +0300, Vesa J=C3=A4=C3=A4skel=C3=A4inen= escribi=C3=B3: > Javier Mart=C3=ADn wrote: > > El vie, 06-06-2008 a las 19:31 +0300, Vesa J=C3=A4=C3=A4skel=C3=A4inen = escribi=C3=B3: > >> Did you forgot something from this patch :) ? > > Er... not that I know of. What do you mean? Did I leave something > > important off? If it's the licensing info, I put it under the same as > > the whole GRUB2 project, I suppose. The int13 handler code, however, is > > based (though changed) on the equivalent code in GRUB legacy. >=20 > diff -pruN ... >=20 > New files were missing from the patch. Anyway it is a good idea to=20 > review the patch before sending it. Oops! (blushes) I'm used to GUI SVN tools diffing for me, and I thought that cvs diff -u would do the trick. Seems that it doesn't u_u. My apologies for making everyone waste their time because of my stupid oversight... > Future extensions could be: >=20 > drivemap --clear > drivemap --ata (ata0) 0x80 > drivemap --ata (ata1) --next-device > drivemap --usb (usb0) --next-device > drivemap --eltorito (cd0) --next-device > drivemap --memdisk (hd0)/floppy-image.flp 0x00 >=20 > --ata would install ATA handler (if loaded) > --usb would install USB handler (if loaded) > --eltorito would install el torito handler (if loaded) > --memdisk would use memory disk for mapping drive (if loaded) Nice idea for the future, as it might be a way to add such drives to DOS-like OSes that delegate all work to the BIOS. However, drivers for some things might need to stay resident (with the associated memory consumption) and, if they're written for GRUB (32bit pmode), we'd need so many things that just thinking about it makes my head spin. Definitely not an easy task for now. Oh, and the --clear option already exists, it's called -r or --reset, which clears all the mappings. Mapping a drive to itself also clears the mapping, since drivemap only stores remapped drives. > Another extesion could be that if you can specify your harddisk with=20 > some UUID it could then be used to identify disk as a source and grub=20 > would find device matching it. (or use search command) This one could be implemented in short time, or might even be available already, if the grub_disk_open function accepts UUIDs. > >> Try to move int13h handle to module not to kernel. We do not want to p= ut > >> anything more to kernel unless there is a really good reason to do so. > > Seems A Good Thing (tm). However, all the loaders have their assembler > > code in the kernel, and I have yet to find a single assembly file out o= f > > the /kern dir (except for the setjmp.S support routines). As I state > > below, I don't understand the GRUB build system quite well, and would > > appreciate to have it explained so that I can break the asm part off th= e > > kernel loader.S and into its own drivemap.S file. >=20 > Well I think the first one to do so is gdb debugging patch recently=20 > presnted on mailinglist. Check .rmk file for ideas. Ok, will do. However, why are the .mk files kept in the CVS tree if they ar= e autogenerated? Is it because autogen.sh requires Ruby? > >> +/* This is NOT a typo: we just want this "void" var in order to take = its > >> + * address with &var - used for relative addressing within the int13=20 > >> handler */ > >> +extern void EXPORT_VAR(grub_drivemap_int13_handler_base); > >> > >> Create new type for it. Or use variable type that eats that space. Thi= s=20 > >> way you do not need this comment to confuse people. > > Well, seems the comment was not as effective as I thought ^.^ - there i= s > > _no_ space, the only purpose of that pseudo-variable is having its > > address taken with the & operator. The only sensible "new type" for it > > would be something akin to=20 > > typedef void grub_symbol_t; > > Which would be also puzzling and require a comment to stop people from > > changing it to void*. However, the information would be more centralize= d > > then and it would cause less head-scratching. >=20 > There is space... if you do not have space, then where does the pointer=20 > point :) ? If you provide external symbol let it be variable or function=20 > there is always an address and space for it. Even if you say here that=20 > this is uint8_t then you get same address that if you had uint32_t=20 > declared as an "extern". extern there it give idea for compiler what=20 > kind if data there is. It would be best to match what actually is there. The "variable" (I assume we're talking about int13_handler_base) does not point anywhere. Let me explicit it: there is no cabal, er... variable. It is just a label in the assembly code, but it has no space reserved to it (unlike variables, which are labels with some space after them). Thus, it has no "content" at all; nothing is read or written to it (in fact, that would overwrite the variable that is declared _after_ the label), and it's only used to take its address with &var. The situation with int13_handler_mapstart is similar: it is just a symbol (space for it is reserved at runtime), and the map proper is *at* &int13_handler_mapstart. I hope the drivemap.c file will make it clearer... > >> Abort on error?... Ok... do you go to deinit everything before that wa= s=20 > >> successfully installed or just give warning or ? > > I don't know; either choice might be sensible and still has drawbacks > > (increased complexity, potentially undoable actions, etc). My design of > > this new functionality was a bit ad-hoc, and I added that flag thinking > > "if the drives cannot be mapped, then the user wouldn't want the system > > started". However, as you reason, with multiple preboot hooks the syste= m > > could be let in a potentially inconsistent state. >=20 > Right. So it might be a good idea to show message to screen and still=20 > continue. User can easily see that there is a problem with something if=20 > there is a clue on the screen. For some users this might generate=20 > support request somewhere, but hey... it would generate it anyway should=20 > it return back to grub... The problem is that if we "still continue" a user could get stuck with any of these non-informative possibilities, depending on the chainloaded MBR/bootsector: * Nothing at all (Windows XP Pro x64, my PC) * An "invalid operating system" message (FreeDOS MBR) * A "cannot find kernel/ntldr/whatever" message (?) I'm attaching the current version missing file (drivemap.c), just so that it can be examined. However, I will be applying all your suggestions (removing superfluous messages, moving the asm routine to its own file, editing just the .rmk file, cleaning commented code out...) and send an updated version of the full patch, either today or tomorrow. Thanks! Habbit --=-NWgkuGW3BE4HgYAEVUz6 Content-Disposition: attachment; filename=drivemap.c Content-Type: text/x-csrc; name=drivemap.c; charset=utf-8 Content-Transfer-Encoding: base64 LyogZHJpdmVtYXAuYyAtIGNvbW1hbmQgdG8gbWFuYWdlIHRoZSBCSU9TIGRyaXZlIG1hcHBpbmdz LiAgKi8NCi8qDQogKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcg0KICogIENv cHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQogKg0KICog IEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQ0KICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQogKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCiAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQogKiAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKiAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UNCiAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uDQogKi8NCg0KI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+DQojaW5jbHVkZSA8 Z3J1Yi9kbC5oPg0KI2luY2x1ZGUgPGdydWIvbW0uaD4NCiNpbmNsdWRlIDxncnViL21pc2MuaD4N CiNpbmNsdWRlIDxncnViL2Rpc2suaD4NCiNpbmNsdWRlIDxncnViL2xvYWRlci5oPg0KI2luY2x1 ZGUgPGdydWIvbWFjaGluZS9sb2FkZXIuaD4NCiNpbmNsdWRlIDxncnViL21hY2hpbmUvYmlvc2Rp c2suaD4NCg0Kc3RhdGljIGNvbnN0IHN0cnVjdCBncnViX2FyZ19vcHRpb24gb3B0aW9uc1tdID0N CiAgew0KICAgIHsibGlzdCIsICdsJywgMCwgInNob3cgdGhlIGN1cnJlbnQgbWFwcGluZ3MiLCAw LCAwfSwNCiAgICB7InJlc2V0IiwgJ3InLCAwLCAicmVzZXQgYWxsIG1hcHBpbmdzIHRvIHRoZSBk ZWZhdWx0IHZhbHVlcyIsIDAsIDB9LA0KICAgIHswLCAwLCAwLCAwLCAwLCAwfQ0KICB9Ow0KDQpz dGF0aWMgZ3J1Yl9wcmVib290X2hvb2tpZCBpbnN0aGFuZGxlcl9ob29rID0gMDsNCg0KdHlwZWRl ZiBzdHJ1Y3QgZHJpdmVtYXBfbm9kZQ0Kew0KICBncnViX3VpbnQ4X3QgbmV3ZHJpdmU7DQogIGdy dWJfdWludDhfdCByZWRpcnRvOw0KICBzdHJ1Y3QgZHJpdmVtYXBfbm9kZSAqbmV4dDsNCn0gZHJp dmVtYXBfbm9kZV90Ow0KDQpzdGF0aWMgZHJpdmVtYXBfbm9kZV90ICpkcml2ZW1hcCA9IDA7DQpz dGF0aWMgZ3J1Yl9lcnJfdCBkcml2ZW1hcF9pbnN0YWxsX2ludDEzX2hhbmRsZXIodm9pZCk7DQoN CnN0YXRpYyBncnViX2Vycl90DQpkcml2ZW1hcF9zZXQgKGdydWJfdWludDhfdCBuZXdkcml2ZSwg Z3J1Yl91aW50OF90IHJlZGlydG8pDQogIC8qIFB1dHMgdGhlIHNwZWNpZmllZCBtYXBwaW5nIGlu dG8gdGhlIHRhYmxlLCByZXBsYWNpbmcgYW4gZXhpc3RpbmcgbWFwcGluZw0KICAgKiBmb3IgbmV3 ZHJpdmUgb3IgYWRkaW5nIGEgbmV3IG9uZSBpZiByZXF1aXJlZC4gKi8NCnsNCiAgZHJpdmVtYXBf bm9kZV90ICptYXBwaW5nID0gMCwgKnNlYXJjaCA9IGRyaXZlbWFwOw0KICB3aGlsZSAoc2VhcmNo KQ0KICAgIHsNCiAgICAgIGlmIChzZWFyY2gtPm5ld2RyaXZlID09IG5ld2RyaXZlKQ0KICAgICAg ICB7DQogICAgICAgICAgbWFwcGluZyA9IHNlYXJjaDsNCiAgICAgICAgICBicmVhazsNCiAgICAg ICAgfQ0KICAgICAgc2VhcmNoID0gc2VhcmNoLT5uZXh0Ow0KICAgIH0NCg0KICBpZiAobWFwcGlu ZykgIC8qIFRoZXJlIHdhcyBhIG1hcHBpbmcgYWxyZWFkeSBpbiBwbGFjZSwgbW9kaWZ5IGl0ICov DQogICAgbWFwcGluZy0+cmVkaXJ0byA9IHJlZGlydG87DQogIGVsc2UgIC8qIENyZWF0ZSBhIG5l dyBtYXBwaW5nIGFuZCBhZGQgaXQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QgKi8NCiAgICB7DQog ICAgICBtYXBwaW5nID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoZHJpdmVtYXBfbm9kZV90KSk7DQog ICAgICBpZiAoIW1hcHBpbmcpDQogICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9P VVRfT0ZfTUVNT1JZLCAiY2Fubm90IGFsbG9jYXRlIG1hcCBlbnRyeSIpOw0KICAgICAgbWFwcGlu Zy0+bmV3ZHJpdmUgPSBuZXdkcml2ZTsNCiAgICAgIG1hcHBpbmctPnJlZGlydG8gPSByZWRpcnRv Ow0KICAgICAgbWFwcGluZy0+bmV4dCA9IGRyaXZlbWFwOw0KICAgICAgZHJpdmVtYXAgPSBtYXBw aW5nOw0KICAgIH0NCiAgcmV0dXJuIEdSVUJfRVJSX05PTkU7DQp9DQoNCnN0YXRpYyB2b2lkDQpk cml2ZW1hcF9yZW1vdmUgKGdydWJfdWludDhfdCBuZXdkcml2ZSkNCiAgLyogUmVtb3ZlcyB0aGUg bWFwcGluZyBmb3IgbmV3ZHJpdmUgZnJvbSB0aGUgdGFibGUuIElmIHRoZXJlIGlzIG5vIG1hcHBp bmcsDQogICAqIHRoZW4gdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgYSBuby1vcCBvbiB0aGUg bWFwLiAqLw0Kew0KICBkcml2ZW1hcF9ub2RlX3QgKm1hcHBpbmcgPSAwLCAqc2VhcmNoID0gZHJp dmVtYXAsICpwcmV2aW91cyA9IDA7DQogIHdoaWxlIChzZWFyY2gpDQogICAgew0KICAgICAgaWYg KHNlYXJjaC0+bmV3ZHJpdmUgPT0gbmV3ZHJpdmUpDQogICAgICAgIHsNCiAgICAgICAgICBtYXBw aW5nID0gc2VhcmNoOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICBwcmV2aW91 cyA9IHNlYXJjaDsNCiAgICAgIHNlYXJjaCA9IHNlYXJjaC0+bmV4dDsNCiAgICB9DQogIGlmICht YXBwaW5nKSAvKiBGb3VuZCAqLw0KICAgIHsNCiAgICAgIGlmIChwcmV2aW91cykNCiAgICAgICAg cHJldmlvdXMtPm5leHQgPSBtYXBwaW5nLT5uZXh0Ow0KICAgICAgZWxzZSBkcml2ZW1hcCA9IG1h cHBpbmctPm5leHQ7IC8qIEVudHJ5IHdhcyBoZWFkIG9mIGxpc3QgKi8NCiAgICAgIGdydWJfZnJl ZSAobWFwcGluZyk7DQogICAgfQ0KfQ0KDQpzdGF0aWMgZ3J1Yl9lcnJfdCBwYXJzZV9iaW9zZGlz ayAoY29uc3QgY2hhciAqbmFtZSwgZ3J1Yl91aW50OF90ICpkaXNrbnVtKQ0Kew0KICBpZiAoIW5h bWUpIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7DQogIGlmIChuYW1lWzBdID09ICcoJykN CiAgICBuYW1lKys7IC8qIFNraXAgdGhlIGZpcnN0ICggaW4gKGhkMCkgLSBkaXNrX29wZW4gd2Fu dHMganVzdCB0aGUgbmFtZSEgKi8NCiAgZ3J1Yl9kaXNrX3QgZGlzayA9IGdydWJfZGlza19vcGVu IChuYW1lKTsNCiAgaWYgKCFkaXNrKQ0KICAgIHJldHVybiBHUlVCX0VSUl9VTktOT1dOX0RFVklD RTsNCiAgZWxzZQ0KICAgIHsNCiAgICAgIGVudW0gZ3J1Yl9kaXNrX2Rldl9pZCBpZCA9IGRpc2st PmRldi0+aWQ7DQogICAgICBpZiAoZGlza251bSkNCiAgICAgICAgKmRpc2tudW0gPSBkaXNrLT5p ZDsgICAvKiBPbmx5IHZhbGlkLCBvZiBjb3Vyc2UgaWYgaXQncyBhIGJpb3NkaXNrICovDQogICAg ICBncnViX2Rpc2tfY2xvc2UgKGRpc2spOw0KICAgICAgcmV0dXJuIChHUlVCX0RJU0tfREVWSUNF X0JJT1NESVNLX0lEICE9IGlkKSA/DQogICAgICAgICAgR1JVQl9FUlJfQkFEX0RFVklDRSA6IEdS VUJfRVJSX05PTkU7DQogICAgfQ0KfQ0KDQpzdGF0aWMgZ3J1Yl9lcnJfdCByZXZwYXJzZV9iaW9z ZGlzayhjb25zdCBncnViX3VpbnQ4X3QgZG51bSwgY29uc3QgY2hhciAqKm91dHB1dCkNCnsNCiAg Z3J1Yl9lcnJfdCByZXR2YWwgPSBHUlVCX0VSUl9VTktOT1dOX0RFVklDRTsNCiAgYXV0byBpbnQg ZmluZCAoY29uc3QgY2hhciAqbmFtZSk7DQogIGludCBmaW5kIChjb25zdCBjaGFyICpuYW1lKQ0K ICB7DQogICAgZ3J1Yl9kaXNrX3QgZGlzayA9IGdydWJfZGlza19vcGVuIChuYW1lKTsNCiAgICBp ZiAoIWRpc2spDQogICAgICByZXR1cm4gMDsNCiAgICBlbHNlDQogICAgICB7DQogICAgICAgIGlu dCBmb3VuZCA9IDA7DQogICAgICAgIGlmIChkbnVtID09IGRpc2stPmlkICYmIEdSVUJfRElTS19E RVZJQ0VfQklPU0RJU0tfSUQgPT0gZGlzay0+ZGV2LT5pZCkNCiAgICAgICAgICB7DQogICAgICAg ICAgICBmb3VuZCA9IDE7DQogICAgICAgICAgICAqb3V0cHV0ID0gbmFtZTsNCiAgICAgICAgICAg IHJldHZhbCA9IEdSVUJfRVJSX05PTkU7DQogICAgICAgICAgfQ0KICAgICAgICBncnViX2Rpc2tf Y2xvc2UgKGRpc2spOw0KICAgICAgICByZXR1cm4gZm91bmQ7DQogICAgICB9DQogIH0NCg0KICBn cnViX2Rpc2tfZGV2X2l0ZXJhdGUgKCZmaW5kKTsNCiAgcmV0dXJuIHJldHZhbDsNCn0NCg0Kc3Rh dGljIGdydWJfZXJyX3QNCmdydWJfY21kX2RyaXZlbWFwIChzdHJ1Y3QgZ3J1Yl9hcmdfbGlzdCAq c3RhdGUsIGludCBhcmdjLCBjaGFyICoqYXJncykNCnsNCiAgaWYgKHN0YXRlWzBdLnNldCkgLyog U2hvdzogbGlzdCBtYXBwaW5ncyAqLw0KICAgIHsNCiAgICAgIGlmICghZHJpdmVtYXApDQogICAg ICAgIGdydWJfcHJpbnRmICgiTm8gZHJpdmVzIGhhdmUgYmVlbiByZW1hcHBlZCIpOw0KICAgICAg ZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgZ3J1Yl9wcmludGYgKCJTaG93aW5nIG9ubHkgcmVt YXBwZWQgZHJpdmVzLiBEcml2ZXMgdGhhdCBoYXZlIGhhZCAiDQogICAgICAgICAgICAgICAgICAg ICAgICJ0aGVpciBzbG90IGFzc2lnbmVkIHRvIGFub3RoZXIgb25lIGFuZCBoYXZlIG5vdCBiZWVu ICINCiAgICAgICAgICAgICAgICAgICAgICAgInRoZW1zZWx2ZXMgcmVtYXBwZWQgd2lsbCBiZWNv bWUgaW5hY2Nlc3NpYmxlIHRocm91Z2ggIg0KICAgICAgICAgICAgICAgICAgICAgICAidGhlIEJJ T1Mgcm91dGluZXMgdG8gdGhlIGJvb3RlZCBPUy5cblxuIik7DQogICAgICAgICAgZ3J1Yl9wcmlu dGYgKCJNYXBwZWRcdEdSVUJcbiIpOw0KICAgICAgICAgIGRyaXZlbWFwX25vZGVfdCAqY3Vybm9k ZSA9IGRyaXZlbWFwOw0KICAgICAgICAgIHdoaWxlIChjdXJub2RlKQ0KICAgICAgICAgICAgew0K ICAgICAgICAgICAgICBjb25zdCBjaGFyICpkbmFtZSA9IDA7DQogICAgICAgICAgICAgIGdydWJf ZXJyX3QgZXJyID0gcmV2cGFyc2VfYmlvc2Rpc2sgKGN1cm5vZGUtPnJlZGlydG8sICZkbmFtZSk7 DQogICAgICAgICAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkNCiAgICAgICAgICAgICAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoZXJyLCAiaW52YWxpZCBtYXBwaW5nOiBub24tZXhpc3RlbnQg ZGlzayBvciINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IG1h bmFnZWQgYnkgdGhlIEJJT1MiKTsNCiAgICAgICAgICAgICAgZ3J1Yl9wcmludGYoIjB4JTAyeFx0 JTRzXG4iLCBjdXJub2RlLT5uZXdkcml2ZSwgZG5hbWUpOw0KICAgICAgICAgICAgICBjdXJub2Rl ID0gY3Vybm9kZS0+bmV4dDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgZWxz ZSBpZiAoc3RhdGVbMV0uc2V0KSAvKiBSZXNldDoganVzdCBkZWxldGUgYWxsIG1hcHBpbmdzICov DQogICAgew0KICAgICAgaWYgKGRyaXZlbWFwKQ0KICAgICAgICB7DQogICAgICAgICAgZHJpdmVt YXBfbm9kZV90ICpjdXJub2RlID0gZHJpdmVtYXAsICpwcmV2bm9kZSA9IDA7DQogICAgICAgICAg d2hpbGUgKGN1cm5vZGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHByZXZub2RlID0g Y3Vybm9kZTsNCiAgICAgICAgICAgICAgY3Vybm9kZSA9IGN1cm5vZGUtPm5leHQ7DQogICAgICAg ICAgICAgIGdydWJfZnJlZSAocHJldm5vZGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGRy aXZlbWFwID0gMDsNCiAgICAgICAgfQ0KICAgIH0NCiAgZWxzZQ0KICAgIHsNCiAgICAgIGlmIChh cmdjICE9IDIpDQogICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1F TlQsICJ0d28gYXJndW1lbnRzIHJlcXVpcmVkIik7DQogICAgICBncnViX3VpbnQ4X3QgbWFwZnJv bSA9IDA7DQogICAgICBncnViX2Vycl90IGVyciA9IHBhcnNlX2Jpb3NkaXNrIChhcmdzWzBdLCAm bWFwZnJvbSk7DQogICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpDQogICAgICAgIHJldHVy biBncnViX2Vycm9yIChlcnIsICJpbnZhbGlkIGRpc2sgb3Igbm90IG1hbmFnZWQgYnkgdGhlIEJJ T1MiKTsNCg0KICAgICAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7DQogICAgICB1bnNpZ25l ZCBsb25nIG1hcHRvID0gZ3J1Yl9zdHJ0b3VsIChhcmdzWzFdLCAwLCAwKTsNCiAgICAgIGlmIChn cnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpDQogICAgICAgIHJldHVybiBncnViX2Vycm9yIChn cnViX2Vycm5vLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiQklPUyBkaXNrIG51bWJlciBt dXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1Iik7DQogICAgICBlbHNlIGlmIChtYXB0byA9PSBtYXBm cm9tKSAgLyogUmVzZXQgdG8gZGVmYXVsdCAqLyAgICAgIA0KICAgICAgICB7DQogICAgICAgICAg Z3J1Yl9wcmludGYgKCJSZW1vdmluZyB0aGUgbWFwcGluZyBmb3IgJXMgKCUwMngpIiwgYXJnc1sw XSwgbWFwZnJvbSk7DQogICAgICAgICAgZHJpdmVtYXBfcmVtb3ZlIChtYXBmcm9tKTsNCiAgICAg ICAgfQ0KICAgICAgZWxzZSAgLyogTWFwICovDQogICAgICAgIHsNCiAgICAgICAgICBncnViX3By aW50ZiAoIk1hcHBpbmcgJXMgKCUwMngpIHRvICUwMnhcbiIsIGFyZ3NbMF0sIG1hcGZyb20sIChn cnViX3VpbnQ4X3QpbWFwdG8pOw0KICAgICAgICAgIHJldHVybiBkcml2ZW1hcF9zZXQgKChncnVi X3VpbnQ4X3QpbWFwdG8sIG1hcGZyb20pOw0KICAgICAgICB9DQogICAgfQ0KDQogIHJldHVybiBH UlVCX0VSUl9OT05FOw0KfQ0KDQp0eXBlZGVmIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSkgaW50MTNtYXBfbm9kZQ0Kew0KICBncnViX3VpbnQ4X3QgZGlza251bTsNCiAgZ3J1Yl91aW50 OF90IG1hcHRvOw0KfSBpbnQxM21hcF9ub2RlX3Q7DQoNCiNkZWZpbmUgSU5UMTNIX09GRlNFVCh4 KSAoICgoZ3J1Yl91aW50OF90KikoeCkpIC0gKChncnViX3VpbnQ4X3QqKSZncnViX2RyaXZlbWFw X2ludDEzX2hhbmRsZXJfYmFzZSkgKQ0KI2RlZmluZSBJTlQxM0hfUkVCQVNFKHgpICggKHZvaWQq KSAoKChncnViX3VpbnQ4X3QqKWhhbmRsZXJfYmFzZSkgKyAoeCkpICkNCiNkZWZpbmUgSU5UMTNI X1RPTkVXQUREUih4KSBJTlQxM0hfUkVCQVNFKCBJTlQxM0hfT0ZGU0VUKCB4ICkgKQ0KLyogVGhp cyBjb2RlIHJlc3RzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgR1JVQiBkb2VzIG5vdCBhY3RpdmF0 ZSBhbnkga2luZCBvZg0KICogbWVtb3J5IG1hcHBpbmcsIHNpbmNlIGl0IGFjY2Vzc2VzIHJlYWxt b2RlIHN0cnVjdHVyZXMgYnkgdGhlaXIgYWJzb2x1dGUNCiAqIGFkZHJlc3NlcywgbGlrZSB0aGUg SVZUIGF0IDAgb3IgdGhlIEJEQSBhdCAweDQwMCAqLw0Kc3RhdGljIGdydWJfZXJyX3QgZHJpdmVt YXBfaW5zdGFsbF9pbnQxM19oYW5kbGVyKHZvaWQpDQp7DQogIGdydWJfc2l6ZV90IGVudHJpZXMg PSAwOw0KICBkcml2ZW1hcF9ub2RlX3QgKmN1cmVudHJ5ID0gZHJpdmVtYXA7DQogIHdoaWxlIChj dXJlbnRyeSkgIC8qIENvdW50IGVudHJpZXMgdG8gcHJlcGFyZSBhIGNvbnRpZ3VvdXMgbWFwIGJs b2NrICovDQogICAgew0KICAgICAgZW50cmllcysrOw0KICAgICAgY3VyZW50cnkgPSBjdXJlbnRy eS0+bmV4dDsNCiAgICB9DQogIGlmICgwID09IGVudHJpZXMpDQogICAgcmV0dXJuIEdSVUJfRVJS X05PTkU7ICAvKiBObyBuZWVkIHRvIGluc3RhbGwgdGhlIGludDEzaCBoYW5kbGVyICovDQogIGVs c2UNCiAgICB7DQogICAgICANCiAgICAgIGdydWJfdWludDMyX3QgKml2dHNsb3QgPSAoZ3J1Yl91 aW50MzJfdCopMHgwMDAwMDA0YzsNCiAgICAgIA0KICAgICAgLyogU2F2ZSB0aGUgcG9pbnRlciB0 byB0aGUgb2xkIGludDEzaCBoYW5kbGVyICovICAgIA0KICAgICAgZ3J1Yl9kcml2ZW1hcF9pbnQx M19vbGRoYW5kbGVyID0gKml2dHNsb3Q7DQogICAgICBncnViX3ByaW50ZiAoIk9sZCBpbnQxMyBo YW5kbGVyIGF0ICUwOHhcbiIsIGdydWJfZHJpdmVtYXBfaW50MTNfb2xkaGFuZGxlcik7DQogICAg ICAvKiBSZXNlcnZlIGEgc2VjdGlvbiBvZiBjb252ZW50aW9uYWwgbWVtb3J5IGFzICJCSU9TIG1l bW9yeSIgZm9yIGhhbmRsZXI6DQogICAgICAgKiBCREEgb2Zmc2V0IDB4MTMgY29udGFpbnMgdGhl IHRvcCBvZiBzdWNoIG1lbW9yeSAqLw0KICAgICAgZ3J1Yl91aW50MTZfdCAqYnBhTWVtSW5LYiA9 IChncnViX3VpbnQxNl90KikweDAwMDAwNDEzOw0KICAgICAgZ3J1Yl9wcmludGYgKCJUb3Agb2Yg Y29udmVudGlvbmFsIG1lbW9yeTogJXVcbiIsICpicGFNZW1JbktiKTsNCiAgICAgIGdydWJfc2l6 ZV90IHRvdGFsU2l6ZSA9IGdydWJfZHJpdmVtYXBfaW50MTNfc2l6ZQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsgKGVudHJpZXMgKyAxKSAqIHNpemVvZihpbnQxM21hcF9ub2RlX3QpOw0K ICAgICAgZ3J1Yl9wcmludGYgKCJQYXlsb2FkIGlzICV1IGJ5dGVzIGxvbmcsIHJlc2VydmluZyAl dSBLYlxuIiwgdG90YWxTaXplLCAodG90YWxTaXplID4+IDEwKSArICh0b3RhbFNpemUgJSAxMDI0 KSA9PSAwID8gMCA6IDEpOw0KICAgICAgKmJwYU1lbUluS2IgLT0gKHRvdGFsU2l6ZSA+PiAxMCkg Kw0KICAgICAgICAgICAgICAgICAgICAgKCh0b3RhbFNpemUgJSAxMDI0KSA9PSAwKSA/IDAgOiAx Ow0KICAgICAgLyogSW5zdGFsbCB0aGUgaW50MTNoIGhhbmRsZXIgKGNvcHkgdG8gdGhlIHJlc2Vy dmVkIGFyZWEpICovDQogICAgICBncnViX3VpbnQ4X3QgKmhhbmRsZXJfYmFzZSA9IChncnViX3Vp bnQ4X3QqKSgqYnBhTWVtSW5LYiA8PCAxMCk7DQogICAgICBncnViX3ByaW50ZiAoIkNvcHlpbmcg aW50MTMgaGFuZGxlciB0bzogJXBcbiIsIGhhbmRsZXJfYmFzZSk7DQogICAgICBncnViX21lbWNw eSAoaGFuZGxlcl9iYXNlLCAmZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyX2Jhc2UsIGdydWJf ZHJpdmVtYXBfaW50MTNfc2l6ZSk7DQogICAgICAvKiBDb3B5IHRoZSBtYXBwaW5ncyB0byB0aGUg cmVzZXJ2ZWQgYXJlYSAqLw0KICAgICAgY3VyZW50cnkgPSBkcml2ZW1hcDsNCiAgICAgIGdydWJf c2l6ZV90IGk7DQogICAgICBpbnQxM21hcF9ub2RlX3QgKmhhbmRsZXJfbWFwID0gKGludDEzbWFw X25vZGVfdCopIElOVDEzSF9UT05FV0FERFIoJmdydWJfZHJpdmVtYXBfaW50MTNfbWFwc3RhcnQp Ow0KICAgICAgZ3J1Yl9wcmludGYgKCJUYXJnZXQgbWFwIGF0ICVwLCBjb3B5aW5nIG1hcHBpbmdz Li4uXG4iLCBoYW5kbGVyX21hcCk7DQogICAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllcyAmJiBj dXJlbnRyeTsgaSsrLCBjdXJlbnRyeSA9IGN1cmVudHJ5LT5uZXh0KQ0KICAgICAgICB7DQogICAg ICAgICAgaGFuZGxlcl9tYXBbaV0uZGlza251bSA9IGN1cmVudHJ5LT5uZXdkcml2ZTsNCiAgICAg ICAgICBoYW5kbGVyX21hcFtpXS5tYXB0byA9IGN1cmVudHJ5LT5yZWRpcnRvOw0KICAgICAgICAg IGdydWJfcHJpbnRmICgiXHQjJWQ6IDB4JTAyeCA8LSAweCUwMnhcbiIsIGksIGhhbmRsZXJfbWFw W2ldLmRpc2tudW0sIGhhbmRsZXJfbWFwW2ldLm1hcHRvKTsNCiAgICAgICAgfQ0KICAgICAgLyog U2lnbmFsIGVuZC1vZi1tYXAgKi8NCiAgICAgIGhhbmRsZXJfbWFwW2ldLmRpc2tudW0gPSAwOw0K ICAgICAgaGFuZGxlcl9tYXBbaV0ubWFwdG8gPSAwOw0KICAgICAgZ3J1Yl9wcmludGYgKCJcdCMl ZDogMHglMDJ4IDwtIDB4JTAyeCAoZW5kKVxuIiwgaSwgaGFuZGxlcl9tYXBbaV0uZGlza251bSwg aGFuZGxlcl9tYXBbaV0ubWFwdG8pOw0KICAgICAgLyogSW5zdGFsbCB0aGUgaW50MTNoIGhhbmRs ZXIgKHNldCB0aGUgSVZUIGVudHJ5IGZvciBpdCkgKi8NCiAgICAgIGdydWJfdWludDMyX3QgaXZ0 ZW50cnkgPSAoKGdydWJfdWludDMyX3QpaGFuZGxlcl9iYXNlKSA8PCAxMjsgLyogU2VnbWVudCBh ZGRyZXNzICovDQogICAgICBpdnRlbnRyeSB8PSAoZ3J1Yl91aW50MTZfdCkgSU5UMTNIX09GRlNF VChncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXIpOw0KICAgICAgZ3J1Yl9wcmludGYgKCJOZXcg aW50MTMgaGFuZGxlciBJVlQgcG9pbnRlcjogJTA4eFxuIiwgaXZ0ZW50cnkpOw0KICAgICAgKml2 dHNsb3QgPSBpdnRlbnRyeTsNCiAgICAgIA0KICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7DQog ICAgfQ0KfQ0KI3VuZGVmIElOVDEzSF9UT05FV0FERFINCiN1bmRlZiBJTlQxM0hfUkVCQVNFDQoj dW5kZWYgSU5UMTNIX09GRlNFVA0KDQpHUlVCX01PRF9JTklUKGRyaXZlbWFwKQ0Kew0KICAodm9p ZCltb2Q7CQkJLyogVG8gc3RvcCB3YXJuaW5nLiAqLw0KICBncnViX3JlZ2lzdGVyX2NvbW1hbmQg KCJkcml2ZW1hcCIsIGdydWJfY21kX2RyaXZlbWFwLCBHUlVCX0NPTU1BTkRfRkxBR19CT1RILA0K CQkJICJkcml2ZW1hcCAtcyB8IC1yIHwgKGhkWCkgbmV3ZHJpdmVudW0iLCAiTWFuYWdlIHRoZSBC SU9TIGRyaXZlIG1hcHBpbmdzIiwgb3B0aW9ucyk7DQogIGluc3RoYW5kbGVyX2hvb2sgPSBncnVi X2xvYWRlcl9yZWdpc3Rlcl9wcmVib290ICgmZHJpdmVtYXBfaW5zdGFsbF9pbnQxM19oYW5kbGVy LCAxKTsNCn0NCg0KR1JVQl9NT0RfRklOSShkcml2ZW1hcCkNCnsNCiAgZ3J1Yl9sb2FkZXJfdW5y ZWdpc3Rlcl9wcmVib290IChpbnN0aGFuZGxlcl9ob29rKTsNCiAgaW5zdGhhbmRsZXJfaG9vayA9 IDA7DQogIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kICgiZHJpdmVtYXAiKTsNCn0NCj== --=-NWgkuGW3BE4HgYAEVUz6-- --=-UMRsneJXVapz57SVweME Content-Type: application/pgp-signature; name=signature.asc Content-Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iQIVAwUASEquyaSl+Fbdeo72AQJj2BAAuYZLyzs1nELke5zYt71yURKyD9RpWxmV dvlGcG+0cH0UAtdO9D7YwtUXvAQpYClTYEL4GAYmiLA/hzIMPK6Q9U8FX7uECDv5 m8cSndmqw1HovLtT8a5Cqy138WfT4SIPcPHoHoKjEfPKxvmn0rDKhJn2rLgY4cYu hxZM9v8Qq6ORTRl2IzFfNUug77yL/me5dukig/0sf750C3fZY0ofat+6wsP3/cPp Jo7rBi1ZQyNgj2mqtjB4hCx5ZS0Q4acZ/GYxs6FDJNMEcn/7lWnVuQZs6JJpth0X u9k06oVPk1mNAwyfpDlIoDLWaaD6k2ZoY15Z0e6oUaY/aVzJJd19vtdcOjzG7MOt IVq/YPMeFs86kGxcNAWXju5mHULNYZcoXD6wbiblBtsQgL0dnvg0ZC5dXhl1JdTW tX4v/HGUEzXct8EbNsRGbb8s5DDGyPzZUzpRrSJz8e6+RW9Aktc+zsXKT6zQRmV6 q5ipK8+nsF4208R8Em2ahjp+dLBYc98NkUwhDKgZH4qBwvzy9n8o6H3zyij+yPTq dVtzkdJn2amoV6hepzqXnRj9xoYLiJIUQya2b4nahPIrPDKUAP7kDrIxwlMsZxWS W3/KuVVIdEGTETamlw4n1505U4TrlDeg2I+l9rykx14cxdcIIVqBVMdMCkjL04Iv rwfGWXiQfA8= =6VcD -----END PGP SIGNATURE----- --=-UMRsneJXVapz57SVweME--