From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25318 invoked by alias); 15 Dec 2004 15:51:09 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 24837 invoked from network); 15 Dec 2004 15:50:43 -0000 Received: from unknown (HELO emea1-mh.id2.novell.com) (195.33.99.129) by sourceware.org with SMTP; 15 Dec 2004 15:50:43 -0000 Received: from EMEA1-MTA by emea1-mh.id2.novell.com with Novell_GroupWise; Wed, 15 Dec 2004 15:50:42 +0100 Message-Id: Date: Wed, 15 Dec 2004 15:51:00 -0000 From: "Jan Beulich" To: Cc: Subject: Re: stripping symbols needed for relocations Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__Part2404A890.1__=" X-SW-Source: 2004-12/txt/msg00168.txt.bz2 This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__Part2404A890.1__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 8613 >> The --strip-all case is out of question, but my concern is primarily >> with the combination of --strip-symbol/--strip-symbols and -w, but to >> some degree also with the plain use of --strip-symbol/--strip-symbols: >> When trying to cut down the number of symbols in the linux kernel >> (subject to kallsyms lookup) I'm trying to eliminate all non-text >> symbols. Finding them is not a problem, but filtering out those used in >> relocations is, which is why I'd want objcopy to do this for me. Since >> I'm of the general opinion that --strip-symbol for symbols used in >> relocations for non-discarded sections (which I would hope already don't >> get the BSF_KEEP flag set) will result in a broken output file, I'd like >> to make objcopy smart enough to deal with that situation (possibly >> through a new option --keep-needed or --force-strip-needed, depending on >> what the desirable default would be and whether keeping the current >> behavior is a requirement). > >OK - I see your point. My original thinking was that if the user had >specified --strip-symbol=foo on the objcopy command line then that meant >that they definitely wanted "foo" stripped out, even if it was used in a >reloc, and that they knew what they were doing. > >Given that we are dealing with the binutils here, where you are allowed >to shoot yourself in the foot if you do not know what you are doing, I >think that this behaviour of the --strip-symbol switch should be >retained. I would have no objections however to a patch which added >another switch, say --strip-unused-symbol=<>, or indeed the >--keep-needed switch you suggested, in order to provide a safer >environment for stripping symbols. So I chose the more fine-grained method with --strip-unneeded-symbol[s]. Built and tested on i686-pc-linux-gnu. Jan binutils/ 2004-12-15 Jan Beulich * doc/binutils.texi: Document --strip-unneeded-symbol and --strip-unneeded-symbols. * objcopy.c (strip_unneeded_list): New. (enum command_line_switch): Add OPTION_STRIP_UNNEEDED_SYMBOL and OPTION_STRIP_UNNEEDED_SYMBOLS. (copy_options): Add --strip-unneeded-symbol and --strip-unneeded-symbols. (copy_usage): Likewise. (filter_symbols): Suppress copying of symbol if in strip_unneeded_list and the symbol is not needed. (copy_main): Handle OPTION_STRIP_UNNEEDED_SYMBOL and OPTION_STRIP_UNNEEDED_SYMBOLS. --- /home/jbeulich/src/binutils/mainline/2004-12-03.13.35/binutils/doc/binutils.texi 2004-11-18 15:05:13.000000000 +0100 +++ 2004-12-03.13.35/binutils/doc/binutils.texi 2004-12-15 16:35:20.514605416 +0100 @@ -947,6 +947,7 @@ objcopy [@option{-F} @var{bfdname}|@opti [@option{-g}|@option{--strip-debug}] [@option{-K} @var{symbolname}|@option{--keep-symbol=}@var{symbolname}] [@option{-N} @var{symbolname}|@option{--strip-symbol=}@var{symbolname}] + [@option{--strip-unneeded-symbol=}@var{symbolname}] [@option{-G} @var{symbolname}|@option{--keep-global-symbol=}@var{symbolname}] [@option{-L} @var{symbolname}|@option{--localize-symbol=}@var{symbolname}] [@option{-W} @var{symbolname}|@option{--weaken-symbol=}@var{symbolname}] @@ -978,6 +979,7 @@ objcopy [@option{-F} @var{bfdname}|@opti [@option{--weaken}] [@option{--keep-symbols=}@var{filename}] [@option{--strip-symbols=}@var{filename}] + [@option{--strip-unneeded-symbols=}@var{filename}] [@option{--keep-global-symbols=}@var{filename}] [@option{--localize-symbols=}@var{filename}] [@option{--weaken-symbols=}@var{filename}] @@ -1106,6 +1108,10 @@ be given more than once. Do not copy symbol @var{symbolname} from the source file. This option may be given more than once. +@item --strip-unneeded-symbol=@var{symbolname} +Do not copy symbol @var{symbolname} from the source file unless it is needed +by a relocation. This option may be given more than once. + @item -G @var{symbolname} @itemx --keep-global-symbol=@var{symbolname} Keep only symbol @var{symbolname} global. Make all other symbols local @@ -1347,6 +1353,12 @@ Apply @option{--strip-symbol} option to name per line. Line comments may be introduced by the hash character. This option may be given more than once. +@item --strip-unneeded-symbols=@var{filename} +Apply @option{--strip-unneeded-symbol} option to each symbol listed in +the file @var{filename}. @var{filename} is simply a flat file, with one +symbol name per line. Line comments may be introduced by the hash +character. This option may be given more than once. + @item --keep-global-symbols=@var{filename} Apply @option{--keep-global-symbol} option to each symbol listed in the file @var{filename}. @var{filename} is simply a flat file, with one --- /home/jbeulich/src/binutils/mainline/2004-12-03.13.35/binutils/objcopy.c 2004-11-02 17:16:02.000000000 +0100 +++ 2004-12-03.13.35/binutils/objcopy.c 2004-12-15 16:26:32.097936960 +0100 @@ -192,6 +192,7 @@ static bfd_boolean wildcard = FALSE; /* List of symbols to strip, keep, localize, keep-global, weaken, or redefine. */ static struct symlist *strip_specific_list = NULL; +static struct symlist *strip_unneeded_list = NULL; static struct symlist *keep_specific_list = NULL; static struct symlist *localize_specific_list = NULL; static struct symlist *keepglobal_specific_list = NULL; @@ -231,6 +232,8 @@ enum command_line_switch OPTION_SREC_LEN, OPTION_SREC_FORCES3, OPTION_STRIP_SYMBOLS, + OPTION_STRIP_UNNEEDED_SYMBOL, + OPTION_STRIP_UNNEEDED_SYMBOLS, OPTION_KEEP_SYMBOLS, OPTION_LOCALIZE_SYMBOLS, OPTION_KEEPGLOBAL_SYMBOLS, @@ -340,6 +343,8 @@ static struct option copy_options[] = {"strip-all", no_argument, 0, 'S'}, {"strip-debug", no_argument, 0, 'g'}, {"strip-unneeded", no_argument, 0, OPTION_STRIP_UNNEEDED}, + {"strip-unneeded-symbol", required_argument, 0, OPTION_STRIP_UNNEEDED_SYMBOL}, + {"strip-unneeded-symbols", required_argument, 0, OPTION_STRIP_UNNEEDED_SYMBOLS}, {"strip-symbol", required_argument, 0, 'N'}, {"strip-symbols", required_argument, 0, OPTION_STRIP_SYMBOLS}, {"target", required_argument, 0, 'F'}, @@ -405,6 +410,9 @@ copy_usage (FILE *stream, int exit_statu -g --strip-debug Remove all debugging symbols & sections\n\ --strip-unneeded Remove all symbols not needed by relocations\n\ -N --strip-symbol Do not copy symbol \n\ + --strip-unneeded-symbol \n\ + Do not copy symbol unless needed by\n\ + relocations\n\ --only-keep-debug Strip everything but the debug information\n\ -K --keep-symbol Only copy symbol \n\ -L --localize-symbol Force symbol to be marked as a local\n\ @@ -443,6 +451,9 @@ copy_usage (FILE *stream, int exit_statu --srec-len Restrict the length of generated Srecords\n\ --srec-forceS3 Restrict the type of generated Srecords to S3\n\ --strip-symbols -N for all symbols listed in \n\ + --strip-unneeded-symbols \n\ + --strip-unneeded-symbol for all symbols listed\n\ + in \n\ --keep-symbols -K for all symbols listed in \n\ --localize-symbols -L for all symbols listed in \n\ --keep-global-symbols -G for all symbols listed in \n\ @@ -903,6 +914,10 @@ filter_symbols (bfd *abfd, bfd *obfd, as if (keep && is_specified_symbol (name, strip_specific_list)) keep = 0; + if (keep + && !(flags & BSF_KEEP) + && is_specified_symbol (name, strip_unneeded_list)) + keep = 0; if (!keep && is_specified_symbol (name, keep_specific_list)) keep = 1; if (keep && is_strip_section (abfd, bfd_get_section (sym))) @@ -2525,6 +2540,10 @@ copy_main (int argc, char *argv[]) add_specific_symbol (optarg, &strip_specific_list); break; + case OPTION_STRIP_UNNEEDED_SYMBOL: + add_specific_symbol (optarg, &strip_unneeded_list); + break; + case 'L': add_specific_symbol (optarg, &localize_specific_list); break; @@ -2858,6 +2877,10 @@ copy_main (int argc, char *argv[]) add_specific_symbols (optarg, &strip_specific_list); break; + case OPTION_STRIP_UNNEEDED_SYMBOLS: + add_specific_symbols (optarg, &strip_unneeded_list); + break; + case OPTION_KEEP_SYMBOLS: add_specific_symbols (optarg, &keep_specific_list); break; --=__Part2404A890.1__= Content-Type: application/octet-stream; name="binutils-mainline-strip-unneeded-symbols.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="binutils-mainline-strip-unneeded-symbols.patch" Content-length: 9370 U28gSSBjaG9zZSB0aGUgbW9yZSBmaW5lLWdyYWluZWQgbWV0aG9kIHdpdGgg LS1zdHJpcC11bm5lZWRlZC1zeW1ib2xbc10uCgpCdWlsdCBhbmQgdGVzdGVk IG9uIGk2ODYtcGMtbGludXgtZ251LgoKSmFuCgpiaW51dGlscy8KMjAwNC0x Mi0xNSBKYW4gQmV1bGljaCAgPGpiZXVsaWNoQG5vdmVsbC5jb20+CgoJKiBk b2MvYmludXRpbHMudGV4aTogRG9jdW1lbnQgLS1zdHJpcC11bm5lZWRlZC1z eW1ib2wgYW5kCgktLXN0cmlwLXVubmVlZGVkLXN5bWJvbHMuCgkqIG9iamNv cHkuYyAoc3RyaXBfdW5uZWVkZWRfbGlzdCk6IE5ldy4KCShlbnVtIGNvbW1h bmRfbGluZV9zd2l0Y2gpOiBBZGQgT1BUSU9OX1NUUklQX1VOTkVFREVEX1NZ TUJPTAoJYW5kIE9QVElPTl9TVFJJUF9VTk5FRURFRF9TWU1CT0xTLgoJKGNv cHlfb3B0aW9ucyk6IEFkZCAgLS1zdHJpcC11bm5lZWRlZC1zeW1ib2wgYW5k CgktLXN0cmlwLXVubmVlZGVkLXN5bWJvbHMuCgkoY29weV91c2FnZSk6IExp a2V3aXNlLgoJKGZpbHRlcl9zeW1ib2xzKTogU3VwcHJlc3MgY29weWluZyBv ZiBzeW1ib2wgaWYgaW4gc3RyaXBfdW5uZWVkZWRfbGlzdAoJYW5kIHRoZSBz eW1ib2wgaXMgbm90IG5lZWRlZC4KCShjb3B5X21haW4pOiBIYW5kbGUgT1BU SU9OX1NUUklQX1VOTkVFREVEX1NZTUJPTCBhbmQKCU9QVElPTl9TVFJJUF9V Tk5FRURFRF9TWU1CT0xTLgoKLS0tIC9ob21lL2piZXVsaWNoL3NyYy9iaW51 dGlscy9tYWlubGluZS8yMDA0LTEyLTAzLjEzLjM1L2JpbnV0aWxzL2RvYy9i aW51dGlscy50ZXhpCTIwMDQtMTEtMTggMTU6MDU6MTMuMDAwMDAwMDAwICsw MTAwCisrKyAyMDA0LTEyLTAzLjEzLjM1L2JpbnV0aWxzL2RvYy9iaW51dGls cy50ZXhpCTIwMDQtMTItMTUgMTY6MzU6MjAuNTE0NjA1NDE2ICswMTAwCkBA IC05NDcsNiArOTQ3LDcgQEAgb2JqY29weSBbQG9wdGlvbnstRn0gQHZhcnti ZmRuYW1lfXxAb3B0aQogICAgICAgICBbQG9wdGlvbnstZ318QG9wdGlvbnst LXN0cmlwLWRlYnVnfV0KICAgICAgICAgW0BvcHRpb257LUt9IEB2YXJ7c3lt Ym9sbmFtZX18QG9wdGlvbnstLWtlZXAtc3ltYm9sPX1AdmFye3N5bWJvbG5h bWV9XQogICAgICAgICBbQG9wdGlvbnstTn0gQHZhcntzeW1ib2xuYW1lfXxA b3B0aW9uey0tc3RyaXAtc3ltYm9sPX1AdmFye3N5bWJvbG5hbWV9XQorICAg ICAgICBbQG9wdGlvbnstLXN0cmlwLXVubmVlZGVkLXN5bWJvbD19QHZhcntz eW1ib2xuYW1lfV0KICAgICAgICAgW0BvcHRpb257LUd9IEB2YXJ7c3ltYm9s bmFtZX18QG9wdGlvbnstLWtlZXAtZ2xvYmFsLXN5bWJvbD19QHZhcntzeW1i b2xuYW1lfV0KICAgICAgICAgW0BvcHRpb257LUx9IEB2YXJ7c3ltYm9sbmFt ZX18QG9wdGlvbnstLWxvY2FsaXplLXN5bWJvbD19QHZhcntzeW1ib2xuYW1l fV0KICAgICAgICAgW0BvcHRpb257LVd9IEB2YXJ7c3ltYm9sbmFtZX18QG9w dGlvbnstLXdlYWtlbi1zeW1ib2w9fUB2YXJ7c3ltYm9sbmFtZX1dCkBAIC05 NzgsNiArOTc5LDcgQEAgb2JqY29weSBbQG9wdGlvbnstRn0gQHZhcntiZmRu YW1lfXxAb3B0aQogICAgICAgICBbQG9wdGlvbnstLXdlYWtlbn1dCiAgICAg ICAgIFtAb3B0aW9uey0ta2VlcC1zeW1ib2xzPX1AdmFye2ZpbGVuYW1lfV0K ICAgICAgICAgW0BvcHRpb257LS1zdHJpcC1zeW1ib2xzPX1AdmFye2ZpbGVu YW1lfV0KKyAgICAgICAgW0BvcHRpb257LS1zdHJpcC11bm5lZWRlZC1zeW1i b2xzPX1AdmFye2ZpbGVuYW1lfV0KICAgICAgICAgW0BvcHRpb257LS1rZWVw LWdsb2JhbC1zeW1ib2xzPX1AdmFye2ZpbGVuYW1lfV0KICAgICAgICAgW0Bv cHRpb257LS1sb2NhbGl6ZS1zeW1ib2xzPX1AdmFye2ZpbGVuYW1lfV0KICAg ICAgICAgW0BvcHRpb257LS13ZWFrZW4tc3ltYm9scz19QHZhcntmaWxlbmFt ZX1dCkBAIC0xMTA2LDYgKzExMDgsMTAgQEAgYmUgZ2l2ZW4gbW9yZSB0aGFu IG9uY2UuCiBEbyBub3QgY29weSBzeW1ib2wgQHZhcntzeW1ib2xuYW1lfSBm cm9tIHRoZSBzb3VyY2UgZmlsZS4gIFRoaXMgb3B0aW9uCiBtYXkgYmUgZ2l2 ZW4gbW9yZSB0aGFuIG9uY2UuCiAKK0BpdGVtIC0tc3RyaXAtdW5uZWVkZWQt c3ltYm9sPUB2YXJ7c3ltYm9sbmFtZX0KK0RvIG5vdCBjb3B5IHN5bWJvbCBA dmFye3N5bWJvbG5hbWV9IGZyb20gdGhlIHNvdXJjZSBmaWxlIHVubGVzcyBp dCBpcyBuZWVkZWQKK2J5IGEgcmVsb2NhdGlvbi4gIFRoaXMgb3B0aW9uIG1h eSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKwogQGl0ZW0gLUcgQHZhcntz eW1ib2xuYW1lfQogQGl0ZW14IC0ta2VlcC1nbG9iYWwtc3ltYm9sPUB2YXJ7 c3ltYm9sbmFtZX0KIEtlZXAgb25seSBzeW1ib2wgQHZhcntzeW1ib2xuYW1l fSBnbG9iYWwuICBNYWtlIGFsbCBvdGhlciBzeW1ib2xzIGxvY2FsCkBAIC0x MzQ3LDYgKzEzNTMsMTIgQEAgQXBwbHkgQG9wdGlvbnstLXN0cmlwLXN5bWJv bH0gb3B0aW9uIHRvIAogbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMg bWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2ggY2hhcmFjdGVyLgogVGhp cyBvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgogCitAaXRl bSAtLXN0cmlwLXVubmVlZGVkLXN5bWJvbHM9QHZhcntmaWxlbmFtZX0KK0Fw cGx5IEBvcHRpb257LS1zdHJpcC11bm5lZWRlZC1zeW1ib2x9IG9wdGlvbiB0 byBlYWNoIHN5bWJvbCBsaXN0ZWQgaW4KK3RoZSBmaWxlIEB2YXJ7ZmlsZW5h bWV9LiAgQHZhcntmaWxlbmFtZX0gaXMgc2ltcGx5IGEgZmxhdCBmaWxlLCB3 aXRoIG9uZQorc3ltYm9sIG5hbWUgcGVyIGxpbmUuICBMaW5lIGNvbW1lbnRz IG1heSBiZSBpbnRyb2R1Y2VkIGJ5IHRoZSBoYXNoCitjaGFyYWN0ZXIuICBU aGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisKIEBp dGVtIC0ta2VlcC1nbG9iYWwtc3ltYm9scz1AdmFye2ZpbGVuYW1lfQogQXBw bHkgQG9wdGlvbnstLWtlZXAtZ2xvYmFsLXN5bWJvbH0gb3B0aW9uIHRvIGVh Y2ggc3ltYm9sIGxpc3RlZCBpbiB0aGUKIGZpbGUgQHZhcntmaWxlbmFtZX0u ICBAdmFye2ZpbGVuYW1lfSBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGgg b25lCi0tLSAvaG9tZS9qYmV1bGljaC9zcmMvYmludXRpbHMvbWFpbmxpbmUv MjAwNC0xMi0wMy4xMy4zNS9iaW51dGlscy9vYmpjb3B5LmMJMjAwNC0xMS0w MiAxNzoxNjowMi4wMDAwMDAwMDAgKzAxMDAKKysrIDIwMDQtMTItMDMuMTMu MzUvYmludXRpbHMvb2JqY29weS5jCTIwMDQtMTItMTUgMTY6MjY6MzIuMDk3 OTM2OTYwICswMTAwCkBAIC0xOTIsNiArMTkyLDcgQEAgc3RhdGljIGJmZF9i b29sZWFuIHdpbGRjYXJkID0gRkFMU0U7CiAvKiBMaXN0IG9mIHN5bWJvbHMg dG8gc3RyaXAsIGtlZXAsIGxvY2FsaXplLCBrZWVwLWdsb2JhbCwgd2Vha2Vu LAogICAgb3IgcmVkZWZpbmUuICAqLwogc3RhdGljIHN0cnVjdCBzeW1saXN0 ICpzdHJpcF9zcGVjaWZpY19saXN0ID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qg c3ltbGlzdCAqc3RyaXBfdW5uZWVkZWRfbGlzdCA9IE5VTEw7CiBzdGF0aWMg c3RydWN0IHN5bWxpc3QgKmtlZXBfc3BlY2lmaWNfbGlzdCA9IE5VTEw7CiBz dGF0aWMgc3RydWN0IHN5bWxpc3QgKmxvY2FsaXplX3NwZWNpZmljX2xpc3Qg PSBOVUxMOwogc3RhdGljIHN0cnVjdCBzeW1saXN0ICprZWVwZ2xvYmFsX3Nw ZWNpZmljX2xpc3QgPSBOVUxMOwpAQCAtMjMxLDYgKzIzMiw4IEBAIGVudW0g Y29tbWFuZF9saW5lX3N3aXRjaAogICAgIE9QVElPTl9TUkVDX0xFTiwKICAg ICBPUFRJT05fU1JFQ19GT1JDRVMzLAogICAgIE9QVElPTl9TVFJJUF9TWU1C T0xTLAorICAgIE9QVElPTl9TVFJJUF9VTk5FRURFRF9TWU1CT0wsCisgICAg T1BUSU9OX1NUUklQX1VOTkVFREVEX1NZTUJPTFMsCiAgICAgT1BUSU9OX0tF RVBfU1lNQk9MUywKICAgICBPUFRJT05fTE9DQUxJWkVfU1lNQk9MUywKICAg ICBPUFRJT05fS0VFUEdMT0JBTF9TWU1CT0xTLApAQCAtMzQwLDYgKzM0Myw4 IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvcHlfb3B0aW9uc1tdID0KICAg eyJzdHJpcC1hbGwiLCBub19hcmd1bWVudCwgMCwgJ1MnfSwKICAgeyJzdHJp cC1kZWJ1ZyIsIG5vX2FyZ3VtZW50LCAwLCAnZyd9LAogICB7InN0cmlwLXVu bmVlZGVkIiwgbm9fYXJndW1lbnQsIDAsIE9QVElPTl9TVFJJUF9VTk5FRURF RH0sCisgIHsic3RyaXAtdW5uZWVkZWQtc3ltYm9sIiwgcmVxdWlyZWRfYXJn dW1lbnQsIDAsIE9QVElPTl9TVFJJUF9VTk5FRURFRF9TWU1CT0x9LAorICB7 InN0cmlwLXVubmVlZGVkLXN5bWJvbHMiLCByZXF1aXJlZF9hcmd1bWVudCwg MCwgT1BUSU9OX1NUUklQX1VOTkVFREVEX1NZTUJPTFN9LAogICB7InN0cmlw LXN5bWJvbCIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnTid9LAogICB7InN0 cmlwLXN5bWJvbHMiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgT1BUSU9OX1NU UklQX1NZTUJPTFN9LAogICB7InRhcmdldCIsIHJlcXVpcmVkX2FyZ3VtZW50 LCAwLCAnRid9LApAQCAtNDA1LDYgKzQxMCw5IEBAIGNvcHlfdXNhZ2UgKEZJ TEUgKnN0cmVhbSwgaW50IGV4aXRfc3RhdHUKICAgLWcgLS1zdHJpcC1kZWJ1 ZyAgICAgICAgICAgICAgICAgUmVtb3ZlIGFsbCBkZWJ1Z2dpbmcgc3ltYm9s cyAmIHNlY3Rpb25zXG5cCiAgICAgIC0tc3RyaXAtdW5uZWVkZWQgICAgICAg ICAgICAgIFJlbW92ZSBhbGwgc3ltYm9scyBub3QgbmVlZGVkIGJ5IHJlbG9j YXRpb25zXG5cCiAgIC1OIC0tc3RyaXAtc3ltYm9sIDxuYW1lPiAgICAgICAg IERvIG5vdCBjb3B5IHN5bWJvbCA8bmFtZT5cblwKKyAgICAgLS1zdHJpcC11 bm5lZWRlZC1zeW1ib2wgPG5hbWU+XG5cCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERvIG5vdCBjb3B5IHN5bWJvbCA8bmFtZT4gdW5s ZXNzIG5lZWRlZCBieVxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlbG9jYXRpb25zXG5cCiAgICAgIC0tb25seS1rZWVwLWRl YnVnICAgICAgICAgICAgIFN0cmlwIGV2ZXJ5dGhpbmcgYnV0IHRoZSBkZWJ1 ZyBpbmZvcm1hdGlvblxuXAogICAtSyAtLWtlZXAtc3ltYm9sIDxuYW1lPiAg ICAgICAgICBPbmx5IGNvcHkgc3ltYm9sIDxuYW1lPlxuXAogICAtTCAtLWxv Y2FsaXplLXN5bWJvbCA8bmFtZT4gICAgICBGb3JjZSBzeW1ib2wgPG5hbWU+ IHRvIGJlIG1hcmtlZCBhcyBhIGxvY2FsXG5cCkBAIC00NDMsNiArNDUxLDkg QEAgY29weV91c2FnZSAoRklMRSAqc3RyZWFtLCBpbnQgZXhpdF9zdGF0dQog ICAgICAtLXNyZWMtbGVuIDxudW1iZXI+ICAgICAgICAgICBSZXN0cmljdCB0 aGUgbGVuZ3RoIG9mIGdlbmVyYXRlZCBTcmVjb3Jkc1xuXAogICAgICAtLXNy ZWMtZm9yY2VTMyAgICAgICAgICAgICAgICBSZXN0cmljdCB0aGUgdHlwZSBv ZiBnZW5lcmF0ZWQgU3JlY29yZHMgdG8gUzNcblwKICAgICAgLS1zdHJpcC1z eW1ib2xzIDxmaWxlPiAgICAgICAgLU4gZm9yIGFsbCBzeW1ib2xzIGxpc3Rl ZCBpbiA8ZmlsZT5cblwKKyAgICAgLS1zdHJpcC11bm5lZWRlZC1zeW1ib2xz IDxmaWxlPlxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtLXN0cmlwLXVubmVlZGVkLXN5bWJvbCBmb3IgYWxsIHN5bWJvbHMgbGlz dGVkXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW4gPGZpbGU+XG5cCiAgICAgIC0ta2VlcC1zeW1ib2xzIDxmaWxlPiAgICAg ICAgIC1LIGZvciBhbGwgc3ltYm9scyBsaXN0ZWQgaW4gPGZpbGU+XG5cCiAg ICAgIC0tbG9jYWxpemUtc3ltYm9scyA8ZmlsZT4gICAgIC1MIGZvciBhbGwg c3ltYm9scyBsaXN0ZWQgaW4gPGZpbGU+XG5cCiAgICAgIC0ta2VlcC1nbG9i YWwtc3ltYm9scyA8ZmlsZT4gIC1HIGZvciBhbGwgc3ltYm9scyBsaXN0ZWQg aW4gPGZpbGU+XG5cCkBAIC05MDMsNiArOTE0LDEwIEBAIGZpbHRlcl9zeW1i b2xzIChiZmQgKmFiZmQsIGJmZCAqb2JmZCwgYXMKIAogICAgICAgaWYgKGtl ZXAgJiYgaXNfc3BlY2lmaWVkX3N5bWJvbCAobmFtZSwgc3RyaXBfc3BlY2lm aWNfbGlzdCkpCiAJa2VlcCA9IDA7CisgICAgICBpZiAoa2VlcAorCSAgJiYg IShmbGFncyAmIEJTRl9LRUVQKQorCSAgJiYgaXNfc3BlY2lmaWVkX3N5bWJv bCAobmFtZSwgc3RyaXBfdW5uZWVkZWRfbGlzdCkpCisJa2VlcCA9IDA7CiAg ICAgICBpZiAoIWtlZXAgJiYgaXNfc3BlY2lmaWVkX3N5bWJvbCAobmFtZSwg a2VlcF9zcGVjaWZpY19saXN0KSkKIAlrZWVwID0gMTsKICAgICAgIGlmIChr ZWVwICYmIGlzX3N0cmlwX3NlY3Rpb24gKGFiZmQsIGJmZF9nZXRfc2VjdGlv biAoc3ltKSkpCkBAIC0yNTI1LDYgKzI1NDAsMTAgQEAgY29weV9tYWluIChp bnQgYXJnYywgY2hhciAqYXJndltdKQogCSAgYWRkX3NwZWNpZmljX3N5bWJv bCAob3B0YXJnLCAmc3RyaXBfc3BlY2lmaWNfbGlzdCk7CiAJICBicmVhazsK IAorCWNhc2UgT1BUSU9OX1NUUklQX1VOTkVFREVEX1NZTUJPTDoKKwkgIGFk ZF9zcGVjaWZpY19zeW1ib2wgKG9wdGFyZywgJnN0cmlwX3VubmVlZGVkX2xp c3QpOworCSAgYnJlYWs7CisKIAljYXNlICdMJzoKIAkgIGFkZF9zcGVjaWZp Y19zeW1ib2wgKG9wdGFyZywgJmxvY2FsaXplX3NwZWNpZmljX2xpc3QpOwog CSAgYnJlYWs7CkBAIC0yODU4LDYgKzI4NzcsMTAgQEAgY29weV9tYWluIChp bnQgYXJnYywgY2hhciAqYXJndltdKQogCSAgYWRkX3NwZWNpZmljX3N5bWJv bHMgKG9wdGFyZywgJnN0cmlwX3NwZWNpZmljX2xpc3QpOwogCSAgYnJlYWs7 CiAKKwljYXNlIE9QVElPTl9TVFJJUF9VTk5FRURFRF9TWU1CT0xTOgorCSAg YWRkX3NwZWNpZmljX3N5bWJvbHMgKG9wdGFyZywgJnN0cmlwX3VubmVlZGVk X2xpc3QpOworCSAgYnJlYWs7CisKIAljYXNlIE9QVElPTl9LRUVQX1NZTUJP TFM6CiAJICBhZGRfc3BlY2lmaWNfc3ltYm9scyAob3B0YXJnLCAma2VlcF9z cGVjaWZpY19saXN0KTsKIAkgIGJyZWFrOwo= --=__Part2404A890.1__=--