From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16055 invoked by alias); 9 Aug 2012 08:23:47 -0000 Received: (qmail 16045 invoked by uid 22791); 9 Aug 2012 08:23:43 -0000 X-SWARE-Spam-Status: No, hits=0.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKTIP,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP,TW_GP,TW_XL X-Spam-Check-By: sourceware.org Received: from mail-we0-f169.google.com (HELO mail-we0-f169.google.com) (74.125.82.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 09 Aug 2012 08:23:16 +0000 Received: by weys10 with SMTP id s10so137903wey.0 for ; Thu, 09 Aug 2012 01:23:15 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.242.196 with SMTP id i46mr10346676wer.123.1344500595021; Thu, 09 Aug 2012 01:23:15 -0700 (PDT) Received: by 10.216.220.201 with HTTP; Thu, 9 Aug 2012 01:23:14 -0700 (PDT) Date: Thu, 09 Aug 2012 08:23:00 -0000 Message-ID: Subject: AIX 64bit support From: swamy sangamesh To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=e0cb4e43ab815ddaab04c6d0f0de Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-08/txt/msg00282.txt.bz2 --e0cb4e43ab815ddaab04c6d0f0de Content-Type: text/plain; charset=ISO-8859-1 Content-length: 34677 Hi All, Below patches adds the support for 64-bit gdb for ppc64 running on AIX, plus some bug fixes which are caused by the way gcc and xlc generated binary are read. Please consider the patches if its fine. gdb: * configure.tgt (powerpc64-*-aix*): Match powerpc64 running aix. * configure.host (powerpc64-*-aix*): Likewise. * aix-thread.c (ptrace64aix): Added BFD64 for 64 bit support. (ptrace32): Likewise. (pdc_read_regs): Likewise. (pdc_write_regs): Likewise. (aix_thread_resume): Likewise. (fetch_regs_kernel_thread): Likewise. (store_regs_kernel_thread): Likewise. * inf-ptrace.c (inf_ptrace_follow_fork): Added BFD64 for 64 bit support. (inf_ptrace_me): Likewise. (inf_ptrace_post_startup_inferior): Likewise. (inf_ptrace_attach): Likewise. (inf_ptrace_post_attach): Likewise. (inf_ptrace_detach): Likewise. (inf_ptrace_kill): Likewise. (inf_ptrace_resume): Likewise. (inf_ptrace_wait): Likewise. (inf_ptrace_xfer_partial): Likewise. (inf_ptrace_fetch_register): Likewise. (inf_ptrace_store_register): Likewise. * rs6000-nat.c (global): Check for __ld_info64 if compiling 64-bit gdb. (rs6000_ptrace32): Added BFD64 for 64 bit support. (rs6000_ptrace64): Likewise. * xcoffread.c (read_xcoff_symtab): Make fcn_start_addr large enough to hold 64-bit address. Skip reading symbols starting with @FIX. Read correct auxilliary entry if the entries are more than one in cases like xlc generated binary. Read the filename from CSECT entry,if we break at CSECT entry other than first entry we need to get the filename instead of _start_. * config/rs6000/nm-rs6000.h: When analysing core check if ptid is not 1. * symtab.c (find_pc_sect_line): Read correct line table entries, xlc compiler generates extra entry. --- ./gdb/configure.tgt_orig 2012-07-25 15:59:30.934837815 +0530 +++ ./gdb/configure.tgt 2012-07-31 14:16:36.761045509 +0530 @@ -406,7 +406,7 @@ gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppcobsd-tdep.o \ corelow.o solib.o solib-svr4.o" ;; -powerpc-*-aix* | rs6000-*-*) +powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*) # Target: PowerPC running AIX gdb_target_obs="rs6000-tdep.o rs6000-aix-tdep.o xcoffread.o \ ppc-sysv-tdep.o solib.o solib-svr4.o" --- ./gdb/configure.host_orig 2012-07-31 13:27:34.729045416 +0530 +++ ./gdb/configure.host 2012-07-31 13:28:55.717046154 +0530 @@ -123,7 +123,7 @@ gdb_host=nbsd ;; mips64*-*-openbsd*) gdb_host=obsd64 ;; -powerpc-*-aix* | rs6000-*-*) +powerpc-*-aix* | powerpc64-*-aix* | rs6000-*-*) gdb_host=aix ;; powerpc-*-linux*) gdb_host=linux ;; powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu) --- ./gdb/aix-thread.c_orig 2012-08-07 17:11:21.270057686 +0530 +++ ./gdb/aix-thread.c 2012-08-07 17:11:17.998084929 +0530 @@ -239,23 +239,42 @@ } /* Call ptracex (REQ, ID, ADDR, DATA, BUF). Return success. */ +/* For 64-bit gdb Call ptrace64 to trace 32-bit and 64-bit debugee */ static int +#ifdef BFD64 +ptrace64aix (int req, long long id, long long addr, int data, int *buf) +{ + errno = 0; + return ptrace_check (req, id, ptrace64 (req, id, addr, data, buf)); +} +#else ptrace64aix (int req, int id, long long addr, int data, int *buf) { errno = 0; return ptrace_check (req, id, ptracex (req, id, addr, data, buf)); } +#endif /* Call ptrace (REQ, ID, ADDR, DATA, BUF). Return success. */ +/* For 64-bit gdb Call ptrace64 to trace 32-bit and 64-bit debugee */ static int +#ifdef BFD64 +ptrace32 (int req, long long id, long long addr, int data, int *buf) +{ + errno = 0; + return ptrace_check (req, id, + ptrace64 (req, id, addr, data, buf)); +} +#else ptrace32 (int req, int id, int *addr, int data, int *buf) { errno = 0; return ptrace_check (req, id, ptrace (req, id, (int *) addr, data, buf)); } +#endif /* If *PIDP is a composite process/thread id, convert it to a process id. */ @@ -346,14 +365,23 @@ { if (arch64) { + #ifdef BFD64 + if (!ptrace64aix (PTT_READ_GPRS, tid, + (long long) gprs64, 0, NULL)) + #else if (!ptrace64aix (PTT_READ_GPRS, tid, (unsigned long) gprs64, 0, NULL)) + #endif memset (gprs64, 0, sizeof (gprs64)); memcpy (context->gpr, gprs64, sizeof(gprs64)); } else { + #ifdef BFD64 + if (!ptrace32 (PTT_READ_GPRS, tid, (long long) gprs32, 0, NULL)) + #else if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL)) + #endif memset (gprs32, 0, sizeof (gprs32)); memcpy (context->gpr, gprs32, sizeof(gprs32)); } @@ -362,7 +390,11 @@ /* Floating-point registers. */ if (flags & PTHDB_FLAG_FPRS) { + #ifdef BFD64 + if (!ptrace32 (PTT_READ_FPRS, tid, (long long) fprs, 0 , NULL)) + #else if (!ptrace32 (PTT_READ_FPRS, tid, (void *) fprs, 0, NULL)) + #endif memset (fprs, 0, sizeof (fprs)); memcpy (context->fpr, fprs, sizeof(fprs)); } @@ -372,14 +404,23 @@ { if (arch64) { + #ifdef BFD64 + if (!ptrace64aix (PTT_READ_SPRS, tid, + (long long) &sprs64, 0, NULL)) + #else if (!ptrace64aix (PTT_READ_SPRS, tid, (unsigned long) &sprs64, 0, NULL)) + #endif memset (&sprs64, 0, sizeof (sprs64)); memcpy (&context->msr, &sprs64, sizeof(sprs64)); } else { + #ifdef BFD64 + if (!ptrace32 (PTT_READ_SPRS, tid, (long long) &sprs32, 0, NULL)) + #else if (!ptrace32 (PTT_READ_SPRS, tid, (int *) &sprs32, 0, NULL)) + #endif memset (&sprs32, 0, sizeof (sprs32)); memcpy (&context->msr, &sprs32, sizeof(sprs32)); } @@ -411,16 +452,29 @@ if (flags & PTHDB_FLAG_GPRS) { if (arch64) + #ifdef BFD64 + ptrace64aix (PTT_WRITE_GPRS, tid, + (long long) context->gpr, 0, NULL); + #else ptrace64aix (PTT_WRITE_GPRS, tid, (unsigned long) context->gpr, 0, NULL); + #endif else + #ifdef BFD64 + ptrace32 (PTT_WRITE_GPRS, tid, (long long) context->gpr, 0, NULL); + #else ptrace32 (PTT_WRITE_GPRS, tid, (int *) context->gpr, 0, NULL); + #endif } /* Floating-point registers. */ if (flags & PTHDB_FLAG_FPRS) { + #ifdef BFD64 + ptrace32 (PTT_WRITE_FPRS, tid, (long long) context->fpr, 0, NULL); + #else ptrace32 (PTT_WRITE_FPRS, tid, (int *) context->fpr, 0, NULL); + #endif } /* Special-purpose registers. */ @@ -428,12 +482,21 @@ { if (arch64) { + #ifdef BFD64 + ptrace64aix (PTT_WRITE_SPRS, tid, + (long long) &context->msr, 0, NULL); + #else ptrace64aix (PTT_WRITE_SPRS, tid, (unsigned long) &context->msr, 0, NULL); + #endif } else { + #ifdef BFD64 + ptrace32 (PTT_WRITE_SPRS, tid, (long long) &context->msr, 0, NULL); + #else ptrace32 (PTT_WRITE_SPRS, tid, (void *) &context->msr, 0, NULL); + #endif } } return 0; @@ -998,11 +1061,21 @@ tid[1] = 0; if (arch64) + #ifdef BFD64 + ptrace64aix (PTT_CONTINUE, tid[0], (long long) 1, + target_signal_to_host (sig), (void *) tid); + #else ptrace64aix (PTT_CONTINUE, tid[0], 1, target_signal_to_host (sig), (void *) tid); + #endif else + #ifdef BFD64 + ptrace32 (PTT_CONTINUE, tid[0], (long long) 1, + target_signal_to_host (sig), (void *) tid); + #else ptrace32 (PTT_CONTINUE, tid[0], (int *) 1, target_signal_to_host (sig), (void *) tid); + #endif } } @@ -1231,14 +1304,24 @@ { if (arch64) { + #ifdef BFD64 + if (!ptrace64aix (PTT_READ_GPRS, tid, + (long long) gprs64, 0, NULL)) + #else if (!ptrace64aix (PTT_READ_GPRS, tid, (unsigned long) gprs64, 0, NULL)) + #endif memset (gprs64, 0, sizeof (gprs64)); supply_gprs64 (regcache, gprs64); } else { + #ifdef BFD64 + if (!ptrace32 (PTT_READ_GPRS, tid, + (long long) gprs32, 0, NULL)) + #else if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL)) + #endif memset (gprs32, 0, sizeof (gprs32)); for (i = 0; i < ppc_num_gprs; i++) supply_reg32 (regcache, tdep->ppc_gp0_regnum + i, gprs32[i]); @@ -1252,7 +1335,12 @@ || (regno >= tdep->ppc_fp0_regnum && regno < tdep->ppc_fp0_regnum + ppc_num_fprs))) { + #ifdef BFD64 + if (!ptrace32 (PTT_READ_FPRS, tid, + (long long) fprs, 0, NULL)) + #else if (!ptrace32 (PTT_READ_FPRS, tid, (void *) fprs, 0, NULL)) + #endif memset (fprs, 0, sizeof (fprs)); supply_fprs (regcache, fprs); } @@ -1263,8 +1351,13 @@ { if (arch64) { + #ifdef BFD64 + if (!ptrace64aix (PTT_READ_SPRS, tid, + (long long ) &sprs64, 0, NULL)) + #else if (!ptrace64aix (PTT_READ_SPRS, tid, (unsigned long) &sprs64, 0, NULL)) + #endif memset (&sprs64, 0, sizeof (sprs64)); supply_sprs64 (regcache, sprs64.pt_iar, sprs64.pt_msr, sprs64.pt_cr, sprs64.pt_lr, sprs64.pt_ctr, @@ -1274,7 +1367,12 @@ { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + #ifdef BFD64 + if (!ptrace32 (PTT_READ_SPRS, tid, (long long ) &sprs32, + 0, NULL)) + #else if (!ptrace32 (PTT_READ_SPRS, tid, (int *) &sprs32, 0, NULL)) + #endif memset (&sprs32, 0, sizeof (sprs32)); supply_sprs32 (regcache, sprs32.pt_iar, sprs32.pt_msr, sprs32.pt_cr, sprs32.pt_lr, sprs32.pt_ctr, sprs32.pt_xer, @@ -1561,16 +1659,32 @@ if (arch64) { /* Pre-fetch: some regs may not be in the cache. */ + #ifdef BFD64 + ptrace64aix (PTT_READ_GPRS, tid, (long long) gprs64, 0, NULL); + #else ptrace64aix (PTT_READ_GPRS, tid, (unsigned long) gprs64, 0, NULL); + #endif fill_gprs64 (regcache, gprs64); + #ifdef BFD64 + ptrace64aix (PTT_WRITE_GPRS, tid, (long long) gprs64, 0, NULL); + #else ptrace64aix (PTT_WRITE_GPRS, tid, (unsigned long) gprs64, 0, NULL); + #endif } else { /* Pre-fetch: some regs may not be in the cache. */ + #ifdef BFD64 + ptrace32 (PTT_READ_GPRS, tid, (long long) gprs32, 0, NULL); + #else ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL); + #endif fill_gprs32 (regcache, gprs32); + #ifdef BFD64 + ptrace32 (PTT_WRITE_GPRS, tid, (long long) gprs32, 0, NULL); + #else ptrace32 (PTT_WRITE_GPRS, tid, gprs32, 0, NULL); + #endif } } @@ -1582,9 +1696,17 @@ && regno < tdep->ppc_fp0_regnum + ppc_num_fprs))) { /* Pre-fetch: some regs may not be in the cache. */ + #ifdef BFD64 + ptrace32 (PTT_READ_FPRS, tid, (long long) fprs, 0, NULL); + #else ptrace32 (PTT_READ_FPRS, tid, (void *) fprs, 0, NULL); + #endif fill_fprs (regcache, fprs); + #ifdef BFD64 + ptrace32 (PTT_WRITE_FPRS, tid, (long long) fprs, 0, NULL); + #else ptrace32 (PTT_WRITE_FPRS, tid, (void *) fprs, 0, NULL); + #endif } /* Special-purpose registers. */ @@ -1594,13 +1716,23 @@ if (arch64) { /* Pre-fetch: some registers won't be in the cache. */ + #ifdef BFD64 + ptrace64aix (PTT_READ_SPRS, tid, + (long long) &sprs64, 0, NULL); + #else ptrace64aix (PTT_READ_SPRS, tid, (unsigned long) &sprs64, 0, NULL); + #endif fill_sprs64 (regcache, &sprs64.pt_iar, &sprs64.pt_msr, &sprs64.pt_cr, &sprs64.pt_lr, &sprs64.pt_ctr, &sprs64.pt_xer, &sprs64.pt_fpscr); + #ifdef BFD64 + ptrace64aix (PTT_WRITE_SPRS, tid, + (long long ) &sprs64, 0, NULL); + #else ptrace64aix (PTT_WRITE_SPRS, tid, (unsigned long) &sprs64, 0, NULL); + #endif } else { @@ -1616,7 +1748,12 @@ gdb_assert (sizeof (sprs32.pt_iar) == 4); /* Pre-fetch: some registers won't be in the cache. */ + #ifdef BFD64 + ptrace32 (PTT_READ_SPRS, tid, + (long long) &sprs32, 0, NULL); + #else ptrace32 (PTT_READ_SPRS, tid, (int *) &sprs32, 0, NULL); + #endif fill_sprs32 (regcache, &tmp_iar, &tmp_msr, &tmp_cr, &tmp_lr, &tmp_ctr, &tmp_xer, &tmp_fpscr); @@ -1635,7 +1772,11 @@ regcache_raw_collect (regcache, tdep->ppc_mq_regnum, &sprs32.pt_mq); + #ifdef BFD64 + ptrace32 (PTT_WRITE_SPRS, tid, (long long) &sprs32, 0, NULL); + #else ptrace32 (PTT_WRITE_SPRS, tid, (int *) &sprs32, 0, NULL); + #endif } } } --- ./gdb/inf-ptrace.c_orig 2012-07-25 21:07:04.273078850 +0530 +++ ./gdb/inf-ptrace.c 2012-08-02 00:35:56.425443341 +0530 @@ -49,8 +49,13 @@ pid = ptid_get_pid (inferior_ptid); + #ifdef BFD64 + if (ptrace64 (PT_GET_PROCESS_STATE, (long long) pid, + (long long) &pe, sizeof pe) == -1) + #else if (ptrace (PT_GET_PROCESS_STATE, pid, (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) + #endif perror_with_name (("ptrace")); gdb_assert (pe.pe_report_event == PTRACE_FORK); @@ -74,7 +79,13 @@ it. */ remove_breakpoints (); + #ifdef BFD64 + if (ptrace64 (PT_DETACH, (long long) pid, + (long long) 1, 0) == -1) + #else if (ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, 0) == -1) + #endif + perror_with_name (("ptrace")); /* Switch inferior_ptid out of the parent's way. */ @@ -90,7 +101,12 @@ /* Breakpoints have already been detached from the child by infrun.c. */ + #ifdef BFD64 + if (ptrace64 (PT_DETACH, (long long) fpid, + (long long) 1, 0) == -1) + #else if (ptrace (PT_DETACH, fpid, (PTRACE_TYPE_ARG3)1, 0) == -1) + #endif perror_with_name (("ptrace")); } @@ -106,7 +122,11 @@ inf_ptrace_me (void) { /* "Trace me, Dr. Memory!" */ + #ifdef BFD64 + ptrace64 (PT_TRACE_ME, (long long) 0, (long long) 0, 0, 0); + #else ptrace (PT_TRACE_ME, 0, (PTRACE_TYPE_ARG3)0, 0); + #endif } /* Start a new inferior Unix child process. EXEC_FILE is the file to @@ -159,8 +179,13 @@ /* Set the initial event mask. */ memset (&pe, 0, sizeof pe); pe.pe_set_event |= PTRACE_FORK; + #ifdef BFD64 + if (ptrace64 (PT_SET_EVENT_MASK, (long long) ptid_get_pid (pid), + (long long) &pe, sizeof pe, 0) == -1) + #else if (ptrace (PT_SET_EVENT_MASK, ptid_get_pid (pid), (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) + #endif perror_with_name (("ptrace")); } @@ -229,7 +254,11 @@ #ifdef PT_ATTACH errno = 0; + #ifdef BFD64 + ptrace64 (PT_ATTACH, (long long) pid, (long long) 0, 0, 0); + #else ptrace (PT_ATTACH, pid, (PTRACE_TYPE_ARG3)0, 0); + #endif if (errno != 0) perror_with_name (("ptrace")); #else @@ -259,8 +288,13 @@ /* Set the initial event mask. */ memset (&pe, 0, sizeof pe); pe.pe_set_event |= PTRACE_FORK; + #ifdef BFD64 + if (ptrace64 (PT_SET_EVENT_MASK, (long long) pid, + (long long) &pe, sizeof pe, 0) == -1) + #else if (ptrace (PT_SET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) + #endif perror_with_name (("ptrace")); } @@ -293,7 +327,11 @@ previously attached to the inferior. It *might* work if we started the process ourselves. */ errno = 0; + #ifdef BFD64 + ptrace64 (PT_DETACH, (long long) pid, (long long) 1, sig, 0); + #else ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, sig); + #endif if (errno != 0) perror_with_name (("ptrace")); #else @@ -318,7 +356,11 @@ if (pid == 0) return; + #ifdef BFD64 + ptrace64 (PT_KILL, (long long) pid, (long long) 0, 0, 0); + #else ptrace (PT_KILL, pid, (PTRACE_TYPE_ARG3)0, 0); + #endif waitpid (pid, &status, 0); target_mourn_inferior (); @@ -372,7 +414,12 @@ where it was. If GDB wanted it to start some other way, we have already written a new program counter value to the child. */ errno = 0; + #ifdef BFD64 + ptrace64 (request, (long long) pid, (long long) 1, + target_signal_to_host (signal), 0); + #else ptrace (request, pid, (PTRACE_TYPE_ARG3)1, target_signal_to_host (signal)); + #endif if (errno != 0) perror_with_name (("ptrace")); } @@ -425,8 +472,13 @@ ptrace_state_t pe; pid_t fpid; + #ifdef BFD64 + if (ptrace64 (PT_GET_PROCESS_STATE, (long long) pid, + (long long) &pe, sizeof pe, 0) == -1) + #else if (ptrace (PT_GET_PROCESS_STATE, pid, (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) + #endif perror_with_name (("ptrace")); switch (pe.pe_report_event) @@ -440,8 +492,13 @@ if (fpid == -1) perror_with_name (("waitpid")); + #ifdef BFD64 + if (ptrace64 (PT_GET_PROCESS_STATE, (long long) fpid, + (long long) &pe, sizeof pe, 0) == -1) + #else if (ptrace (PT_GET_PROCESS_STATE, fpid, (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) + #endif perror_with_name (("ptrace")); gdb_assert (pe.pe_report_event == PTRACE_FORK); @@ -495,7 +552,11 @@ piod.piod_len = len; errno = 0; + #ifdef BFD64 + if (ptrace64 (PT_IO, (long long) pid, (long long) &piod, 0, 0) == 0) + #else if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0) + #endif /* Return the actual number of bytes read or written. */ return piod.piod_len; /* If the PT_IO request is somehow not supported, fallback on @@ -536,9 +597,14 @@ || (offset + partial_len < rounded_offset + sizeof (PTRACE_TYPE_RET))) /* Need part of initial word -- fetch it. */ + #ifdef BFD64 + buffer.word = ptrace64 (PT_READ_I, (long long) pid, + (long long) rounded_offset, 0, 0); + #else buffer.word = ptrace (PT_READ_I, pid, (PTRACE_TYPE_ARG3)(uintptr_t) rounded_offset, 0); + #endif /* Copy data to be written over corresponding part of buffer. */ @@ -546,17 +612,28 @@ writebuf, partial_len); errno = 0; + #ifdef BFD64 + ptrace64 (PT_WRITE_D, (long long) pid, + (long long) rounded_offset, buffer.word, 0); + #else ptrace (PT_WRITE_D, pid, (PTRACE_TYPE_ARG3)(uintptr_t)rounded_offset, buffer.word); + #endif if (errno) { /* Using the appropriate one (I or D) is necessary for Gould NP1, at least. */ errno = 0; + #ifdef BFD64 + ptrace64 (PT_WRITE_I, (long long) pid, + (long long) rounded_offset, + buffer.word, 0); + #else ptrace (PT_WRITE_I, pid, (PTRACE_TYPE_ARG3)(uintptr_t)rounded_offset, buffer.word); + #endif if (errno) return 0; } @@ -565,9 +642,15 @@ if (readbuf) { errno = 0; + #ifdef BFD64 + buffer.word = ptrace64 (PT_READ_I, (long long) pid, + (long long) rounded_offset, + 0, 0); + #else buffer.word = ptrace (PT_READ_I, pid, (PTRACE_TYPE_ARG3)(uintptr_t)rounded_offset, 0); + #endif if (errno) return 0; /* Copy appropriate bytes out of the buffer. */ @@ -687,7 +770,11 @@ for (i = 0; i < size / sizeof (PTRACE_TYPE_RET); i++) { errno = 0; + #ifdef BFD64 + buf[i] = ptrace64 (PT_READ_U, (long long) pid, (long long) addr, 0, 0); + #else buf[i] = ptrace (PT_READ_U, pid, (PTRACE_TYPE_ARG3)(uintptr_t)addr, 0); + #endif if (errno != 0) error (_("Couldn't read register %s (#%d): %s."), gdbarch_register_name (gdbarch, regnum), @@ -746,7 +833,11 @@ for (i = 0; i < size / sizeof (PTRACE_TYPE_RET); i++) { errno = 0; + #ifdef BFD64 + ptrace64 (PT_WRITE_U, (long long) pid, (long long) addr, buf[i], 0); + #else ptrace (PT_WRITE_U, pid, (PTRACE_TYPE_ARG3)(uintptr_t)addr, buf[i]); + #endif if (errno != 0) error (_("Couldn't write register %s (#%d): %s."), gdbarch_register_name (gdbarch, regnum), --- ./gdb/rs6000-nat.c_orig 2012-07-25 21:07:40.838080241 +0530 +++ ./gdb/rs6000-nat.c 2012-07-27 11:27:27.560170366 +0530 @@ -66,7 +66,7 @@ /* In 32-bit compilation mode (which is the only mode from which ptrace() works on 4.3), __ld_info32 is #defined as equivalent to ld_info. */ -#ifdef __ld_info32 +#if defined (__ld_info32) || defined (__ld_info64) # define ARCH3264 #endif @@ -181,7 +181,11 @@ static int rs6000_ptrace32 (int req, int id, int *addr, int data, int *buf) { + #ifdef BFD64 + int ret = ptrace64 (req, (long long) id, (long long) addr, data, buf); + #else int ret = ptrace (req, id, (int *)addr, data, buf); + #endif #if 0 printf ("rs6000_ptrace32 (%d, %d, 0x%x, %08x, 0x%x) = 0x%x\n", req, id, (unsigned int)addr, data, (unsigned int)buf, ret); @@ -195,7 +199,11 @@ rs6000_ptrace64 (int req, int id, long long addr, int data, void *buf) { #ifdef ARCH3264 + #ifdef BFD64 + int ret = ptrace64 (req, (long long) id, addr, data, (int *)buf); + #else int ret = ptracex (req, id, addr, data, buf); + #endif #else int ret = 0; #endif --- ./gdb/xcoffread.c_orig 2012-08-07 17:36:42.378057756 +0530 +++ ./gdb/xcoffread.c 2012-08-07 17:36:48.702060320 +0530 @@ -956,7 +956,7 @@ unsigned int max_symnum; int just_started = 1; int depth = 0; - int fcn_start_addr = 0; + file_ptr fcn_start_addr = 0; struct coff_symbol fcn_stab_saved = { 0 }; @@ -1061,7 +1061,7 @@ } /* if symbol name starts with ".$" or "$", ignore it. */ - if (cs->c_name[0] == '$' + if (cs->c_name[0] == '$' || (!strncmp(cs->c_name, "@FIX", 4)) || (cs->c_name[1] == '$' && cs->c_name[0] == '.')) continue; @@ -1081,8 +1081,7 @@ /* Done with all files, everything from here on is globals. */ } - if ((cs->c_sclass == C_EXT || cs->c_sclass == C_HIDEXT) - && cs->c_naux == 1) + if (cs->c_sclass == C_EXT || cs->c_sclass == C_HIDEXT) { /* Dealing with a symbol with a csect entry. */ @@ -1093,8 +1092,16 @@ #define CSECT_SCLAS(PP) (CSECT(PP).x_smclas) /* Convert the auxent to something we can access. */ - bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass, - 0, cs->c_naux, &main_aux); + /* xcoff can have more than 1 auxent */ + if (cs->c_naux > 1) + bfd_coff_swap_aux_in (abfd, + raw_auxptr + ((coff_data (abfd)->local_symesz) * (cs->c_naux - 1)), + cs->c_type, cs->c_sclass, cs->c_naux - 1, cs->c_naux, &main_aux); + else if (cs->c_naux == 1) + bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass, + 0, cs->c_naux, &main_aux); + else + ; switch (CSECT_SMTYP (&main_aux)) { @@ -1123,43 +1130,44 @@ approach does not work! GCC (and I think xlc) seem to put all the code in the unnamed program csect. */ - if (last_csect_name) - { - complete_symtab (filestring, file_start_addr); - cur_src_end_addr = file_end_addr; - end_symtab (file_end_addr, objfile, - SECT_OFF_TEXT (objfile)); - end_stabs (); - start_stabs (); - /* Give all csects for this source file the same - name. */ - start_symtab (filestring, NULL, (CORE_ADDR) 0); - record_debugformat (debugfmt); - } - - /* If this is the very first csect seen, - basically `__start'. */ - if (just_started) - { - first_object_file_end - = cs->c_value + CSECT_LEN (&main_aux); - just_started = 0; - } - - file_start_addr = - cs->c_value + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); - file_end_addr = file_start_addr + CSECT_LEN (&main_aux); - - if (cs->c_name && (cs->c_name[0] == '.' - || cs->c_name[0] == '@')) - { - last_csect_name = cs->c_name; - last_csect_val = cs->c_value; - last_csect_sec = secnum_to_section (cs->c_secnum, - objfile); - } - } + if (just_started) + { + first_object_file_end + = cs->c_value + CSECT_LEN (&main_aux); + just_started = 0; + } + + file_start_addr = + cs->c_value + ANOFFSET (objfile->section_offsets, + SECT_OFF_TEXT (objfile)); + file_end_addr = file_start_addr + CSECT_LEN (&main_aux); + + if (cs->c_name && (cs->c_name[0] == '.' + || cs->c_name[0] == '@')) + { + last_csect_name = cs->c_name; + last_csect_val = cs->c_value; + last_csect_sec = secnum_to_section (cs->c_secnum, + objfile); + } + if (last_csect_name) + { + filestring = pst->filename; + complete_symtab (filestring, file_start_addr); + cur_src_end_addr = file_end_addr; + end_symtab (file_end_addr, objfile, + SECT_OFF_TEXT (objfile)); + end_stabs (); + start_stabs (); + /* Give all csects for this source file the same + name. */ + start_symtab (filestring, (char *)NULL, (CORE_ADDR) 0); + record_debugformat (debugfmt); + } + /* If this is the very first csect seen, + basically `__start'. */ + } + continue; /* All other symbols are put into the minimal symbol --- ./gdb/config/rs6000/nm-rs6000.h_orig 2012-08-07 17:48:46.181058139 +0530 +++ ./gdb/config/rs6000/nm-rs6000.h 2012-08-07 17:47:18.749096013 +0530 @@ -30,7 +30,7 @@ and figure out where the shared libraries have got to. */ #define SOLIB_ADD(a, b, c, d) \ - if (PIDGET (inferior_ptid)) \ + if (PIDGET (inferior_ptid) != 1) \ /* Attach to process. */ \ xcoff_relocate_symtab (PIDGET (inferior_ptid)); \ else \ --- ./gdb/symtab.c_orig 2012-08-07 17:52:15.181060405 +0530 +++ ./gdb/symtab.c 2012-08-07 17:53:04.653058722 +0530 @@ -2072,6 +2072,9 @@ { /* Leave prev pointing to the linetable entry for the last line that started at or before PC. */ + if ((item->pc > pc) && !i) /* for xlc one less entry for line table */ + prev = item; /* point item as prev */ + if (item->pc > pc) break; bfd: * configure (powerpc64-*-aix[5-9].*): Match powerpc64 running aix for core file support * rs6000-core.c: Check for __ld_info64 if compiling 64-bit gdb. Added BFD64 check if we are using old core file format for 32-bit gdb. Set sizeof CORE_COMMONSZ appropriately in case of either new or old core file format. (read_hdr): Added BFD64 check for 64-bit support. (rs6000coff_core_p): Likewise. (rs6000coff_core_file_matches_executable_p): Likewise. (rs6000coff_core_file_failing_command): Likewise. (rs6000coff_core_file_failing_command): Likewise. --- ./bfd/configure_orig 2011-11-11 12:01:31.188995290 +0530 +++ ./bfd/configure 2012-07-25 16:07:39.010735665 +0530 @@ -13973,7 +13973,7 @@ rs6000-*-lynx*) COREFILE=lynx-core.lo ;; - rs6000-*-aix[5-9].* | powerpc-*-aix[5-9].*) + rs6000-*-aix[5-9].* | powerpc-*-aix[5-9].* | powerpc64-*-aix[5-9].*) COREFILE=rs6000-core.lo COREFLAG="$COREFLAG -DAIX_5_CORE -DAIX_CORE_DUMPX_CORE" ;; @@ -14011,6 +14011,7 @@ rs6000-*-*) COREFILE=rs6000-core.lo ;; powerpc-*-aix4*) COREFILE=rs6000-core.lo ;; powerpc-*-aix*) COREFILE=rs6000-core.lo ;; + powerpc64-*-aix) COREFILE=rs6000-core.lo ;; powerpc-*-beos*) ;; powerpc-*-freebsd* | powerpc-*-kfreebsd*-gnu) COREFILE='' ;; --- ./bfd/rs6000-core.c_orig 2011-11-10 19:02:59.093607185 +0530 +++ ./bfd/rs6000-core.c 2012-07-27 12:32:11.960181190 +0530 @@ -94,7 +94,7 @@ /* Union of 32-bit and 64-bit versions of ld_info. */ typedef union { -#ifdef __ld_info32 +#if defined (__ld_info32) || defined (__ld_info64) struct __ld_info32 l32; struct __ld_info64 l64; #else @@ -111,8 +111,10 @@ #else struct core_dump new_dump; /* for simpler coding */ #endif +#ifndef BFD64 /* use old only if gdb is 32-bit */ struct core_dump old; /* old AIX 4.2- core dump, still used on 4.3+ with appropriate SMIT config */ +#endif } CoreHdr; /* Union of old and new vm_info structures. */ @@ -124,14 +126,20 @@ #else struct vm_info new_dump; #endif +#ifndef BFD64 struct vm_info old; +#endif } VmInfo; #endif /* Return whether CoreHdr C is in new or old format. */ #ifdef AIX_CORE_DUMPX_CORE -# define CORE_NEW(c) (!(c).old.c_entries) + #ifndef BFD64 + # define CORE_NEW(c) (!(c).old.c_entries) + #else + # define CORE_NEW(c) (!(c).new_dump.c_entries) + #endif #else # define CORE_NEW(c) 0 #endif @@ -260,8 +268,13 @@ /* Size of the leading portion that old and new core dump structures have in common. */ -#define CORE_COMMONSZ ((int) &((struct core_dump *) 0)->c_entries \ - + sizeof (((struct core_dump *) 0)->c_entries)) +#ifdef AIX_CORE_DUMPX_CORE +#define CORE_COMMONSZ ((long) &((struct core_dumpx *) 0)->c_entries \ + + sizeof (((struct core_dumpx *) 0)->c_entries)) +#else +#define CORE_COMMONSZ ((int) &((struct core_dump *) 0)->c_entries \ + + sizeof (((struct core_dump *) 0)->c_entries) +#endif /* Define prototypes for certain functions, to avoid a compiler warning saying that they are missing. */ @@ -292,8 +305,10 @@ /* Read the trailing portion of the structure. */ if (CORE_NEW (*core)) size = sizeof (core->new_dump); + #ifndef BFD64 else size = sizeof (core->old); + #endif size -= CORE_COMMONSZ; return bfd_bread ((char *) core + CORE_COMMONSZ, size, abfd) == size; } @@ -358,6 +373,7 @@ c_stackend = CNEW_STACKORG (core.new_dump) + c_size; c_lsize = CNEW_LSIZE (core.new_dump); c_loader = CNEW_LOADER (core.new_dump); + #ifndef BFD64 proc64 = CNEW_PROC64 (core.new_dump); } else @@ -368,6 +384,7 @@ c_stackend = COLD_STACKEND; c_lsize = 0x7ffffff; c_loader = (file_ptr) (ptr_to_uint) COLD_LOADER (core.old); + #endif proc64 = 0; } @@ -381,11 +398,13 @@ c_regsize = sizeof (CNEW_MSTSAVE (core.new_dump)); c_regptr = &CNEW_MSTSAVE (core.new_dump); } + #ifndef BFD64 else { c_regsize = sizeof (COLD_MSTSAVE (core.old)); c_regptr = &COLD_MSTSAVE (core.old); } + #endif c_regoff = (char *) c_regptr - (char *) &core; if (bfd_stat (abfd, &statbuf) < 0) @@ -435,7 +454,11 @@ } /* Sanity check on the c_tab field. */ + #ifndef BFD64 if (!CORE_NEW (core) && (c_loader < (file_ptr) sizeof core.old || + #else + if (!CORE_NEW (core) && (c_loader < (file_ptr) sizeof core.new_dump || + #endif c_loader >= statbuf.st_size || c_loader >= c_stack)) { @@ -449,7 +472,11 @@ bfd_get_filename (abfd)); /* Allocate core file header. */ + #ifndef BFD64 size = CORE_NEW (core) ? sizeof (core.new_dump) : sizeof (core.old); + #else + size = sizeof (core.new_dump); + #endif tmpptr = (char *) bfd_zalloc (abfd, (bfd_size_type) size); if (!tmpptr) return NULL; @@ -542,6 +569,7 @@ c_vmregions = core.new_dump.c_vmregions; c_vmm = (file_ptr) core.new_dump.c_vmm; } + #ifndef BFD64 else { c_datasize = core.old.c_datasize; @@ -549,6 +577,7 @@ c_vmregions = core.old.c_vmregions; c_vmm = (file_ptr) (ptr_to_uint) core.old.c_vmm; } + #endif /* .data section from executable. */ if (c_datasize) @@ -615,7 +644,11 @@ file_ptr vminfo_offset; bfd_vma vminfo_addr; + #ifndef BFD64 size = CORE_NEW (core) ? sizeof (vminfo.new_dump) : sizeof (vminfo.old); + #else + size = sizeof (vminfo.new_dump); + #endif if (bfd_bread (&vminfo, size, abfd) != size) goto fail; @@ -625,12 +658,14 @@ vminfo_size = vminfo.new_dump.vminfo_size; vminfo_offset = vminfo.new_dump.vminfo_offset; } + #ifndef BFD64 else { vminfo_addr = (bfd_vma) (long) vminfo.old.vminfo_addr; vminfo_size = vminfo.old.vminfo_size; vminfo_offset = vminfo.old.vminfo_offset; } + #endif if (vminfo_offset) if (!make_bfd_asection (abfd, ".vmdata", @@ -670,8 +705,10 @@ if (CORE_NEW (core)) c_loader = CNEW_LOADER (core.new_dump); + #ifndef BFD64 else c_loader = (file_ptr) (ptr_to_uint) COLD_LOADER (core.old); + #endif if (CORE_NEW (core) && CNEW_PROC64 (core.new_dump)) size = (int) ((LdInfo *) 0)->l64.ldinfo_filename; @@ -734,8 +771,12 @@ rs6000coff_core_file_failing_command (bfd *abfd) { CoreHdr *core = core_hdr (abfd); + #ifndef BFD64 char *com = CORE_NEW (*core) ? CNEW_COMM (core->new_dump) : COLD_COMM (core->old); + #else + char *com = CNEW_COMM (core->new_dump); + #endif if (*com) return com; @@ -747,7 +788,11 @@ rs6000coff_core_file_failing_signal (bfd *abfd) { CoreHdr *core = core_hdr (abfd); + #ifndef BFD64 return CORE_NEW (*core) ? core->new_dump.c_signo : core->old.c_signo; + #else + return core->new_dump.c_signo; + #endif } #endif /* AIX_CORE */ -- Thanks & Regards, Sangamesh --e0cb4e43ab815ddaab04c6d0f0de Content-Type: application/octet-stream; name=gdb_ChangeLog Content-Disposition: attachment; filename=gdb_ChangeLog Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5nkw0k90 Content-length: 2379 ICAgICAgICAqIGNvbmZpZ3VyZS50Z3QgKHBvd2VycGM2NC0qLWFpeCopOiBN YXRjaCBwb3dlcnBjNjQgcnVubmluZyBhaXguCgogICAgICAgICogY29uZmln dXJlLmhvc3QgKHBvd2VycGM2NC0qLWFpeCopOiBMaWtld2lzZS4KCiAgICAg ICAgKiBhaXgtdGhyZWFkLmMgKHB0cmFjZTY0YWl4KTogQWRkZWQgQkZENjQg Zm9yIDY0IGJpdCBzdXBwb3J0LgogICAgICAgIChwdHJhY2UzMik6IExpa2V3 aXNlLgogICAgICAgIChwZGNfcmVhZF9yZWdzKTogTGlrZXdpc2UuCiAgICAg ICAgKHBkY193cml0ZV9yZWdzKTogTGlrZXdpc2UuCiAgICAgICAgKGFpeF90 aHJlYWRfcmVzdW1lKTogTGlrZXdpc2UuCiAgICAgICAgKGZldGNoX3JlZ3Nf a2VybmVsX3RocmVhZCk6IExpa2V3aXNlLgogICAgICAgIChzdG9yZV9yZWdz X2tlcm5lbF90aHJlYWQpOiBMaWtld2lzZS4KCiAgICAgICAgKiBpbmYtcHRy YWNlLmMgKGluZl9wdHJhY2VfZm9sbG93X2ZvcmspOiBBZGRlZCBCRkQ2NCBm b3IgNjQgYml0IHN1cHBvcnQuCiAgICAgICAgKGluZl9wdHJhY2VfbWUpOiBM aWtld2lzZS4KICAgICAgICAoaW5mX3B0cmFjZV9wb3N0X3N0YXJ0dXBfaW5m ZXJpb3IpOiBMaWtld2lzZS4KICAgICAgICAoaW5mX3B0cmFjZV9hdHRhY2gp OiBMaWtld2lzZS4KICAgICAgICAoaW5mX3B0cmFjZV9wb3N0X2F0dGFjaCk6 IExpa2V3aXNlLgogICAgICAgIChpbmZfcHRyYWNlX2RldGFjaCk6IExpa2V3 aXNlLgogICAgICAgIChpbmZfcHRyYWNlX2tpbGwpOiBMaWtld2lzZS4KICAg ICAgICAoaW5mX3B0cmFjZV9yZXN1bWUpOiBMaWtld2lzZS4KICAgICAgICAo aW5mX3B0cmFjZV93YWl0KTogTGlrZXdpc2UuCiAgICAgICAgKGluZl9wdHJh Y2VfeGZlcl9wYXJ0aWFsKTogTGlrZXdpc2UuCiAgICAgICAgKGluZl9wdHJh Y2VfZmV0Y2hfcmVnaXN0ZXIpOiBMaWtld2lzZS4KICAgICAgICAoaW5mX3B0 cmFjZV9zdG9yZV9yZWdpc3Rlcik6IExpa2V3aXNlLgoKICAgICAgICAqIHJz NjAwMC1uYXQuYyAoZ2xvYmFsKTogQ2hlY2sgZm9yIF9fbGRfaW5mbzY0IGlm IGNvbXBpbGluZyA2NC1iaXQgZ2RiLgogICAgICAgIChyczYwMDBfcHRyYWNl MzIpOiBBZGRlZCBCRkQ2NCBmb3IgNjQgYml0IHN1cHBvcnQuCiAgICAgICAg KHJzNjAwMF9wdHJhY2U2NCk6IExpa2V3aXNlLgoKICAgICAgICAqIHhjb2Zm cmVhZC5jIChyZWFkX3hjb2ZmX3N5bXRhYik6IE1ha2UgZmNuX3N0YXJ0X2Fk ZHIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgNjQtYml0IGFkZHJlc3MuCiAgICAg ICAgU2tpcCByZWFkaW5nIHN5bWJvbHMgc3RhcnRpbmcgd2l0aCBARklYLiAK ICAgICAgICBSZWFkIGNvcnJlY3QgYXV4aWxsaWFyeSBlbnRyeSBpZiB0aGUg ZW50cmllcyBhcmUgbW9yZSB0aGFuIG9uZSBpbiBjYXNlcyBsaWtlIHhsYyBn ZW5lcmF0ZWQgYmluYXJ5LgogICAgICAgIFJlYWQgdGhlIGZpbGVuYW1lIGZy b20gQ1NFQ1QgZW50cnksaWYgd2UgYnJlYWsgYXQgQ1NFQ1QgZW50cnkgb3Ro ZXIgdGhhbiBmaXJzdCBlbnRyeSAgd2UgbmVlZCB0byBnZXQKICAgICAgICB0 aGUgZmlsZW5hbWUgaW5zdGVhZCBvZiBfc3RhcnRfLiAKCiAgICAgICAgKiBj b25maWcvcnM2MDAwL25tLXJzNjAwMC5oOiBXaGVuIGFuYWx5c2luZyBjb3Jl IGNoZWNrIGlmIHB0aWQgaXMgbm90IDEuCgogICAgICAgICogc3ltdGFiLmMg KGZpbmRfcGNfc2VjdF9saW5lKTogUmVhZCBjb3JyZWN0IGxpbmUgdGFibGUg ZW50cmllcywgeGxjIGNvbXBpbGVyIGdlbmVyYXRlcyBleHRyYSBlbnRyeS4K --e0cb4e43ab815ddaab04c6d0f0de Content-Type: application/octet-stream; name=64bitsupport_aix_gdb Content-Disposition: attachment; filename=64bitsupport_aix_gdb Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5nkw8al1 Content-length: 34966 LS0tIC4vZ2RiL2NvbmZpZ3VyZS50Z3Rfb3JpZwkyMDEyLTA3LTI1IDE1OjU5 OjMwLjkzNDgzNzgxNSArMDUzMAorKysgLi9nZGIvY29uZmlndXJlLnRndAky MDEyLTA3LTMxIDE0OjE2OjM2Ljc2MTA0NTUwOSArMDUzMApAQCAtNDA2LDcg KzQwNiw3IEBACiAJZ2RiX3RhcmdldF9vYnM9InJzNjAwMC10ZGVwLm8gcHBj LXN5c3YtdGRlcC5vIHBwY29ic2QtdGRlcC5vIFwKIAkJCWNvcmVsb3cubyBz b2xpYi5vIHNvbGliLXN2cjQubyIKIAk7OwotcG93ZXJwYy0qLWFpeCogfCBy czYwMDAtKi0qKQorcG93ZXJwYy0qLWFpeCogfCByczYwMDAtKi0qIHwgcG93 ZXJwYzY0LSotYWl4KikKIAkjIFRhcmdldDogUG93ZXJQQyBydW5uaW5nIEFJ WAogCWdkYl90YXJnZXRfb2JzPSJyczYwMDAtdGRlcC5vIHJzNjAwMC1haXgt dGRlcC5vIHhjb2ZmcmVhZC5vIFwKIAkJCXBwYy1zeXN2LXRkZXAubyBzb2xp Yi5vIHNvbGliLXN2cjQubyIKLS0tIC4vZ2RiL2NvbmZpZ3VyZS5ob3N0X29y aWcJMjAxMi0wNy0zMSAxMzoyNzozNC43MjkwNDU0MTYgKzA1MzAKKysrIC4v Z2RiL2NvbmZpZ3VyZS5ob3N0CTIwMTItMDctMzEgMTM6Mjg6NTUuNzE3MDQ2 MTU0ICswNTMwCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJCWdkYl9ob3N0PW5i c2QgOzsKIG1pcHM2NCotKi1vcGVuYnNkKikJZ2RiX2hvc3Q9b2JzZDY0IDs7 CiAKLXBvd2VycGMtKi1haXgqIHwgcnM2MDAwLSotKikKK3Bvd2VycGMtKi1h aXgqIHwgcG93ZXJwYzY0LSotYWl4KiB8IHJzNjAwMC0qLSopCiAJCQlnZGJf aG9zdD1haXggOzsKIHBvd2VycGMtKi1saW51eCopCWdkYl9ob3N0PWxpbnV4 IDs7CiBwb3dlcnBjLSotbmV0YnNkKiB8IHBvd2VycGMtKi1rbmV0YnNkKi1n bnUpCi0tLSAuL2dkYi9haXgtdGhyZWFkLmNfb3JpZwkyMDEyLTA4LTA3IDE3 OjExOjIxLjI3MDA1NzY4NiArMDUzMAorKysgLi9nZGIvYWl4LXRocmVhZC5j CTIwMTItMDgtMDcgMTc6MTE6MTcuOTk4MDg0OTI5ICswNTMwCkBAIC0yMzks MjMgKzIzOSw0MiBAQAogfQogCiAvKiBDYWxsIHB0cmFjZXggKFJFUSwgSUQs IEFERFIsIERBVEEsIEJVRikuICBSZXR1cm4gc3VjY2Vzcy4gICovCisvKiBG b3IgNjQtYml0IGdkYiBDYWxsIHB0cmFjZTY0IHRvIHRyYWNlIDMyLWJpdCBh bmQgNjQtYml0IGRlYnVnZWUgKi8KIAogc3RhdGljIGludAorI2lmZGVmIEJG RDY0CitwdHJhY2U2NGFpeCAoaW50IHJlcSwgbG9uZyBsb25nIGlkLCBsb25n IGxvbmcgYWRkciwgaW50IGRhdGEsIGludCAqYnVmKQoreworICBlcnJubyA9 IDA7CisgIHJldHVybiBwdHJhY2VfY2hlY2sgKHJlcSwgaWQsIHB0cmFjZTY0 IChyZXEsIGlkLCBhZGRyLCBkYXRhLCBidWYpKTsKK30KKyNlbHNlCiBwdHJh Y2U2NGFpeCAoaW50IHJlcSwgaW50IGlkLCBsb25nIGxvbmcgYWRkciwgaW50 IGRhdGEsIGludCAqYnVmKQogewogICBlcnJubyA9IDA7CiAgIHJldHVybiBw dHJhY2VfY2hlY2sgKHJlcSwgaWQsIHB0cmFjZXggKHJlcSwgaWQsIGFkZHIs IGRhdGEsIGJ1ZikpOwogfQorI2VuZGlmCiAKIC8qIENhbGwgcHRyYWNlIChS RVEsIElELCBBRERSLCBEQVRBLCBCVUYpLiAgUmV0dXJuIHN1Y2Nlc3MuICAq LworLyogRm9yIDY0LWJpdCBnZGIgQ2FsbCBwdHJhY2U2NCB0byB0cmFjZSAz Mi1iaXQgYW5kIDY0LWJpdCBkZWJ1Z2VlICovCiAKIHN0YXRpYyBpbnQKKyNp ZmRlZiBCRkQ2NAorcHRyYWNlMzIgKGludCByZXEsIGxvbmcgbG9uZyBpZCwg bG9uZyBsb25nIGFkZHIsIGludCBkYXRhLCBpbnQgKmJ1ZikKK3sKKyAgZXJy bm8gPSAwOworICByZXR1cm4gcHRyYWNlX2NoZWNrIChyZXEsIGlkLAorICAg ICAgICAgICAgICAgICAgICAgIHB0cmFjZTY0IChyZXEsIGlkLCBhZGRyLCBk YXRhLCBidWYpKTsKK30KKyNlbHNlCiBwdHJhY2UzMiAoaW50IHJlcSwgaW50 IGlkLCBpbnQgKmFkZHIsIGludCBkYXRhLCBpbnQgKmJ1ZikKIHsKICAgZXJy bm8gPSAwOwogICByZXR1cm4gcHRyYWNlX2NoZWNrIChyZXEsIGlkLCAKIAkJ ICAgICAgIHB0cmFjZSAocmVxLCBpZCwgKGludCAqKSBhZGRyLCBkYXRhLCBi dWYpKTsKIH0KKyNlbmRpZgogCiAvKiBJZiAqUElEUCBpcyBhIGNvbXBvc2l0 ZSBwcm9jZXNzL3RocmVhZCBpZCwgY29udmVydCBpdCB0byBhCiAgICBwcm9j ZXNzIGlkLiAgKi8KQEAgLTM0NiwxNCArMzY1LDIzIEBACiAgICAgewogICAg ICAgaWYgKGFyY2g2NCkKIAl7CisgICAgICAgICAgI2lmZGVmIEJGRDY0Cisg ICAgICAgICAgaWYgKCFwdHJhY2U2NGFpeCAoUFRUX1JFQURfR1BSUywgdGlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpIGdw cnM2NCwgMCwgTlVMTCkpCisgICAgICAgICAgI2Vsc2UKIAkgIGlmICghcHRy YWNlNjRhaXggKFBUVF9SRUFEX0dQUlMsIHRpZCwgCiAJCQkgICAgKHVuc2ln bmVkIGxvbmcpIGdwcnM2NCwgMCwgTlVMTCkpCisgICAgICAgICAgI2VuZGlm CiAJICAgIG1lbXNldCAoZ3ByczY0LCAwLCBzaXplb2YgKGdwcnM2NCkpOwog CSAgbWVtY3B5IChjb250ZXh0LT5ncHIsIGdwcnM2NCwgc2l6ZW9mKGdwcnM2 NCkpOwogCX0KICAgICAgIGVsc2UKIAl7CisgICAgICAgICAgI2lmZGVmIEJG RDY0CisgICAgICAgICAgaWYgKCFwdHJhY2UzMiAoUFRUX1JFQURfR1BSUywg dGlkLCAobG9uZyBsb25nKSBncHJzMzIsIDAsIE5VTEwpKQorICAgICAgICAg ICNlbHNlCiAJICBpZiAoIXB0cmFjZTMyIChQVFRfUkVBRF9HUFJTLCB0aWQs IGdwcnMzMiwgMCwgTlVMTCkpCisgICAgICAgICAgI2VuZGlmCiAJICAgIG1l bXNldCAoZ3ByczMyLCAwLCBzaXplb2YgKGdwcnMzMikpOwogCSAgbWVtY3B5 IChjb250ZXh0LT5ncHIsIGdwcnMzMiwgc2l6ZW9mKGdwcnMzMikpOwogCX0K QEAgLTM2Miw3ICszOTAsMTEgQEAKICAgLyogRmxvYXRpbmctcG9pbnQgcmVn aXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxBR19GUFJTKQog ICAgIHsKKyAgICAgICNpZmRlZiBCRkQ2NAorICAgICAgaWYgKCFwdHJhY2Uz MiAoUFRUX1JFQURfRlBSUywgdGlkLCAobG9uZyBsb25nKSBmcHJzLCAwICwg TlVMTCkpCisgICAgICAjZWxzZQogICAgICAgaWYgKCFwdHJhY2UzMiAoUFRU X1JFQURfRlBSUywgdGlkLCAodm9pZCAqKSBmcHJzLCAwLCBOVUxMKSkKKyAg ICAgICNlbmRpZgogCW1lbXNldCAoZnBycywgMCwgc2l6ZW9mIChmcHJzKSk7 CiAgICAgICBtZW1jcHkgKGNvbnRleHQtPmZwciwgZnBycywgc2l6ZW9mKGZw cnMpKTsKICAgICB9CkBAIC0zNzIsMTQgKzQwNCwyMyBAQAogICAgIHsKICAg ICAgIGlmIChhcmNoNjQpCiAJeworICAgICAgICAgICNpZmRlZiBCRkQ2NAor ICAgICAgICAgIGlmICghcHRyYWNlNjRhaXggKFBUVF9SRUFEX1NQUlMsIHRp ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKSAm c3ByczY0LCAwLCBOVUxMKSkKKyAgICAgICAgICAjZWxzZQogCSAgaWYgKCFw dHJhY2U2NGFpeCAoUFRUX1JFQURfU1BSUywgdGlkLCAKIAkJCSAgICAodW5z aWduZWQgbG9uZykgJnNwcnM2NCwgMCwgTlVMTCkpCisgICAgICAgICAgI2Vu ZGlmCiAJICAgIG1lbXNldCAoJnNwcnM2NCwgMCwgc2l6ZW9mIChzcHJzNjQp KTsKICAgICAgIAkgIG1lbWNweSAoJmNvbnRleHQtPm1zciwgJnNwcnM2NCwg c2l6ZW9mKHNwcnM2NCkpOwogCX0KICAgICAgIGVsc2UKIAl7CisgICAgICAg ICAgI2lmZGVmIEJGRDY0CisgICAgICAgICAgaWYgKCFwdHJhY2UzMiAoUFRU X1JFQURfU1BSUywgdGlkLCAobG9uZyBsb25nKSAmc3ByczMyLCAwLCBOVUxM KSkKKyAgICAgICAgICAjZWxzZQogCSAgaWYgKCFwdHJhY2UzMiAoUFRUX1JF QURfU1BSUywgdGlkLCAoaW50ICopICZzcHJzMzIsIDAsIE5VTEwpKQorICAg ICAgICAgICNlbmRpZgogCSAgICBtZW1zZXQgKCZzcHJzMzIsIDAsIHNpemVv ZiAoc3ByczMyKSk7CiAgICAgICAJICBtZW1jcHkgKCZjb250ZXh0LT5tc3Is ICZzcHJzMzIsIHNpemVvZihzcHJzMzIpKTsKIAl9CkBAIC00MTEsMTYgKzQ1 MiwyOSBAQAogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFHX0dQUlMpCiAgICAg ewogICAgICAgaWYgKGFyY2g2NCkKKyAgICAgICAgI2lmZGVmIEJGRDY0Cisg ICAgICAgIHB0cmFjZTY0YWl4IChQVFRfV1JJVEVfR1BSUywgdGlkLAorICAg ICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZykgY29udGV4dC0+Z3ByLCAw LCBOVUxMKTsKKyAgICAgICAgI2Vsc2UKIAlwdHJhY2U2NGFpeCAoUFRUX1dS SVRFX0dQUlMsIHRpZCwgCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGNvbnRl eHQtPmdwciwgMCwgTlVMTCk7CisgICAgICAgICNlbmRpZgogICAgICAgZWxz ZQorICAgICAgICAjaWZkZWYgQkZENjQKKyAgICAgICAgcHRyYWNlMzIgKFBU VF9XUklURV9HUFJTLCB0aWQsIChsb25nIGxvbmcpIGNvbnRleHQtPmdwciwg MCwgTlVMTCk7CisgICAgICAgICNlbHNlCiAJcHRyYWNlMzIgKFBUVF9XUklU RV9HUFJTLCB0aWQsIChpbnQgKikgY29udGV4dC0+Z3ByLCAwLCBOVUxMKTsK KyAgICAgICAgI2VuZGlmCiAgICAgfQogCiAgLyogRmxvYXRpbmctcG9pbnQg cmVnaXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxBR19GUFJT KQogICAgIHsKKyAgICAgICNpZmRlZiBCRkQ2NAorICAgICAgcHRyYWNlMzIg KFBUVF9XUklURV9GUFJTLCB0aWQsIChsb25nIGxvbmcpIGNvbnRleHQtPmZw ciwgMCwgTlVMTCk7CisgICAgICAjZWxzZQogICAgICAgcHRyYWNlMzIgKFBU VF9XUklURV9GUFJTLCB0aWQsIChpbnQgKikgY29udGV4dC0+ZnByLCAwLCBO VUxMKTsKKyAgICAgICNlbmRpZgogICAgIH0KIAogICAvKiBTcGVjaWFsLXB1 cnBvc2UgcmVnaXN0ZXJzLiAgKi8KQEAgLTQyOCwxMiArNDgyLDIxIEBACiAg ICAgewogICAgICAgaWYgKGFyY2g2NCkKIAl7CisgICAgICAgICAgI2lmZGVm IEJGRDY0CisgICAgICAgICAgcHRyYWNlNjRhaXggKFBUVF9XUklURV9TUFJT LCB0aWQsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpICZj b250ZXh0LT5tc3IsIDAsIE5VTEwpOworICAgICAgICAgICNlbHNlCiAJICBw dHJhY2U2NGFpeCAoUFRUX1dSSVRFX1NQUlMsIHRpZCwgCiAJCSAgICAgICAo dW5zaWduZWQgbG9uZykgJmNvbnRleHQtPm1zciwgMCwgTlVMTCk7CisgICAg ICAgICAgI2VuZGlmCiAJfQogICAgICAgZWxzZQogCXsKKyAgICAgICAgICAj aWZkZWYgQkZENjQKKyAgICAgICAgICBwdHJhY2UzMiAoUFRUX1dSSVRFX1NQ UlMsIHRpZCwgKGxvbmcgbG9uZykgJmNvbnRleHQtPm1zciwgMCwgTlVMTCk7 CisgICAgICAgICAgI2Vsc2UKIAkgIHB0cmFjZTMyIChQVFRfV1JJVEVfU1BS UywgdGlkLCAodm9pZCAqKSAmY29udGV4dC0+bXNyLCAwLCBOVUxMKTsKKyAg ICAgICAgICAjZW5kaWYKIAl9CiAgICAgfQogICByZXR1cm4gMDsKQEAgLTk5 OCwxMSArMTA2MSwyMSBAQAogICAgICAgdGlkWzFdID0gMDsKIAogICAgICAg aWYgKGFyY2g2NCkKKyAgICAgICAgI2lmZGVmIEJGRDY0CisgICAgICAgIHB0 cmFjZTY0YWl4IChQVFRfQ09OVElOVUUsIHRpZFswXSwgKGxvbmcgbG9uZykg MSwKKyAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9zaWduYWxfdG9faG9z dCAoc2lnKSwgKHZvaWQgKikgdGlkKTsKKyAgICAgICAgI2Vsc2UKIAlwdHJh Y2U2NGFpeCAoUFRUX0NPTlRJTlVFLCB0aWRbMF0sIDEsIAogCQkgICAgIHRh cmdldF9zaWduYWxfdG9faG9zdCAoc2lnKSwgKHZvaWQgKikgdGlkKTsKKyAg ICAgICAgI2VuZGlmCiAgICAgICBlbHNlCisgICAgICAgICNpZmRlZiBCRkQ2 NAorICAgICAgICBwdHJhY2UzMiAoUFRUX0NPTlRJTlVFLCB0aWRbMF0sIChs b25nIGxvbmcpIDEsCisgICAgICAgICAgICAgICAgICB0YXJnZXRfc2lnbmFs X3RvX2hvc3QgKHNpZyksICh2b2lkICopIHRpZCk7CisgICAgICAgICNlbHNl CiAJcHRyYWNlMzIgKFBUVF9DT05USU5VRSwgdGlkWzBdLCAoaW50ICopIDEs CiAJCSAgdGFyZ2V0X3NpZ25hbF90b19ob3N0IChzaWcpLCAodm9pZCAqKSB0 aWQpOworICAgICAgICAjZW5kaWYKICAgICB9CiB9CiAKQEAgLTEyMzEsMTQg KzEzMDQsMjQgQEAKICAgICB7CiAgICAgICBpZiAoYXJjaDY0KQogCXsKKyAg ICAgICAgICAjaWZkZWYgQkZENjQKKyAgICAgICAgICBpZiAoIXB0cmFjZTY0 YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZyBsb25nKSBncHJzNjQsIDAsIE5VTEwpKQorICAgICAg ICAgICNlbHNlCiAJICBpZiAoIXB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJT LCB0aWQsIAogCQkJICAgICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5V TEwpKQorICAgICAgICAgICNlbmRpZgogCSAgICBtZW1zZXQgKGdwcnM2NCwg MCwgc2l6ZW9mIChncHJzNjQpKTsKIAkgIHN1cHBseV9ncHJzNjQgKHJlZ2Nh Y2hlLCBncHJzNjQpOwogCX0KICAgICAgIGVsc2UKIAl7CisgICAgICAgICAg I2lmZGVmIEJGRDY0CisgICAgICAgICAgaWYgKCFwdHJhY2UzMiAoUFRUX1JF QURfR1BSUywgdGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n IGxvbmcpIGdwcnMzMiwgMCwgTlVMTCkpCisgICAgICAgICAgI2Vsc2UKIAkg IGlmICghcHRyYWNlMzIgKFBUVF9SRUFEX0dQUlMsIHRpZCwgZ3ByczMyLCAw LCBOVUxMKSkKKyAgICAgICAgICAjZW5kaWYKIAkgICAgbWVtc2V0IChncHJz MzIsIDAsIHNpemVvZiAoZ3ByczMyKSk7CiAJICBmb3IgKGkgPSAwOyBpIDwg cHBjX251bV9ncHJzOyBpKyspCiAJICAgIHN1cHBseV9yZWczMiAocmVnY2Fj aGUsIHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSwgZ3ByczMyW2ldKTsKQEAg LTEyNTIsNyArMTMzNSwxMiBAQAogICAgICAgICAgIHx8IChyZWdubyA+PSB0 ZGVwLT5wcGNfZnAwX3JlZ251bQogICAgICAgICAgICAgICAmJiByZWdubyA8 IHRkZXAtPnBwY19mcDBfcmVnbnVtICsgcHBjX251bV9mcHJzKSkpCiAgICAg eworICAgICAgI2lmZGVmIEJGRDY0CisgICAgICBpZiAoIXB0cmFjZTMyIChQ VFRfUkVBRF9GUFJTLCB0aWQsIAorICAgICAgICAgICAgICAgICAgICAgKGxv bmcgbG9uZykgZnBycywgMCwgTlVMTCkpCisgICAgICAjZWxzZQogICAgICAg aWYgKCFwdHJhY2UzMiAoUFRUX1JFQURfRlBSUywgdGlkLCAodm9pZCAqKSBm cHJzLCAwLCBOVUxMKSkKKyAgICAgICNlbmRpZgogCW1lbXNldCAoZnBycywg MCwgc2l6ZW9mIChmcHJzKSk7CiAgICAgICBzdXBwbHlfZnBycyAocmVnY2Fj aGUsIGZwcnMpOwogICAgIH0KQEAgLTEyNjMsOCArMTM1MSwxMyBAQAogICAg IHsKICAgICAgIGlmIChhcmNoNjQpCiAJeworICAgICAgICAgICNpZmRlZiBC RkQ2NAorICAgICAgICAgIGlmICghcHRyYWNlNjRhaXggKFBUVF9SRUFEX1NQ UlMsIHRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBs b25nICkgJnNwcnM2NCwgMCwgTlVMTCkpCisgICAgICAgICAgI2Vsc2UKIAkg IGlmICghcHRyYWNlNjRhaXggKFBUVF9SRUFEX1NQUlMsIHRpZCwgCiAJCQkg ICAgKHVuc2lnbmVkIGxvbmcpICZzcHJzNjQsIDAsIE5VTEwpKQorICAgICAg ICAgICNlbmRpZgogCSAgICBtZW1zZXQgKCZzcHJzNjQsIDAsIHNpemVvZiAo c3ByczY0KSk7CiAJICBzdXBwbHlfc3ByczY0IChyZWdjYWNoZSwgc3ByczY0 LnB0X2lhciwgc3ByczY0LnB0X21zciwKIAkJCSBzcHJzNjQucHRfY3IsIHNw cnM2NC5wdF9sciwgc3ByczY0LnB0X2N0ciwKQEAgLTEyNzQsNyArMTM2Nywx MiBAQAogCXsKIAkgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJh cmNoX3RkZXAgKGdkYmFyY2gpOwogCisgICAgICAgICAgI2lmZGVmIEJGRDY0 CisJICBpZiAoIXB0cmFjZTMyIChQVFRfUkVBRF9TUFJTLCB0aWQsIChsb25n IGxvbmcgKSAmc3ByczMyLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAs IE5VTEwpKQorICAgICAgICAgICNlbHNlCiAJICBpZiAoIXB0cmFjZTMyIChQ VFRfUkVBRF9TUFJTLCB0aWQsIChpbnQgKikgJnNwcnMzMiwgMCwgTlVMTCkp CisgICAgICAgICAgI2VuZGlmCiAJICAgIG1lbXNldCAoJnNwcnMzMiwgMCwg c2l6ZW9mIChzcHJzMzIpKTsKIAkgIHN1cHBseV9zcHJzMzIgKHJlZ2NhY2hl LCBzcHJzMzIucHRfaWFyLCBzcHJzMzIucHRfbXNyLCBzcHJzMzIucHRfY3Is CiAJCQkgc3ByczMyLnB0X2xyLCBzcHJzMzIucHRfY3RyLCBzcHJzMzIucHRf eGVyLApAQCAtMTU2MSwxNiArMTY1OSwzMiBAQAogICAgICAgaWYgKGFyY2g2 NCkKIAl7CiAJICAvKiBQcmUtZmV0Y2g6IHNvbWUgcmVncyBtYXkgbm90IGJl IGluIHRoZSBjYWNoZS4gICovCisgICAgICAgICAgI2lmZGVmIEJGRDY0Cisg ICAgICAgICAgcHRyYWNlNjRhaXggKFBUVF9SRUFEX0dQUlMsIHRpZCwgKGxv bmcgbG9uZykgZ3ByczY0LCAwLCBOVUxMKTsKKyAgICAgICAgICAjZWxzZQog CSAgcHRyYWNlNjRhaXggKFBUVF9SRUFEX0dQUlMsIHRpZCwgKHVuc2lnbmVk IGxvbmcpIGdwcnM2NCwgMCwgTlVMTCk7CisgICAgICAgICAgI2VuZGlmCiAJ ICBmaWxsX2dwcnM2NCAocmVnY2FjaGUsIGdwcnM2NCk7CisJICAjaWZkZWYg QkZENjQKKyAgICAgICAgICBwdHJhY2U2NGFpeCAoUFRUX1dSSVRFX0dQUlMs IHRpZCwgKGxvbmcgbG9uZykgZ3ByczY0LCAwLCBOVUxMKTsKKyAgICAgICAg ICAjZWxzZQogCSAgcHRyYWNlNjRhaXggKFBUVF9XUklURV9HUFJTLCB0aWQs ICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5VTEwpOworICAgICAgICAg ICNlbmRpZgogCX0KICAgICAgIGVsc2UKIAl7CiAJICAvKiBQcmUtZmV0Y2g6 IHNvbWUgcmVncyBtYXkgbm90IGJlIGluIHRoZSBjYWNoZS4gICovCisJICAj aWZkZWYgQkZENjQKKwkgIHB0cmFjZTMyIChQVFRfUkVBRF9HUFJTLCB0aWQs IChsb25nIGxvbmcpIGdwcnMzMiwgMCwgTlVMTCk7CisgICAgICAgICAgI2Vs c2UKIAkgIHB0cmFjZTMyIChQVFRfUkVBRF9HUFJTLCB0aWQsIGdwcnMzMiwg MCwgTlVMTCk7CisgICAgICAgICAgI2VuZGlmCiAJICBmaWxsX2dwcnMzMiAo cmVnY2FjaGUsIGdwcnMzMik7CisgICAgICAgICAgI2lmZGVmIEJGRDY0Cisg ICAgICAgICAgcHRyYWNlMzIgKFBUVF9XUklURV9HUFJTLCB0aWQsIChsb25n IGxvbmcpIGdwcnMzMiwgMCwgTlVMTCk7CisgICAgICAgICAgI2Vsc2UKIAkg IHB0cmFjZTMyIChQVFRfV1JJVEVfR1BSUywgdGlkLCBncHJzMzIsIDAsIE5V TEwpOworICAgICAgICAgICNlbmRpZgogCX0KICAgICB9CiAKQEAgLTE1ODIs OSArMTY5NiwxNyBAQAogICAgICAgICAgICAgICAmJiByZWdubyA8IHRkZXAt PnBwY19mcDBfcmVnbnVtICsgcHBjX251bV9mcHJzKSkpCiAgICAgewogICAg ICAgLyogUHJlLWZldGNoOiBzb21lIHJlZ3MgbWF5IG5vdCBiZSBpbiB0aGUg Y2FjaGUuICAqLworICAgICAgI2lmZGVmIEJGRDY0CisgICAgICBwdHJhY2Uz MiAoUFRUX1JFQURfRlBSUywgdGlkLCAobG9uZyBsb25nKSBmcHJzLCAwLCBO VUxMKTsKKyAgICAgICNlbHNlCiAgICAgICBwdHJhY2UzMiAoUFRUX1JFQURf RlBSUywgdGlkLCAodm9pZCAqKSBmcHJzLCAwLCBOVUxMKTsKKyAgICAgICNl bmRpZgogICAgICAgZmlsbF9mcHJzIChyZWdjYWNoZSwgZnBycyk7CisgICAg ICAjaWZkZWYgQkZENjQKKyAgICAgIHB0cmFjZTMyIChQVFRfV1JJVEVfRlBS UywgdGlkLCAobG9uZyBsb25nKSBmcHJzLCAwLCBOVUxMKTsKKyAgICAgICNl bHNlCiAgICAgICBwdHJhY2UzMiAoUFRUX1dSSVRFX0ZQUlMsIHRpZCwgKHZv aWQgKikgZnBycywgMCwgTlVMTCk7CisgICAgICAjZW5kaWYKICAgICB9CiAK ICAgLyogU3BlY2lhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCkBAIC0xNTk0 LDEzICsxNzE2LDIzIEBACiAgICAgICBpZiAoYXJjaDY0KQogCXsKIAkgIC8q IFByZS1mZXRjaDogc29tZSByZWdpc3RlcnMgd29uJ3QgYmUgaW4gdGhlIGNh Y2hlLiAgKi8KKyAgICAgICAgICAjaWZkZWYgQkZENjQKKwkgIHB0cmFjZTY0 YWl4IChQVFRfUkVBRF9TUFJTLCB0aWQsCisgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcgbG9uZykgJnNwcnM2NCwgMCwgTlVMTCk7CisgICAgICAgICAg I2Vsc2UKIAkgIHB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJTLCB0aWQsIAog CQkgICAgICAgKHVuc2lnbmVkIGxvbmcpICZzcHJzNjQsIDAsIE5VTEwpOwor ICAgICAgICAgICNlbmRpZgogCSAgZmlsbF9zcHJzNjQgKHJlZ2NhY2hlLCAm c3ByczY0LnB0X2lhciwgJnNwcnM2NC5wdF9tc3IsCiAJCSAgICAgICAmc3By czY0LnB0X2NyLCAmc3ByczY0LnB0X2xyLCAmc3ByczY0LnB0X2N0ciwKIAkJ ICAgICAgICZzcHJzNjQucHRfeGVyLCAmc3ByczY0LnB0X2Zwc2NyKTsKKyAg ICAgICAgICAjaWZkZWYgQkZENjQKKwkgIHB0cmFjZTY0YWl4IChQVFRfV1JJ VEVfU1BSUywgdGlkLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBs b25nICkgJnNwcnM2NCwgMCwgTlVMTCk7CisgICAgICAgICAgI2Vsc2UKIAkg IHB0cmFjZTY0YWl4IChQVFRfV1JJVEVfU1BSUywgdGlkLCAKIAkJICAgICAg ICh1bnNpZ25lZCBsb25nKSAmc3ByczY0LCAwLCBOVUxMKTsKKyAgICAgICAg ICAjZW5kaWYKIAl9CiAgICAgICBlbHNlCiAJewpAQCAtMTYxNiw3ICsxNzQ4 LDEyIEBACiAJICBnZGJfYXNzZXJ0IChzaXplb2YgKHNwcnMzMi5wdF9pYXIp ID09IDQpOwogCiAJICAvKiBQcmUtZmV0Y2g6IHNvbWUgcmVnaXN0ZXJzIHdv bid0IGJlIGluIHRoZSBjYWNoZS4gICovCisgICAgICAgICAgI2lmZGVmIEJG RDY0CisJICBwdHJhY2UzMiAoUFRUX1JFQURfU1BSUywgdGlkLCAKKyAgICAg ICAgICAgICAgICAgICAgKGxvbmcgbG9uZykgJnNwcnMzMiwgMCwgTlVMTCk7 CisgICAgICAgICAgI2Vsc2UKIAkgIHB0cmFjZTMyIChQVFRfUkVBRF9TUFJT LCB0aWQsIChpbnQgKikgJnNwcnMzMiwgMCwgTlVMTCk7CisgICAgICAgICAg I2VuZGlmCiAKIAkgIGZpbGxfc3ByczMyIChyZWdjYWNoZSwgJnRtcF9pYXIs ICZ0bXBfbXNyLCAmdG1wX2NyLCAmdG1wX2xyLAogCQkgICAgICAgJnRtcF9j dHIsICZ0bXBfeGVyLCAmdG1wX2Zwc2NyKTsKQEAgLTE2MzUsNyArMTc3Miwx MSBAQAogCSAgICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwg dGRlcC0+cHBjX21xX3JlZ251bSwKIAkJCQkgICAgJnNwcnMzMi5wdF9tcSk7 CiAKKyAgICAgICAgICAjaWZkZWYgQkZENjQKKyAJICBwdHJhY2UzMiAoUFRU X1dSSVRFX1NQUlMsIHRpZCwgKGxvbmcgbG9uZykgJnNwcnMzMiwgMCwgTlVM TCk7CisgICAgICAgICAgI2Vsc2UKIAkgIHB0cmFjZTMyIChQVFRfV1JJVEVf U1BSUywgdGlkLCAoaW50ICopICZzcHJzMzIsIDAsIE5VTEwpOworICAgICAg ICAgICNlbmRpZgogCX0KICAgICB9CiB9Ci0tLSAuL2dkYi9pbmYtcHRyYWNl LmNfb3JpZwkyMDEyLTA3LTI1IDIxOjA3OjA0LjI3MzA3ODg1MCArMDUzMAor KysgLi9nZGIvaW5mLXB0cmFjZS5jCTIwMTItMDgtMDIgMDA6MzU6NTYuNDI1 NDQzMzQxICswNTMwCkBAIC00OSw4ICs0OSwxMyBAQAogCiAgIHBpZCA9IHB0 aWRfZ2V0X3BpZCAoaW5mZXJpb3JfcHRpZCk7CiAKKyAgI2lmZGVmIEJGRDY0 CisgIGlmIChwdHJhY2U2NCAoUFRfR0VUX1BST0NFU1NfU1RBVEUsIChsb25n IGxvbmcpIHBpZCwKKyAgICAgICAgICAgICAgICAobG9uZyBsb25nKSAmcGUs IHNpemVvZiBwZSkgPT0gLTEpCisgICNlbHNlCiAgIGlmIChwdHJhY2UgKFBU X0dFVF9QUk9DRVNTX1NUQVRFLCBwaWQsCiAJICAgICAgIChQVFJBQ0VfVFlQ RV9BUkczKSZwZSwgc2l6ZW9mIHBlKSA9PSAtMSkKKyAgI2VuZGlmCiAgICAg cGVycm9yX3dpdGhfbmFtZSAoKCJwdHJhY2UiKSk7CiAKICAgZ2RiX2Fzc2Vy dCAocGUucGVfcmVwb3J0X2V2ZW50ID09IFBUUkFDRV9GT1JLKTsKQEAgLTc0 LDcgKzc5LDEzIEBACiAJIGl0LiAgKi8KICAgICAgIHJlbW92ZV9icmVha3Bv aW50cyAoKTsKIAorICAgICAgI2lmZGVmIEJGRDY0CisgICAgICBpZiAocHRy YWNlNjQgKFBUX0RFVEFDSCwgKGxvbmcgbG9uZykgcGlkLAorICAgICAgICAg ICAgICAgICAgICAobG9uZyBsb25nKSAxLCAwKSA9PSAtMSkKKyAgICAgICNl bHNlCiAgICAgICBpZiAocHRyYWNlIChQVF9ERVRBQ0gsIHBpZCwgKFBUUkFD RV9UWVBFX0FSRzMpMSwgMCkgPT0gLTEpCisgICAgICAjZW5kaWYKKyAgICAK IAlwZXJyb3Jfd2l0aF9uYW1lICgoInB0cmFjZSIpKTsKIAogICAgICAgLyog U3dpdGNoIGluZmVyaW9yX3B0aWQgb3V0IG9mIHRoZSBwYXJlbnQncyB3YXku ICAqLwpAQCAtOTAsNyArMTAxLDEyIEBACiAgICAgICAvKiBCcmVha3BvaW50 cyBoYXZlIGFscmVhZHkgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSBjaGlsZCBi eQogCSBpbmZydW4uYy4gICovCiAKKyAgICAgICNpZmRlZiBCRkQ2NAorICAg ICAgaWYgKHB0cmFjZTY0IChQVF9ERVRBQ0gsIChsb25nIGxvbmcpIGZwaWQs CisgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKSAxLCAwKSA9PSAtMSkK KyAgICAgICNlbHNlCiAgICAgICBpZiAocHRyYWNlIChQVF9ERVRBQ0gsIGZw aWQsIChQVFJBQ0VfVFlQRV9BUkczKTEsIDApID09IC0xKQorICAgICAgI2Vu ZGlmCiAJcGVycm9yX3dpdGhfbmFtZSAoKCJwdHJhY2UiKSk7CiAgICAgfQog CkBAIC0xMDYsNyArMTIyLDExIEBACiBpbmZfcHRyYWNlX21lICh2b2lkKQog ewogICAvKiAiVHJhY2UgbWUsIERyLiBNZW1vcnkhIiAgKi8KKyAgI2lmZGVm IEJGRDY0CisgIHB0cmFjZTY0IChQVF9UUkFDRV9NRSwgKGxvbmcgbG9uZykg MCwgKGxvbmcgbG9uZykgMCwgMCwgMCk7CisgICNlbHNlCiAgIHB0cmFjZSAo UFRfVFJBQ0VfTUUsIDAsIChQVFJBQ0VfVFlQRV9BUkczKTAsIDApOworICAj ZW5kaWYKIH0KIAogLyogU3RhcnQgYSBuZXcgaW5mZXJpb3IgVW5peCBjaGls ZCBwcm9jZXNzLiAgRVhFQ19GSUxFIGlzIHRoZSBmaWxlIHRvCkBAIC0xNTks OCArMTc5LDEzIEBACiAgIC8qIFNldCB0aGUgaW5pdGlhbCBldmVudCBtYXNr LiAgKi8KICAgbWVtc2V0ICgmcGUsIDAsIHNpemVvZiBwZSk7CiAgIHBlLnBl X3NldF9ldmVudCB8PSBQVFJBQ0VfRk9SSzsKKyAgI2lmZGVmIEJGRDY0Cisg IGlmIChwdHJhY2U2NCAoUFRfU0VUX0VWRU5UX01BU0ssIChsb25nIGxvbmcp IHB0aWRfZ2V0X3BpZCAocGlkKSwKKyAgICAgICAgICAgICAgICAobG9uZyBs b25nKSAmcGUsIHNpemVvZiBwZSwgMCkgPT0gLTEpCisgICNlbHNlCiAgIGlm IChwdHJhY2UgKFBUX1NFVF9FVkVOVF9NQVNLLCBwdGlkX2dldF9waWQgKHBp ZCksCiAJICAgICAgKFBUUkFDRV9UWVBFX0FSRzMpJnBlLCBzaXplb2YgcGUp ID09IC0xKQorICAjZW5kaWYKICAgICBwZXJyb3Jfd2l0aF9uYW1lICgoInB0 cmFjZSIpKTsKIH0KIApAQCAtMjI5LDcgKzI1NCwxMSBAQAogCiAjaWZkZWYg UFRfQVRUQUNICiAgIGVycm5vID0gMDsKKyAgI2lmZGVmIEJGRDY0CisgIHB0 cmFjZTY0IChQVF9BVFRBQ0gsIChsb25nIGxvbmcpIHBpZCwgKGxvbmcgbG9u ZykgMCwgMCwgMCk7CisgICNlbHNlCiAgIHB0cmFjZSAoUFRfQVRUQUNILCBw aWQsIChQVFJBQ0VfVFlQRV9BUkczKTAsIDApOworICAjZW5kaWYKICAgaWYg KGVycm5vICE9IDApCiAgICAgcGVycm9yX3dpdGhfbmFtZSAoKCJwdHJhY2Ui KSk7CiAjZWxzZQpAQCAtMjU5LDggKzI4OCwxMyBAQAogICAvKiBTZXQgdGhl IGluaXRpYWwgZXZlbnQgbWFzay4gICovCiAgIG1lbXNldCAoJnBlLCAwLCBz aXplb2YgcGUpOwogICBwZS5wZV9zZXRfZXZlbnQgfD0gUFRSQUNFX0ZPUks7 CisgICNpZmRlZiBCRkQ2NAorICBpZiAocHRyYWNlNjQgKFBUX1NFVF9FVkVO VF9NQVNLLCAobG9uZyBsb25nKSBwaWQsCisgICAgICAgICAgICAgICAgKGxv bmcgbG9uZykgJnBlLCBzaXplb2YgcGUsIDApID09IC0xKQorICAjZWxzZQog ICBpZiAocHRyYWNlIChQVF9TRVRfRVZFTlRfTUFTSywgcGlkLAogCSAgICAg IChQVFJBQ0VfVFlQRV9BUkczKSZwZSwgc2l6ZW9mIHBlKSA9PSAtMSkKKyAg I2VuZGlmCiAgICAgcGVycm9yX3dpdGhfbmFtZSAoKCJwdHJhY2UiKSk7CiB9 CiAKQEAgLTI5Myw3ICszMjcsMTEgQEAKICAgICAgcHJldmlvdXNseSBhdHRh Y2hlZCB0byB0aGUgaW5mZXJpb3IuICBJdCAqbWlnaHQqIHdvcmsgaWYgd2UK ICAgICAgc3RhcnRlZCB0aGUgcHJvY2VzcyBvdXJzZWx2ZXMuICAqLwogICBl cnJubyA9IDA7CisgICNpZmRlZiBCRkQ2NAorICBwdHJhY2U2NCAoUFRfREVU QUNILCAobG9uZyBsb25nKSBwaWQsIChsb25nIGxvbmcpIDEsIHNpZywgMCk7 CisgICNlbHNlCiAgIHB0cmFjZSAoUFRfREVUQUNILCBwaWQsIChQVFJBQ0Vf VFlQRV9BUkczKTEsIHNpZyk7CisgICNlbmRpZgogICBpZiAoZXJybm8gIT0g MCkKICAgICBwZXJyb3Jfd2l0aF9uYW1lICgoInB0cmFjZSIpKTsKICNlbHNl CkBAIC0zMTgsNyArMzU2LDExIEBACiAgIGlmIChwaWQgPT0gMCkKICAgICBy ZXR1cm47CiAKKyAgI2lmZGVmIEJGRDY0CisgIHB0cmFjZTY0IChQVF9LSUxM LCAobG9uZyBsb25nKSBwaWQsIChsb25nIGxvbmcpIDAsIDAsIDApOworICAj ZWxzZQogICBwdHJhY2UgKFBUX0tJTEwsIHBpZCwgKFBUUkFDRV9UWVBFX0FS RzMpMCwgMCk7CisgICNlbmRpZgogICB3YWl0cGlkIChwaWQsICZzdGF0dXMs IDApOwogCiAgIHRhcmdldF9tb3Vybl9pbmZlcmlvciAoKTsKQEAgLTM3Miw3 ICs0MTQsMTIgQEAKICAgICAgd2hlcmUgaXQgd2FzLiAgSWYgR0RCIHdhbnRl ZCBpdCB0byBzdGFydCBzb21lIG90aGVyIHdheSwgd2UgaGF2ZQogICAgICBh bHJlYWR5IHdyaXR0ZW4gYSBuZXcgcHJvZ3JhbSBjb3VudGVyIHZhbHVlIHRv IHRoZSBjaGlsZC4gICovCiAgIGVycm5vID0gMDsKKyAgI2lmZGVmIEJGRDY0 CisgIHB0cmFjZTY0IChyZXF1ZXN0LCAobG9uZyBsb25nKSBwaWQsIChsb25n IGxvbmcpIDEsIAorICAgICAgICAgICAgdGFyZ2V0X3NpZ25hbF90b19ob3N0 IChzaWduYWwpLCAwKTsKKyAgI2Vsc2UKICAgcHRyYWNlIChyZXF1ZXN0LCBw aWQsIChQVFJBQ0VfVFlQRV9BUkczKTEsIHRhcmdldF9zaWduYWxfdG9faG9z dCAoc2lnbmFsKSk7CisgICNlbmRpZgogICBpZiAoZXJybm8gIT0gMCkKICAg ICBwZXJyb3Jfd2l0aF9uYW1lICgoInB0cmFjZSIpKTsKIH0KQEAgLTQyNSw4 ICs0NzIsMTMgQEAKICAgICAgIHB0cmFjZV9zdGF0ZV90IHBlOwogICAgICAg cGlkX3QgZnBpZDsKIAorICAgICAgI2lmZGVmIEJGRDY0CisgICAgICBpZiAo cHRyYWNlNjQgKFBUX0dFVF9QUk9DRVNTX1NUQVRFLCAobG9uZyBsb25nKSBw aWQsCisgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpICZwZSwgc2l6 ZW9mIHBlLCAwKSA9PSAtMSkKKyAgICAgICNlbHNlCiAgICAgICBpZiAocHRy YWNlIChQVF9HRVRfUFJPQ0VTU19TVEFURSwgcGlkLAogCQkgIChQVFJBQ0Vf VFlQRV9BUkczKSZwZSwgc2l6ZW9mIHBlKSA9PSAtMSkKKyAgICAgICNlbmRp ZgogCXBlcnJvcl93aXRoX25hbWUgKCgicHRyYWNlIikpOwogCiAgICAgICBz d2l0Y2ggKHBlLnBlX3JlcG9ydF9ldmVudCkKQEAgLTQ0MCw4ICs0OTIsMTMg QEAKIAkgIGlmIChmcGlkID09IC0xKQogCSAgICBwZXJyb3Jfd2l0aF9uYW1l ICgoIndhaXRwaWQiKSk7CiAKKyAgICAgICAgICAjaWZkZWYgQkZENjQKKwkg IGlmIChwdHJhY2U2NCAoUFRfR0VUX1BST0NFU1NfU1RBVEUsIChsb25nIGxv bmcpIGZwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25n KSAmcGUsIHNpemVvZiBwZSwgMCkgPT0gLTEpCisgICAgICAgICAgI2Vsc2UK IAkgIGlmIChwdHJhY2UgKFBUX0dFVF9QUk9DRVNTX1NUQVRFLCBmcGlkLAog CQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykmcGUsIHNpemVvZiBwZSkgPT0g LTEpCisgICAgICAgICAgI2VuZGlmCiAJICAgIHBlcnJvcl93aXRoX25hbWUg KCgicHRyYWNlIikpOwogCiAJICBnZGJfYXNzZXJ0IChwZS5wZV9yZXBvcnRf ZXZlbnQgPT0gUFRSQUNFX0ZPUkspOwpAQCAtNDk1LDcgKzU1MiwxMSBAQAog CXBpb2QucGlvZF9sZW4gPSBsZW47CiAKIAllcnJubyA9IDA7CisgICAgICAg ICNpZmRlZiBCRkQ2NAorICAgICAgICBpZiAocHRyYWNlNjQgKFBUX0lPLCAo bG9uZyBsb25nKSBwaWQsIChsb25nIGxvbmcpICZwaW9kLCAwLCAwKSA9PSAw KQorICAgICAgICAjZWxzZQogCWlmIChwdHJhY2UgKFBUX0lPLCBwaWQsIChj YWRkcl90KSZwaW9kLCAwKSA9PSAwKQorICAgICAgICAjZW5kaWYKIAkgIC8q IFJldHVybiB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyByZWFkIG9yIHdy aXR0ZW4uICAqLwogCSAgcmV0dXJuIHBpb2QucGlvZF9sZW47CiAJLyogSWYg dGhlIFBUX0lPIHJlcXVlc3QgaXMgc29tZWhvdyBub3Qgc3VwcG9ydGVkLCBm YWxsYmFjayBvbgpAQCAtNTM2LDkgKzU5NywxNCBAQAogCQl8fCAob2Zmc2V0 ICsgcGFydGlhbF9sZW4KIAkJICAgIDwgcm91bmRlZF9vZmZzZXQgKyBzaXpl b2YgKFBUUkFDRV9UWVBFX1JFVCkpKQogCSAgICAgIC8qIE5lZWQgcGFydCBv ZiBpbml0aWFsIHdvcmQgLS0gZmV0Y2ggaXQuICAqLworICAgICAgICAgICAg ICAjaWZkZWYgQkZENjQKKwkgICAgICBidWZmZXIud29yZCA9IHB0cmFjZTY0 IChQVF9SRUFEX0ksIChsb25nIGxvbmcpIHBpZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZykgcm91bmRlZF9v ZmZzZXQsIDAsIDApOworICAgICAgICAgICAgICAjZWxzZQogCSAgICAgIGJ1 ZmZlci53b3JkID0gcHRyYWNlIChQVF9SRUFEX0ksIHBpZCwKIAkJCQkgICAg KFBUUkFDRV9UWVBFX0FSRzMpKHVpbnRwdHJfdCkKIAkJCQkgICAgcm91bmRl ZF9vZmZzZXQsIDApOworICAgICAgICAgICAgICAjZW5kaWYKIAogCSAgICAv KiBDb3B5IGRhdGEgdG8gYmUgd3JpdHRlbiBvdmVyIGNvcnJlc3BvbmRpbmcg cGFydCBvZgogCSAgICAgICBidWZmZXIuICAqLwpAQCAtNTQ2LDE3ICs2MTIs MjggQEAKIAkJICAgIHdyaXRlYnVmLCBwYXJ0aWFsX2xlbik7CiAKIAkgICAg ZXJybm8gPSAwOworICAgICAgICAgICAgI2lmZGVmIEJGRDY0CisgICAgICAg ICAgICBwdHJhY2U2NCAoUFRfV1JJVEVfRCwgKGxvbmcgbG9uZykgcGlkLAor ICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpIHJvdW5kZWRfb2Zm c2V0LCBidWZmZXIud29yZCwgMCk7CisgICAgICAgICAgICAjZWxzZQogCSAg ICBwdHJhY2UgKFBUX1dSSVRFX0QsIHBpZCwKIAkJICAgIChQVFJBQ0VfVFlQ RV9BUkczKSh1aW50cHRyX3Qpcm91bmRlZF9vZmZzZXQsCiAJCSAgICBidWZm ZXIud29yZCk7CisgICAgICAgICAgICAjZW5kaWYKIAkgICAgaWYgKGVycm5v KQogCSAgICAgIHsKIAkJLyogVXNpbmcgdGhlIGFwcHJvcHJpYXRlIG9uZSAo SSBvciBEKSBpcyBuZWNlc3NhcnkgZm9yCiAJCSAgIEdvdWxkIE5QMSwgYXQg bGVhc3QuICAqLwogCQllcnJubyA9IDA7CisgICAgICAgICAgICAgICAgI2lm ZGVmIEJGRDY0CisgICAgICAgICAgICAgICAgcHRyYWNlNjQgKFBUX1dSSVRF X0ksIChsb25nIGxvbmcpIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcgbG9uZykgcm91bmRlZF9vZmZzZXQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1ZmZlci53b3JkLCAwKTsKKyAgICAgICAgICAgICAg ICAjZWxzZQogCQlwdHJhY2UgKFBUX1dSSVRFX0ksIHBpZCwKIAkJCShQVFJB Q0VfVFlQRV9BUkczKSh1aW50cHRyX3Qpcm91bmRlZF9vZmZzZXQsCiAJCQli dWZmZXIud29yZCk7CisgICAgICAgICAgICAgICAgI2VuZGlmCiAJCWlmIChl cnJubykKIAkJICByZXR1cm4gMDsKIAkgICAgICB9CkBAIC01NjUsOSArNjQy LDE1IEBACiAJaWYgKHJlYWRidWYpCiAJICB7CiAJICAgIGVycm5vID0gMDsK KyAgICAgICAgICAgICNpZmRlZiBCRkQ2NAorICAgICAgICAgICAgYnVmZmVy LndvcmQgPSBwdHJhY2U2NCAoUFRfUkVBRF9JLCAobG9uZyBsb25nKSBwaWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBs b25nKSByb3VuZGVkX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsIDApOworICAgICAgICAgICAgI2Vsc2UKIAkgICAg YnVmZmVyLndvcmQgPSBwdHJhY2UgKFBUX1JFQURfSSwgcGlkLAogCQkJCSAg KFBUUkFDRV9UWVBFX0FSRzMpKHVpbnRwdHJfdClyb3VuZGVkX29mZnNldCwK IAkJCQkgIDApOworICAgICAgICAgICAgI2VuZGlmCiAJICAgIGlmIChlcnJu bykKIAkgICAgICByZXR1cm4gMDsKIAkgICAgLyogQ29weSBhcHByb3ByaWF0 ZSBieXRlcyBvdXQgb2YgdGhlIGJ1ZmZlci4gICovCkBAIC02ODcsNyArNzcw LDExIEBACiAgIGZvciAoaSA9IDA7IGkgPCBzaXplIC8gc2l6ZW9mIChQVFJB Q0VfVFlQRV9SRVQpOyBpKyspCiAgICAgewogICAgICAgZXJybm8gPSAwOwor ICAgICAgI2lmZGVmIEJGRDY0CisgICAgICBidWZbaV0gPSBwdHJhY2U2NCAo UFRfUkVBRF9VLCAobG9uZyBsb25nKSBwaWQsIChsb25nIGxvbmcpIGFkZHIs IDAsIDApOworICAgICAgI2Vsc2UKICAgICAgIGJ1ZltpXSA9IHB0cmFjZSAo UFRfUkVBRF9VLCBwaWQsIChQVFJBQ0VfVFlQRV9BUkczKSh1aW50cHRyX3Qp YWRkciwgMCk7CisgICAgICAjZW5kaWYKICAgICAgIGlmIChlcnJubyAhPSAw KQogCWVycm9yIChfKCJDb3VsZG4ndCByZWFkIHJlZ2lzdGVyICVzICgjJWQp OiAlcy4iKSwKIAkgICAgICAgZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChnZGJh cmNoLCByZWdudW0pLApAQCAtNzQ2LDcgKzgzMywxMSBAQAogICBmb3IgKGkg PSAwOyBpIDwgc2l6ZSAvIHNpemVvZiAoUFRSQUNFX1RZUEVfUkVUKTsgaSsr KQogICAgIHsKICAgICAgIGVycm5vID0gMDsKKyAgICAgICNpZmRlZiBCRkQ2 NAorICAgICAgcHRyYWNlNjQgKFBUX1dSSVRFX1UsIChsb25nIGxvbmcpIHBp ZCwgKGxvbmcgbG9uZykgYWRkciwgYnVmW2ldLCAwKTsKKyAgICAgICNlbHNl CiAgICAgICBwdHJhY2UgKFBUX1dSSVRFX1UsIHBpZCwgKFBUUkFDRV9UWVBF X0FSRzMpKHVpbnRwdHJfdClhZGRyLCBidWZbaV0pOworICAgICAgI2VuZGlm CiAgICAgICBpZiAoZXJybm8gIT0gMCkKIAllcnJvciAoXygiQ291bGRuJ3Qg d3JpdGUgcmVnaXN0ZXIgJXMgKCMlZCk6ICVzLiIpLAogCSAgICAgICBnZGJh cmNoX3JlZ2lzdGVyX25hbWUgKGdkYmFyY2gsIHJlZ251bSksCi0tLSAuL2dk Yi9yczYwMDAtbmF0LmNfb3JpZwkyMDEyLTA3LTI1IDIxOjA3OjQwLjgzODA4 MDI0MSArMDUzMAorKysgLi9nZGIvcnM2MDAwLW5hdC5jCTIwMTItMDctMjcg MTE6Mjc6MjcuNTYwMTcwMzY2ICswNTMwCkBAIC02Niw3ICs2Niw3IEBACiAv KiBJbiAzMi1iaXQgY29tcGlsYXRpb24gbW9kZSAod2hpY2ggaXMgdGhlIG9u bHkgbW9kZSBmcm9tIHdoaWNoIHB0cmFjZSgpCiAgICB3b3JrcyBvbiA0LjMp LCBfX2xkX2luZm8zMiBpcyAjZGVmaW5lZCBhcyBlcXVpdmFsZW50IHRvIGxk X2luZm8uICAqLwogCi0jaWZkZWYgX19sZF9pbmZvMzIKKyNpZiBkZWZpbmVk IChfX2xkX2luZm8zMikgfHwgZGVmaW5lZCAoX19sZF9pbmZvNjQpCiAjIGRl ZmluZSBBUkNIMzI2NAogI2VuZGlmCiAKQEAgLTE4MSw3ICsxODEsMTEgQEAK IHN0YXRpYyBpbnQKIHJzNjAwMF9wdHJhY2UzMiAoaW50IHJlcSwgaW50IGlk LCBpbnQgKmFkZHIsIGludCBkYXRhLCBpbnQgKmJ1ZikKIHsKKyAgI2lmZGVm IEJGRDY0CisgIGludCByZXQgPSBwdHJhY2U2NCAocmVxLCAobG9uZyBsb25n KSBpZCwgKGxvbmcgbG9uZykgYWRkciwgZGF0YSwgYnVmKTsKKyAgI2Vsc2UK ICAgaW50IHJldCA9IHB0cmFjZSAocmVxLCBpZCwgKGludCAqKWFkZHIsIGRh dGEsIGJ1Zik7CisgICNlbmRpZgogI2lmIDAKICAgcHJpbnRmICgicnM2MDAw X3B0cmFjZTMyICglZCwgJWQsIDB4JXgsICUwOHgsIDB4JXgpID0gMHgleFxu IiwKIAkgIHJlcSwgaWQsICh1bnNpZ25lZCBpbnQpYWRkciwgZGF0YSwgKHVu c2lnbmVkIGludClidWYsIHJldCk7CkBAIC0xOTUsNyArMTk5LDExIEBACiBy czYwMDBfcHRyYWNlNjQgKGludCByZXEsIGludCBpZCwgbG9uZyBsb25nIGFk ZHIsIGludCBkYXRhLCB2b2lkICpidWYpCiB7CiAjaWZkZWYgQVJDSDMyNjQK KyAgI2lmZGVmIEJGRDY0CisgIGludCByZXQgPSBwdHJhY2U2NCAocmVxLCAo bG9uZyBsb25nKSBpZCwgYWRkciwgZGF0YSwgKGludCAqKWJ1Zik7CisgICNl bHNlCiAgIGludCByZXQgPSBwdHJhY2V4IChyZXEsIGlkLCBhZGRyLCBkYXRh LCBidWYpOworICAjZW5kaWYKICNlbHNlCiAgIGludCByZXQgPSAwOwogI2Vu ZGlmCi0tLSAuL2dkYi94Y29mZnJlYWQuY19vcmlnCTIwMTItMDgtMDcgMTc6 MzY6NDIuMzc4MDU3NzU2ICswNTMwCisrKyAuL2dkYi94Y29mZnJlYWQuYwky MDEyLTA4LTA3IDE3OjM2OjQ4LjcwMjA2MDMyMCArMDUzMApAQCAtOTU2LDcg Kzk1Niw3IEBACiAgIHVuc2lnbmVkIGludCBtYXhfc3ltbnVtOwogICBpbnQg anVzdF9zdGFydGVkID0gMTsKICAgaW50IGRlcHRoID0gMDsKLSAgaW50IGZj bl9zdGFydF9hZGRyID0gMDsKKyAgZmlsZV9wdHIgZmNuX3N0YXJ0X2FkZHIg PSAwOwogCiAgIHN0cnVjdCBjb2ZmX3N5bWJvbCBmY25fc3RhYl9zYXZlZCA9 IHsgMCB9OwogCkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogICAgICAgfQogCiAg ICAgICAvKiBpZiBzeW1ib2wgbmFtZSBzdGFydHMgd2l0aCAiLiQiIG9yICIk IiwgaWdub3JlIGl0LiAgKi8KLSAgICAgIGlmIChjcy0+Y19uYW1lWzBdID09 ICckJworICAgICAgaWYgKGNzLT5jX25hbWVbMF0gPT0gJyQnIHx8ICghc3Ry bmNtcChjcy0+Y19uYW1lLCAiQEZJWCIsIDQpKQogCSAgfHwgKGNzLT5jX25h bWVbMV0gPT0gJyQnICYmIGNzLT5jX25hbWVbMF0gPT0gJy4nKSkKIAljb250 aW51ZTsKIApAQCAtMTA4MSw4ICsxMDgxLDcgQEAKIAkgIC8qIERvbmUgd2l0 aCBhbGwgZmlsZXMsIGV2ZXJ5dGhpbmcgZnJvbSBoZXJlIG9uIGlzIGdsb2Jh bHMuICAqLwogCX0KIAotICAgICAgaWYgKChjcy0+Y19zY2xhc3MgPT0gQ19F WFQgfHwgY3MtPmNfc2NsYXNzID09IENfSElERVhUKQotCSAgJiYgY3MtPmNf bmF1eCA9PSAxKQorICAgICAgaWYgKGNzLT5jX3NjbGFzcyA9PSBDX0VYVCB8 fCBjcy0+Y19zY2xhc3MgPT0gQ19ISURFWFQpCiAJewogCSAgLyogRGVhbGlu ZyB3aXRoIGEgc3ltYm9sIHdpdGggYSBjc2VjdCBlbnRyeS4gICovCiAKQEAg LTEwOTMsOCArMTA5MiwxNiBAQAogI2RlZmluZQlDU0VDVF9TQ0xBUyhQUCkg KENTRUNUKFBQKS54X3NtY2xhcykKIAogCSAgLyogQ29udmVydCB0aGUgYXV4 ZW50IHRvIHNvbWV0aGluZyB3ZSBjYW4gYWNjZXNzLiAgKi8KLQkgIGJmZF9j b2ZmX3N3YXBfYXV4X2luIChhYmZkLCByYXdfYXV4cHRyLCBjcy0+Y190eXBl LCBjcy0+Y19zY2xhc3MsCi0JCQkJMCwgY3MtPmNfbmF1eCwgJm1haW5fYXV4 KTsKKyAgICAgICAgICAvKiB4Y29mZiBjYW4gaGF2ZSBtb3JlIHRoYW4gMSBh dXhlbnQgKi8KKyAgICAgICAgICBpZiAoY3MtPmNfbmF1eCA+IDEpCisgICAg ICAgICAgICAgIGJmZF9jb2ZmX3N3YXBfYXV4X2luIChhYmZkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3X2F1eHB0ciArICgo Y29mZl9kYXRhIChhYmZkKS0+bG9jYWxfc3ltZXN6KSAqIChjcy0+Y19uYXV4 IC0gMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3MtPmNfdHlwZSwgY3MtPmNfc2NsYXNzLCBjcy0+Y19uYXV4IC0gMSwgY3Mt PmNfbmF1eCwgJm1haW5fYXV4KTsKKyAgICAgICAgICBlbHNlIGlmIChjcy0+ Y19uYXV4ID09IDEpIAorCSAgICAgIGJmZF9jb2ZmX3N3YXBfYXV4X2luIChh YmZkLCByYXdfYXV4cHRyLCBjcy0+Y190eXBlLCBjcy0+Y19zY2xhc3MsCisJ CQkJICAgIDAsIGNzLT5jX25hdXgsICZtYWluX2F1eCk7CisgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICA7CiAKIAkgIHN3aXRjaCAoQ1NFQ1RfU01U WVAgKCZtYWluX2F1eCkpCiAJICAgIHsKQEAgLTExMjMsNDMgKzExMzAsNDQg QEAKIAkJICAgICAgICAgYXBwcm9hY2ggZG9lcyBub3Qgd29yayEgIEdDQyAo YW5kIEkgdGhpbmsgeGxjKSBzZWVtCiAJCSAgICAgICAgIHRvIHB1dCBhbGwg dGhlIGNvZGUgaW4gdGhlIHVubmFtZWQgcHJvZ3JhbSBjc2VjdC4gICovCiAK LQkJICAgICAgaWYgKGxhc3RfY3NlY3RfbmFtZSkKLQkJCXsKLQkJCSAgY29t cGxldGVfc3ltdGFiIChmaWxlc3RyaW5nLCBmaWxlX3N0YXJ0X2FkZHIpOwot CQkJICBjdXJfc3JjX2VuZF9hZGRyID0gZmlsZV9lbmRfYWRkcjsKLQkJCSAg ZW5kX3N5bXRhYiAoZmlsZV9lbmRfYWRkciwgb2JqZmlsZSwKLQkJCQkgICAg ICBTRUNUX09GRl9URVhUIChvYmpmaWxlKSk7Ci0JCQkgIGVuZF9zdGFicyAo KTsKLQkJCSAgc3RhcnRfc3RhYnMgKCk7Ci0JCQkgIC8qIEdpdmUgYWxsIGNz ZWN0cyBmb3IgdGhpcyBzb3VyY2UgZmlsZSB0aGUgc2FtZQotCQkJICAgICBu YW1lLiAgKi8KLQkJCSAgc3RhcnRfc3ltdGFiIChmaWxlc3RyaW5nLCBOVUxM LCAoQ09SRV9BRERSKSAwKTsKLQkJCSAgcmVjb3JkX2RlYnVnZm9ybWF0IChk ZWJ1Z2ZtdCk7Ci0JCQl9Ci0KLQkJICAgICAgLyogSWYgdGhpcyBpcyB0aGUg dmVyeSBmaXJzdCBjc2VjdCBzZWVuLAotCQkgICAgICAgICBiYXNpY2FsbHkg YF9fc3RhcnQnLiAgKi8KLQkJICAgICAgaWYgKGp1c3Rfc3RhcnRlZCkKLQkJ CXsKLQkJCSAgZmlyc3Rfb2JqZWN0X2ZpbGVfZW5kCi0JCQkgICAgPSBjcy0+ Y192YWx1ZSArIENTRUNUX0xFTiAoJm1haW5fYXV4KTsKLQkJCSAganVzdF9z dGFydGVkID0gMDsKLQkJCX0KLQotCQkgICAgICBmaWxlX3N0YXJ0X2FkZHIg PQotCQkJY3MtPmNfdmFsdWUgKyBBTk9GRlNFVCAob2JqZmlsZS0+c2VjdGlv bl9vZmZzZXRzLAotCQkJCQkJU0VDVF9PRkZfVEVYVCAob2JqZmlsZSkpOwot CQkgICAgICBmaWxlX2VuZF9hZGRyID0gZmlsZV9zdGFydF9hZGRyICsgQ1NF Q1RfTEVOICgmbWFpbl9hdXgpOwotCi0JCSAgICAgIGlmIChjcy0+Y19uYW1l ICYmIChjcy0+Y19uYW1lWzBdID09ICcuJwotCQkJCQkgfHwgY3MtPmNfbmFt ZVswXSA9PSAnQCcpKQotCQkJewotCQkJICBsYXN0X2NzZWN0X25hbWUgPSBj cy0+Y19uYW1lOwotCQkJICBsYXN0X2NzZWN0X3ZhbCA9IGNzLT5jX3ZhbHVl OwotCQkJICBsYXN0X2NzZWN0X3NlYyA9IHNlY251bV90b19zZWN0aW9uIChj cy0+Y19zZWNudW0sCi0JCQkJCQkJICAgICAgb2JqZmlsZSk7Ci0JCQl9Ci0J CSAgICB9CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChqdXN0X3N0YXJ0 ZWQpCisgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgZmlyc3Rfb2JqZWN0X2ZpbGVfZW5kCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPSBjcy0+Y192YWx1ZSArIENTRUNUX0xFTiAo Jm1haW5fYXV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAganVzdF9z dGFydGVkID0gMDsgCisgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAgICAgICAgICBmaWxlX3N0YXJ0X2FkZHIgPQorICAgICAg ICAgICAgICAgICAgICAgICAgIGNzLT5jX3ZhbHVlICsgQU5PRkZTRVQgKG9i amZpbGUtPnNlY3Rpb25fb2Zmc2V0cywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDVF9PRkZfVEVYVCAob2Jq ZmlsZSkpOworICAgICAgICAgICAgICAgICAgICAgICBmaWxlX2VuZF9hZGRy ID0gZmlsZV9zdGFydF9hZGRyICsgQ1NFQ1RfTEVOICgmbWFpbl9hdXgpOwor CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcy0+Y19uYW1lICYmIChj cy0+Y19uYW1lWzBdID09ICcuJworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8fCBjcy0+Y19uYW1lWzBdID09ICdAJykpCisg ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgbGFzdF9jc2VjdF9uYW1lID0gY3MtPmNfbmFtZTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgbGFzdF9jc2VjdF92YWwgPSBjcy0+Y192YWx1 ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jc2VjdF9zZWMg PSBzZWNudW1fdG9fc2VjdGlvbiAoY3MtPmNfc2VjbnVtLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvYmpmaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF9jc2VjdF9uYW1lKQor ICAgICAgICAgICAgICAgICAgICAgICB7ICAgIAorICAgICAgICAgICAgICAg ICAgICAgICAgICBmaWxlc3RyaW5nID0gcHN0LT5maWxlbmFtZTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVfc3ltdGFiIChmaWxlc3Ry aW5nLCBmaWxlX3N0YXJ0X2FkZHIpOworICAgICAgICAgICAgICAgICAgICAg ICAgICBjdXJfc3JjX2VuZF9hZGRyID0gZmlsZV9lbmRfYWRkcjsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgZW5kX3N5bXRhYiAoZmlsZV9lbmRfYWRk ciwgb2JqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU0VDVF9PRkZfVEVYVCAob2JqZmlsZSkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICBlbmRfc3RhYnMgKCk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXJ0X3N0YWJzICgpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBHaXZlIGFsbCBjc2VjdHMgZm9yIHRoaXMgc291cmNlIGZp bGUgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt ZS4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3N5bXRh YiAoZmlsZXN0cmluZywgKGNoYXIgKilOVUxMLCAoQ09SRV9BRERSKSAwKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX2RlYnVnZm9ybWF0 IChkZWJ1Z2ZtdCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0gICAgCisg ICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhpcyBpcyB0aGUgdmVyeSBm aXJzdCBjc2VjdCBzZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJh c2ljYWxseSBgX19zdGFydCcuICAqLworICAgICAgICAgICAgICAgICAgICB9 CisKIAkJICAgIGNvbnRpbnVlOwogCiAJCSAgICAvKiBBbGwgb3RoZXIgc3lt Ym9scyBhcmUgcHV0IGludG8gdGhlIG1pbmltYWwgc3ltYm9sCi0tLSAuL2dk Yi9jb25maWcvcnM2MDAwL25tLXJzNjAwMC5oX29yaWcJMjAxMi0wOC0wNyAx Nzo0ODo0Ni4xODEwNTgxMzkgKzA1MzAKKysrIC4vZ2RiL2NvbmZpZy9yczYw MDAvbm0tcnM2MDAwLmgJMjAxMi0wOC0wNyAxNzo0NzoxOC43NDkwOTYwMTMg KzA1MzAKQEAgLTMwLDcgKzMwLDcgQEAKICAgIGFuZCBmaWd1cmUgb3V0IHdo ZXJlIHRoZSBzaGFyZWQgbGlicmFyaWVzIGhhdmUgZ290IHRvLiAgKi8KIAog I2RlZmluZQlTT0xJQl9BREQoYSwgYiwgYywgZCkJXAotICBpZiAoUElER0VU IChpbmZlcmlvcl9wdGlkKSkJXAorICBpZiAoUElER0VUIChpbmZlcmlvcl9w dGlkKSAhPSAxKQlcCiAgICAgLyogQXR0YWNoIHRvIHByb2Nlc3MuICAqLyAg XAogICAgIHhjb2ZmX3JlbG9jYXRlX3N5bXRhYiAoUElER0VUIChpbmZlcmlv cl9wdGlkKSk7IFwKICAgZWxzZQkJXAotLS0gLi9nZGIvc3ltdGFiLmNfb3Jp ZwkyMDEyLTA4LTA3IDE3OjUyOjE1LjE4MTA2MDQwNSArMDUzMAorKysgLi9n ZGIvc3ltdGFiLmMJMjAxMi0wOC0wNyAxNzo1MzowNC42NTMwNTg3MjIgKzA1 MzAKQEAgLTIwNzIsNiArMjA3Miw5IEBACiAJewogCSAgLyogTGVhdmUgcHJl diBwb2ludGluZyB0byB0aGUgbGluZXRhYmxlIGVudHJ5IGZvciB0aGUgbGFz dCBsaW5lCiAJICAgICB0aGF0IHN0YXJ0ZWQgYXQgb3IgYmVmb3JlIFBDLiAg Ki8KKyAgICAgICAgICBpZiAoKGl0ZW0tPnBjID4gcGMpICYmICFpKSAvKiBm b3IgeGxjIG9uZSBsZXNzIGVudHJ5IGZvciBsaW5lIHRhYmxlICovCisgICAg ICAgICAgICAgIHByZXYgPSBpdGVtOyAgICAgICAgICAgIC8qIHBvaW50IGl0 ZW0gYXMgcHJldiAqLworCiAJICBpZiAoaXRlbS0+cGMgPiBwYykKIAkgICAg YnJlYWs7CiAK --e0cb4e43ab815ddaab04c6d0f0de Content-Type: application/octet-stream; name=bfd_ChangeLog Content-Disposition: attachment; filename=bfd_ChangeLog Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5nkwhw82 Content-length: 842 ICAgICAgICAqIGNvbmZpZ3VyZSAocG93ZXJwYzY0LSotYWl4WzUtOV0uKik6 IE1hdGNoIHBvd2VycGM2NCBydW5uaW5nIGFpeCBmb3IgY29yZSBmaWxlIHN1 cHBvcnQKCiAgICAgICAgKiByczYwMDAtY29yZS5jOiBDaGVjayBmb3IgX19s ZF9pbmZvNjQgaWYgY29tcGlsaW5nIDY0LWJpdCBnZGIuCiAgICAgICAgQWRk ZWQgQkZENjQgY2hlY2sgaWYgd2UgYXJlIHVzaW5nIG9sZCBjb3JlIGZpbGUg Zm9ybWF0IGZvciAzMi1iaXQgZ2RiLgogICAgICAgIFNldCBzaXplb2YgQ09S RV9DT01NT05TWiBhcHByb3ByaWF0ZWx5IGluIGNhc2Ugb2YgZWl0aGVyIG5l dyBvciBvbGQgY29yZSBmaWxlIGZvcm1hdC4KICAgICAgICAocmVhZF9oZHIp OiBBZGRlZCBCRkQ2NCBjaGVjayBmb3IgNjQtYml0IHN1cHBvcnQuCiAgICAg ICAgKHJzNjAwMGNvZmZfY29yZV9wKTogTGlrZXdpc2UuCiAgICAgICAgKHJz NjAwMGNvZmZfY29yZV9maWxlX21hdGNoZXNfZXhlY3V0YWJsZV9wKTogTGlr ZXdpc2UuCiAgICAgICAgKHJzNjAwMGNvZmZfY29yZV9maWxlX2ZhaWxpbmdf Y29tbWFuZCk6IExpa2V3aXNlLgogICAgICAgIChyczYwMDBjb2ZmX2NvcmVf ZmlsZV9mYWlsaW5nX2NvbW1hbmQpOiBMaWtld2lzZS4KCg== --e0cb4e43ab815ddaab04c6d0f0de Content-Type: application/octet-stream; name=64bitsupport_aix_bfd Content-Disposition: attachment; filename=64bitsupport_aix_bfd Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5nkwoco3 Content-length: 8606 LS0tIC4vYmZkL2NvbmZpZ3VyZV9vcmlnCTIwMTEtMTEtMTEgMTI6MDE6MzEu MTg4OTk1MjkwICswNTMwCisrKyAuL2JmZC9jb25maWd1cmUJMjAxMi0wNy0y NSAxNjowNzozOS4wMTA3MzU2NjUgKzA1MzAKQEAgLTEzOTczLDcgKzEzOTcz LDcgQEAKICAgcnM2MDAwLSotbHlueCopCiAgIAlDT1JFRklMRT1seW54LWNv cmUubG8KIAk7OwotICByczYwMDAtKi1haXhbNS05XS4qIHwgcG93ZXJwYy0q LWFpeFs1LTldLiopCisgIHJzNjAwMC0qLWFpeFs1LTldLiogfCBwb3dlcnBj LSotYWl4WzUtOV0uKiB8IHBvd2VycGM2NC0qLWFpeFs1LTldLiopCiAgICAg ICAgIENPUkVGSUxFPXJzNjAwMC1jb3JlLmxvCiAJQ09SRUZMQUc9IiRDT1JF RkxBRyAtREFJWF81X0NPUkUgLURBSVhfQ09SRV9EVU1QWF9DT1JFIgogCTs7 CkBAIC0xNDAxMSw2ICsxNDAxMSw3IEBACiAgIHJzNjAwMC0qLSopCQlDT1JF RklMRT1yczYwMDAtY29yZS5sbyA7OwogICBwb3dlcnBjLSotYWl4NCopCUNP UkVGSUxFPXJzNjAwMC1jb3JlLmxvIDs7CiAgIHBvd2VycGMtKi1haXgqKQlD T1JFRklMRT1yczYwMDAtY29yZS5sbyA7OworICBwb3dlcnBjNjQtKi1haXgp CUNPUkVGSUxFPXJzNjAwMC1jb3JlLmxvIDs7CiAgIHBvd2VycGMtKi1iZW9z KikJOzsKICAgcG93ZXJwYy0qLWZyZWVic2QqIHwgcG93ZXJwYy0qLWtmcmVl YnNkKi1nbnUpCiAJCSAgICAgICAgQ09SRUZJTEU9JycgOzsKLS0tIC4vYmZk L3JzNjAwMC1jb3JlLmNfb3JpZwkyMDExLTExLTEwIDE5OjAyOjU5LjA5MzYw NzE4NSArMDUzMAorKysgLi9iZmQvcnM2MDAwLWNvcmUuYwkyMDEyLTA3LTI3 IDEyOjMyOjExLjk2MDE4MTE5MCArMDUzMApAQCAtOTQsNyArOTQsNyBAQAog LyogVW5pb24gb2YgMzItYml0IGFuZCA2NC1iaXQgdmVyc2lvbnMgb2YgbGRf aW5mby4gICovCiAKIHR5cGVkZWYgdW5pb24gewotI2lmZGVmIF9fbGRfaW5m bzMyCisjaWYgZGVmaW5lZCAoX19sZF9pbmZvMzIpIHx8IGRlZmluZWQgKF9f bGRfaW5mbzY0KQogICBzdHJ1Y3QgX19sZF9pbmZvMzIgbDMyOwogICBzdHJ1 Y3QgX19sZF9pbmZvNjQgbDY0OwogI2Vsc2UKQEAgLTExMSw4ICsxMTEsMTAg QEAKICNlbHNlCiAgIHN0cnVjdCBjb3JlX2R1bXAgbmV3X2R1bXA7CQkvKiBm b3Igc2ltcGxlciBjb2RpbmcgKi8KICNlbmRpZgorI2lmbmRlZiBCRkQ2NCAg ICAgICAgICAgICAgICAgICAvKiB1c2Ugb2xkIG9ubHkgaWYgZ2RiIGlzIDMy LWJpdCAqLwogICBzdHJ1Y3QgY29yZV9kdW1wIG9sZDsJCS8qIG9sZCBBSVgg NC4yLSBjb3JlIGR1bXAsIHN0aWxsIHVzZWQgb24KIAkJCQkgICA0LjMrIHdp dGggYXBwcm9wcmlhdGUgU01JVCBjb25maWcgKi8KKyNlbmRpZgogfSBDb3Jl SGRyOwogCiAvKiBVbmlvbiBvZiBvbGQgYW5kIG5ldyB2bV9pbmZvIHN0cnVj dHVyZXMuICAqLwpAQCAtMTI0LDE0ICsxMjYsMjAgQEAKICNlbHNlCiAgIHN0 cnVjdCB2bV9pbmZvIG5ld19kdW1wOwogI2VuZGlmCisjaWZuZGVmIEJGRDY0 CiAgIHN0cnVjdCB2bV9pbmZvIG9sZDsKKyNlbmRpZgogfSBWbUluZm87CiAj ZW5kaWYKIAogLyogUmV0dXJuIHdoZXRoZXIgQ29yZUhkciBDIGlzIGluIG5l dyBvciBvbGQgZm9ybWF0LiAgKi8KIAogI2lmZGVmIEFJWF9DT1JFX0RVTVBY X0NPUkUKLSMgZGVmaW5lIENPUkVfTkVXKGMpCSghKGMpLm9sZC5jX2VudHJp ZXMpCisgI2lmbmRlZiBCRkQ2NAorICAgIyBkZWZpbmUgQ09SRV9ORVcoYykJ KCEoYykub2xkLmNfZW50cmllcykKKyAjZWxzZQorICAgIyBkZWZpbmUgQ09S RV9ORVcoYykgICAoIShjKS5uZXdfZHVtcC5jX2VudHJpZXMpCisgI2VuZGlm CiAjZWxzZQogIyBkZWZpbmUgQ09SRV9ORVcoYykJMAogI2VuZGlmCkBAIC0y NjAsOCArMjY4LDEzIEBACiAKIC8qIFNpemUgb2YgdGhlIGxlYWRpbmcgcG9y dGlvbiB0aGF0IG9sZCBhbmQgbmV3IGNvcmUgZHVtcCBzdHJ1Y3R1cmVzIGhh dmUgaW4KICAgIGNvbW1vbi4gICovCi0jZGVmaW5lIENPUkVfQ09NTU9OU1oJ KChpbnQpICYoKHN0cnVjdCBjb3JlX2R1bXAgKikgMCktPmNfZW50cmllcyBc Ci0JCQkgKyBzaXplb2YgKCgoc3RydWN0IGNvcmVfZHVtcCAqKSAwKS0+Y19l bnRyaWVzKSkKKyNpZmRlZiBBSVhfQ09SRV9EVU1QWF9DT1JFCisjZGVmaW5l IENPUkVfQ09NTU9OU1ogICgobG9uZykgJigoc3RydWN0IGNvcmVfZHVtcHgg KikgMCktPmNfZW50cmllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAr IHNpemVvZiAoKChzdHJ1Y3QgY29yZV9kdW1weCAqKSAwKS0+Y19lbnRyaWVz KSkKKyNlbHNlCisjZGVmaW5lIENPUkVfQ09NTU9OU1ogICAoKGludCkgJigo c3RydWN0IGNvcmVfZHVtcCAqKSAwKS0+Y19lbnRyaWVzIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgKyBzaXplb2YgKCgoc3RydWN0IGNvcmVfZHVtcCAq KSAwKS0+Y19lbnRyaWVzKQorI2VuZGlmCiAKIC8qIERlZmluZSBwcm90b3R5 cGVzIGZvciBjZXJ0YWluIGZ1bmN0aW9ucywgdG8gYXZvaWQgYSBjb21waWxl ciB3YXJuaW5nCiAgICBzYXlpbmcgdGhhdCB0aGV5IGFyZSBtaXNzaW5nLiAg Ki8KQEAgLTI5Miw4ICszMDUsMTAgQEAKICAgLyogUmVhZCB0aGUgdHJhaWxp bmcgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlLiAgKi8KICAgaWYgKENPUkVf TkVXICgqY29yZSkpCiAgICAgc2l6ZSA9IHNpemVvZiAoY29yZS0+bmV3X2R1 bXApOworICAjaWZuZGVmIEJGRDY0CiAgIGVsc2UKICAgICBzaXplID0gc2l6 ZW9mIChjb3JlLT5vbGQpOworICAjZW5kaWYKICAgc2l6ZSAtPSBDT1JFX0NP TU1PTlNaOwogICByZXR1cm4gYmZkX2JyZWFkICgoY2hhciAqKSBjb3JlICsg Q09SRV9DT01NT05TWiwgc2l6ZSwgYWJmZCkgPT0gc2l6ZTsKIH0KQEAgLTM1 OCw2ICszNzMsNyBAQAogICAgICAgY19zdGFja2VuZCA9IENORVdfU1RBQ0tP UkcgKGNvcmUubmV3X2R1bXApICsgY19zaXplOwogICAgICAgY19sc2l6ZSA9 IENORVdfTFNJWkUgKGNvcmUubmV3X2R1bXApOwogICAgICAgY19sb2FkZXIg PSBDTkVXX0xPQURFUiAoY29yZS5uZXdfZHVtcCk7CisgICNpZm5kZWYgQkZE NjQKICAgICAgIHByb2M2NCA9IENORVdfUFJPQzY0IChjb3JlLm5ld19kdW1w KTsKICAgICB9CiAgIGVsc2UKQEAgLTM2OCw2ICszODQsNyBAQAogICAgICAg Y19zdGFja2VuZCA9IENPTERfU1RBQ0tFTkQ7CiAgICAgICBjX2xzaXplID0g MHg3ZmZmZmZmOwogICAgICAgY19sb2FkZXIgPSAoZmlsZV9wdHIpIChwdHJf dG9fdWludCkgQ09MRF9MT0FERVIgKGNvcmUub2xkKTsKKyAgICNlbmRpZgog ICAgICAgcHJvYzY0ID0gMDsKICAgICB9CiAKQEAgLTM4MSwxMSArMzk4LDEz IEBACiAgICAgICBjX3JlZ3NpemUgPSBzaXplb2YgKENORVdfTVNUU0FWRSAo Y29yZS5uZXdfZHVtcCkpOwogICAgICAgY19yZWdwdHIgPSAmQ05FV19NU1RT QVZFIChjb3JlLm5ld19kdW1wKTsKICAgICB9CisgICNpZm5kZWYgQkZENjQK ICAgZWxzZQogICAgIHsKICAgICAgIGNfcmVnc2l6ZSA9IHNpemVvZiAoQ09M RF9NU1RTQVZFIChjb3JlLm9sZCkpOwogICAgICAgY19yZWdwdHIgPSAmQ09M RF9NU1RTQVZFIChjb3JlLm9sZCk7CiAgICAgfQorICAjZW5kaWYKICAgY19y ZWdvZmYgPSAoY2hhciAqKSBjX3JlZ3B0ciAtIChjaGFyICopICZjb3JlOwog CiAgIGlmIChiZmRfc3RhdCAoYWJmZCwgJnN0YXRidWYpIDwgMCkKQEAgLTQz NSw3ICs0NTQsMTEgQEAKICAgICB9CiAKICAgLyogU2FuaXR5IGNoZWNrIG9u IHRoZSBjX3RhYiBmaWVsZC4gICovCisgICNpZm5kZWYgQkZENjQKICAgaWYg KCFDT1JFX05FVyAoY29yZSkgJiYgKGNfbG9hZGVyIDwgKGZpbGVfcHRyKSBz aXplb2YgY29yZS5vbGQgfHwKKyAgI2Vsc2UKKyAgaWYgKCFDT1JFX05FVyAo Y29yZSkgJiYgKGNfbG9hZGVyIDwgKGZpbGVfcHRyKSBzaXplb2YgY29yZS5u ZXdfZHVtcCB8fAorICAjZW5kaWYKIAkJCSAgIGNfbG9hZGVyID49IHN0YXRi dWYuc3Rfc2l6ZSB8fAogCQkJICAgY19sb2FkZXIgPj0gY19zdGFjaykpCiAg ICAgewpAQCAtNDQ5LDcgKzQ3MiwxMSBAQAogCQkJICAgYmZkX2dldF9maWxl bmFtZSAoYWJmZCkpOwogCiAgIC8qIEFsbG9jYXRlIGNvcmUgZmlsZSBoZWFk ZXIuICAqLworICAjaWZuZGVmIEJGRDY0CiAgIHNpemUgPSBDT1JFX05FVyAo Y29yZSkgPyBzaXplb2YgKGNvcmUubmV3X2R1bXApIDogc2l6ZW9mIChjb3Jl Lm9sZCk7CisgICNlbHNlCisgIHNpemUgPSAgc2l6ZW9mIChjb3JlLm5ld19k dW1wKTsKKyAgI2VuZGlmCiAgIHRtcHB0ciA9IChjaGFyICopIGJmZF96YWxs b2MgKGFiZmQsIChiZmRfc2l6ZV90eXBlKSBzaXplKTsKICAgaWYgKCF0bXBw dHIpCiAgICAgcmV0dXJuIE5VTEw7CkBAIC01NDIsNiArNTY5LDcgQEAKIAlj X3ZtcmVnaW9ucyA9IGNvcmUubmV3X2R1bXAuY192bXJlZ2lvbnM7CiAJY192 bW0gPSAoZmlsZV9wdHIpIGNvcmUubmV3X2R1bXAuY192bW07CiAgICAgICB9 CisgICAgI2lmbmRlZiBCRkQ2NAogICAgIGVsc2UKICAgICAgIHsKIAljX2Rh dGFzaXplID0gY29yZS5vbGQuY19kYXRhc2l6ZTsKQEAgLTU0OSw2ICs1Nzcs NyBAQAogCWNfdm1yZWdpb25zID0gY29yZS5vbGQuY192bXJlZ2lvbnM7CiAJ Y192bW0gPSAoZmlsZV9wdHIpIChwdHJfdG9fdWludCkgY29yZS5vbGQuY192 bW07CiAgICAgICB9CisgICAgI2VuZGlmCiAKICAgICAvKiAuZGF0YSBzZWN0 aW9uIGZyb20gZXhlY3V0YWJsZS4gICovCiAgICAgaWYgKGNfZGF0YXNpemUp CkBAIC02MTUsNyArNjQ0LDExIEBACiAJICAgIGZpbGVfcHRyIHZtaW5mb19v ZmZzZXQ7CiAJICAgIGJmZF92bWEgdm1pbmZvX2FkZHI7CiAKKyAgICAgICAg ICAgICNpZm5kZWYgQkZENjQKIAkgICAgc2l6ZSA9IENPUkVfTkVXIChjb3Jl KSA/IHNpemVvZiAodm1pbmZvLm5ld19kdW1wKSA6IHNpemVvZiAodm1pbmZv Lm9sZCk7CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgc2l6ZSA9 IHNpemVvZiAodm1pbmZvLm5ld19kdW1wKTsKKyAgICAgICAgICAgICNlbmRp ZgogCSAgICBpZiAoYmZkX2JyZWFkICgmdm1pbmZvLCBzaXplLCBhYmZkKSAh PSBzaXplKQogCSAgICAgIGdvdG8gZmFpbDsKIApAQCAtNjI1LDEyICs2NTgs MTQgQEAKIAkJdm1pbmZvX3NpemUgPSB2bWluZm8ubmV3X2R1bXAudm1pbmZv X3NpemU7CiAJCXZtaW5mb19vZmZzZXQgPSB2bWluZm8ubmV3X2R1bXAudm1p bmZvX29mZnNldDsKIAkgICAgICB9CisgICAgICAgICAgICAjaWZuZGVmIEJG RDY0CiAJICAgIGVsc2UKIAkgICAgICB7CiAJCXZtaW5mb19hZGRyID0gKGJm ZF92bWEpIChsb25nKSB2bWluZm8ub2xkLnZtaW5mb19hZGRyOwogCQl2bWlu Zm9fc2l6ZSA9IHZtaW5mby5vbGQudm1pbmZvX3NpemU7CiAJCXZtaW5mb19v ZmZzZXQgPSB2bWluZm8ub2xkLnZtaW5mb19vZmZzZXQ7CiAJICAgICAgfQor ICAgICAgICAgICAgICNlbmRpZgogCiAJICAgIGlmICh2bWluZm9fb2Zmc2V0 KQogCSAgICAgIGlmICghbWFrZV9iZmRfYXNlY3Rpb24gKGFiZmQsICIudm1k YXRhIiwKQEAgLTY3MCw4ICs3MDUsMTAgQEAKIAogICBpZiAoQ09SRV9ORVcg KGNvcmUpKQogICAgIGNfbG9hZGVyID0gQ05FV19MT0FERVIgKGNvcmUubmV3 X2R1bXApOworICAjaWZuZGVmIEJGRDY0CiAgIGVsc2UKICAgICBjX2xvYWRl ciA9IChmaWxlX3B0cikgKHB0cl90b191aW50KSBDT0xEX0xPQURFUiAoY29y ZS5vbGQpOworICAjZW5kaWYKIAogICBpZiAoQ09SRV9ORVcgKGNvcmUpICYm IENORVdfUFJPQzY0IChjb3JlLm5ld19kdW1wKSkKICAgICBzaXplID0gKGlu dCkgKChMZEluZm8gKikgMCktPmw2NC5sZGluZm9fZmlsZW5hbWU7CkBAIC03 MzQsOCArNzcxLDEyIEBACiByczYwMDBjb2ZmX2NvcmVfZmlsZV9mYWlsaW5n X2NvbW1hbmQgKGJmZCAqYWJmZCkKIHsKICAgQ29yZUhkciAqY29yZSA9IGNv cmVfaGRyIChhYmZkKTsKKyAgI2lmbmRlZiBCRkQ2NAogICBjaGFyICpjb20g PSBDT1JFX05FVyAoKmNvcmUpID8KICAgICBDTkVXX0NPTU0gKGNvcmUtPm5l d19kdW1wKSA6IENPTERfQ09NTSAoY29yZS0+b2xkKTsKKyAgI2Vsc2UKKyAg Y2hhciAqY29tID0gQ05FV19DT01NIChjb3JlLT5uZXdfZHVtcCk7CisgICNl bmRpZgogCiAgIGlmICgqY29tKQogICAgIHJldHVybiBjb207CkBAIC03NDcs NyArNzg4LDExIEBACiByczYwMDBjb2ZmX2NvcmVfZmlsZV9mYWlsaW5nX3Np Z25hbCAoYmZkICphYmZkKQogewogICBDb3JlSGRyICpjb3JlID0gY29yZV9o ZHIgKGFiZmQpOworICAjaWZuZGVmIEJGRDY0CiAgIHJldHVybiBDT1JFX05F VyAoKmNvcmUpID8gY29yZS0+bmV3X2R1bXAuY19zaWdubyA6IGNvcmUtPm9s ZC5jX3NpZ25vOworICAjZWxzZQorICByZXR1cm4gIGNvcmUtPm5ld19kdW1w LmNfc2lnbm87CisgICNlbmRpZgogfQogCiAjZW5kaWYgLyogQUlYX0NPUkUg Ki8K --e0cb4e43ab815ddaab04c6d0f0de--