From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 85621 invoked by alias); 22 Jan 2020 07:26:18 -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 85606 invoked by uid 89); 22 Jan 2020 07:26:18 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-15.3 required=5.0 tests=AWL,BAYES_00,BODY_8BITS,FREEMAIL_FROM,GARBLED_BODY,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=8306, defeat, bitsize X-HELO: mail-ot1-f65.google.com Received: from mail-ot1-f65.google.com (HELO mail-ot1-f65.google.com) (209.85.210.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 22 Jan 2020 07:26:13 +0000 Received: by mail-ot1-f65.google.com with SMTP id 59so5367382otp.12 for ; Tue, 21 Jan 2020 23:26:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=BzX+IWZDp9ETHlxOTkmyfKYAQMczaVcY/SUh8AizcN8=; b=hVEB7MzQjqw914ozH2t/5/jaol1l+9FkKQk0qvS+ZCdfkLZUBVUt4xJAU/Da4a26Y1 924PqZooMd52Ql83PoPaH3Nbaer8qco69OFVJuT9PPCONRTRzes0zdQoyKka8Wo+cejT rsBDCwaob4pNwbszYkUhRfww4TuGIg/Ky/BJ65nN+ICZMgaHptFpbzdzts3vt45JM8Wb /EwhSFX6q6wFSh/ML2quHKd2MjFA+/7fnM/VgfjaetHR9A0SKFcbqVPBuLVIfewiO9Ol iBwAoYzFkxzM4uE6MMPFF/9+1njDJtY94vwX2B0kbOV8X2NKJihanLGujyVunceMUQhd zRyg== MIME-Version: 1.0 References: In-Reply-To: From: Kuan-Lin Chen Date: Wed, 22 Jan 2020 07:26:00 -0000 Message-ID: Subject: Re: [PATCH] [RISCV] Support subtraction of .uleb128. To: Palmer Dabbelt Cc: "binutils@sourceware.org Development" Content-Type: multipart/mixed; boundary="0000000000005e46de059cb570fe" X-IsSubscribed: yes X-SW-Source: 2020-01/txt/msg00317.txt.bz2 --0000000000005e46de059cb570fe Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 33078 Hi, This version patch updates as follows: Fix the warning about uninitialized variable. Set a limit to .uleb128 expressions as Palmer's suggestion. Thanks. Palmer Dabbelt =E6=96=BC 2020=E5=B9=B41=E6=9C=88= 10=E6=97=A5 =E9=80=B1=E4=BA=94 =E4=B8=8A=E5=8D=887:19=E5=AF=AB=E9=81=93=EF= =BC=9A > > On Mon, 09 Dec 2019 21:42:58 PST (-0800), kuanlinchentw@gmail.com wrote: > > Hi Palmer, > > > >> GCC gives me -Wmaybe-uninitialized for both of these. > > May I know your gcc version? > > I tried gcc-7.3.0 and gcc-8.2.0, and I didn't get the warning. > > $ gcc --version > gcc (Debian 8.3.0-6) 8.3.0 > Copyright (C) 2018 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOS= E. > > >> I don't understand how this could possibly work: uleb128s can be long,= so we > >> can't just treat them as a single byte. > > Yes, uleb128s can be long so I implement riscv_elf_ignore_reloc to > > ignore the overflow checking. > > And I relocate uleb128s by myself in perform_relocation. > > > >> I'm having trouble testing it, though, > >> as I can't figure out how to emit R_RISCV_SET_ULEB128 alone. For exam= ple, when > >> I try to insert a uleb128 in the assembler I'm not even getting a relo= cation: > > .uleb128 only support subtract format. (.uleb128 .L1 - .L0) > > It is impossible to get final the value and the length for ".uleb128 > > symbol" in assemble-time. > > Well, you know symbols are at most 64-bit on rv64 and 32-bit on rv32, so = you > can just emit enough space to encode any symbol. That's better than emit= ting 7 > bits, which is unlikely to encode any symbol. > > > I think ".uleb128 symbol" is meaningless. > > Therefore, all targets just fill the value as assemble-time value > > without relocations. > > If the assembler can't handle something then it needs to provide an error= , it > can't just generate incorrect code. > > >>I can get a R_RISCV_SUB_ULEB128, but it appears to be both producing th= e wrong > >>value and garbaging up bytes after the relocation. For example: > > > > I get the same result in the object file but the different result in ex= ecutable. > > pal.o: file format elf64-littleriscv > > > > Disassembly of section .text: > > > > 0000000000000000 <_start>: > > 0: 00000013 nop > > > > 0000000000000004 <.L0>: > > 4: 00000013 nop > > > > 0000000000000008 : > > 8: 00100013 li zero,1 > > c: aa04 fsd fs1,16(a2) > > c: R_RISCV_SET_ULEB128 .L1 > > c: R_RISCV_SUB_ULEB128 .L0 > > e: aaaa fsd fa0,336(sp) > > 10: 00200013 li zero,2 > > > > > > a.out: file format elf64-littleriscv > > > > > > Disassembly of section .text: > > > > 0000000000010078 <_start>: > > 10078: 00000013 nop > > 1007c: 00000013 nop > > > > 0000000000010080 : > > 10080: 00100013 li zero,1 > > 10084: aa04 fsd fs1,16(a2) > > 10086: aaaa fsd fa0,336(sp) > > 10088: 00200013 li zero,2 > > > > Maybe there is something mismatched. But I don't have any idea currentl= y. > > Could you please give me more information about your flow? > > IIRC I just applied the patch on top of whatever was HEAD of binutils-gdb= at > the time, but I don't have the working directory around any more. > > > Thanks. > > > >> Presumably that's why I can't get a _SET alone. > > I think it's meaningless to use _SET alone in assembly. > > > >> It looks like alignment is broken here after uleb128s, but it's not ac= tually > >> triggering an error in all cases. Having two of them in this test cas= e doesn't > >> trigger the issue, but an odd number does. For example, the following= source > > I think this alignment issue can be fixed by the following patch: > > https://sourceware.org/ml/binutils/2019-12/msg00024.html > > Ya, thanks -- I think there's some issues there as well, IIRC I commented= on > it. > > > > > Thanks for your review. > > > > Palmer Dabbelt =E6=96=BC 2019=E5=B9=B412=E6= =9C=887=E6=97=A5 =E9=80=B1=E5=85=AD =E4=B8=8A=E5=8D=887:47=E5=AF=AB=E9=81= =93=EF=BC=9A > >> > >> On Wed, 27 Nov 2019 00:11:50 PST (-0800), kuanlinchentw@gmail.com wrot= e: > >> > The data length of uleb128 is variable. So linker must recalculate = the > >> > value of the subtraction. The patch leave relocations in object fil= es > >> > so that linker can relocate again after relaxation. > >> > > >> > bfd/ChangeLog: > >> > * bfd-in2.h: Regenerated. > >> > * elfnn-riscv.c (write_uleb128): New function. > >> > (perform_relocation): Perform R_RISCV_SUB_ULEB128 and > >> > R_RISCV_SET_ULEB128 relocation. > >> > (riscv_elf_relocate_section): Likewise. > >> > * elfxx-riscv.c (howto_table): Add R_RISCV_SUB_ULEB128 and > >> > R_RISCV_SET_ULEB128. > >> > (riscv_elf_ignore_reloc): New function. > >> > * libbfd.h: Regenerated. > >> > * reloc.c (BFD_RELOC_RISCV_SET_ULEB128, BFD_RELOC_RISCV_SUB_ULEB128): > >> > New relocations to support .uleb128. > >> > > >> > gas/ChangeLog: > >> > * config/tc-riscv.c (md_apply_fix): Add BFD_RELOC_RISCV_SET_ULEB128 = and > >> > BFD_RELOC_RISCV_SUB_ULEB128. > >> > (riscv_insert_uleb128_fixes): New function. > >> > (riscv_md_end): Scan rs_leb128 fragments. > >> > (riscv_pseudo_table): Remove uleb128. > >> > > >> > include/ChangeLog: > >> > * elf/riscv.h ((R_RISCV_SET_ULEB128, (R_RISCV_SUB_ULEB128): Define. > >> > > >> > ld/ChangeLog: > >> > * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Add uleb128. > >> > * testsuite/ld-riscv-elf/uleb128.d: New test. > >> > * testsuite/ld-riscv-elf/uleb128.s: New file. > >> > > >> > OK to commit? > >> > >> I'm having a lot of trouble trying to figure out how this works. LMK = if I'm > >> missing something, there's some comments in line: > >> > >> > From 9f7f0aaa484dee2b32c550f8cca4de18959f01e1 Mon Sep 17 00:00:00 20= 01 > >> > From: Kuan-Lin Chen > >> > Date: Thu, 14 Nov 2019 14:24:22 +0800 > >> > Subject: [PATCH] RISC-V: Support subtraction of .uleb128. > >> > > >> > The data length of uleb128 is variable. So linker must recalculate = the > >> > value of the subtraction. The patch leave relocations in object fil= es > >> > so that linker can relocate again after relaxation. > >> > > >> > bfd/ChangeLog: > >> > * bfd-in2.h: Regenerated. > >> > * elfnn-riscv.c (write_uleb128): New function. > >> > (perform_relocation): Perform R_RISCV_SUB_ULEB128 and > >> > R_RISCV_SET_ULEB128 relocation. > >> > (riscv_elf_relocate_section): Likewise. > >> > * elfxx-riscv.c (howto_table): Add R_RISCV_SUB_ULEB128 and > >> > R_RISCV_SET_ULEB128. > >> > (riscv_elf_ignore_reloc): New function. > >> > * libbfd.h: Regenerated. > >> > * reloc.c (BFD_RELOC_RISCV_SET_ULEB128, BFD_RELOC_RISCV_SUB_= ULEB128): > >> > New relocations to support .uleb128. > >> > > >> > gas/ChangeLog: > >> > * config/tc-riscv.c (md_apply_fix): Add BFD_RELOC_RISCV_SET_= ULEB128 and > >> > BFD_RELOC_RISCV_SUB_ULEB128. > >> > (riscv_insert_uleb128_fixes): New function. > >> > (riscv_md_end): Scan rs_leb128 fragments. > >> > (riscv_pseudo_table): Remove uleb128. > >> > > >> > include/ChangeLog: > >> > * elf/riscv.h ((R_RISCV_SET_ULEB128, (R_RISCV_SUB_ULEB128): = Define. > >> > > >> > ld/ChangeLog: > >> > * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Add uleb128. > >> > * testsuite/ld-riscv-elf/uleb128.d: New test. > >> > * testsuite/ld-riscv-elf/uleb128.s: New file. > >> > --- > >> > bfd/ChangeLog | 14 ++++ > >> > bfd/bfd-in2.h | 2 + > >> > bfd/elfnn-riscv.c | 82 +++++++++++++++++++= +++ > >> > bfd/elfxx-riscv.c | 51 ++++++++++++++ > >> > bfd/libbfd.h | 2 + > >> > bfd/reloc.c | 4 ++ > >> > gas/ChangeLog | 8 +++ > >> > gas/config/tc-riscv.c | 47 ++++++++++++- > >> > include/ChangeLog | 4 ++ > >> > include/elf/riscv.h | 2 + > >> > ld/ChangeLog | 6 ++ > >> > ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp | 1 + > >> > ld/testsuite/ld-riscv-elf/uleb128.d | 18 +++++ > >> > ld/testsuite/ld-riscv-elf/uleb128.s | 18 +++++ > >> > 14 files changed, 258 insertions(+), 1 deletion(-) > >> > create mode 100644 ld/testsuite/ld-riscv-elf/uleb128.d > >> > create mode 100644 ld/testsuite/ld-riscv-elf/uleb128.s > >> > > >> > diff --git a/bfd/ChangeLog b/bfd/ChangeLog > >> > index 4a0852e577..d11ffde74c 100644 > >> > --- a/bfd/ChangeLog > >> > +++ b/bfd/ChangeLog > >> > @@ -1,3 +1,17 @@ > >> > +2019-11-27 Kuan-Lin Chen > >> > + > >> > + * bfd-in2.h: Regenerated. > >> > + * elfnn-riscv.c (write_uleb128): New function. > >> > + (perform_relocation): Perform R_RISCV_SUB_ULEB128 and > >> > + R_RISCV_SET_ULEB128 relocation. > >> > + (riscv_elf_relocate_section): Likewise. > >> > + * elfxx-riscv.c (howto_table): Add R_RISCV_SUB_ULEB128 and > >> > + R_RISCV_SET_ULEB128. > >> > + (riscv_elf_ignore_reloc): New function. > >> > + * libbfd.h: Regenerated. > >> > + * reloc.c (BFD_RELOC_RISCV_SET_ULEB128, BFD_RELOC_RISCV_SUB= _ULEB128): > >> > + New relocations to support .uleb128. > >> > + > >> > 2019-11-27 Alan Modra > >> > > >> > PR 23652 > >> > diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h > >> > index 44902fc8d0..a32708ebc2 100644 > >> > --- a/bfd/bfd-in2.h > >> > +++ b/bfd/bfd-in2.h > >> > @@ -4380,6 +4380,8 @@ number for the SBIC, SBIS, SBI and CBI instruc= tions */ > >> > BFD_RELOC_RISCV_SET16, > >> > BFD_RELOC_RISCV_SET32, > >> > BFD_RELOC_RISCV_32_PCREL, > >> > + BFD_RELOC_RISCV_SET_ULEB128, > >> > + BFD_RELOC_RISCV_SUB_ULEB128, > >> > > >> > /* Renesas RL78 Relocations. */ > >> > BFD_RELOC_RL78_NEG8, > >> > diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c > >> > index 997f786602..075ef6b82d 100644 > >> > --- a/bfd/elfnn-riscv.c > >> > +++ b/bfd/elfnn-riscv.c > >> > @@ -1419,6 +1419,26 @@ riscv_global_pointer_value (struct bfd_link_i= nfo *info) > >> > return h->u.def.value + sec_addr (h->u.def.section); > >> > } > >> > > >> > +/* Write VAL in uleb128 format to P, returning a pointer to the > >> > + following byte. > >> > + This code is copied from elf-attr.c. */ > >> > + > >> > +static bfd_byte * > >> > +write_uleb128 (bfd_byte *p, unsigned int val) > >> > +{ > >> > + bfd_byte c; > >> > + do > >> > + { > >> > + c =3D val & 0x7f; > >> > + val >>=3D 7; > >> > + if (val) > >> > + c |=3D 0x80; > >> > + *(p++) =3D c; > >> > + } > >> > + while (val); > >> > + return p; > >> > +} > >> > + > >> > /* Emplace a static relocation. */ > >> > > >> > static bfd_reloc_status_type > >> > @@ -1512,6 +1532,25 @@ perform_relocation (const reloc_howto_type *h= owto, > >> > value =3D ENCODE_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (value)= ); > >> > break; > >> > > >> > + case R_RISCV_SET_ULEB128: > >> > + case R_RISCV_SUB_ULEB128: > >> > + { > >> > + unsigned int len =3D 0; > >> > + bfd_byte *endp, *p; > >> > + > >> > + _bfd_read_unsigned_leb128 (input_bfd, contents + rel->r_off= set, &len); > >> > + > >> > + /* Clean the contents value to zero. Do not reduce the len= gth. */ > >> > + p =3D contents + rel->r_offset; > >> > + endp =3D p + len -1; > >> > + memset (p, 0x80, len); > >> > + *(endp) =3D 0; > >> > + p =3D write_uleb128 (p, value) - 1; > >> > + if (p < endp) > >> > + *p |=3D 0x80; > >> > + return bfd_reloc_ok; > >> > + } > >> > + > >> > case R_RISCV_32: > >> > case R_RISCV_64: > >> > case R_RISCV_ADD8: > >> > @@ -1767,6 +1806,8 @@ riscv_elf_relocate_section (bfd *output_bfd, > >> > struct elf_link_hash_entry **sym_hashes =3D elf_sym_hashes (input= _bfd); > >> > bfd_vma *local_got_offsets =3D elf_local_got_offsets (input_bfd); > >> > bfd_boolean absolute; > >> > + bfd_vma uleb128_vma; > >> > + Elf_Internal_Rela *uleb128_rel =3D NULL; > >> > > >> > if (!riscv_init_pcrel_relocs (&pcrel_relocs)) > >> > return FALSE; > >> > @@ -1871,6 +1912,47 @@ riscv_elf_relocate_section (bfd *output_bfd, > >> > case R_RISCV_DELETE: > >> > /* These require no special handling beyond perform_reloc= ation. */ > >> > break; > >> > + case R_RISCV_SET_ULEB128: > >> > + if (!uleb128_rel) > >> > + { > >> > + /* Save the minuend to use later. */ > >> > + uleb128_vma =3D relocation; > >> > + uleb128_rel =3D rel; > >> > + continue; > >> > + } > >> > + else > >> > + { > >> > + if (uleb128_rel->r_offset !=3D rel->r_offset) > >> > + { > >> > + (*_bfd_error_handler) (_("%pB: relocation %s mism= atched. "), > >> > + input_bfd, howto->name); > >> > + bfd_set_error (bfd_error_bad_value); > >> > + } > >> > + relocation =3D relocation - uleb128_vma; > >> > + uleb128_rel =3D NULL; > >> > + break; > >> > + } > >> > + > >> > + case R_RISCV_SUB_ULEB128: > >> > + if (uleb128_rel) > >> > + { > >> > + if (uleb128_rel->r_offset !=3D rel->r_offset) > >> > + { > >> > + (*_bfd_error_handler) (_("%pB: relocation %s mism= atched. "), > >> > + input_bfd, howto->name); > >> > + bfd_set_error (bfd_error_bad_value); > >> > + } > >> > + relocation =3D uleb128_vma - relocation; > >> > >> GCC gives me -Wmaybe-uninitialized for both of these. > >> > >> > + uleb128_rel =3D NULL; > >> > + break; > >> > + } > >> > + else > >> > + { > >> > + /* Save the subtrahend to use later. */ > >> > + uleb128_vma =3D relocation; > >> > + uleb128_rel =3D rel; > >> > + continue; > >> > + } > >> > > >> > case R_RISCV_GOT_HI20: > >> > if (h !=3D NULL) > >> > diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c > >> > index 245717f70f..c136ba2207 100644 > >> > --- a/bfd/elfxx-riscv.c > >> > +++ b/bfd/elfxx-riscv.c > >> > @@ -38,6 +38,8 @@ > >> > relocations for the debug info. */ > >> > static bfd_reloc_status_type riscv_elf_add_sub_reloc > >> > (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); > >> > +static bfd_reloc_status_type riscv_elf_ignore_reloc > >> > + (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); > >> > > >> > /* The relocation table used for SHT_RELA sections. */ > >> > > >> > @@ -855,8 +857,41 @@ static reloc_howto_type howto_table[] =3D > >> > 0, /* src_mask */ > >> > MINUS_ONE, /* dst_mask */ > >> > FALSE), /* pcrel_offset */ > >> > + > >> > + /* The length of unsigned-leb128 is variant, just assume the > >> > + size is one byte here. */ > >> > + HOWTO (R_RISCV_SET_ULEB128, /* type */ > >> > + 0, /* rightshift */ > >> > + 0, /* size */ > >> > + 0, /* bitsize */ > >> > + FALSE, /* pc_relative */ > >> > + 0, /* bitpos */ > >> > + complain_overflow_dont, /* complain_on_overflow */ > >> > + riscv_elf_ignore_reloc, /* special_function */ > >> > + "R_RISCV_SET_ULEB128", /* name */ > >> > + FALSE, /* partial_inplace */ > >> > + 0, /* src_mask */ > >> > + 0, /* dst_mask */ > >> > + FALSE), /* pcrel_offset */ > >> > >> I don't understand how this could possibly work: uleb128s can be long,= so we > >> can't just treat them as a single byte. I'm having trouble testing it= , though, > >> as I can't figure out how to emit R_RISCV_SET_ULEB128 alone. For exam= ple, when > >> I try to insert a uleb128 in the assembler I'm not even getting a relo= cation: > >> > >> .text > >> .globl _start > >> _start: > >> nop > >> .L0: > >> nop > >> .L1: > >> uleb_l0: > >> addi x0, x0, 1 > >> .uleb128 .L0 > >> # Manually fix up the alignment, as .align is broken. > >> .rept 3 > >> .byte 0xAA > >> .endr > >> addi x0, x0, 2 > >> > >> $ objdump -dr > >> test.o: file format elf64-littleriscv > >> > >> > >> Disassembly of section .text: > >> > >> 0000000000000000 <_start>: > >> 0: 00000013 nop > >> 4: 00000013 nop > >> > >> 0000000000000008 : > >> 8: 00100013 li zero,1 > >> c: aa04 fsd fs1,16(a2) > >> e: aaaa fsd fa0,336(sp) > >> 10: 00200013 li zero,2 > >> > >> so then when I link I'm just getting the wrong value entirely. > >> > >> test: file format elf64-littleriscv > >> > >> > >> Disassembly of section .text: > >> > >> 0000000000010078 <_start>: > >> 10078: 00000013 nop > >> 1007c: 00000013 nop > >> > >> 0000000000010080 : > >> 10080: 00100013 li zero,1 > >> 10084: aa04 fsd fs1,16(a2) > >> 10086: aaaa fsd fa0,336(sp) > >> 10088: 00200013 li zero,2 > >> > >> > + /* The length of unsigned-leb128 is variant, just assume the > >> > + size is one byte here. */ > >> > + HOWTO (R_RISCV_SUB_ULEB128, /* type */ > >> > + 0, /* rightshift */ > >> > + 0, /* size */ > >> > + 0, /* bitsize */ > >> > + FALSE, /* pc_relative */ > >> > + 0, /* bitpos */ > >> > + complain_overflow_dont, /* complain_on_overflow */ > >> > + riscv_elf_ignore_reloc, /* special_function */ > >> > + "R_RISCV_SUB_ULEB128", /* name */ > >> > + FALSE, /* partial_inplace */ > >> > + 0, /* src_mask */ > >> > + 0, /* dst_mask */ > >> > + FALSE), /* pcrel_offset */ > >> > }; > >> > >> I can get a R_RISCV_SUB_ULEB128, but it appears to be both producing t= he wrong > >> value and garbaging up bytes after the relocation. For example: > >> > >> .text > >> .globl _start > >> _start: > >> nop > >> .L0: > >> nop > >> .L1: > >> uleb_l1_l0: > >> addi x0, x0, 1 > >> .uleb128 .L1 - .L0 > >> # Manually fix up the alignment, as .align is broken > >> .rept 3 > >> .byte 0xAA > >> .endr > >> addi x0, x0, 2 > >> > >> produces the relocation > >> > >> test.o: file format elf64-littleriscv > >> > >> > >> Disassembly of section .text: > >> > >> 0000000000000000 <_start>: > >> 0: 00000013 nop > >> > >> 0000000000000004 <.L0>: > >> 4: 00000013 nop > >> > >> 0000000000000008 : > >> 8: 00100013 li zero,1 > >> c: aa04 fsd fs1,16(a2) > >> c: R_RISCV_SET_ULEB128 .L1 > >> c: R_RISCV_SUB_ULEB128 .L0 > >> e: aaaa fsd fa0,336(sp) > >> 10: 00200013 li zero,2 > >> > >> but then goes and corrupts the resulting executable > >> > >> > >> test: file format elf64-littleriscv > >> Disassembly of section .text: > >> > >> 0000000000010078 <_start>: > >> 10078: 00000013 nop > >> 1007c: 00000013 nop > >> > >> 0000000000010080 : > >> 10080: 00100013 li zero,1 > >> 10084: ff84 sd s1,56(a5) > >> 10086: 000ffffb 0xffffb > >> 1008a: 0020 addi s0,sp,8 > >> > >> I can't think of a way to make this work aside from just emitting uleb= 128s at > >> their full length, which would make them work but would really defeat = the > >> purpose of the format. I guess we could then relax these, but that se= ems like > >> a lot of work. > >> > >> > + > >> > /* A mapping from BFD reloc types to RISC-V ELF reloc types. */ > >> > > >> > struct elf_reloc_map > >> > @@ -917,6 +952,8 @@ static const struct elf_reloc_map riscv_reloc_ma= p[] =3D > >> > { BFD_RELOC_RISCV_SET16, R_RISCV_SET16 }, > >> > { BFD_RELOC_RISCV_SET32, R_RISCV_SET32 }, > >> > { BFD_RELOC_RISCV_32_PCREL, R_RISCV_32_PCREL }, > >> > + { BFD_RELOC_RISCV_SET_ULEB128, R_RISCV_SET_ULEB128 }, > >> > + { BFD_RELOC_RISCV_SUB_ULEB128, R_RISCV_SUB_ULEB128 }, > >> > }; > >> > > >> > /* Given a BFD reloc type, return a howto structure. */ > >> > @@ -1011,6 +1048,20 @@ riscv_elf_add_sub_reloc (bfd *abfd, > >> > return bfd_reloc_ok; > >> > } > >> > > >> > +/* Special handler for relocations which don't have to be relocated. > >> > + This function just simply return bfd_reloc_ok. */ > >> > +static bfd_reloc_status_type > >> > +riscv_elf_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_= entry, > >> > + asymbol *symbol ATTRIBUTE_UNUSED, > >> > + void *data ATTRIBUTE_UNUSED, asection *inpu= t_section, > >> > + bfd *output_bfd, char **error_message ATTRI= BUTE_UNUSED) > >> > +{ > >> > + if (output_bfd !=3D NULL) > >> > + reloc_entry->address +=3D input_section->output_offset; > >> > + > >> > + return bfd_reloc_ok; > >> > +} > >> > + > >> > /* Parsing subset version. > >> > > >> > Return Value: > >> > diff --git a/bfd/libbfd.h b/bfd/libbfd.h > >> > index 77b732ee4b..7aa8f91504 100644 > >> > --- a/bfd/libbfd.h > >> > +++ b/bfd/libbfd.h > >> > @@ -2327,6 +2327,8 @@ static const char *const bfd_reloc_code_real_n= ames[] =3D { "@@uninitialized@@", > >> > "BFD_RELOC_RISCV_SET16", > >> > "BFD_RELOC_RISCV_SET32", > >> > "BFD_RELOC_RISCV_32_PCREL", > >> > + "BFD_RELOC_RISCV_SET_ULEB128", > >> > + "BFD_RELOC_RISCV_SUB_ULEB128", > >> > "BFD_RELOC_RL78_NEG8", > >> > "BFD_RELOC_RL78_NEG16", > >> > "BFD_RELOC_RL78_NEG24", > >> > diff --git a/bfd/reloc.c b/bfd/reloc.c > >> > index b00b79f319..9b8b75ad21 100644 > >> > --- a/bfd/reloc.c > >> > +++ b/bfd/reloc.c > >> > @@ -5212,6 +5212,10 @@ ENUMX > >> > BFD_RELOC_RISCV_SET32 > >> > ENUMX > >> > BFD_RELOC_RISCV_32_PCREL > >> > +ENUMX > >> > + BFD_RELOC_RISCV_SET_ULEB128 > >> > +ENUMX > >> > + BFD_RELOC_RISCV_SUB_ULEB128 > >> > ENUMDOC > >> > RISC-V relocations. > >> > > >> > diff --git a/gas/ChangeLog b/gas/ChangeLog > >> > index 09991524da..e53ac0895b 100644 > >> > --- a/gas/ChangeLog > >> > +++ b/gas/ChangeLog > >> > @@ -1,3 +1,11 @@ > >> > +2019-11-27 Kuan-Lin Chen > >> > + > >> > + * config/tc-riscv.c (md_apply_fix): Add BFD_RELOC_RISCV_SET= _ULEB128 and > >> > + BFD_RELOC_RISCV_SUB_ULEB128. > >> > + (riscv_insert_uleb128_fixes): New function. > >> > + (riscv_md_end): Scan rs_leb128 fragments. > >> > + (riscv_pseudo_table): Remove uleb128. > >> > + > >> > 2019-11-25 Andrew Pinski > >> > > >> > * config/tc-aarch64.c (md_begin): Use correct > >> > diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c > >> > index e50505138e..c35c591c0a 100644 > >> > --- a/gas/config/tc-riscv.c > >> > +++ b/gas/config/tc-riscv.c > >> > @@ -2392,6 +2392,9 @@ md_apply_fix (fixS *fixP, valueT *valP, segT s= eg ATTRIBUTE_UNUSED) > >> > case BFD_RELOC_RISCV_SUB32: > >> > case BFD_RELOC_RISCV_SUB64: > >> > case BFD_RELOC_RISCV_RELAX: > >> > + /* cvt_frag_to_fill () has called output_leb128 (). */ > >> > + case BFD_RELOC_RISCV_SET_ULEB128: > >> > + case BFD_RELOC_RISCV_SUB_ULEB128: > >> > break; > >> > > >> > case BFD_RELOC_RISCV_TPREL_HI20: > >> > @@ -3127,11 +3130,54 @@ riscv_set_public_attributes (void) > >> > riscv_write_out_arch_attr (); > >> > } > >> > > >> > +/* Scan uleb128 subtraction expressions and insert fixups for them. > >> > + e.g., .uleb128 .L1 - .L0 > >> > + Becuase relaxation may change the value of the subtraction, we > >> > + must resolve them in link-time. */ > >> > + > >> > +static void > >> > +riscv_insert_uleb128_fixes (bfd *abfd ATTRIBUTE_UNUSED, > >> > + asection *sec, void *xxx ATTRIBUTE_UNUS= ED) > >> > +{ > >> > + segment_info_type *seginfo =3D seg_info (sec); > >> > + struct frag *fragP; > >> > + > >> > + subseg_set (sec, 0); > >> > + > >> > + for (fragP =3D seginfo->frchainP->frch_root; > >> > + fragP; fragP =3D fragP->fr_next) > >> > + { > >> > + expressionS *exp, *exp_dup; > >> > + > >> > + if (fragP->fr_type !=3D rs_leb128 || fragP->fr_symbol =3D=3D= NULL) > >> > + continue; > >> > + > >> > + exp =3D symbol_get_value_expression (fragP->fr_symbol); > >> > + > >> > + if (exp->X_op !=3D O_subtract) > >> > + continue; > >> > >> Presumably that's why I can't get a _SET alone. > >> > >> > + > >> > + /* Only unsigned leb128 can be handle. */ > >> > + gas_assert (fragP->fr_subtype =3D=3D 0); > >> > + exp_dup =3D xmemdup (exp, sizeof (*exp), sizeof (*exp)); > >> > + exp_dup->X_op =3D O_symbol; > >> > + exp_dup->X_op_symbol =3D NULL; > >> > + > >> > + /* Insert relocations to resolve the subtraction in link-time= . */ > >> > + fix_new_exp (fragP, fragP->fr_fix, 0, > >> > + exp_dup, 0, BFD_RELOC_RISCV_SET_ULEB128); > >> > + exp_dup->X_add_symbol =3D exp->X_op_symbol; > >> > + fix_new_exp (fragP, fragP->fr_fix, 0, > >> > + exp_dup, 0, BFD_RELOC_RISCV_SUB_ULEB128); > >> > + } > >> > +} > >> > + > >> > /* Called after all assembly has been done. */ > >> > > >> > void > >> > riscv_md_end (void) > >> > { > >> > + bfd_map_over_sections (stdoutput, riscv_insert_uleb128_fixes, NUL= L); > >> > riscv_set_public_attributes (); > >> > } > >> > > >> > @@ -3215,7 +3261,6 @@ static const pseudo_typeS riscv_pseudo_table[]= =3D > >> > {"dtprelword", s_dtprel, 4}, > >> > {"dtpreldword", s_dtprel, 8}, > >> > {"bss", s_bss, 0}, > >> > - {"uleb128", s_riscv_leb128, 0}, > >> > {"sleb128", s_riscv_leb128, 1}, > >> > {"insn", s_riscv_insn, 0}, > >> > {"attribute", s_riscv_attribute, 0}, > >> > diff --git a/include/ChangeLog b/include/ChangeLog > >> > index 47bb86cf71..c290b245c6 100644 > >> > --- a/include/ChangeLog > >> > +++ b/include/ChangeLog > >> > @@ -1,3 +1,7 @@ > >> > +2019-11-27 Kuan-Lin Chen > >> > + > >> > + * elf/riscv.h ((R_RISCV_SET_ULEB128, (R_RISCV_SUB_ULEB128):= Define. > >> > + > >> > 2019-11-25 Alan Modra > >> > > >> > * coff/ti.h (GET_SCNHDR_SIZE, PUT_SCNHDR_SIZE, GET_SCN_SCNL= EN), > >> > diff --git a/include/elf/riscv.h b/include/elf/riscv.h > >> > index 2f98aa4a3e..030679b35f 100644 > >> > --- a/include/elf/riscv.h > >> > +++ b/include/elf/riscv.h > >> > @@ -88,6 +88,8 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type) > >> > RELOC_NUMBER (R_RISCV_SET16, 55) > >> > RELOC_NUMBER (R_RISCV_SET32, 56) > >> > RELOC_NUMBER (R_RISCV_32_PCREL, 57) > >> > + RELOC_NUMBER (R_RISCV_SET_ULEB128, 58) > >> > + RELOC_NUMBER (R_RISCV_SUB_ULEB128, 59) > >> > END_RELOC_NUMBERS (R_RISCV_max) > >> > > >> > /* Processor specific flags for the ELF header e_flags field. */ > >> > diff --git a/ld/ChangeLog b/ld/ChangeLog > >> > index 969ab78035..5c2e406101 100644 > >> > --- a/ld/ChangeLog > >> > +++ b/ld/ChangeLog > >> > @@ -1,3 +1,9 @@ > >> > +2019-11-27 Kuan-Lin Chen > >> > + > >> > + * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Add uleb128. > >> > + * testsuite/ld-riscv-elf/uleb128.d: New test. > >> > + * testsuite/ld-riscv-elf/uleb128.s: New file. > >> > + > >> > 2019-11-26 Martin Liska > >> > > >> > * scripttempl/arclinux.sc: Add .text.sorted.* which is sort= ed > >> > diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsui= te/ld-riscv-elf/ld-riscv-elf.exp > >> > index 7aabbdd641..809e40f08d 100644 > >> > --- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp > >> > +++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp > >> > @@ -38,6 +38,7 @@ if [istarget "riscv*-*-*"] { > >> > run_dump_test "attr-merge-priv-spec" > >> > run_dump_test "attr-merge-arch-failed-01" > >> > run_dump_test "attr-merge-stack-align-failed" > >> > + run_dump_test "uleb128" > >> > run_ld_link_tests { > >> > { "Weak reference 32" "-T weakref.ld -melf32lriscv" "" > >> > "-march=3Drv32i -mabi=3Dilp32" {weakref32.s} > >> > diff --git a/ld/testsuite/ld-riscv-elf/uleb128.d b/ld/testsuite/ld-r= iscv-elf/uleb128.d > >> > new file mode 100644 > >> > index 0000000000..a921478e98 > >> > --- /dev/null > >> > +++ b/ld/testsuite/ld-riscv-elf/uleb128.d > >> > @@ -0,0 +1,18 @@ > >> > +#source: uleb128.s > >> > +#as: -march=3Drv32ic > >> > +#ld: -melf32lriscv > >> > +#objdump: -d > >> > + > >> > +.*:[ ]+file format .* > >> > + > >> > +Disassembly of section .text: > >> > + > >> > +.* <_start>: > >> > +.*jal.* > >> > +.*jal.* > >> > +.*jal.* > >> > +.*jal.* > >> > +.*jal.* > >> > +.*jal.* > >> > +.*:[ ]+0e0c.* > >> > +#pass > >> > diff --git a/ld/testsuite/ld-riscv-elf/uleb128.s b/ld/testsuite/ld-r= iscv-elf/uleb128.s > >> > new file mode 100644 > >> > index 0000000000..f7d23be163 > >> > --- /dev/null > >> > +++ b/ld/testsuite/ld-riscv-elf/uleb128.s > >> > @@ -0,0 +1,18 @@ > >> > +.text > >> > +.globl bar > >> > +.globl _start > >> > +.option rvc > >> > +.align 2 > >> > +_start: > >> > +.L0: > >> > + .rept 6 > >> > + call bar > >> > + .endr > >> > +.align 2 > >> > +.L1: > >> > + .uleb128 .L1 - .L0 > >> > + .uleb128 .L2 - .L0 > >> > +.L2: > >> > +.align 2 > >> > +bar: > >> > + nop > >> > >> It looks like alignment is broken here after uleb128s, but it's not ac= tually > >> triggering an error in all cases. Having two of them in this test cas= e doesn't > >> trigger the issue, but an odd number does. For example, the following= source > >> > >> .text > >> .globl _start > >> .align 2 > >> _start: > >> .uleb128 _start > >> .align 2 > >> _end: > >> nop > >> > >> links _end to a misaligned symbol > >> > >> Disassembly of section .text: > >> > >> 0000000000010078 <_start>: > >> ... > >> > >> 0000000000010079 <_end>: > >> 10079: 00000013 nop > >> 1007d: 0000 unimp > >> ... > >> > >> I'm assuming that's because norvc assumes 4-byte alignment in text sec= tions, so > >> it's just eliding the alingment directives. With RVC I do get an erro= r message > >> > >> .text > >> .globl _start > >> .option rvc > >> .align 2 > >> _start: > >> .uleb128 _start > >> .align 2 > >> _end: > >> nop > >> > >> ./install/bin/riscv64-unknown-linux-gnu-ld: test.o(.text+0x1): 3 b= ytes required for alignment to 4-byte boundary, but only 2 present > >> ./install/bin/riscv64-unknown-linux-gnu-ld: can't relax section: b= ad value > >> > >> > > > > > > -- > > Best regards, > > Kuan-Lin Chen. > > kuanlinchentw@gmail.com --=20 Best regards, Kuan-Lin Chen. kuanlinchentw@gmail.com --0000000000005e46de059cb570fe Content-Type: application/octet-stream; name="0001-RISC-V-Support-subtraction-of-.uleb128.patch" Content-Disposition: attachment; filename="0001-RISC-V-Support-subtraction-of-.uleb128.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k5oz42cb0 Content-length: 22131 RnJvbSBkNzMzYWJkZTY1YWRjYTAzMDI4ODgxOWMyMjIxOTUzZWQ0MGQ3YTY0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLdWFuLUxpbiBDaGVu IDxydWZ1c0BhbmRlc3RlY2guY29tPgpEYXRlOiBUaHUsIDE0IE5vdiAyMDE5 IDE0OjI0OjIyICswODAwClN1YmplY3Q6IFtQQVRDSF0gUklTQy1WOiBTdXBw b3J0IHN1YnRyYWN0aW9uIG9mIC51bGViMTI4LgoKVGhlIGRhdGEgbGVuZ3Ro IG9mIHVsZWIxMjggaXMgdmFyaWFibGUuICBTbyBsaW5rZXIgbXVzdCByZWNh bGN1bGF0ZSB0aGUKdmFsdWUgb2YgdGhlIHN1YnRyYWN0aW9uLiAgVGhlIHBh dGNoIGxlYXZlIHJlbG9jYXRpb25zIGluIG9iamVjdCBmaWxlcwpzbyB0aGF0 IGxpbmtlciBjYW4gcmVsb2NhdGUgYWdhaW4gYWZ0ZXIgcmVsYXhhdGlvbi4K CmJmZC9DaGFuZ2VMb2c6CgkqIGJmZC1pbjIuaDogUmVnZW5lcmF0ZWQuCgkq IGVsZm5uLXJpc2N2LmMgKHdyaXRlX3VsZWIxMjgpOiBOZXcgZnVuY3Rpb24u CgkocGVyZm9ybV9yZWxvY2F0aW9uKTogUGVyZm9ybSBSX1JJU0NWX1NVQl9V TEVCMTI4IGFuZAoJIFJfUklTQ1ZfU0VUX1VMRUIxMjggcmVsb2NhdGlvbi4K CShyaXNjdl9lbGZfcmVsb2NhdGVfc2VjdGlvbik6IExpa2V3aXNlLgoJKiBl bGZ4eC1yaXNjdi5jIChob3d0b190YWJsZSk6IEFkZCBSX1JJU0NWX1NVQl9V TEVCMTI4IGFuZAoJUl9SSVNDVl9TRVRfVUxFQjEyOC4KCShyaXNjdl9lbGZf aWdub3JlX3JlbG9jKTogTmV3IGZ1bmN0aW9uLgoJKiBsaWJiZmQuaDogUmVn ZW5lcmF0ZWQuCgkqIHJlbG9jLmMgKEJGRF9SRUxPQ19SSVNDVl9TRVRfVUxF QjEyOCwgQkZEX1JFTE9DX1JJU0NWX1NVQl9VTEVCMTI4KToKCU5ldyByZWxv Y2F0aW9ucyB0byBzdXBwb3J0IC51bGViMTI4LgoKZ2FzL0NoYW5nZUxvZzoK CSogY29uZmlnL3RjLXJpc2N2LmMgKG1kX2FwcGx5X2ZpeCk6IEFkZCBCRkRf UkVMT0NfUklTQ1ZfU0VUX1VMRUIxMjggYW5kCglCRkRfUkVMT0NfUklTQ1Zf U1VCX1VMRUIxMjguCgkocmlzY3ZfaW5zZXJ0X3VsZWIxMjhfZml4ZXMpOiBO ZXcgZnVuY3Rpb24uCgkocmlzY3ZfbWRfZW5kKTogU2NhbiByc19sZWIxMjgg ZnJhZ21lbnRzLgoJKHJpc2N2X3BzZXVkb190YWJsZSk6IFJlbW92ZSB1bGVi MTI4LgoKaW5jbHVkZS9DaGFuZ2VMb2c6CgkqIGVsZi9yaXNjdi5oICgoUl9S SVNDVl9TRVRfVUxFQjEyOCwgKFJfUklTQ1ZfU1VCX1VMRUIxMjgpOiBEZWZp bmUuCgpsZC9DaGFuZ2VMb2c6CgkqIHRlc3RzdWl0ZS9sZC1yaXNjdi1lbGYv bGQtcmlzY3YtZWxmLmV4cDogQWRkIHVsZWIxMjguCgkqIHRlc3RzdWl0ZS9s ZC1yaXNjdi1lbGYvdWxlYjEyOC5kOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRl L2xkLXJpc2N2LWVsZi91bGViMTI4LnM6IE5ldyBmaWxlLgotLS0KIGJmZC9D aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0ICsr KysKIGJmZC9iZmQtaW4yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAyICsKIGJmZC9lbGZubi1yaXNjdi5jICAgICAgICAgICAgICAgICAg ICAgICAgICB8IDg0ICsrKysrKysrKysrKysrKysrKysrKy0KIGJmZC9lbGZ4 eC1yaXNjdi5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUxICsrKysr KysrKysrKysKIGJmZC9saWJiZmQuaCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAyICsKIGJmZC9yZWxvYy5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICA0ICsrCiBnYXMvQ2hhbmdlTG9nICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgOCArKysKIGdhcy9jb25maWcvdGMt cmlzY3YuYyAgICAgICAgICAgICAgICAgICAgICB8IDU1ICsrKysrKysrKysr KystCiBpbmNsdWRlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgNCArKwogaW5jbHVkZS9lbGYvcmlzY3YuaCAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDIgKwogbGQvQ2hhbmdlTG9nICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDYgKysKIGxkL3Rlc3RzdWl0ZS9sZC1yaXNj di1lbGYvbGQtcmlzY3YtZWxmLmV4cCB8ICAxICsKIGxkL3Rlc3RzdWl0ZS9s ZC1yaXNjdi1lbGYvdWxlYjEyOC5kICAgICAgICB8IDE4ICsrKysrCiBsZC90 ZXN0c3VpdGUvbGQtcmlzY3YtZWxmL3VsZWIxMjgucyAgICAgICAgfCAxOCAr KysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMjY2IGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGQvdGVzdHN1aXRl L2xkLXJpc2N2LWVsZi91bGViMTI4LmQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs ZC90ZXN0c3VpdGUvbGQtcmlzY3YtZWxmL3VsZWIxMjgucwoKZGlmZiAtLWdp dCBhL2JmZC9DaGFuZ2VMb2cgYi9iZmQvQ2hhbmdlTG9nCmluZGV4IDQ1ZjI0 OTk3MzUuLjk0MDgyZjYyMTMgMTAwNjQ0Ci0tLSBhL2JmZC9DaGFuZ2VMb2cK KysrIGIvYmZkL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTAx LTIyICBLdWFuLUxpbiBDaGVuICA8a3VhbmxpbmNoZW50d0BnbWFpbC5jb20+ CisKKwkqIGJmZC1pbjIuaDogUmVnZW5lcmF0ZWQuCisJKiBlbGZubi1yaXNj di5jICh3cml0ZV91bGViMTI4KTogTmV3IGZ1bmN0aW9uLgorCShwZXJmb3Jt X3JlbG9jYXRpb24pOiBQZXJmb3JtIFJfUklTQ1ZfU1VCX1VMRUIxMjggYW5k CisJIFJfUklTQ1ZfU0VUX1VMRUIxMjggcmVsb2NhdGlvbi4KKwkocmlzY3Zf ZWxmX3JlbG9jYXRlX3NlY3Rpb24pOiBMaWtld2lzZS4KKwkqIGVsZnh4LXJp c2N2LmMgKGhvd3RvX3RhYmxlKTogQWRkIFJfUklTQ1ZfU1VCX1VMRUIxMjgg YW5kCisJUl9SSVNDVl9TRVRfVUxFQjEyOC4KKwkocmlzY3ZfZWxmX2lnbm9y ZV9yZWxvYyk6IE5ldyBmdW5jdGlvbi4KKwkqIGxpYmJmZC5oOiBSZWdlbmVy YXRlZC4KKwkqIHJlbG9jLmMgKEJGRF9SRUxPQ19SSVNDVl9TRVRfVUxFQjEy OCwgQkZEX1JFTE9DX1JJU0NWX1NVQl9VTEVCMTI4KToKKwlOZXcgcmVsb2Nh dGlvbnMgdG8gc3VwcG9ydCAudWxlYjEyOC4KKwogMjAyMC0wMS0yMCAgTmlj ayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KIAogCSogcG8vcHQucG86 IFVwZGF0ZXMgUG9ydHVndWVzZSB0cmFuc2xhdGlvbi4KZGlmZiAtLWdpdCBh L2JmZC9iZmQtaW4yLmggYi9iZmQvYmZkLWluMi5oCmluZGV4IDdjMTNiYzhj OTEuLmU0M2MzYTU1NTcgMTAwNjQ0Ci0tLSBhL2JmZC9iZmQtaW4yLmgKKysr IGIvYmZkL2JmZC1pbjIuaApAQCAtNDM4Myw2ICs0MzgzLDggQEAgbnVtYmVy IGZvciB0aGUgU0JJQywgU0JJUywgU0JJIGFuZCBDQkkgaW5zdHJ1Y3Rpb25z ICAqLwogICBCRkRfUkVMT0NfUklTQ1ZfU0VUMTYsCiAgIEJGRF9SRUxPQ19S SVNDVl9TRVQzMiwKICAgQkZEX1JFTE9DX1JJU0NWXzMyX1BDUkVMLAorICBC RkRfUkVMT0NfUklTQ1ZfU0VUX1VMRUIxMjgsCisgIEJGRF9SRUxPQ19SSVND Vl9TVUJfVUxFQjEyOCwKIAogLyogUmVuZXNhcyBSTDc4IFJlbG9jYXRpb25z LiAgKi8KICAgQkZEX1JFTE9DX1JMNzhfTkVHOCwKZGlmZiAtLWdpdCBhL2Jm ZC9lbGZubi1yaXNjdi5jIGIvYmZkL2VsZm5uLXJpc2N2LmMKaW5kZXggNDZm MDEwMGFjZS4uNzRjMTliZjBmYyAxMDA2NDQKLS0tIGEvYmZkL2VsZm5uLXJp c2N2LmMKKysrIGIvYmZkL2VsZm5uLXJpc2N2LmMKQEAgLTE0MTksNiArMTQx OSwyNiBAQCByaXNjdl9nbG9iYWxfcG9pbnRlcl92YWx1ZSAoc3RydWN0IGJm ZF9saW5rX2luZm8gKmluZm8pCiAgIHJldHVybiBoLT51LmRlZi52YWx1ZSAr IHNlY19hZGRyIChoLT51LmRlZi5zZWN0aW9uKTsKIH0KIAorLyogV3JpdGUg VkFMIGluIHVsZWIxMjggZm9ybWF0IHRvIFAsIHJldHVybmluZyBhIHBvaW50 ZXIgdG8gdGhlCisgICBmb2xsb3dpbmcgYnl0ZS4KKyAgIFRoaXMgY29kZSBp cyBjb3BpZWQgZnJvbSBlbGYtYXR0ci5jLiAgKi8KKworc3RhdGljIGJmZF9i eXRlICoKK3dyaXRlX3VsZWIxMjggKGJmZF9ieXRlICpwLCB1bnNpZ25lZCBp bnQgdmFsKQoreworICBiZmRfYnl0ZSBjOworICBkbworICAgIHsKKyAgICAg IGMgPSB2YWwgJiAweDdmOworICAgICAgdmFsID4+PSA3OworICAgICAgaWYg KHZhbCkKKwljIHw9IDB4ODA7CisgICAgICAqKHArKykgPSBjOworICAgIH0K KyAgd2hpbGUgKHZhbCk7CisgIHJldHVybiBwOworfQorCiAvKiBFbXBsYWNl IGEgc3RhdGljIHJlbG9jYXRpb24uICAqLwogCiBzdGF0aWMgYmZkX3JlbG9j X3N0YXR1c190eXBlCkBAIC0xNTEyLDYgKzE1MzIsMjUgQEAgcGVyZm9ybV9y ZWxvY2F0aW9uIChjb25zdCByZWxvY19ob3d0b190eXBlICpob3d0bywKIAl2 YWx1ZSA9IEVOQ09ERV9SVkNfTFVJX0lNTSAoUklTQ1ZfQ09OU1RfSElHSF9Q QVJUICh2YWx1ZSkpOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFJfUklT Q1ZfU0VUX1VMRUIxMjg6CisgICAgY2FzZSBSX1JJU0NWX1NVQl9VTEVCMTI4 OgorICAgICAgeworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCWJmZF9ieXRl ICplbmRwLCAqcDsKKworCV9iZmRfcmVhZF91bnNpZ25lZF9sZWIxMjggKGlu cHV0X2JmZCwgY29udGVudHMgKyByZWwtPnJfb2Zmc2V0LCAmbGVuKTsKKwor CS8qIENsZWFuIHRoZSBjb250ZW50cyB2YWx1ZSB0byB6ZXJvLiAgRG8gbm90 IHJlZHVjZSB0aGUgbGVuZ3RoLiAgKi8KKwlwID0gY29udGVudHMgKyByZWwt PnJfb2Zmc2V0OworCWVuZHAgPSBwICsgbGVuIC0xOworCW1lbXNldCAocCwg MHg4MCwgbGVuIC0gMSk7CisJKihlbmRwKSA9IDA7CisJcCA9IHdyaXRlX3Vs ZWIxMjggKHAsIHZhbHVlKSAtIDE7CisJaWYgKHAgPCBlbmRwKQorCSAgKnAg fD0gMHg4MDsKKwlyZXR1cm4gYmZkX3JlbG9jX29rOworICAgICAgfQorCiAg ICAgY2FzZSBSX1JJU0NWXzMyOgogICAgIGNhc2UgUl9SSVNDVl82NDoKICAg ICBjYXNlIFJfUklTQ1ZfQUREODoKQEAgLTE3NjcsNiArMTgwNiw4IEBAIHJp c2N2X2VsZl9yZWxvY2F0ZV9zZWN0aW9uIChiZmQgKm91dHB1dF9iZmQsCiAg IHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICoqc3ltX2hhc2hlcyA9IGVs Zl9zeW1faGFzaGVzIChpbnB1dF9iZmQpOwogICBiZmRfdm1hICpsb2NhbF9n b3Rfb2Zmc2V0cyA9IGVsZl9sb2NhbF9nb3Rfb2Zmc2V0cyAoaW5wdXRfYmZk KTsKICAgYmZkX2Jvb2xlYW4gYWJzb2x1dGU7CisgIGJmZF92bWEgdWxlYjEy OF92bWEgPSAwOworICBFbGZfSW50ZXJuYWxfUmVsYSAqdWxlYjEyOF9yZWwg PSBOVUxMOwogCiAgIGlmICghcmlzY3ZfaW5pdF9wY3JlbF9yZWxvY3MgKCZw Y3JlbF9yZWxvY3MpKQogICAgIHJldHVybiBGQUxTRTsKQEAgLTE3NzgsNyAr MTgxOSw3IEBAIHJpc2N2X2VsZl9yZWxvY2F0ZV9zZWN0aW9uIChiZmQgKm91 dHB1dF9iZmQsCiAgICAgICBzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAq aDsKICAgICAgIEVsZl9JbnRlcm5hbF9TeW0gKnN5bTsKICAgICAgIGFzZWN0 aW9uICpzZWM7Ci0gICAgICBiZmRfdm1hIHJlbG9jYXRpb247CisgICAgICBi ZmRfdm1hIHJlbG9jYXRpb24gPSAwOwogICAgICAgYmZkX3JlbG9jX3N0YXR1 c190eXBlIHIgPSBiZmRfcmVsb2Nfb2s7CiAgICAgICBjb25zdCBjaGFyICpu YW1lOwogICAgICAgYmZkX3ZtYSBvZmYsIGllX29mZjsKQEAgLTE4NzEsNiAr MTkxMiw0NyBAQCByaXNjdl9lbGZfcmVsb2NhdGVfc2VjdGlvbiAoYmZkICpv dXRwdXRfYmZkLAogCWNhc2UgUl9SSVNDVl9ERUxFVEU6CiAJICAvKiBUaGVz ZSByZXF1aXJlIG5vIHNwZWNpYWwgaGFuZGxpbmcgYmV5b25kIHBlcmZvcm1f cmVsb2NhdGlvbi4gICovCiAJICBicmVhazsKKwljYXNlIFJfUklTQ1ZfU0VU X1VMRUIxMjg6CisJICBpZiAoIXVsZWIxMjhfcmVsKQorCSAgICB7CisJICAg ICAgLyogU2F2ZSB0aGUgbWludWVuZCB0byB1c2UgbGF0ZXIuICAqLworCSAg ICAgIHVsZWIxMjhfdm1hID0gcmVsb2NhdGlvbjsKKwkgICAgICB1bGViMTI4 X3JlbCA9IHJlbDsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxz ZQorCSAgICB7CisJICAgICAgaWYgKHVsZWIxMjhfcmVsLT5yX29mZnNldCAh PSByZWwtPnJfb2Zmc2V0KQorCQl7CisJCSAgbXNnID0gKCJSX1JJU0NWX1NF VF9VTEVCMTI4IGFuZCBSX1JJU0NWX1NVQl9VTEVCMTI4IGFyZSBtaXNtYXRj aGVkLiAiKTsKKwkJICByID0gYmZkX3JlbG9jX2Rhbmdlcm91czsKKwkJICBi cmVhazsKKwkJfQorCSAgICAgIHJlbG9jYXRpb24gPSByZWxvY2F0aW9uIC0g dWxlYjEyOF92bWE7CisJICAgICAgdWxlYjEyOF9yZWwgPSBOVUxMOworCSAg ICAgIGJyZWFrOworCSAgICB9CisKKwljYXNlIFJfUklTQ1ZfU1VCX1VMRUIx Mjg6CisJICBpZiAodWxlYjEyOF9yZWwpCisJICAgIHsKKwkgICAgICBpZiAo dWxlYjEyOF9yZWwtPnJfb2Zmc2V0ICE9IHJlbC0+cl9vZmZzZXQpCisJCXsK KwkJICBtc2cgPSAoIlJfUklTQ1ZfU0VUX1VMRUIxMjggYW5kIFJfUklTQ1Zf U1VCX1VMRUIxMjggYXJlIG1pc21hdGNoZWQuICIpOworCQkgIHIgPSBiZmRf cmVsb2NfZGFuZ2Vyb3VzOworCQkgIGJyZWFrOworCQl9CisJICAgICAgcmVs b2NhdGlvbiA9IHVsZWIxMjhfdm1hIC0gcmVsb2NhdGlvbjsKKwkgICAgICB1 bGViMTI4X3JlbCA9IE5VTEw7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkg IGVsc2UKKwkgICAgeworCSAgICAgIC8qIFNhdmUgdGhlIHN1YnRyYWhlbmQg dG8gdXNlIGxhdGVyLiAgKi8KKwkgICAgICB1bGViMTI4X3ZtYSA9IHJlbG9j YXRpb247CisJICAgICAgdWxlYjEyOF9yZWwgPSByZWw7CisJICAgICAgY29u dGludWU7CisJICAgIH0KIAogCWNhc2UgUl9SSVNDVl9HT1RfSEkyMDoKIAkg IGlmIChoICE9IE5VTEwpCmRpZmYgLS1naXQgYS9iZmQvZWxmeHgtcmlzY3Yu YyBiL2JmZC9lbGZ4eC1yaXNjdi5jCmluZGV4IDY2ZTM0M2Y0YTUuLjI0NDM1 MzU3M2IgMTAwNjQ0Ci0tLSBhL2JmZC9lbGZ4eC1yaXNjdi5jCisrKyBiL2Jm ZC9lbGZ4eC1yaXNjdi5jCkBAIC0zOCw2ICszOCw4IEBACiAgICByZWxvY2F0 aW9ucyBmb3IgdGhlIGRlYnVnIGluZm8uICAqLwogc3RhdGljIGJmZF9yZWxv Y19zdGF0dXNfdHlwZSByaXNjdl9lbGZfYWRkX3N1Yl9yZWxvYwogICAoYmZk ICosIGFyZWxlbnQgKiwgYXN5bWJvbCAqLCB2b2lkICosIGFzZWN0aW9uICos IGJmZCAqLCBjaGFyICoqKTsKK3N0YXRpYyBiZmRfcmVsb2Nfc3RhdHVzX3R5 cGUgcmlzY3ZfZWxmX2lnbm9yZV9yZWxvYworICAoYmZkICosIGFyZWxlbnQg KiwgYXN5bWJvbCAqLCB2b2lkICosIGFzZWN0aW9uICosIGJmZCAqLCBjaGFy ICoqKTsKIAogLyogVGhlIHJlbG9jYXRpb24gdGFibGUgdXNlZCBmb3IgU0hU X1JFTEEgc2VjdGlvbnMuICAqLwogCkBAIC04NTUsOCArODU3LDQxIEBAIHN0 YXRpYyByZWxvY19ob3d0b190eXBlIGhvd3RvX3RhYmxlW10gPQogCSAwLAkJ CQkvKiBzcmNfbWFzayAqLwogCSBNSU5VU19PTkUsCQkJLyogZHN0X21hc2sg Ki8KIAkgRkFMU0UpLAkJCS8qIHBjcmVsX29mZnNldCAqLworCisgIC8qIFRo ZSBsZW5ndGggb2YgdW5zaWduZWQtbGViMTI4IGlzIHZhcmlhYmxlLCBqdXN0 IGFzc3VtZSB0aGUKKyAgICAgc2l6ZSBpcyBvbmUgYnl0ZSBoZXJlLiAgKi8K KyAgSE9XVE8gKFJfUklTQ1ZfU0VUX1VMRUIxMjgsCQkvKiB0eXBlICovCisJ IDAsCQkJCS8qIHJpZ2h0c2hpZnQgKi8KKwkgMCwJCQkJLyogc2l6ZSAqLwor CSAwLAkJCQkvKiBiaXRzaXplICovCisJIEZBTFNFLAkJCQkvKiBwY19yZWxh dGl2ZSAqLworCSAwLAkJCQkvKiBiaXRwb3MgKi8KKwkgY29tcGxhaW5fb3Zl cmZsb3dfZG9udCwJLyogY29tcGxhaW5fb25fb3ZlcmZsb3cgKi8KKwkgcmlz Y3ZfZWxmX2lnbm9yZV9yZWxvYywJLyogc3BlY2lhbF9mdW5jdGlvbiAqLwor CSAiUl9SSVNDVl9TRVRfVUxFQjEyOCIsCQkvKiBuYW1lICovCisJIEZBTFNF LAkJCQkvKiBwYXJ0aWFsX2lucGxhY2UgKi8KKwkgMCwJCQkJLyogc3JjX21h c2sgKi8KKwkgMCwJCQkJLyogZHN0X21hc2sgKi8KKwkgRkFMU0UpLAkJCS8q IHBjcmVsX29mZnNldCAqLworCisgIC8qIFRoZSBsZW5ndGggb2YgdW5zaWdu ZWQtbGViMTI4IGlzIHZhcmlhYmxlLCBqdXN0IGFzc3VtZSB0aGUKKyAgICAg c2l6ZSBpcyBvbmUgYnl0ZSBoZXJlLiAgKi8KKyAgSE9XVE8gKFJfUklTQ1Zf U1VCX1VMRUIxMjgsCQkvKiB0eXBlICovCisJIDAsCQkJCS8qIHJpZ2h0c2hp ZnQgKi8KKwkgMCwJCQkJLyogc2l6ZSAqLworCSAwLAkJCQkvKiBiaXRzaXpl ICovCisJIEZBTFNFLAkJCQkvKiBwY19yZWxhdGl2ZSAqLworCSAwLAkJCQkv KiBiaXRwb3MgKi8KKwkgY29tcGxhaW5fb3ZlcmZsb3dfZG9udCwJLyogY29t cGxhaW5fb25fb3ZlcmZsb3cgKi8KKwkgcmlzY3ZfZWxmX2lnbm9yZV9yZWxv YywJLyogc3BlY2lhbF9mdW5jdGlvbiAqLworCSAiUl9SSVNDVl9TVUJfVUxF QjEyOCIsCQkvKiBuYW1lICovCisJIEZBTFNFLAkJCQkvKiBwYXJ0aWFsX2lu cGxhY2UgKi8KKwkgMCwJCQkJLyogc3JjX21hc2sgKi8KKwkgMCwJCQkJLyog ZHN0X21hc2sgKi8KKwkgRkFMU0UpLAkJCS8qIHBjcmVsX29mZnNldCAqLwog fTsKIAorCiAvKiBBIG1hcHBpbmcgZnJvbSBCRkQgcmVsb2MgdHlwZXMgdG8g UklTQy1WIEVMRiByZWxvYyB0eXBlcy4gICovCiAKIHN0cnVjdCBlbGZfcmVs b2NfbWFwCkBAIC05MTcsNiArOTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBlbGZfcmVsb2NfbWFwIHJpc2N2X3JlbG9jX21hcFtdID0KICAgeyBCRkRf UkVMT0NfUklTQ1ZfU0VUMTYsIFJfUklTQ1ZfU0VUMTYgfSwKICAgeyBCRkRf UkVMT0NfUklTQ1ZfU0VUMzIsIFJfUklTQ1ZfU0VUMzIgfSwKICAgeyBCRkRf UkVMT0NfUklTQ1ZfMzJfUENSRUwsIFJfUklTQ1ZfMzJfUENSRUwgfSwKKyAg eyBCRkRfUkVMT0NfUklTQ1ZfU0VUX1VMRUIxMjgsIFJfUklTQ1ZfU0VUX1VM RUIxMjggfSwKKyAgeyBCRkRfUkVMT0NfUklTQ1ZfU1VCX1VMRUIxMjgsIFJf UklTQ1ZfU1VCX1VMRUIxMjggfSwKIH07CiAKIC8qIEdpdmVuIGEgQkZEIHJl bG9jIHR5cGUsIHJldHVybiBhIGhvd3RvIHN0cnVjdHVyZS4gICovCkBAIC0x MDExLDYgKzEwNDgsMjAgQEAgcmlzY3ZfZWxmX2FkZF9zdWJfcmVsb2MgKGJm ZCAqYWJmZCwKICAgcmV0dXJuIGJmZF9yZWxvY19vazsKIH0KIAorLyogU3Bl Y2lhbCBoYW5kbGVyIGZvciByZWxvY2F0aW9ucyB3aGljaCBkb24ndCBoYXZl IHRvIGJlIHJlbG9jYXRlZC4KKyAgIFRoaXMgZnVuY3Rpb24ganVzdCBzaW1w bHkgcmV0dXJuIGJmZF9yZWxvY19vay4gICovCitzdGF0aWMgYmZkX3JlbG9j X3N0YXR1c190eXBlCityaXNjdl9lbGZfaWdub3JlX3JlbG9jIChiZmQgKmFi ZmQgQVRUUklCVVRFX1VOVVNFRCwgYXJlbGVudCAqcmVsb2NfZW50cnksCisJ CQlhc3ltYm9sICpzeW1ib2wgQVRUUklCVVRFX1VOVVNFRCwKKwkJCXZvaWQg KmRhdGEgQVRUUklCVVRFX1VOVVNFRCwgYXNlY3Rpb24gKmlucHV0X3NlY3Rp b24sCisJCQliZmQgKm91dHB1dF9iZmQsIGNoYXIgKiplcnJvcl9tZXNzYWdl IEFUVFJJQlVURV9VTlVTRUQpCit7CisgIGlmIChvdXRwdXRfYmZkICE9IE5V TEwpCisgICAgcmVsb2NfZW50cnktPmFkZHJlc3MgKz0gaW5wdXRfc2VjdGlv bi0+b3V0cHV0X29mZnNldDsKKworICByZXR1cm4gYmZkX3JlbG9jX29rOwor fQorCiAvKiBQYXJzaW5nIHN1YnNldCB2ZXJzaW9uLgogCiAgICBSZXR1cm4g VmFsdWU6CmRpZmYgLS1naXQgYS9iZmQvbGliYmZkLmggYi9iZmQvbGliYmZk LmgKaW5kZXggZDk3ZDRlNTdhNy4uNzRkMTJkOGI5OSAxMDA2NDQKLS0tIGEv YmZkL2xpYmJmZC5oCisrKyBiL2JmZC9saWJiZmQuaApAQCAtMjMyNyw2ICsy MzI3LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJmZF9yZWxvY19j b2RlX3JlYWxfbmFtZXNbXSA9IHsgIkBAdW5pbml0aWFsaXplZEBAIiwKICAg IkJGRF9SRUxPQ19SSVNDVl9TRVQxNiIsCiAgICJCRkRfUkVMT0NfUklTQ1Zf U0VUMzIiLAogICAiQkZEX1JFTE9DX1JJU0NWXzMyX1BDUkVMIiwKKyAgIkJG RF9SRUxPQ19SSVNDVl9TRVRfVUxFQjEyOCIsCisgICJCRkRfUkVMT0NfUklT Q1ZfU1VCX1VMRUIxMjgiLAogICAiQkZEX1JFTE9DX1JMNzhfTkVHOCIsCiAg ICJCRkRfUkVMT0NfUkw3OF9ORUcxNiIsCiAgICJCRkRfUkVMT0NfUkw3OF9O RUcyNCIsCmRpZmYgLS1naXQgYS9iZmQvcmVsb2MuYyBiL2JmZC9yZWxvYy5j CmluZGV4IDMzY2Q2NzE1MGMuLjliNzk3ZTc5MjAgMTAwNjQ0Ci0tLSBhL2Jm ZC9yZWxvYy5jCisrKyBiL2JmZC9yZWxvYy5jCkBAIC01MjEyLDYgKzUyMTIs MTAgQEAgRU5VTVgKICAgQkZEX1JFTE9DX1JJU0NWX1NFVDMyCiBFTlVNWAog ICBCRkRfUkVMT0NfUklTQ1ZfMzJfUENSRUwKK0VOVU1YCisgIEJGRF9SRUxP Q19SSVNDVl9TRVRfVUxFQjEyOAorRU5VTVgKKyAgQkZEX1JFTE9DX1JJU0NW X1NVQl9VTEVCMTI4CiBFTlVNRE9DCiAgIFJJU0MtViByZWxvY2F0aW9ucy4K IApkaWZmIC0tZ2l0IGEvZ2FzL0NoYW5nZUxvZyBiL2dhcy9DaGFuZ2VMb2cK aW5kZXggOGY0MTQzOTZmNS4uM2JlYjQwNjBjMiAxMDA2NDQKLS0tIGEvZ2Fz L0NoYW5nZUxvZworKysgYi9nYXMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEg QEAKKzIwMjAtMDEtMjIgIEt1YW4tTGluIENoZW4gIDxrdWFubGluY2hlbnR3 QGdtYWlsLmNvbT4KKworCSogY29uZmlnL3RjLXJpc2N2LmMgKG1kX2FwcGx5 X2ZpeCk6IEFkZCBCRkRfUkVMT0NfUklTQ1ZfU0VUX1VMRUIxMjggYW5kCisJ QkZEX1JFTE9DX1JJU0NWX1NVQl9VTEVCMTI4LgorCShyaXNjdl9pbnNlcnRf dWxlYjEyOF9maXhlcyk6IE5ldyBmdW5jdGlvbi4KKwkocmlzY3ZfbWRfZW5k KTogU2NhbiByc19sZWIxMjggZnJhZ21lbnRzLgorCShyaXNjdl9wc2V1ZG9f dGFibGUpOiBSZW1vdmUgdWxlYjEyOC4KKwogMjAyMC0wMS0yMSAgSmFuIEJl dWxpY2ggIDxqYmV1bGljaEBzdXNlLmNvbT4KIAogCSogdGVzdHN1aXRlL2dh cy9pMzg2L2ludmFsLWNyYzMyLnMsCmRpZmYgLS1naXQgYS9nYXMvY29uZmln L3RjLXJpc2N2LmMgYi9nYXMvY29uZmlnL3RjLXJpc2N2LmMKaW5kZXggMjFm ZmY4ZmZhYi4uNjEwOTRmYWIzYSAxMDA2NDQKLS0tIGEvZ2FzL2NvbmZpZy90 Yy1yaXNjdi5jCisrKyBiL2dhcy9jb25maWcvdGMtcmlzY3YuYwpAQCAtMjM5 Miw2ICsyMzkyLDkgQEAgbWRfYXBwbHlfZml4IChmaXhTICpmaXhQLCB2YWx1 ZVQgKnZhbFAsIHNlZ1Qgc2VnIEFUVFJJQlVURV9VTlVTRUQpCiAgICAgY2Fz ZSBCRkRfUkVMT0NfUklTQ1ZfU1VCMzI6CiAgICAgY2FzZSBCRkRfUkVMT0Nf UklTQ1ZfU1VCNjQ6CiAgICAgY2FzZSBCRkRfUkVMT0NfUklTQ1ZfUkVMQVg6 CisgICAgLyogY3Z0X2ZyYWdfdG9fZmlsbCAoKSBoYXMgY2FsbGVkIG91dHB1 dF9sZWIxMjggKCkuICAqLworICAgIGNhc2UgQkZEX1JFTE9DX1JJU0NWX1NF VF9VTEVCMTI4OgorICAgIGNhc2UgQkZEX1JFTE9DX1JJU0NWX1NVQl9VTEVC MTI4OgogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJGRF9SRUxPQ19SSVND Vl9UUFJFTF9ISTIwOgpAQCAtMzA2Nyw4ICszMDcwLDExIEBAIHNfcmlzY3Zf bGViMTI4IChpbnQgc2lnbikKICAgY2hhciAqc2F2ZV9pbiA9IGlucHV0X2xp bmVfcG9pbnRlcjsKIAogICBleHByZXNzaW9uICgmZXhwKTsKLSAgaWYgKGV4 cC5YX29wICE9IE9fY29uc3RhbnQpCi0gICAgYXNfYmFkIChfKCJub24tY29u c3RhbnQgLiVjbGViMTI4IGlzIG5vdCBzdXBwb3J0ZWQiKSwgc2lnbiA/ICdz JyA6ICd1Jyk7CisgIGlmIChzaWduICYmIGV4cC5YX29wICE9IE9fY29uc3Rh bnQpCisgICAgYXNfYmFkIChfKCJub24tY29uc3RhbnQgLnNsZWIxMjggaXMg bm90IHN1cHBvcnRlZCIpKTsKKyAgZWxzZSBpZiAoIXNpZ24gJiYgZXhwLlhf b3AgIT0gT19jb25zdGFudCAmJiBleHAuWF9vcCAhPSBPX3N1YnRyYWN0KQor ICAgIGFzX2JhZCAoXygiLnVsZWIxMjggb25seSBzdXBwb3J0cyBjb25zdGFu dCBvciBzdWJ0cmFjdCBleHByZXNzaW9ucy4iKSk7CisKICAgZGVtYW5kX2Vt cHR5X3Jlc3Rfb2ZfbGluZSAoKTsKIAogICBpbnB1dF9saW5lX3BvaW50ZXIg PSBzYXZlX2luOwpAQCAtMzEzMSwxMSArMzEzNyw1NiBAQCByaXNjdl9zZXRf cHVibGljX2F0dHJpYnV0ZXMgKHZvaWQpCiAgICAgcmlzY3Zfd3JpdGVfb3V0 X2FyY2hfYXR0ciAoKTsKIH0KIAorLyogU2NhbiB1bGViMTI4IHN1YnRyYWN0 aW9uIGV4cHJlc3Npb25zIGFuZCBpbnNlcnQgZml4dXBzIGZvciB0aGVtLgor ICAgZS5nLiwgLnVsZWIxMjggLkwxIC0gLkwwCisgICBCZWNhdXNlIHJlbGF4 YXRpb24gbWF5IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIHN1YnRyYWN0aW9u LCB3ZQorICAgbXVzdCByZXNvbHZlIHRoZW0gYXQgbGluay10aW1lLiAgKi8K Kworc3RhdGljIHZvaWQKK3Jpc2N2X2luc2VydF91bGViMTI4X2ZpeGVzIChi ZmQgKmFiZmQgQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAgICBhc2VjdGlvbiAq c2VjLCB2b2lkICp4eHggQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgc2VnbWVu dF9pbmZvX3R5cGUgKnNlZ2luZm8gPSBzZWdfaW5mbyAoc2VjKTsKKyAgc3Ry dWN0IGZyYWcgKmZyYWdQOworCisgIHN1YnNlZ19zZXQgKHNlYywgMCk7CisK KyAgZm9yIChmcmFnUCA9IHNlZ2luZm8tPmZyY2hhaW5QLT5mcmNoX3Jvb3Q7 CisgICAgICAgZnJhZ1A7IGZyYWdQID0gZnJhZ1AtPmZyX25leHQpCisgICAg eworICAgICAgZXhwcmVzc2lvblMgKmV4cCwgKmV4cF9kdXA7CisKKyAgICAg IGlmIChmcmFnUC0+ZnJfdHlwZSAhPSByc19sZWIxMjggIHx8IGZyYWdQLT5m cl9zeW1ib2wgPT0gTlVMTCkKKwljb250aW51ZTsKKworICAgICAgZXhwID0g c3ltYm9sX2dldF92YWx1ZV9leHByZXNzaW9uIChmcmFnUC0+ZnJfc3ltYm9s KTsKKworICAgICAgaWYgKGV4cC0+WF9vcCAhPSBPX3N1YnRyYWN0KQorCWNv bnRpbnVlOworCisgICAgICAvKiBPbmx5IHVuc2lnbmVkIGxlYjEyOCBjYW4g YmUgaGFuZGxlZC4gICovCisgICAgICBnYXNfYXNzZXJ0IChmcmFnUC0+ZnJf c3VidHlwZSA9PSAwKTsKKyAgICAgIGV4cF9kdXAgPSB4bWVtZHVwIChleHAs IHNpemVvZiAoKmV4cCksIHNpemVvZiAoKmV4cCkpOworICAgICAgZXhwX2R1 cC0+WF9vcCA9IE9fc3ltYm9sOworICAgICAgZXhwX2R1cC0+WF9vcF9zeW1i b2wgPSBOVUxMOworCisgICAgICAvKiBJbnNlcnQgcmVsb2NhdGlvbnMgdG8g cmVzb2x2ZSB0aGUgc3VidHJhY3Rpb24gYXQgbGluay10aW1lLiAgKi8KKyAg ICAgIGZpeF9uZXdfZXhwIChmcmFnUCwgZnJhZ1AtPmZyX2ZpeCwgMCwKKwkJ ICAgZXhwX2R1cCwgMCwgQkZEX1JFTE9DX1JJU0NWX1NFVF9VTEVCMTI4KTsK KyAgICAgIGV4cF9kdXAtPlhfYWRkX3N5bWJvbCA9IGV4cC0+WF9vcF9zeW1i b2w7CisgICAgICBmaXhfbmV3X2V4cCAoZnJhZ1AsIGZyYWdQLT5mcl9maXgs IDAsCisJCSAgIGV4cF9kdXAsIDAsIEJGRF9SRUxPQ19SSVNDVl9TVUJfVUxF QjEyOCk7CisgICAgfQorfQorCiAvKiBDYWxsZWQgYWZ0ZXIgYWxsIGFzc2Vt Ymx5IGhhcyBiZWVuIGRvbmUuICAqLwogCiB2b2lkCiByaXNjdl9tZF9lbmQg KHZvaWQpCiB7CisKKyAgaWYgKHJpc2N2X29wdHMucmVsYXgpCisgICAgYmZk X21hcF9vdmVyX3NlY3Rpb25zIChzdGRvdXRwdXQsIHJpc2N2X2luc2VydF91 bGViMTI4X2ZpeGVzLCBOVUxMKTsKICAgcmlzY3Zfc2V0X3B1YmxpY19hdHRy aWJ1dGVzICgpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL0NoYW5nZUxv ZyBiL2luY2x1ZGUvQ2hhbmdlTG9nCmluZGV4IGM3ZmQ0YWIxNDEuLjY3YWM4 ODdmZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvQ2hhbmdlTG9nCisrKyBiL2lu Y2x1ZGUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNyBAQAorMjAyMC0wMS0wNiAg S3Vhbi1MaW4gQ2hlbiAgPGt1YW5saW5jaGVudHdAZ21haWwuY29tPgorCisJ KiBlbGYvcmlzY3YuaCAoKFJfUklTQ1ZfU0VUX1VMRUIxMjgsIChSX1JJU0NW X1NVQl9VTEVCMTI4KTogRGVmaW5lLgorCiAyMDIwLTAxLTE4ICBOaWNrIENs aWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgogCiAJQmludXRpbHMgMi4zNCBi cmFuY2ggY3JlYXRlZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL3Jpc2N2 LmggYi9pbmNsdWRlL2VsZi9yaXNjdi5oCmluZGV4IDUwNjJhNDk5OGMuLmE4 MzlhMGM4NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZWxmL3Jpc2N2LmgKKysr IGIvaW5jbHVkZS9lbGYvcmlzY3YuaApAQCAtODgsNiArODgsOCBAQCBTVEFS VF9SRUxPQ19OVU1CRVJTIChlbGZfcmlzY3ZfcmVsb2NfdHlwZSkKICAgUkVM T0NfTlVNQkVSIChSX1JJU0NWX1NFVDE2LCA1NSkKICAgUkVMT0NfTlVNQkVS IChSX1JJU0NWX1NFVDMyLCA1NikKICAgUkVMT0NfTlVNQkVSIChSX1JJU0NW XzMyX1BDUkVMLCA1NykKKyAgUkVMT0NfTlVNQkVSIChSX1JJU0NWX1NFVF9V TEVCMTI4LCA1OCkKKyAgUkVMT0NfTlVNQkVSIChSX1JJU0NWX1NVQl9VTEVC MTI4LCA1OSkKIEVORF9SRUxPQ19OVU1CRVJTIChSX1JJU0NWX21heCkKIAog LyogUHJvY2Vzc29yIHNwZWNpZmljIGZsYWdzIGZvciB0aGUgRUxGIGhlYWRl ciBlX2ZsYWdzIGZpZWxkLiAgKi8KZGlmZiAtLWdpdCBhL2xkL0NoYW5nZUxv ZyBiL2xkL0NoYW5nZUxvZwppbmRleCBkODk0OWJiYzM4Li5jOWI1ZDE5NGE1 IDEwMDY0NAotLS0gYS9sZC9DaGFuZ2VMb2cKKysrIGIvbGQvQ2hhbmdlTG9n CkBAIC0xLDMgKzEsOSBAQAorMjAyMC0wMS0wNiAgS3Vhbi1MaW4gQ2hlbiAg PGt1YW5saW5jaGVudHdAZ21haWwuY29tPgorCisJKiB0ZXN0c3VpdGUvbGQt cmlzY3YtZWxmL2xkLXJpc2N2LWVsZi5leHA6IEFkZCB1bGViMTI4LgorCSog dGVzdHN1aXRlL2xkLXJpc2N2LWVsZi91bGViMTI4LmQ6IE5ldyB0ZXN0Lgor CSogdGVzdHN1aXRlL2xkLXJpc2N2LWVsZi91bGViMTI4LnM6IE5ldyBmaWxl LgorCiAyMDIwLTAxLTIyICBZdXJpIENob3Jub2l2YW4gIDx5dXJjaG9yQG1h Z2VpYS5vcmc+CiAKIAlQUiAyNTQxNwpkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1 aXRlL2xkLXJpc2N2LWVsZi9sZC1yaXNjdi1lbGYuZXhwIGIvbGQvdGVzdHN1 aXRlL2xkLXJpc2N2LWVsZi9sZC1yaXNjdi1lbGYuZXhwCmluZGV4IDBlOTc1 MGU0OTYuLjQxMmMwMGQxZWMgMTAwNjQ0Ci0tLSBhL2xkL3Rlc3RzdWl0ZS9s ZC1yaXNjdi1lbGYvbGQtcmlzY3YtZWxmLmV4cAorKysgYi9sZC90ZXN0c3Vp dGUvbGQtcmlzY3YtZWxmL2xkLXJpc2N2LWVsZi5leHAKQEAgLTM4LDYgKzM4 LDcgQEAgaWYgW2lzdGFyZ2V0ICJyaXNjdiotKi0qIl0gewogICAgIHJ1bl9k dW1wX3Rlc3QgImF0dHItbWVyZ2UtcHJpdi1zcGVjIgogICAgIHJ1bl9kdW1w X3Rlc3QgImF0dHItbWVyZ2UtYXJjaC1mYWlsZWQtMDEiCiAgICAgcnVuX2R1 bXBfdGVzdCAiYXR0ci1tZXJnZS1zdGFjay1hbGlnbi1mYWlsZWQiCisgICAg cnVuX2R1bXBfdGVzdCAidWxlYjEyOCIKICAgICBydW5fbGRfbGlua190ZXN0 cyB7CiAJeyAiV2VhayByZWZlcmVuY2UgMzIiICItVCB3ZWFrcmVmLmxkIC1t ZWxmMzJscmlzY3YiICIiCiAJICAgICItbWFyY2g9cnYzMmkgLW1hYmk9aWxw MzIiIHt3ZWFrcmVmMzIuc30KZGlmZiAtLWdpdCBhL2xkL3Rlc3RzdWl0ZS9s ZC1yaXNjdi1lbGYvdWxlYjEyOC5kIGIvbGQvdGVzdHN1aXRlL2xkLXJpc2N2 LWVsZi91bGViMTI4LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uYTkyMTQ3OGU5OAotLS0gL2Rldi9udWxsCisrKyBiL2xkL3Rl c3RzdWl0ZS9sZC1yaXNjdi1lbGYvdWxlYjEyOC5kCkBAIC0wLDAgKzEsMTgg QEAKKyNzb3VyY2U6IHVsZWIxMjgucworI2FzOiAtbWFyY2g9cnYzMmljCisj bGQ6IC1tZWxmMzJscmlzY3YKKyNvYmpkdW1wOiAtZAorCisuKjpbIAldK2Zp bGUgZm9ybWF0IC4qCisKK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gLnRleHQ6 CisKKy4qIDxfc3RhcnQ+OgorLipqYWwuKjxiYXI+CisuKmphbC4qPGJhcj4K Ky4qamFsLio8YmFyPgorLipqYWwuKjxiYXI+CisuKmphbC4qPGJhcj4KKy4q amFsLio8YmFyPgorLio6WyAJXSswZTBjLioKKyNwYXNzCmRpZmYgLS1naXQg YS9sZC90ZXN0c3VpdGUvbGQtcmlzY3YtZWxmL3VsZWIxMjgucyBiL2xkL3Rl c3RzdWl0ZS9sZC1yaXNjdi1lbGYvdWxlYjEyOC5zCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmY3ZDIzYmUxNjMKLS0tIC9kZXYv bnVsbAorKysgYi9sZC90ZXN0c3VpdGUvbGQtcmlzY3YtZWxmL3VsZWIxMjgu cwpAQCAtMCwwICsxLDE4IEBACisudGV4dAorLmdsb2JsIGJhcgorLmdsb2Js IF9zdGFydAorLm9wdGlvbiBydmMKKy5hbGlnbiAyCitfc3RhcnQ6CisuTDA6 CisgICAgICAgIC5yZXB0IDYKKyAgICAgICAgY2FsbCBiYXIKKyAgICAgICAg LmVuZHIKKy5hbGlnbiAyCisuTDE6CisgICAgICAgIC51bGViMTI4IC5MMSAt IC5MMAorICAgICAgICAudWxlYjEyOCAuTDIgLSAuTDAKKy5MMjoKKy5hbGln biAyCitiYXI6CisgICAgICAgIG5vcAotLSAKMi4xNy4wCgo= --0000000000005e46de059cb570fe--