From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32784 invoked by alias); 23 Mar 2017 02:56:22 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 32758 invoked by uid 89); 23 Mar 2017 02:56:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-22.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS,UNSUBSCRIBE_BODY autolearn=ham version=3.3.2 spammy= X-HELO: mail-wr0-f177.google.com Received: from mail-wr0-f177.google.com (HELO mail-wr0-f177.google.com) (209.85.128.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 23 Mar 2017 02:56:14 +0000 Received: by mail-wr0-f177.google.com with SMTP id l37so138715718wrc.1 for ; Wed, 22 Mar 2017 19:56:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=UmvG0WPBKg/2GhV4IDKoad7mOxoPsGcGOaKX2/Ej+2Y=; b=ZmSQVX68y0GdaXwK8QnhGn91nciya1VI9qc1LN60BgMuOX9j1ElRMoG2u0P6HawUIx ikkH59UI4uosAiYAvaMAnD/73Ci+ySzMG8CpLY0AK0QxJNqP4LACmPUlNl1sriE4bV4M DCJshUEyR/hpzrwTqIsnOnVRUWc0/9FtjtfeZ4qNteC8AMo1g5PW545zDc5dzS0ovqXQ Vlq5J8VnU6Yzd/MCwqi+vPPLCv5m9aihvMT0O78iLwzW9FJk1Q2RddctJ/kI5kuoSltf iRVQ/ko5DOZx1kFl6Y+yQ9uyEpJqO9ZVZFTLJAvK/NFS7UosT2iYNDpyYLkI45gFCN3b a4iQ== X-Gm-Message-State: AFeK/H2nGYFKLXpn3MATprqhLeiof0KHH/UKSwJJ9cDfFMSYQCEP46wHIdq1/UGiHr0QzYlkx1NmMkfYuGnkAw== X-Received: by 10.223.162.198 with SMTP id t6mr181242wra.155.1490237773187; Wed, 22 Mar 2017 19:56:13 -0700 (PDT) MIME-Version: 1.0 Received: by 10.80.195.15 with HTTP; Wed, 22 Mar 2017 19:55:32 -0700 (PDT) In-Reply-To: References: <6ba7849d-2475-587d-d4a9-6e67c7df550b@redhat.com> From: Pip Cet Date: Thu, 23 Mar 2017 02:56:00 -0000 Message-ID: Subject: Re: [PATCH] [WebAssembly] Skeleton support To: Nick Clifton Cc: binutils@sourceware.org Content-Type: multipart/mixed; boundary=f403045e9cf61d94d2054b5d052e X-IsSubscribed: yes X-SW-Source: 2017-03/txt/msg00318.txt.bz2 --f403045e9cf61d94d2054b5d052e Content-Type: text/plain; charset=UTF-8 Content-length: 16458 Okay, here's the first part of the changes, adding a new architecture, wasm32, and minimal ELF support. I've left the date range in the copyright notice for elf32-wasm32.c because future patches will add substantial parts from other architectures' ELF support files; if that needs changing, please let me know. Any comments would be appreciated. Thanks, Pip Suggested change log entries: include/: 2017-03-22 Pip Cet * elf/wasm32.h: New file to support wasm32 architecture. bfd/: 2017-03-22 Pip Cet * cpu-wasm32.c: New file to support wasm32 architecture. * elf32-wasm32.c: New file to support wasm32 architecture. * Makefile.am: Add wasm32 architecture. * archures.c: Likewise. * config.bfd: Likewise. * configure.ac: Likewise. * targets.c: Likewise. ----- diff --git a/bfd/Makefile.am b/bfd/Makefile.am index 0b0226306f..6fa8302020 100644 --- a/bfd/Makefile.am +++ b/bfd/Makefile.am @@ -169,6 +169,7 @@ ALL_MACHINES = \ cpu-vax.lo \ cpu-visium.lo \ cpu-w65.lo \ + cpu-wasm32.lo \ cpu-we32k.lo \ cpu-xc16x.lo \ cpu-xgate.lo \ @@ -257,6 +258,7 @@ ALL_MACHINES_CFILES = \ cpu-v850_rh850.c \ cpu-vax.c \ cpu-visium.c \ + cpu-wasm32.c \ cpu-w65.c \ cpu-we32k.c \ cpu-xc16x.c \ @@ -383,6 +385,7 @@ BFD32_BACKENDS = \ elf32-v850.lo \ elf32-vax.lo \ elf32-visium.lo \ + elf32-wasm32.lo \ elf32-xc16x.lo \ elf32-xgate.lo \ elf32-xstormy16.lo \ @@ -576,6 +579,7 @@ BFD32_BACKENDS_CFILES = \ elf32-v850.c \ elf32-vax.c \ elf32-visium.c \ + elf32-wasm32.c \ elf32-xc16x.c \ elf32-xgate.c \ elf32-xstormy16.c \ diff --git a/bfd/archures.c b/bfd/archures.c index c909db012d..c6e7152057 100644 --- a/bfd/archures.c +++ b/bfd/archures.c @@ -528,6 +528,8 @@ DESCRIPTION .#define bfd_mach_nios2r2 2 . bfd_arch_visium, {* Visium *} .#define bfd_mach_visium 1 +. bfd_arch_wasm32, {* WebAssembly *} +.#define bfd_mach_wasm32 1 . bfd_arch_pru, {* PRU *} .#define bfd_mach_pru 0 . bfd_arch_last @@ -654,6 +656,7 @@ extern const bfd_arch_info_type bfd_v850_arch; extern const bfd_arch_info_type bfd_v850_rh850_arch; extern const bfd_arch_info_type bfd_vax_arch; extern const bfd_arch_info_type bfd_visium_arch; +extern const bfd_arch_info_type bfd_wasm32_arch; extern const bfd_arch_info_type bfd_w65_arch; extern const bfd_arch_info_type bfd_we32k_arch; extern const bfd_arch_info_type bfd_xstormy16_arch; @@ -746,6 +749,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] = &bfd_vax_arch, &bfd_visium_arch, &bfd_w65_arch, + &bfd_wasm32_arch, &bfd_we32k_arch, &bfd_xstormy16_arch, &bfd_xtensa_arch, diff --git a/bfd/config.bfd b/bfd/config.bfd index 52db9a47f1..abcb7ae210 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -197,6 +197,7 @@ tilegx*) targ_archs=bfd_tilegx_arch ;; tilepro*) targ_archs=bfd_tilepro_arch ;; v850*) targ_archs="bfd_v850_arch bfd_v850_rh850_arch" ;; visium*) targ_archs=bfd_visium_arch ;; +wasm32) targ_archs=bfd_wasm32_arch ;; x86_64*) targ_archs=bfd_i386_arch ;; xtensa*) targ_archs=bfd_xtensa_arch ;; xgate) targ_archs=bfd_xgate_arch ;; @@ -1793,6 +1794,10 @@ case "${targ}" in targ_defvec=visium_elf32_vec ;; + wasm32-*-*) + targ_defvec=wasm32_elf32_vec + ;; + we32k-*-*) targ_defvec=we32k_coff_vec ;; diff --git a/bfd/configure.ac b/bfd/configure.ac index ee0c537ea2..77961945d1 100644 --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -700,6 +700,7 @@ do ft32_elf32_vec) tb="$tb elf32-ft32.lo elf32.lo $elf" ;; visium_elf32_vec) tb="$tb elf32-visium.lo elf32.lo $elf" ;; w65_coff_vec) tb="$tb coff-w65.lo reloc16.lo $coffgen" ;; + wasm32_elf32_vec) tb="$tb elf32-wasm32.lo elf32.lo $elf" ;; we32k_coff_vec) tb="$tb coff-we32k.lo $coffgen" ;; x86_64_coff_vec) tb="$tb coff-x86_64.lo $coff"; target_size=64 ;; x86_64_elf32_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;; diff --git a/bfd/cpu-wasm32.c b/bfd/cpu-wasm32.c new file mode 100644 index 0000000000..19d4cb9270 --- /dev/null +++ b/bfd/cpu-wasm32.c @@ -0,0 +1,36 @@ +/* BFD support for the WebAssembly target + Copyright (C) 2017 Free Software Foundation, Inc. + + This file is part of BFD, the Binary File Descriptor library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" +#include "libiberty.h" + +#define N(number, print, default, next) \ +{ 32, 32, 8, bfd_arch_wasm32, number, "wasm32", "wasm32", 4, default, bfd_default_compatible, \ + bfd_default_scan, bfd_arch_default_fill, next } + +static const bfd_arch_info_type arch_info_struct[] = +{ + N (bfd_mach_wasm32, "wasm32", TRUE, NULL) +}; + +const bfd_arch_info_type bfd_wasm32_arch = + N (bfd_mach_wasm32, "wasm32", TRUE, & arch_info_struct[0]); diff --git a/bfd/elf32-wasm32.c b/bfd/elf32-wasm32.c new file mode 100644 index 0000000000..2088146cc4 --- /dev/null +++ b/bfd/elf32-wasm32.c @@ -0,0 +1,52 @@ +/* 32-bit ELF for the WebAssembly target + Copyright (C) 1999-2017 Free Software Foundation, Inc. + + This file is part of BFD, the Binary File Descriptor library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, + Boston, MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" +#include "elf-bfd.h" +#include "bfd_stdint.h" +#include "elf/wasm32.h" + +#define ELF_ARCH bfd_arch_wasm32 +#define ELF_TARGET_ID EM_WEBASSEMBLY +#define ELF_MACHINE_CODE EM_WEBASSEMBLY +/* FIXME we don't have paged executables, see + * https://github.com/pipcet/binutils-gdb/issues/4 */ +#define ELF_MAXPAGESIZE 4096 + +#define TARGET_LITTLE_SYM wasm32_elf32_vec +#define TARGET_LITTLE_NAME "elf32-wasm32" + +#define elf_backend_can_gc_sections 1 +#define elf_backend_rela_normal 1 +/* For testing. */ +#define elf_backend_want_dynrelro 1 + +#define bfd_elf32_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup +#define bfd_elf32_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup + +#define ELF_DYNAMIC_INTERPRETER "/sbin/elf-dynamic-interpreter.so" + +#define elf_backend_want_got_plt 1 +#define elf_backend_plt_readonly 1 +#define elf_backend_got_header_size 0 + +#include "elf32-target.h" diff --git a/bfd/targets.c b/bfd/targets.c index 1a7c6b87d6..74559ac4c6 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -893,6 +893,7 @@ extern const bfd_target vax_aout_nbsd_vec; extern const bfd_target vax_elf32_vec; extern const bfd_target visium_elf32_vec; extern const bfd_target w65_coff_vec; +extern const bfd_target wasm32_elf32_vec; extern const bfd_target we32k_coff_vec; extern const bfd_target x86_64_coff_vec; extern const bfd_target x86_64_elf32_vec; @@ -1421,6 +1422,8 @@ static const bfd_target * const _bfd_target_vector[] = &w65_coff_vec, + &wasm32_elf32_vec, + &we32k_coff_vec, #ifdef BFD64 diff --git a/include/elf/wasm32.h b/include/elf/wasm32.h new file mode 100644 index 0000000000..38e6c2e950 --- /dev/null +++ b/include/elf/wasm32.h @@ -0,0 +1,28 @@ +/* ELF support for BFD for the WebAssembly target + Copyright (C) 2017 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _ELF_WASM32_H +#define _ELF_WASM32_H + +#include "elf/reloc-macros.h" + +/* Relocation types. */ + +START_RELOC_NUMBERS (elf_wasm32_reloc_type) +END_RELOC_NUMBERS (R_WASM32_max = 1) + +#endif /* _ELF_WASM32_H */ On Wed, Mar 22, 2017 at 4:11 PM, Pip Cet wrote: > Hi Nick, > thank you very much for your comments. If it's okay, I shall split the > patch into two parts (one for the skeleton code, one for wasm-module.c > plus the new header file), address your comments, and try again. > > On Wed, Mar 22, 2017 at 12:55 PM, Nick Clifton wrote: >> It is often easier (for us) if changelog entries are not included in >> the patch, but instead are just part of the accompanying email. This >> is because they almost never apply when patching the sources, and so >> they always have to be added by hand. > > Thanks, noted. > >>> diff --git a/bfd/cpu-wasm32.c b/bfd/cpu-wasm32.c >>> new file mode 100644 >>> index 0000000000..929778d531 >>> --- /dev/null >>> +++ b/bfd/cpu-wasm32.c >>> @@ -0,0 +1,36 @@ >>> +/* BFD support for the WebAssembly target >>> + Copyright (C) 1994-2017 Free Software Foundation, Inc. >> >> Given that this file is brand new, it is hard to see how the FSF can claim >> copyright from 1994... > > You're right; it is based on an older file, but has been replaced entirely. > >>> +#define ELF_TARGET_ID 0x4157 /* 'WA' */ >>> +#define ELF_MACHINE_CODE 0x4157 /* 'WA' */ >> >> You could use the value EM_WEBASSEMBLY here. It is defined in include/elf/common.h. >> >>> +++ b/bfd/targets.c >>> @@ -893,6 +893,8 @@ extern const bfd_target vax_aout_nbsd_vec; >>> extern const bfd_target vax_elf32_vec; >>> extern const bfd_target visium_elf32_vec; >>> extern const bfd_target w65_coff_vec; >>> +extern const bfd_target wasm_vec; >>> +extern const bfd_target wasm32_elf32_vec; >>> extern const bfd_target we32k_coff_vec; >>> extern const bfd_target x86_64_coff_vec; >>> extern const bfd_target x86_64_elf32_vec; >> >> You missed out a required patch to this file. The _bfd_target_vector >> array (starting at line 940) needs to have the new wasm vectors added to it. >> To see why, try building a set of the binutils sources configured as: >> >> --enable-64-bit-bfd --enable-targets=all > > Thanks! > >>> diff --git a/bfd/wasm-module.c b/bfd/wasm-module.c >> >>> +/* From elf-eh-frame.c: */ >>> +/* If *ITER hasn't reached END yet, read the next byte into *RESULT and >>> + move onto the next byte. Return true on success. */ >>> + >>> +static inline bfd_boolean >>> +read_byte (bfd_byte **iter, bfd_byte *end, unsigned char *result) >> >> Given that you are duplicating code that is already in another source file, >> it might be better to just change those functions to non-static and use them >> directly. This avoids unnecessary code duplication... > > Yeah, the situation for the LEB128 code in particular is a bit diffuse > at the moment: by my count, there are eleven files (including gdb and > gold in the count) defining at least one LEB128 function, with > different calling conventions, return types, and error behaviour. I'd > like to remedy that in a future patch, but for now the risk of > namespace collisions convinced me not to export the ELF functions. > >>> +static bfd_vma >>> +wasm_get_uleb128 (bfd* abfd, bfd_boolean* error) >> >> It is *very* helpful to have a comment before the start of a function, >> explaining what it does. (Well if it is a non-trivial function). > > Thanks, I shall add those. > >> In >> particular I wondered why you need a webasm specific ULEB128 reading >> function. Does webasm use non-standard ULEB128 values, or is there >> something else going on ? > > The problem is that WebAssembly doesn't consider it necessary to tell > you in advance how much data there is to be read, so EOF needs to be > handled carefully. (The other deviation is that WebAssembly allows > overlong LEB128 representations, but only if the number of bytes > doesn't exceed the maximum for the integer size (5 bytes for 32 bits, > usually)). Now that I write it down this should definitely go into > separate functions... > >> Given that there are already LEB128 reading functions in libbfd.c, maybe >> they could be used instead ? > > I'll give that another try. > >>> + { >>> + if (bfd_get_error () != bfd_error_file_truncated) >>> + *errorptr = TRUE; >>> + return FALSE; >>> + } >> >> Why is it not an error if the read failed for some reason other than file >> truncation ? > > I may be misreading the code; the intention is that *errorptr is set > to TRUE, indicating an error, for all reasons except for file > truncation, which indicates EOF, which is not an error if we're done > with the last section. > >>> +static int >>> +wasm_get_byte (bfd *abfd, bfd_boolean *errorptr) >>> +{ >>> + bfd_byte byte; >>> + if (bfd_bread (&byte, (bfd_size_type) 1, abfd) != 1) >>> + { >>> + if (bfd_get_error () != bfd_error_file_truncated) >>> + *errorptr = TRUE; >>> + return EOF; >>> + } >> >> This particular piece of code is repeated several times in the wasm-module.c >> source file. Perhaps this is a suitable case for a macro or inline function ? > > Yes, I'll make it one. > >>> +static bfd_boolean >>> +wasm_scan_name_function_section (bfd *abfd, sec_ptr asect, >>> + void *data ATTRIBUTE_UNUSED) >>> +{ >>> + if (!asect) >>> + return FALSE; >>> + >>> + if (strcmp (asect->name, ".wasm.name") != 0) >>> + return FALSE; >>> + >>> + bfd_byte *p = asect->contents; >>> + bfd_byte *end = asect->contents + asect->size; >> >> Please move variable declarations to the start of the block. (So >> that the sources can be built with any ISO-C compliant C compiler, >> not just gcc). > > I'll add -Wdeclaration-after-statement to my C flags. Perhaps this > should be added to warning.m4? > > (I tried that, and there are a number of places that trigger the > warning; I fixed them, mostly to check that there were no actual bugs, > and things build cleanly with the warning now. Should I submit a patch > for that?) > >>> + while (p && p < end) >>> + { >>> + if (*p++ == 1) >>> + break; >>> + bfd_vma payload_size; >>> + if (!read_uleb128 (&p, end, &payload_size)) >>> + return FALSE; >>> + >>> + p += payload_size; >>> + } >> >> A very large value for payload_size could result in p wrapping round >> to before asect->contents. Is there a maximum known payload size ? > > Thanks for spotting that! > >> If so then you ought to check for it here. Otherwise check that: >> p < p + payload_size < end > > Will do. > >>> + bfd_vma payload_size; >> >> You are declaring payload_size twice in this function! > > Oops, sorry about that. > >> Phew - well that is it for a first pass. I hope that these comments were helpful. > > They are, absolutely. Thanks again, and sorry for causing you so much work, > Pip --f403045e9cf61d94d2054b5d052e Content-Type: text/plain; charset=US-ASCII; name="binutils-wasm-003.diff" Content-Disposition: attachment; filename="binutils-wasm-003.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j0lt0z4n0 Content-length: 11794 ZGlmZiAtLWdpdCBhL2JmZC9NYWtlZmlsZS5hbSBiL2JmZC9NYWtlZmlsZS5h bQppbmRleCAwYjAyMjYzMDZmLi42ZmE4MzAyMDIwIDEwMDY0NAotLS0gYS9i ZmQvTWFrZWZpbGUuYW0KKysrIGIvYmZkL01ha2VmaWxlLmFtCkBAIC0xNjks NiArMTY5LDcgQEAgQUxMX01BQ0hJTkVTID0gXAogCWNwdS12YXgubG8gXAog CWNwdS12aXNpdW0ubG8gXAogCWNwdS13NjUubG8gXAorCWNwdS13YXNtMzIu bG8gXAogCWNwdS13ZTMyay5sbyBcCiAJY3B1LXhjMTZ4LmxvIFwKIAljcHUt eGdhdGUubG8gXApAQCAtMjU3LDYgKzI1OCw3IEBAIEFMTF9NQUNISU5FU19D RklMRVMgPSBcCiAJY3B1LXY4NTBfcmg4NTAuYyBcCiAJY3B1LXZheC5jIFwK IAljcHUtdmlzaXVtLmMgXAorCWNwdS13YXNtMzIuYyBcCiAJY3B1LXc2NS5j IFwKIAljcHUtd2UzMmsuYyBcCiAJY3B1LXhjMTZ4LmMgXApAQCAtMzgzLDYg KzM4NSw3IEBAIEJGRDMyX0JBQ0tFTkRTID0gXAogCWVsZjMyLXY4NTAubG8g XAogCWVsZjMyLXZheC5sbyBcCiAJZWxmMzItdmlzaXVtLmxvIFwKKwllbGYz Mi13YXNtMzIubG8gXAogCWVsZjMyLXhjMTZ4LmxvIFwKIAllbGYzMi14Z2F0 ZS5sbyBcCiAJZWxmMzIteHN0b3JteTE2LmxvIFwKQEAgLTU3Niw2ICs1Nzks NyBAQCBCRkQzMl9CQUNLRU5EU19DRklMRVMgPSBcCiAJZWxmMzItdjg1MC5j IFwKIAllbGYzMi12YXguYyBcCiAJZWxmMzItdmlzaXVtLmMgXAorCWVsZjMy LXdhc20zMi5jIFwKIAllbGYzMi14YzE2eC5jIFwKIAllbGYzMi14Z2F0ZS5j IFwKIAllbGYzMi14c3Rvcm15MTYuYyBcCmRpZmYgLS1naXQgYS9iZmQvYXJj aHVyZXMuYyBiL2JmZC9hcmNodXJlcy5jCmluZGV4IGM5MDlkYjAxMmQuLmM2 ZTcxNTIwNTcgMTAwNjQ0Ci0tLSBhL2JmZC9hcmNodXJlcy5jCisrKyBiL2Jm ZC9hcmNodXJlcy5jCkBAIC01MjgsNiArNTI4LDggQEAgREVTQ1JJUFRJT04K IC4jZGVmaW5lIGJmZF9tYWNoX25pb3MycjIJMgogLiAgYmZkX2FyY2hfdmlz aXVtLAl7KiBWaXNpdW0gKn0KIC4jZGVmaW5lIGJmZF9tYWNoX3Zpc2l1bQkx CisuICBiZmRfYXJjaF93YXNtMzIsICAgICB7KiBXZWJBc3NlbWJseSAqfQor LiNkZWZpbmUgYmZkX21hY2hfd2FzbTMyICAgICAgICAxCiAuICBiZmRfYXJj aF9wcnUsCXsqIFBSVSAqfQogLiNkZWZpbmUgYmZkX21hY2hfcHJ1CTAKIC4g IGJmZF9hcmNoX2xhc3QKQEAgLTY1NCw2ICs2NTYsNyBAQCBleHRlcm4gY29u c3QgYmZkX2FyY2hfaW5mb190eXBlIGJmZF92ODUwX2FyY2g7CiBleHRlcm4g Y29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGJmZF92ODUwX3JoODUwX2FyY2g7 CiBleHRlcm4gY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGJmZF92YXhfYXJj aDsKIGV4dGVybiBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYmZkX3Zpc2l1 bV9hcmNoOworZXh0ZXJuIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBiZmRf d2FzbTMyX2FyY2g7CiBleHRlcm4gY29uc3QgYmZkX2FyY2hfaW5mb190eXBl IGJmZF93NjVfYXJjaDsKIGV4dGVybiBjb25zdCBiZmRfYXJjaF9pbmZvX3R5 cGUgYmZkX3dlMzJrX2FyY2g7CiBleHRlcm4gY29uc3QgYmZkX2FyY2hfaW5m b190eXBlIGJmZF94c3Rvcm15MTZfYXJjaDsKQEAgLTc0Niw2ICs3NDksNyBA QCBzdGF0aWMgY29uc3QgYmZkX2FyY2hfaW5mb190eXBlICogY29uc3QgYmZk X2FyY2h1cmVzX2xpc3RbXSA9CiAgICAgJmJmZF92YXhfYXJjaCwKICAgICAm YmZkX3Zpc2l1bV9hcmNoLAogICAgICZiZmRfdzY1X2FyY2gsCisgICAgJmJm ZF93YXNtMzJfYXJjaCwKICAgICAmYmZkX3dlMzJrX2FyY2gsCiAgICAgJmJm ZF94c3Rvcm15MTZfYXJjaCwKICAgICAmYmZkX3h0ZW5zYV9hcmNoLApkaWZm IC0tZ2l0IGEvYmZkL2NvbmZpZy5iZmQgYi9iZmQvY29uZmlnLmJmZAppbmRl eCA1MmRiOWE0N2YxLi5hYmNiN2FlMjEwIDEwMDY0NAotLS0gYS9iZmQvY29u ZmlnLmJmZAorKysgYi9iZmQvY29uZmlnLmJmZApAQCAtMTk3LDYgKzE5Nyw3 IEBAIHRpbGVneCopCSB0YXJnX2FyY2hzPWJmZF90aWxlZ3hfYXJjaCA7Owog dGlsZXBybyopCSB0YXJnX2FyY2hzPWJmZF90aWxlcHJvX2FyY2ggOzsKIHY4 NTAqKQkJIHRhcmdfYXJjaHM9ImJmZF92ODUwX2FyY2ggYmZkX3Y4NTBfcmg4 NTBfYXJjaCIgOzsKIHZpc2l1bSopCSB0YXJnX2FyY2hzPWJmZF92aXNpdW1f YXJjaCA7Oword2FzbTMyKQkJIHRhcmdfYXJjaHM9YmZkX3dhc20zMl9hcmNo IDs7CiB4ODZfNjQqKQkgdGFyZ19hcmNocz1iZmRfaTM4Nl9hcmNoIDs7CiB4 dGVuc2EqKQkgdGFyZ19hcmNocz1iZmRfeHRlbnNhX2FyY2ggOzsKIHhnYXRl KQkJIHRhcmdfYXJjaHM9YmZkX3hnYXRlX2FyY2ggOzsKQEAgLTE3OTMsNiAr MTc5NCwxMCBAQCBjYXNlICIke3Rhcmd9IiBpbgogICAgIHRhcmdfZGVmdmVj PXZpc2l1bV9lbGYzMl92ZWMKICAgICA7OwogCisgIHdhc20zMi0qLSopCisg ICAgdGFyZ19kZWZ2ZWM9d2FzbTMyX2VsZjMyX3ZlYworICAgIDs7CisKICAg d2UzMmstKi0qKQogICAgIHRhcmdfZGVmdmVjPXdlMzJrX2NvZmZfdmVjCiAg ICAgOzsKZGlmZiAtLWdpdCBhL2JmZC9jb25maWd1cmUuYWMgYi9iZmQvY29u ZmlndXJlLmFjCmluZGV4IGVlMGM1MzdlYTIuLjc3OTYxOTQ1ZDEgMTAwNjQ0 Ci0tLSBhL2JmZC9jb25maWd1cmUuYWMKKysrIGIvYmZkL2NvbmZpZ3VyZS5h YwpAQCAtNzAwLDYgKzcwMCw3IEBAIGRvCiAgICAgZnQzMl9lbGYzMl92ZWMp CQkgdGI9IiR0YiBlbGYzMi1mdDMyLmxvIGVsZjMyLmxvICRlbGYiIDs7CiAg ICAgdmlzaXVtX2VsZjMyX3ZlYykJCSB0Yj0iJHRiIGVsZjMyLXZpc2l1bS5s byBlbGYzMi5sbyAkZWxmIiA7OwogICAgIHc2NV9jb2ZmX3ZlYykJCSB0Yj0i JHRiIGNvZmYtdzY1LmxvIHJlbG9jMTYubG8gJGNvZmZnZW4iIDs7CisgICAg d2FzbTMyX2VsZjMyX3ZlYykgICAgICAgICAgICB0Yj0iJHRiIGVsZjMyLXdh c20zMi5sbyBlbGYzMi5sbyAkZWxmIiA7OwogICAgIHdlMzJrX2NvZmZfdmVj KQkJIHRiPSIkdGIgY29mZi13ZTMyay5sbyAkY29mZmdlbiIgOzsKICAgICB4 ODZfNjRfY29mZl92ZWMpCQkgdGI9IiR0YiBjb2ZmLXg4Nl82NC5sbyAkY29m ZiI7IHRhcmdldF9zaXplPTY0IDs7CiAgICAgeDg2XzY0X2VsZjMyX3ZlYykJ CSB0Yj0iJHRiIGVsZjY0LXg4Ni02NC5sbyBlbGYtaWZ1bmMubG8gZWxmLW5h Y2wubG8gZWxmNjQubG8gZWxmMzIubG8gJGVsZiI7IHRhcmdldF9zaXplPTY0 IDs7CmRpZmYgLS1naXQgYS9iZmQvY3B1LXdhc20zMi5jIGIvYmZkL2NwdS13 YXNtMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li4xOWQ0Y2I5MjcwCi0tLSAvZGV2L251bGwKKysrIGIvYmZkL2NwdS13YXNt MzIuYwpAQCAtMCwwICsxLDM2IEBACisvKiBCRkQgc3VwcG9ydCBmb3IgdGhl IFdlYkFzc2VtYmx5IHRhcmdldAorICAgQ29weXJpZ2h0IChDKSAyMDE3IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBCRkQsIHRoZSBCaW5hcnkgRmlsZSBEZXNjcmlwdG9yIGxp YnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAg IE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlICJzeXNkZXAu aCIKKyNpbmNsdWRlICJiZmQuaCIKKyNpbmNsdWRlICJsaWJiZmQuaCIKKyNp bmNsdWRlICJsaWJpYmVydHkuaCIKKworI2RlZmluZSBOKG51bWJlciwgcHJp bnQsIGRlZmF1bHQsIG5leHQpICBcCit7ICAzMiwgMzIsIDgsIGJmZF9hcmNo X3dhc20zMiwgbnVtYmVyLCAid2FzbTMyIiwgIndhc20zMiIsIDQsIGRlZmF1 bHQsIGJmZF9kZWZhdWx0X2NvbXBhdGlibGUsIFwKKyAgIGJmZF9kZWZhdWx0 X3NjYW4sIGJmZF9hcmNoX2RlZmF1bHRfZmlsbCwgbmV4dCB9CisKK3N0YXRp YyBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYXJjaF9pbmZvX3N0cnVjdFtd ID0KK3sKKyAgTiAoYmZkX21hY2hfd2FzbTMyLCAid2FzbTMyIiwgVFJVRSwg TlVMTCkKK307CisKK2NvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBiZmRfd2Fz bTMyX2FyY2ggPQorICBOIChiZmRfbWFjaF93YXNtMzIsICJ3YXNtMzIiLCBU UlVFLCAmIGFyY2hfaW5mb19zdHJ1Y3RbMF0pOwpkaWZmIC0tZ2l0IGEvYmZk L2VsZjMyLXdhc20zMi5jIGIvYmZkL2VsZjMyLXdhc20zMi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIwODgxNDZjYzQKLS0t IC9kZXYvbnVsbAorKysgYi9iZmQvZWxmMzItd2FzbTMyLmMKQEAgLTAsMCAr MSw1MiBAQAorLyogMzItYml0IEVMRiBmb3IgdGhlIFdlYkFzc2VtYmx5IHRh cmdldAorICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTcgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEJGRCwgdGhlIEJpbmFyeSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeS4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQgLSBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgInN5c2RlcC5oIgorI2luY2x1 ZGUgImJmZC5oIgorI2luY2x1ZGUgImxpYmJmZC5oIgorI2luY2x1ZGUgImVs Zi1iZmQuaCIKKyNpbmNsdWRlICJiZmRfc3RkaW50LmgiCisjaW5jbHVkZSAi ZWxmL3dhc20zMi5oIgorCisjZGVmaW5lIEVMRl9BUkNICQliZmRfYXJjaF93 YXNtMzIKKyNkZWZpbmUgRUxGX1RBUkdFVF9JRAkJRU1fV0VCQVNTRU1CTFkK KyNkZWZpbmUgRUxGX01BQ0hJTkVfQ09ERQlFTV9XRUJBU1NFTUJMWQorLyog RklYTUUgd2UgZG9uJ3QgaGF2ZSBwYWdlZCBleGVjdXRhYmxlcywgc2VlCisg KiBodHRwczovL2dpdGh1Yi5jb20vcGlwY2V0L2JpbnV0aWxzLWdkYi9pc3N1 ZXMvNCAqLworI2RlZmluZSBFTEZfTUFYUEFHRVNJWkUJCTQwOTYKKworI2Rl ZmluZSBUQVJHRVRfTElUVExFX1NZTSAgICAgICB3YXNtMzJfZWxmMzJfdmVj CisjZGVmaW5lIFRBUkdFVF9MSVRUTEVfTkFNRQkiZWxmMzItd2FzbTMyIgor CisjZGVmaW5lIGVsZl9iYWNrZW5kX2Nhbl9nY19zZWN0aW9ucyAgICAgICAg ICAxCisjZGVmaW5lIGVsZl9iYWNrZW5kX3JlbGFfbm9ybWFsICAgICAgICAg ICAgICAxCisvKiBGb3IgdGVzdGluZy4gKi8KKyNkZWZpbmUgZWxmX2JhY2tl bmRfd2FudF9keW5yZWxybyAgICAgICAgICAgIDEKKworI2RlZmluZSBiZmRf ZWxmMzJfYmZkX3JlbG9jX3R5cGVfbG9va3VwIF9iZmRfbm9yZWxvY3NfYmZk X3JlbG9jX3R5cGVfbG9va3VwCisjZGVmaW5lIGJmZF9lbGYzMl9iZmRfcmVs b2NfbmFtZV9sb29rdXAgX2JmZF9ub3JlbG9jc19iZmRfcmVsb2NfbmFtZV9s b29rdXAKKworI2RlZmluZSBFTEZfRFlOQU1JQ19JTlRFUlBSRVRFUiAgIi9z YmluL2VsZi1keW5hbWljLWludGVycHJldGVyLnNvIgorCisjZGVmaW5lIGVs Zl9iYWNrZW5kX3dhbnRfZ290X3BsdCAxCisjZGVmaW5lIGVsZl9iYWNrZW5k X3BsdF9yZWFkb25seSAxCisjZGVmaW5lIGVsZl9iYWNrZW5kX2dvdF9oZWFk ZXJfc2l6ZSAwCisKKyNpbmNsdWRlICJlbGYzMi10YXJnZXQuaCIKZGlmZiAt LWdpdCBhL2JmZC90YXJnZXRzLmMgYi9iZmQvdGFyZ2V0cy5jCmluZGV4IDFh N2M2Yjg3ZDYuLjc0NTU5YWM0YzYgMTAwNjQ0Ci0tLSBhL2JmZC90YXJnZXRz LmMKKysrIGIvYmZkL3RhcmdldHMuYwpAQCAtODkzLDYgKzg5Myw3IEBAIGV4 dGVybiBjb25zdCBiZmRfdGFyZ2V0IHZheF9hb3V0X25ic2RfdmVjOwogZXh0 ZXJuIGNvbnN0IGJmZF90YXJnZXQgdmF4X2VsZjMyX3ZlYzsKIGV4dGVybiBj b25zdCBiZmRfdGFyZ2V0IHZpc2l1bV9lbGYzMl92ZWM7CiBleHRlcm4gY29u c3QgYmZkX3RhcmdldCB3NjVfY29mZl92ZWM7CitleHRlcm4gY29uc3QgYmZk X3RhcmdldCB3YXNtMzJfZWxmMzJfdmVjOwogZXh0ZXJuIGNvbnN0IGJmZF90 YXJnZXQgd2UzMmtfY29mZl92ZWM7CiBleHRlcm4gY29uc3QgYmZkX3Rhcmdl dCB4ODZfNjRfY29mZl92ZWM7CiBleHRlcm4gY29uc3QgYmZkX3RhcmdldCB4 ODZfNjRfZWxmMzJfdmVjOwpAQCAtMTQyMSw2ICsxNDIyLDggQEAgc3RhdGlj IGNvbnN0IGJmZF90YXJnZXQgKiBjb25zdCBfYmZkX3RhcmdldF92ZWN0b3Jb XSA9CiAKIAkmdzY1X2NvZmZfdmVjLAogCisgICAgICAgICZ3YXNtMzJfZWxm MzJfdmVjLAorCiAJJndlMzJrX2NvZmZfdmVjLAogCiAjaWZkZWYgQkZENjQK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL3dhc20zMi5oIGIvaW5jbHVkZS9l bGYvd2FzbTMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMzhlNmMyZTk1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUv ZWxmL3dhc20zMi5oCkBAIC0wLDAgKzEsMjggQEAKKy8qIEVMRiBzdXBwb3J0 IGZvciBCRkQgZm9yIHRoZSBXZWJBc3NlbWJseSB0YXJnZXQKKyAgIENvcHly aWdodCAoQykgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxLCBVU0EuICAqLworCisjaWZuZGVmIF9FTEZfV0FTTTMyX0gKKyNkZWZp bmUgX0VMRl9XQVNNMzJfSAorCisjaW5jbHVkZSAiZWxmL3JlbG9jLW1hY3Jv cy5oIgorCisvKiBSZWxvY2F0aW9uIHR5cGVzLiAgKi8KKworU1RBUlRfUkVM T0NfTlVNQkVSUyAoZWxmX3dhc20zMl9yZWxvY190eXBlKQorRU5EX1JFTE9D X05VTUJFUlMgKFJfV0FTTTMyX21heCA9IDEpCisKKyNlbmRpZiAvKiBfRUxG X1dBU00zMl9IICovCg== --f403045e9cf61d94d2054b5d052e--