X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=Ow8HZf9VAjiYEBrFvNlq+zi1In7wD4rr/IVTGxKBDZs=; b=ksrxr/I+Lo06y9plneqsnCLZlFgyUjzmDRMdb76Lklu9H4dMNI5LQqoKyXJ/pYio5l UMOFSpJg2k6x78ktftSCc5VXJ5+oJOlfrIWQ30wL8gc8TrZDpXogSQuFAm1Sg+DowIDN 8StbT9dMQ5nSO+U6JQb8TqDLGl5B7qvKG9G92dEk/xI+tpfvheJnMOZhkKc/Lb7KQQ4Y K2V2M7JfCLQRD8GfMi5GoT4uTZMPHrnpZTSxbHwvs0AnlXtnjb+2aQ9fNlSeJgt/BvNC 7LqU9C0RaBlmlHI+Ml7rhbmtxRhqH9APwIT/kAGJhVrqj174F+QkEMXsADl4+xA64dzV ktow== MIME-Version: 1.0 X-Received: by 10.107.12.72 with SMTP id w69mr45208044ioi.10.1435048726562; Tue, 23 Jun 2015 01:38:46 -0700 (PDT) In-Reply-To: References: <201506050742 DOT t557ggR8019445 AT envy DOT delorie DOT com> Date: Tue, 23 Jun 2015 11:38:46 +0300 Message-ID: Subject: Re: dxe3gen patch From: "Ozkan Sezer (sezeroz AT gmail DOT com)" To: djgpp AT delorie DOT com Content-Type: multipart/mixed; boundary=001a113f8eaa950e3f05192b51e7 Reply-To: djgpp AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk --001a113f8eaa950e3f05192b51e7 Content-Type: text/plain; charset=UTF-8 On 6/13/15, Ozkan Sezer wrote: > On 6/5/15, Ozkan Sezer wrote: >> On 6/5/15, Ozkan Sezer wrote: >>> On 6/5/15, DJ Delorie wrote: >>>> >>>> I'm not opposed to environment variables, but they're a bit messy in a >>>> unix environment (vs djgpp where we can ship djgpp.env with them ;). >>>> >>> >>> We can provide a sample dxe3gen.sh for it maybe? (more below) >>> >>>> If dxegen is built as a native djgpp program, it should be using the >>>> native djgpp tools (gcc, ld, etc). Yes? >>>> >>> >>> Of course, >>> >>>> If dxegen is cross built, it should note the target prefix (the >>>> i586-pc-djgpp- part) and change the defaults for the tools to have >>>> that prefix (i586-pc-djgpp-gcc, etc). We try to do this with the >>>> -DDXE_LD option. >>>> >>>> If we do both of these correctly, most users shouldn't need to >>>> override the defaults at all, and then it's not as big a deal that >>>> they're controlled with environment variables (or cleaner but harder >>>> command line options). >>>> >>>> I don't think it's right for us to *rely* on environment variables to >>>> provide correct *default* program names, though. >>>> >>> >>> How about the following patch, which extends the -DDXE_?? options >>> at cross-build time and also adds the DXE_?? environment stuff? >>> Or, do you prefer something without any environment vars? >>> >>>> >>>> Also, your mailer is wrapping lines, which corrupted the patch in a >>>> way that really confused me at first: >>>> >>>> /* Prepare the command line for ld */ >>>> new_argv = (const char **)malloc((argc - 1 + NUMBER_OF_LINKER_ARGS >>>> + NUMBER_OF_ADDITIONAL_LOADED_LIBS + 2 + 1) * sizeof(char *)); >>>> + process_env(); >>>> process_args(argc, argv, new_argv); >>>> >>>> Note the column for the wrapped '+' :-) >>> >>> Yeah, gmail is to blame. Attaching the patch too this time. >>> > [...] >> >> Sigh, the attached fixed one does actually compile. >> Comments? >> > > PING? > PING ^2 ? > Index: src/makefile.def > =================================================================== > RCS file: /cvs/djgpp/djgpp/src/makefile.def,v > retrieving revision 1.5 > diff -u -r1.5 makefile.def > --- src/makefile.def 6 Feb 2003 10:40:24 -0000 1.5 > +++ src/makefile.def 5 Jun 2015 08:40:12 -0000 > @@ -26,6 +26,7 @@ > # For building distributed (djgpp) libraries and programs > CROSS_GCC = gcc > CROSS_AR = ar > +CROSS_AS = as > CROSS_LD = ld > CROSS_STRIP = strip > CROSS_BISON = bison > @@ -33,6 +34,7 @@ > # For building native programs (hostbin/*); assumes GNU versions > GCC = gcc -g > AR = ar > +AS = as > LD = ld > STRIP = strip > BISON = bison > @@ -47,6 +49,7 @@ > > CROSS_GCC = i586-pc-msdosdjgpp-gcc -pipe > CROSS_AR = i586-pc-msdosdjgpp-ar > +CROSS_AS = i586-pc-msdosdjgpp-as > CROSS_LD = i586-pc-msdosdjgpp-ld > CROSS_STRIP = i586-pc-msdosdjgpp-strip > CROSS_BISON = bison > @@ -56,6 +59,7 @@ > > GCC = gcc -g -O2 > AR = ar > +AS = as > LD = ld > STRIP = strip > BISON = bison > Index: src/dxe/makefile > =================================================================== > RCS file: /cvs/djgpp/djgpp/src/dxe/makefile,v > retrieving revision 1.8 > diff -u -r1.8 makefile > --- src/dxe/makefile 21 Jul 2013 12:25:58 -0000 1.8 > +++ src/dxe/makefile 5 Jun 2015 08:40:12 -0000 > @@ -32,8 +32,9 @@ > $(LINK) > $(EXE) > > +CROSS_CC = $(word 1,$(CROSS_GCC)) > $(HOSTBIN)/dxegen.exe : dxe3gen.c init1.h init2.h init3.h init4.h > init5.h fini1.h fini2.h fini3.h fini4.h fini5.h > - $(GCC) -DDXE_LD=\"$(CROSS_LD)\" dxe3gen.c -o $@ > + $(GCC) -DDXE_LD=\"$(CROSS_LD)\" -DDXE_CC=\"$(CROSS_CC)\" > -DDXE_AR=\"$(CROSS_AR)\" -DDXE_AS=\"$(CROSS_AS)\" dxe3gen.c -o $@ > > clean :: > @-$(MISC) rm *.o *.h $(HOSTBIN)/dxegen.exe > Index: src/dxe/dxe3gen.c > =================================================================== > RCS file: /cvs/djgpp/djgpp/src/dxe/dxe3gen.c,v > retrieving revision 1.20 > diff -u -r1.20 dxe3gen.c > --- src/dxe/dxe3gen.c 23 May 2015 08:20:05 -0000 1.20 > +++ src/dxe/dxe3gen.c 5 Jun 2015 08:40:12 -0000 > @@ -165,10 +165,23 @@ > #endif /* !DEBUG_SUPPORT_PRINT_RELOCATION_DIRECTIVES */ > > > +/* Cross compile tool names */ > +#ifndef DXE_CC > +#define DXE_CC "gcc" > +#endif > +#ifndef DXE_AS > +#define DXE_AS "as" > +#endif > +#ifndef DXE_AR > +#define DXE_AR "ar" > +#endif > #ifndef DXE_LD > -/* Cross compile ld name/location */ > #define DXE_LD "ld" > #endif > +#ifndef DXE_SC > +#define DXE_SC "dxe.ld" > +#endif > + > #ifdef _POSIX_SOURCE > /* Linux violates POSIX.1 and defines this, but it shouldn't.. */ > #undef _POSIX_SOURCE > @@ -297,6 +310,15 @@ > }; > > > +static char *libdir; > +/* build tools */ > +static char *dxe_cc; /* default: "gcc" */ > +static char *dxe_as; /* default: "as" */ > +static char *dxe_ar; /* default: "ar" */ > +static char *dxe_ld; /* default: "ld" */ > +/* linker script */ > +static char *dxe_sc; /* default: "dxe.ld" */ > + > > /* Desc: replaces backslash with slash in a path > * > @@ -410,6 +432,45 @@ > > > > +/* Desc: process the DXE_?? environment variables > + */ > +static void process_env(void) > +{ > + const char *e; > + > + if ((e = getenv("DXE_CC")) != NULL) > + dxe_cc = strdup(e); > + else dxe_cc = strdup(DXE_CC); > + > + if ((e = getenv("DXE_AS")) != NULL) > + dxe_as = strdup(e); > + else dxe_as = strdup(DXE_AS); > + > + if ((e = getenv("DXE_AR")) != NULL) > + dxe_ar = strdup(e); > + else dxe_ar = strdup(DXE_AR); > + > + if ((e = getenv("DXE_LD")) != NULL) > + dxe_ld = strdup(e); > + else dxe_ld = strdup(DXE_LD); > + > + if ((e = getenv("DXE_SC")) != NULL) > + dxe_sc = strdup(e); > + else dxe_sc = strdup(DXE_SC); > + > + if ((e = getenv("DXE_LD_LIBRARY_PATH")) != NULL) > + libdir = strdup(e); > + else if ((e = getenv("DJDIR")) != NULL) { > + size_t sz = strlen(e) + 5U; > + libdir = malloc(sz); > + strcpy(libdir, e); > + strcat(libdir, "/lib"); > + canonicalize_path(libdir); > + } > + else libdir = NULL; > +} > + > + > /* Desc: process command line args > * > * In : no of arguments, argument list, ptr to store linker args > @@ -419,30 +480,15 @@ > */ > static void process_args(int argc, char *argv[], const char *new_argv[]) > { > - static char libdir[FILENAME_MAX]; > - char *p; > int i, new_argc = NUMBER_OF_LINKER_ARGS; > > - p = getenv("DXE_LD_LIBRARY_PATH"); > - if (p) > - strcpy(libdir, p); > - else > + if (!libdir) > { > - p = getenv("DJDIR"); > - if (p) > - { > - strcpy(libdir, p); > - strcat(libdir, "/lib"); > - canonicalize_path(libdir); > - } > - else > - { > fprintf(stderr, "Error: neither DXE_LD_LIBRARY_PATH nor DJDIR > are set in environment\n"); > exit(1); > - } > } > > - new_argv[0] = DXE_LD; > + new_argv[0] = dxe_ld; > new_argv[1] = "-X"; > new_argv[2] = "-S"; > new_argv[3] = "-r"; > @@ -451,7 +497,7 @@ > new_argv[6] = "-L"; > new_argv[7] = libdir; > new_argv[8] = "-T"; > - new_argv[9] = "dxe.ld"; > + new_argv[9] = dxe_sc; > > if (!strcmp(base_name(argv[0]), "dxegen")) > /* invoked as `dxegen' */ > @@ -736,7 +782,7 @@ > if ((rv = my_spawn(argv)) != 0) > { > if (rv == -1) > - perror(DXE_LD); > + perror("ld"); > exit(rv); > } > > @@ -861,7 +907,7 @@ > if (rv) > { > if (rv == -1) > - perror(DXE_LD); > + perror("ld"); > exit(rv); > } > > @@ -1336,7 +1382,8 @@ > } > > /* Pre-compile the resolver's output. */ > - rv = system("gcc -o "TEMP_S_FILE" -O2 -S "TEMP_BASE".c"); > + sprintf(cmdbuf, "%s -o %s -O2 -S %s.c", dxe_cc, TEMP_S_FILE, > TEMP_BASE); > + rv = system(cmdbuf); > remove(TEMP_BASE".c"); > if (rv != 0) > { > @@ -1420,7 +1467,8 @@ > atexit(exit_cleanup); > > /* Allright, now run the assembler on the resulting file */ > - if ((rv = system("as -o "TEMP_O_FILE" "TEMP_S_FILE)) != 0) > + sprintf(cmdbuf, "%s -o %s %s", dxe_as, TEMP_O_FILE, TEMP_S_FILE); > + if ((rv = system(cmdbuf)) != 0) > { > if (rv == -1) > perror("as"); > @@ -1428,7 +1476,7 @@ > } > > /* Okey-dokey, let's stuff the object file into the archive */ > - sprintf(cmdbuf, "ar crs %s "TEMP_O_FILE, opt.implib); > + sprintf(cmdbuf, "%s crs %s "TEMP_O_FILE, dxe_ar, opt.implib); > if ((rv = system(cmdbuf)) != 0) > { > if (rv == -1) > @@ -1512,6 +1560,7 @@ > progname = argv[0]; > /* Prepare the command line for ld */ > new_argv = (const char **)malloc((argc - 1 + NUMBER_OF_LINKER_ARGS > + NUMBER_OF_ADDITIONAL_LOADED_LIBS + 2 + 1) * sizeof(char *)); > + process_env(); > process_args(argc, argv, new_argv); > > if (opt.showdep || opt.showexp || opt.showunres) > > -- > O.S. > --001a113f8eaa950e3f05192b51e7 Content-Type: text/x-diff; charset=US-ASCII; name="dxe3gen_2b.patch" Content-Disposition: attachment; filename="dxe3gen_2b.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 SW5kZXg6IHNyYy9tYWtlZmlsZS5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9kamdwcC9k amdwcC9zcmMvbWFrZWZpbGUuZGVmLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAt cjEuNSBtYWtlZmlsZS5kZWYKLS0tIHNyYy9tYWtlZmlsZS5kZWYJNiBGZWIgMjAwMyAxMDo0MDoy NCAtMDAwMAkxLjUKKysrIHNyYy9tYWtlZmlsZS5kZWYJNSBKdW4gMjAxNSAwODo0MDoxMiAtMDAw MApAQCAtMjYsNiArMjYsNyBAQAogIyBGb3IgYnVpbGRpbmcgZGlzdHJpYnV0ZWQgKGRqZ3BwKSBs aWJyYXJpZXMgYW5kIHByb2dyYW1zCiBDUk9TU19HQ0MgPSBnY2MKIENST1NTX0FSID0gYXIKK0NS T1NTX0FTID0gYXMKIENST1NTX0xEID0gbGQKIENST1NTX1NUUklQID0gc3RyaXAKIENST1NTX0JJ U09OID0gYmlzb24KQEAgLTMzLDYgKzM0LDcgQEAKICMgRm9yIGJ1aWxkaW5nIG5hdGl2ZSBwcm9n cmFtcyAoaG9zdGJpbi8qKTsgYXNzdW1lcyBHTlUgdmVyc2lvbnMKIEdDQyA9IGdjYyAtZwogQVIg PSBhcgorQVMgPSBhcwogTEQgPSBsZAogU1RSSVAgPSBzdHJpcAogQklTT04gPSBiaXNvbgpAQCAt NDcsNiArNDksNyBAQAogCiBDUk9TU19HQ0MgPSBpNTg2LXBjLW1zZG9zZGpncHAtZ2NjIC1waXBl CiBDUk9TU19BUiA9IGk1ODYtcGMtbXNkb3NkamdwcC1hcgorQ1JPU1NfQVMgPSBpNTg2LXBjLW1z ZG9zZGpncHAtYXMKIENST1NTX0xEID0gaTU4Ni1wYy1tc2Rvc2RqZ3BwLWxkCiBDUk9TU19TVFJJ UCA9IGk1ODYtcGMtbXNkb3NkamdwcC1zdHJpcAogQ1JPU1NfQklTT04gPSBiaXNvbgpAQCAtNTYs NiArNTksNyBAQAogCiBHQ0MgPSBnY2MgLWcgLU8yCiBBUiA9IGFyCitBUyA9IGFzCiBMRCA9IGxk CiBTVFJJUCA9IHN0cmlwCiBCSVNPTiA9IGJpc29uCkluZGV4OiBzcmMvZHhlL21ha2VmaWxlCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvZGpncHAvZGpncHAvc3JjL2R4ZS9tYWtlZmlsZSx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXIxLjggbWFrZWZpbGUKLS0tIHNyYy9keGUv bWFrZWZpbGUJMjEgSnVsIDIwMTMgMTI6MjU6NTggLTAwMDAJMS44CisrKyBzcmMvZHhlL21ha2Vm aWxlCTUgSnVuIDIwMTUgMDg6NDA6MTIgLTAwMDAKQEAgLTMyLDggKzMyLDkgQEAKIAkkKExJTksp CiAJJChFWEUpCiAKK0NST1NTX0NDID0gJCh3b3JkIDEsJChDUk9TU19HQ0MpKQogJChIT1NUQklO KS9keGVnZW4uZXhlIDogZHhlM2dlbi5jIGluaXQxLmggaW5pdDIuaCBpbml0My5oIGluaXQ0Lmgg aW5pdDUuaCBmaW5pMS5oIGZpbmkyLmggZmluaTMuaCBmaW5pNC5oIGZpbmk1LmgKLQkkKEdDQykg LUREWEVfTEQ9XCIkKENST1NTX0xEKVwiIGR4ZTNnZW4uYyAtbyAkQAorCSQoR0NDKSAtRERYRV9M RD1cIiQoQ1JPU1NfTEQpXCIgLUREWEVfQ0M9XCIkKENST1NTX0NDKVwiIC1ERFhFX0FSPVwiJChD Uk9TU19BUilcIiAtRERYRV9BUz1cIiQoQ1JPU1NfQVMpXCIgZHhlM2dlbi5jIC1vICRACiAKIGNs ZWFuIDo6CiAJQC0kKE1JU0MpIHJtICoubyAqLmggJChIT1NUQklOKS9keGVnZW4uZXhlCkluZGV4 OiBzcmMvZHhlL2R4ZTNnZW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2RqZ3BwL2RqZ3Bw L3NyYy9keGUvZHhlM2dlbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXUgLXIx LjIwIGR4ZTNnZW4uYwotLS0gc3JjL2R4ZS9keGUzZ2VuLmMJMjMgTWF5IDIwMTUgMDg6MjA6MDUg LTAwMDAJMS4yMAorKysgc3JjL2R4ZS9keGUzZ2VuLmMJNSBKdW4gMjAxNSAwODo0MDoxMiAtMDAw MApAQCAtMTY1LDEwICsxNjUsMjMgQEAKICNlbmRpZiAgLyogICFERUJVR19TVVBQT1JUX1BSSU5U X1JFTE9DQVRJT05fRElSRUNUSVZFUyAgKi8KIAogCisvKiBDcm9zcyBjb21waWxlIHRvb2wgbmFt ZXMgKi8KKyNpZm5kZWYgRFhFX0NDCisjZGVmaW5lIERYRV9DQyAgImdjYyIKKyNlbmRpZgorI2lm bmRlZiBEWEVfQVMKKyNkZWZpbmUgRFhFX0FTICAiYXMiCisjZW5kaWYKKyNpZm5kZWYgRFhFX0FS CisjZGVmaW5lIERYRV9BUiAgImFyIgorI2VuZGlmCiAjaWZuZGVmIERYRV9MRAotLyogQ3Jvc3Mg Y29tcGlsZSBsZCBuYW1lL2xvY2F0aW9uICovCiAjZGVmaW5lIERYRV9MRCAgImxkIgogI2VuZGlm CisjaWZuZGVmIERYRV9TQworI2RlZmluZSBEWEVfU0MgICJkeGUubGQiCisjZW5kaWYKKwogI2lm ZGVmIF9QT1NJWF9TT1VSQ0UKIC8qIExpbnV4IHZpb2xhdGVzIFBPU0lYLjEgYW5kIGRlZmluZXMg dGhpcywgYnV0IGl0IHNob3VsZG4ndC4uICovCiAjdW5kZWYgX1BPU0lYX1NPVVJDRQpAQCAtMjk3 LDYgKzMxMCwxNSBAQAogfTsKIAogCitzdGF0aWMgY2hhciAqbGliZGlyOworLyogYnVpbGQgdG9v bHMgKi8KK3N0YXRpYyBjaGFyICpkeGVfY2M7IC8qIGRlZmF1bHQ6ICJnY2MiICovCitzdGF0aWMg Y2hhciAqZHhlX2FzOyAvKiBkZWZhdWx0OiAiYXMiICovCitzdGF0aWMgY2hhciAqZHhlX2FyOyAv KiBkZWZhdWx0OiAiYXIiICovCitzdGF0aWMgY2hhciAqZHhlX2xkOyAvKiBkZWZhdWx0OiAibGQi ICovCisvKiBsaW5rZXIgc2NyaXB0ICovCitzdGF0aWMgY2hhciAqZHhlX3NjOyAvKiBkZWZhdWx0 OiAiZHhlLmxkIiAqLworCiAKIC8qIERlc2M6IHJlcGxhY2VzIGJhY2tzbGFzaCB3aXRoIHNsYXNo IGluIGEgcGF0aAogICoKQEAgLTQxMCw2ICs0MzIsNDUgQEAKIAogCiAKKy8qIERlc2M6IHByb2Nl c3MgdGhlIERYRV8/PyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAqLworc3RhdGljIHZvaWQgcHJv Y2Vzc19lbnYodm9pZCkKK3sKKyAgY29uc3QgY2hhciAqZTsKKworICBpZiAoKGUgPSBnZXRlbnYo IkRYRV9DQyIpKSAhPSBOVUxMKQorICAgICAgIGR4ZV9jYyA9IHN0cmR1cChlKTsKKyAgZWxzZSBk eGVfY2MgPSBzdHJkdXAoRFhFX0NDKTsKKworICBpZiAoKGUgPSBnZXRlbnYoIkRYRV9BUyIpKSAh PSBOVUxMKQorICAgICAgIGR4ZV9hcyA9IHN0cmR1cChlKTsKKyAgZWxzZSBkeGVfYXMgPSBzdHJk dXAoRFhFX0FTKTsKKworICBpZiAoKGUgPSBnZXRlbnYoIkRYRV9BUiIpKSAhPSBOVUxMKQorICAg ICAgIGR4ZV9hciA9IHN0cmR1cChlKTsKKyAgZWxzZSBkeGVfYXIgPSBzdHJkdXAoRFhFX0FSKTsK KworICBpZiAoKGUgPSBnZXRlbnYoIkRYRV9MRCIpKSAhPSBOVUxMKQorICAgICAgIGR4ZV9sZCA9 IHN0cmR1cChlKTsKKyAgZWxzZSBkeGVfbGQgPSBzdHJkdXAoRFhFX0xEKTsKKworICBpZiAoKGUg PSBnZXRlbnYoIkRYRV9TQyIpKSAhPSBOVUxMKQorICAgICAgIGR4ZV9zYyA9IHN0cmR1cChlKTsK KyAgZWxzZSBkeGVfc2MgPSBzdHJkdXAoRFhFX1NDKTsKKworICBpZiAoKGUgPSBnZXRlbnYoIkRY RV9MRF9MSUJSQVJZX1BBVEgiKSkgIT0gTlVMTCkKKyAgICAgICBsaWJkaXIgPSBzdHJkdXAoZSk7 CisgIGVsc2UgaWYgKChlID0gZ2V0ZW52KCJESkRJUiIpKSAhPSBOVUxMKSB7CisgICAgICAgc2l6 ZV90IHN6ID0gc3RybGVuKGUpICsgNVU7CisgICAgICAgbGliZGlyID0gbWFsbG9jKHN6KTsKKyAg ICAgICBzdHJjcHkobGliZGlyLCBlKTsKKyAgICAgICBzdHJjYXQobGliZGlyLCAiL2xpYiIpOwor ICAgICAgIGNhbm9uaWNhbGl6ZV9wYXRoKGxpYmRpcik7CisgIH0KKyAgZWxzZSBsaWJkaXIgPSBO VUxMOworfQorCisKIC8qIERlc2M6IHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3MKICAqCiAgKiBJ biAgOiBubyBvZiBhcmd1bWVudHMsIGFyZ3VtZW50IGxpc3QsIHB0ciB0byBzdG9yZSBsaW5rZXIg YXJncwpAQCAtNDE5LDMwICs0ODAsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgcHJvY2Vzc19hcmdz KGludCBhcmdjLCBjaGFyICphcmd2W10sIGNvbnN0IGNoYXIgKm5ld19hcmd2W10pCiB7Ci0gIHN0 YXRpYyBjaGFyIGxpYmRpcltGSUxFTkFNRV9NQVhdOwotICBjaGFyICpwOwogICBpbnQgaSwgbmV3 X2FyZ2MgPSBOVU1CRVJfT0ZfTElOS0VSX0FSR1M7CiAKLSAgcCA9IGdldGVudigiRFhFX0xEX0xJ QlJBUllfUEFUSCIpOwotICBpZiAocCkKLSAgICBzdHJjcHkobGliZGlyLCBwKTsKLSAgZWxzZQor ICBpZiAoIWxpYmRpcikKICAgewotICAgIHAgPSBnZXRlbnYoIkRKRElSIik7Ci0gICAgaWYgKHAp Ci0gICAgewotICAgICAgc3RyY3B5KGxpYmRpciwgcCk7Ci0gICAgICBzdHJjYXQobGliZGlyLCAi L2xpYiIpOwotICAgICAgY2Fub25pY2FsaXplX3BhdGgobGliZGlyKTsKLSAgICB9Ci0gICAgZWxz ZQotICAgIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IG5laXRoZXIgRFhFX0xEX0xJ QlJBUllfUEFUSCBub3IgREpESVIgYXJlIHNldCBpbiBlbnZpcm9ubWVudFxuIik7CiAgICAgICBl eGl0KDEpOwotICAgIH0KICAgfQogCi0gIG5ld19hcmd2WzBdID0gRFhFX0xEOworICBuZXdfYXJn dlswXSA9IGR4ZV9sZDsKICAgbmV3X2FyZ3ZbMV0gPSAiLVgiOwogICBuZXdfYXJndlsyXSA9ICIt UyI7CiAgIG5ld19hcmd2WzNdID0gIi1yIjsKQEAgLTQ1MSw3ICs0OTcsNyBAQAogICBuZXdfYXJn dls2XSA9ICItTCI7CiAgIG5ld19hcmd2WzddID0gbGliZGlyOwogICBuZXdfYXJndls4XSA9ICIt VCI7Ci0gIG5ld19hcmd2WzldID0gImR4ZS5sZCI7CisgIG5ld19hcmd2WzldID0gZHhlX3NjOwog CiAgIGlmICghc3RyY21wKGJhc2VfbmFtZShhcmd2WzBdKSwgImR4ZWdlbiIpKQogICAgIC8qIGlu dm9rZWQgYXMgYGR4ZWdlbicgKi8KQEAgLTczNiw3ICs3ODIsNyBAQAogICBpZiAoKHJ2ID0gbXlf c3Bhd24oYXJndikpICE9IDApCiAgIHsKICAgICBpZiAocnYgPT0gLTEpCi0gICAgICBwZXJyb3Io RFhFX0xEKTsKKyAgICAgIHBlcnJvcigibGQiKTsKICAgICBleGl0KHJ2KTsKICAgfQogCkBAIC04 NjEsNyArOTA3LDcgQEAKICAgICAgIGlmIChydikKICAgICAgIHsKICAgICAgICAgaWYgKHJ2ID09 IC0xKQotICAgICAgICAgIHBlcnJvcihEWEVfTEQpOworICAgICAgICAgIHBlcnJvcigibGQiKTsK ICAgICAgICAgZXhpdChydik7CiAgICAgICB9CiAKQEAgLTEzMzYsNyArMTM4Miw4IEBACiAgICAg fQogCiAgICAgLyogUHJlLWNvbXBpbGUgdGhlIHJlc29sdmVyJ3Mgb3V0cHV0LiAqLwotICAgIHJ2 ID0gc3lzdGVtKCJnY2MgLW8gIlRFTVBfU19GSUxFIiAtTzIgLVMgIlRFTVBfQkFTRSIuYyIpOwor ICAgIHNwcmludGYoY21kYnVmLCAiJXMgLW8gJXMgLU8yIC1TICVzLmMiLCBkeGVfY2MsIFRFTVBf U19GSUxFLCBURU1QX0JBU0UpOworICAgIHJ2ID0gc3lzdGVtKGNtZGJ1Zik7CiAgICAgcmVtb3Zl KFRFTVBfQkFTRSIuYyIpOwogICAgIGlmIChydiAhPSAwKQogICAgIHsKQEAgLTE0MjAsNyArMTQ2 Nyw4IEBACiAgIGF0ZXhpdChleGl0X2NsZWFudXApOwogCiAgIC8qIEFsbHJpZ2h0LCBub3cgcnVu IHRoZSBhc3NlbWJsZXIgb24gdGhlIHJlc3VsdGluZyBmaWxlICovCi0gIGlmICgocnYgPSBzeXN0 ZW0oImFzIC1vICJURU1QX09fRklMRSIgIlRFTVBfU19GSUxFKSkgIT0gMCkKKyAgc3ByaW50Zihj bWRidWYsICIlcyAtbyAlcyAlcyIsIGR4ZV9hcywgVEVNUF9PX0ZJTEUsIFRFTVBfU19GSUxFKTsK KyAgaWYgKChydiA9IHN5c3RlbShjbWRidWYpKSAhPSAwKQogICB7CiAgICAgaWYgKHJ2ID09IC0x KQogICAgICAgcGVycm9yKCJhcyIpOwpAQCAtMTQyOCw3ICsxNDc2LDcgQEAKICAgfQogCiAgIC8q IE9rZXktZG9rZXksIGxldCdzIHN0dWZmIHRoZSBvYmplY3QgZmlsZSBpbnRvIHRoZSBhcmNoaXZl ICovCi0gIHNwcmludGYoY21kYnVmLCAiYXIgY3JzICVzICJURU1QX09fRklMRSwgb3B0LmltcGxp Yik7CisgIHNwcmludGYoY21kYnVmLCAiJXMgY3JzICVzICJURU1QX09fRklMRSwgZHhlX2FyLCBv cHQuaW1wbGliKTsKICAgaWYgKChydiA9IHN5c3RlbShjbWRidWYpKSAhPSAwKQogICB7CiAgICAg aWYgKHJ2ID09IC0xKQpAQCAtMTUxMiw2ICsxNTYwLDcgQEAKICAgcHJvZ25hbWUgPSBhcmd2WzBd OwogICAvKiBQcmVwYXJlIHRoZSBjb21tYW5kIGxpbmUgZm9yIGxkICovCiAgIG5ld19hcmd2ID0g KGNvbnN0IGNoYXIgKiopbWFsbG9jKChhcmdjIC0gMSArIE5VTUJFUl9PRl9MSU5LRVJfQVJHUyAr IE5VTUJFUl9PRl9BRERJVElPTkFMX0xPQURFRF9MSUJTICsgMiArIDEpICogc2l6ZW9mKGNoYXIg KikpOworICBwcm9jZXNzX2VudigpOwogICBwcm9jZXNzX2FyZ3MoYXJnYywgYXJndiwgbmV3X2Fy Z3YpOwogCiAgIGlmIChvcHQuc2hvd2RlcCB8fCBvcHQuc2hvd2V4cCB8fCBvcHQuc2hvd3VucmVz KQo= --001a113f8eaa950e3f05192b51e7--