<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>164588</bug_id>
          
          <creation_ts>2016-11-10 05:45:38 -0800</creation_ts>
          <short_desc>[JSC] Build broken for 32-bit x86 after r208306 with GCC 4.9</short_desc>
          <delta_ts>2016-11-16 13:01:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=163562</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Alberto Lopez Perez">clopez</reporter>
          <assigned_to name="Carlos Alberto Lopez Perez">clopez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1249763</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-10 05:45:38 -0800</bug_when>
    <thetext>Building WebKitGTK+ (and I guess any other Linux port) after r208306 &lt;http://trac.webkit.org/r208306&gt; causes this:

g++-4.9  [.....] -o Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/heap/Heap.cpp.o -c ../../Source/JavaScriptCore/heap/Heap.cpp
In file included from ../../Source/WTF/wtf/Lock.h:29:0,
                 from ../../Source/WTF/wtf/HashTable.h:33,
                 from ../../Source/WTF/wtf/HashMap.h:25,
                 from ../../Source/JavaScriptCore/runtime/JSCJSValue.h:33,
                 from ../../Source/JavaScriptCore/heap/HandleTypes.h:28,
                 from ../../Source/JavaScriptCore/heap/Handle.h:28,
                 from ../../Source/JavaScriptCore/heap/HandleSet.h:28,
                 from ../../Source/JavaScriptCore/heap/Heap.h:27,
                 from ../../Source/JavaScriptCore/heap/Heap.cpp:22:
../../Source/WTF/wtf/Atomics.h: In member function &apos;bool JSC::Heap::handleGCDidJIT(unsigned int)&apos;:
../../Source/WTF/wtf/Atomics.h:245:20: error: inconsistent operand constraints in an &apos;asm&apos;
         : &quot;memory&quot;);
                    ^


https://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/65378/steps/compile-webkit/logs/stdio/text


This is the function causing the issue:

inline void x86_cpuid()
{
#if OS(WINDOWS)
    int info[4];
    __cpuid(info, 0);
#else
    intptr_t a = 0, b, c, d;
    asm volatile(
        &quot;cpuid&quot;
        : &quot;+a&quot;(a), &quot;=b&quot;(b), &quot;=c&quot;(c), &quot;=d&quot;(d)
        :
        : &quot;memory&quot;);
#endif
}


Seems GCC 4.9 doesn&apos;t like it on 32-bit


The build failure is not reproducible with newer GCC (tested with GCC 5.3.1 and built fine)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249766</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-10 06:02:42 -0800</bug_when>
    <thetext>And this seems to be the right answer: http://stackoverflow.com/a/28976166

Removing -fPIC for that file from the compiler arguments makes it build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249779</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-10 06:55:31 -0800</bug_when>
    <thetext>Does it work, though??? Is it really possible to have a shared library with position-dependent code? I do not think removing -fPIC could be right...?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249799</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-10 08:35:42 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Does it work, though??? Is it really possible to have a shared library with
&gt; position-dependent code? I do not think removing -fPIC could be right...?

What I tried was just removing the fPIC flag from JavaScriptCore/heap/Heap.cpp which is (right now) the only user of x86_cpuid() via crossModifyingCodeFence().

Doing this with cmake seems difficult (not even sure if its possible), because the fPIC argument gets passed automatically for any library via ${CMAKE_SHARED_LIBRARY_CXX_FLAGS} (for the whole library and not for a single file).

So I managed to get it build by manually editing the ninja recipes generated to remove the fPIC variable from JavaScriptCore/heap/Heap.cpp

It seems to work, but its hard to tell if something is broke as I don&apos;t even know what is the purpose of this crossModifyingCodeFence() thing or when its used.

And removing -fPIC for the whole JavaScriptCore library seems not something we want to do in any case.

I see crossModifyingCodeFence is defined as std::atomic_thread_fence(std::memory_order_seq_cst) for non x86 cpus. Maybe that could work also for an x86 cpu?.


Another option is to modify that assembly to make it happy with gcc-4.9 on x86-32 bits. Here seems to be some interesting notes about this: http://sam.zoy.org/blog/2007-04-13-shlib-with-non-pic-code-have-inline-assembly-and-pic-mix-well


But is hard to try to modify that without knowing what is x86_cpuid() actually doing, how to test it, or what is the purpose of crossModifyingCodeFence().


Filip could you advice us what to do here to fix this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249853</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-10 10:42:16 -0800</bug_when>
    <thetext>Ok.. i think now I understand better this.

The purpose of executing the x86 assembly instruction cpuid on crossModifyingCodeFence() is just to force any modifications to registers, memory and flags to be completed and to drain all buffered writes to memory before the next instruction is fetched and executed.

The value returned by cpuid is not used at all here. The idea is just to force this sync() on the cpu registers and memory.. right?

Reference: https://jpassing.com/2015/01/19/runtime-code-modification-explained-part-2-cache-coherency-issues/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249882</commentid>
    <comment_count>5</comment_count>
      <attachid>294391</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-10 11:38:58 -0800</bug_when>
    <thetext>Created attachment 294391
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249907</commentid>
    <comment_count>6</comment_count>
      <attachid>294391</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-10 12:21:01 -0800</bug_when>
    <thetext>Comment on attachment 294391
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=294391&amp;action=review

&gt; Source/WTF/wtf/Atomics.h:239
&gt; +#elif CPU(X86) &amp;&amp; defined(__PIC__) &amp;&amp; __GNUC__ &lt; 5

It will be a compiler warning on other compilers. Best check if it&apos;s defined before using it:

&amp;&amp; defined(__GNUC__) &amp;&amp; __GNUC__ &lt; 5

Do we want to run this code when using Clang? If not, then use this instead to filter out Clang:

&amp;&amp; COMPILER(GCC) &amp;&amp; __GNUC__ &lt; 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249936</commentid>
    <comment_count>7</comment_count>
      <attachid>294401</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-10 13:12:55 -0800</bug_when>
    <thetext>Created attachment 294401
Patch

Address Michael comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251431</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-15 07:33:45 -0800</bug_when>
    <thetext>Ping reviewers? The GTK 32-bit buildbot has been red for several days already due to this &lt;https://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251442</commentid>
    <comment_count>9</comment_count>
      <attachid>294401</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-15 08:35:01 -0800</bug_when>
    <thetext>Comment on attachment 294401
Patch

I&apos;d rather another reviewer look at it because I do not understand the code, but here&apos;s your rubber stamp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251443</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-15 08:36:00 -0800</bug_when>
    <thetext>I&apos;m suspicious that the code is only needed when using GCC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251457</commentid>
    <comment_count>11</comment_count>
      <attachid>294401</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-15 09:31:36 -0800</bug_when>
    <thetext>Comment on attachment 294401
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=294401&amp;action=review

&gt; Source/WTF/wtf/Atomics.h:248
&gt; +#elif CPU(X86) &amp;&amp; defined(__PIC__) &amp;&amp; COMPILER(GCC) &amp;&amp; __GNUC__ &lt; 5
&gt; +    intptr_t a = 0, b, c, d;
&gt; +    asm volatile(
&gt; +        &quot;pushl %%ebx;&quot; // save %ebx
&gt; +        &quot;cpuid;&quot;
&gt; +        &quot;movl %%ebx, %0;&quot; // save what cpuid put in %ebx into the first output (b)
&gt; +        &quot;popl %%ebx;&quot; // restore the old %ebx value
&gt; +        : &quot;=r&quot;(b), &quot;+a&quot;(a), &quot;=c&quot;(c), &quot;=d&quot;(d)
&gt; +        :
&gt; +        : &quot;memory&quot;);

You should just make this conditional on CPU(X86).  Because cpuid is so expensive, we don&apos;t use this on code paths where the extra push/pop would be expensive.  It&apos;s better to simplify the conditional just for sanity.

You don&apos;t need to movl %%ebx, %0.  We never use the results of a, b, c, d.  The only point of those variables is as a way to tell the compiler that cpuid clobbers ax, bx, cx, and dx.  But it seems that this version of GCC doesn&apos;t grok our clobbering of bx.

So, I suggest something like this for x86-32:

intptr_t a = 0, c, d;
asm volatile(
    &quot;pushl %%ebx\n\t&quot;
    &quot;cpuid\n\t&quot;
    &quot;popl %%ebx\n\t&quot;
    : &quot;+a&quot;(a), &quot;=c&quot;(c), &quot;=d&quot;(d)
    :
    : &quot;memory&quot;);

So, we still tell the compiler that this reads and writes ax, writes cx, and writes dx, but we don&apos;t tell the compiler about bx, because we know that the compiler might not understand this and because we preserve its value using push/pop.

r- because I think that the movl is unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251548</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-15 12:10:14 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 294401 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294401&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/Atomics.h:248
&gt; &gt; +#elif CPU(X86) &amp;&amp; defined(__PIC__) &amp;&amp; COMPILER(GCC) &amp;&amp; __GNUC__ &lt; 5
&gt; &gt; +    intptr_t a = 0, b, c, d;
&gt; &gt; +    asm volatile(
&gt; &gt; +        &quot;pushl %%ebx;&quot; // save %ebx
&gt; &gt; +        &quot;cpuid;&quot;
&gt; &gt; +        &quot;movl %%ebx, %0;&quot; // save what cpuid put in %ebx into the first output (b)
&gt; &gt; +        &quot;popl %%ebx;&quot; // restore the old %ebx value
&gt; &gt; +        : &quot;=r&quot;(b), &quot;+a&quot;(a), &quot;=c&quot;(c), &quot;=d&quot;(d)
&gt; &gt; +        :
&gt; &gt; +        : &quot;memory&quot;);
&gt; 
&gt; You should just make this conditional on CPU(X86).  Because cpuid is so
&gt; expensive, we don&apos;t use this on code paths where the extra push/pop would be
&gt; expensive.  It&apos;s better to simplify the conditional just for sanity.
&gt; 
&gt; You don&apos;t need to movl %%ebx, %0.  We never use the results of a, b, c, d. 
&gt; The only point of those variables is as a way to tell the compiler that
&gt; cpuid clobbers ax, bx, cx, and dx.  But it seems that this version of GCC
&gt; doesn&apos;t grok our clobbering of bx.
&gt; 
&gt; So, I suggest something like this for x86-32:
&gt; 
&gt; intptr_t a = 0, c, d;
&gt; asm volatile(
&gt;     &quot;pushl %%ebx\n\t&quot;
&gt;     &quot;cpuid\n\t&quot;
&gt;     &quot;popl %%ebx\n\t&quot;
&gt;     : &quot;+a&quot;(a), &quot;=c&quot;(c), &quot;=d&quot;(d)
&gt;     :
&gt;     : &quot;memory&quot;);
&gt; 
&gt; So, we still tell the compiler that this reads and writes ax, writes cx, and
&gt; writes dx, but we don&apos;t tell the compiler about bx, because we know that the
&gt; compiler might not understand this and because we preserve its value using
&gt; push/pop.
&gt; 
&gt; r- because I think that the movl is unnecessary.

The movl is necessary if you actually want to read what cpuid has returned, but since we don&apos;t care about that, we can just ignore it and avoid the movl.

However, if you are concerned about the extra movl and about having more if-defs than necessary, why just don&apos;t use this both unconditionally for x86 and x64?

I have checked what the compiler does, and doing it how you suggests avoids 2 movl call on x64 http://sprunge.us/SVKR (and 1 in x86)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251553</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-15 12:13:56 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Comment on attachment 294401 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=294401&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/Atomics.h:248
&gt; &gt; &gt; +#elif CPU(X86) &amp;&amp; defined(__PIC__) &amp;&amp; COMPILER(GCC) &amp;&amp; __GNUC__ &lt; 5
&gt; &gt; &gt; +    intptr_t a = 0, b, c, d;
&gt; &gt; &gt; +    asm volatile(
&gt; &gt; &gt; +        &quot;pushl %%ebx;&quot; // save %ebx
&gt; &gt; &gt; +        &quot;cpuid;&quot;
&gt; &gt; &gt; +        &quot;movl %%ebx, %0;&quot; // save what cpuid put in %ebx into the first output (b)
&gt; &gt; &gt; +        &quot;popl %%ebx;&quot; // restore the old %ebx value
&gt; &gt; &gt; +        : &quot;=r&quot;(b), &quot;+a&quot;(a), &quot;=c&quot;(c), &quot;=d&quot;(d)
&gt; &gt; &gt; +        :
&gt; &gt; &gt; +        : &quot;memory&quot;);
&gt; &gt; 
&gt; &gt; You should just make this conditional on CPU(X86).  Because cpuid is so
&gt; &gt; expensive, we don&apos;t use this on code paths where the extra push/pop would be
&gt; &gt; expensive.  It&apos;s better to simplify the conditional just for sanity.
&gt; &gt; 
&gt; &gt; You don&apos;t need to movl %%ebx, %0.  We never use the results of a, b, c, d. 
&gt; &gt; The only point of those variables is as a way to tell the compiler that
&gt; &gt; cpuid clobbers ax, bx, cx, and dx.  But it seems that this version of GCC
&gt; &gt; doesn&apos;t grok our clobbering of bx.
&gt; &gt; 
&gt; &gt; So, I suggest something like this for x86-32:
&gt; &gt; 
&gt; &gt; intptr_t a = 0, c, d;
&gt; &gt; asm volatile(
&gt; &gt;     &quot;pushl %%ebx\n\t&quot;
&gt; &gt;     &quot;cpuid\n\t&quot;
&gt; &gt;     &quot;popl %%ebx\n\t&quot;
&gt; &gt;     : &quot;+a&quot;(a), &quot;=c&quot;(c), &quot;=d&quot;(d)
&gt; &gt;     :
&gt; &gt;     : &quot;memory&quot;);
&gt; &gt; 
&gt; &gt; So, we still tell the compiler that this reads and writes ax, writes cx, and
&gt; &gt; writes dx, but we don&apos;t tell the compiler about bx, because we know that the
&gt; &gt; compiler might not understand this and because we preserve its value using
&gt; &gt; push/pop.
&gt; &gt; 
&gt; &gt; r- because I think that the movl is unnecessary.
&gt; 
&gt; The movl is necessary if you actually want to read what cpuid has returned,
&gt; but since we don&apos;t care about that, we can just ignore it and avoid the movl.
&gt; 
&gt; However, if you are concerned about the extra movl and about having more
&gt; if-defs than necessary, why just don&apos;t use this both unconditionally for x86
&gt; and x64?

I&apos;m happy with that, but it gets awkward when telling the compiler that you want to push ebx.  On x86-32 you would say pushl ebx, while on x86-64 you would say pushq rbx.  If you can find a clever way around this then I&apos;m happy with this code being shared.  That would be the best.

&gt; 
&gt; I have checked what the compiler does, and doing it how you suggests avoids
&gt; 2 movl call on x64 http://sprunge.us/SVKR (and 1 in x86)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251571</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-15 12:51:31 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; 
&gt; &gt; The movl is necessary if you actually want to read what cpuid has returned,
&gt; &gt; but since we don&apos;t care about that, we can just ignore it and avoid the movl.
&gt; &gt; 
&gt; &gt; However, if you are concerned about the extra movl and about having more
&gt; &gt; if-defs than necessary, why just don&apos;t use this both unconditionally for x86
&gt; &gt; and x64?
&gt; 
&gt; I&apos;m happy with that, but it gets awkward when telling the compiler that you
&gt; want to push ebx.  On x86-32 you would say pushl ebx, while on x86-64 you
&gt; would say pushq rbx.  If you can find a clever way around this then I&apos;m
&gt; happy with this code being shared.  That would be the best.
&gt; 

Mmmm, good point.

I was overlooking that in 64-bit the instructions and the registers are different :|

So, I guess that using this for x86 only is the best thing I can come with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251584</commentid>
    <comment_count>15</comment_count>
      <attachid>294870</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-15 13:09:21 -0800</bug_when>
    <thetext>Created attachment 294870
Patch

Avoid a movl call and make it conditional for CPU(X86)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251946</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-16 12:03:06 -0800</bug_when>
    <thetext>Filip please, could you review this patch? The GTK 32-bit buildbot continues to be broken due to this.


I understand it should be quick to review. Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251973</commentid>
    <comment_count>17</comment_count>
      <attachid>294870</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-16 12:50:01 -0800</bug_when>
    <thetext>Comment on attachment 294870
Patch

r=me because Filip has already reviewed this previously and suggested this specific fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251981</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-16 12:59:46 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Comment on attachment 294870 [details]
&gt; Patch
&gt; 
&gt; r=me because Filip has already reviewed this previously and suggested this
&gt; specific fix.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251983</commentid>
    <comment_count>19</comment_count>
      <attachid>294870</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-16 13:01:05 -0800</bug_when>
    <thetext>Comment on attachment 294870
Patch

Clearing flags on attachment: 294870

Committed r208806: &lt;http://trac.webkit.org/changeset/208806&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251984</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-11-16 13:01:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294391</attachid>
            <date>2016-11-10 11:38:58 -0800</date>
            <delta_ts>2016-11-10 13:12:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164588-20161110203445.patch</filename>
            <type>text/plain</type>
            <size>1831</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJmZjllOGVlYzA4MTUzZGRhMDM1ZDc4
NTVmMTNhZGE2MjQ4MGE1NDcuLjhmNTg5NzJhNDJlMGU3OWRmMjM3YzAxZDVjMWJiNTU1OWYwYzQ4
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMTEtMTAgIENhcmxvcyBBbGJlcnRvIExvcGV6
IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0pTQ10gQnVpbGQgYnJva2Vu
IGZvciAzMi1iaXQgeDg2IGFmdGVyIHIyMDgzMDYgd2l0aCBHQ0MgNC45CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1ODgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcm92aWRlIGFzc2VtYmx5IGZvciBl
eGVjdXRpbmcgdGhlIGNwdWlkIGluc3RydWN0aW9uIHdoZW4gY29tcGlsaW5nCisgICAgICAgIGlu
IFBJQyBtb2RlIHdpdGggdGhlIEdDQyA0LjkgRUJYIG9uIDMyLWJpdCB4ODYuCisKKyAgICAgICAg
Tm90ZSB0aGF0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgY3B1aWQgaGVyZSBhcmUgbm90IHVzZWQu
IFRoZSBwdXJwb3NlCisgICAgICAgIG9mIGNhbGxpbmcgdGhpcyBpbnN0cnVjdGlvbiBpcyB0byBm
b3JjZSB0aGUgQ1BVIHRvIGNvbXBsZXRlIGFuZCBzeW5jCisgICAgICAgIGFueSBidWZmZXJlZCBt
b2RpZmljYXRpb25zIG9uIHJlZ2lzdGVycywgbWVtb3J5IG9yIGZsYWdzIGJlZm9yZQorICAgICAg
ICBmZXRjaGluZyBhbmQgZXhlY3V0aW5nIHRoZSBuZXh0IGluc3RydWN0aW9uLgorCisgICAgICAg
ICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6eDg2X2NwdWlkKToKKwogMjAxNi0xMS0w
OSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IEFsbG93IFJlZlB0cnMgb2YgY29uc3QgVGhyZWFkU2FmZVJlZkNvdW50ZWQgdHlwZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaCBiL1NvdXJjZS9XVEYvd3RmL0F0b21pY3Mu
aAppbmRleCA5YjlhMmY3ODg3YTVmMzE5OWMyMTkwNzI1NTgyOGI1YjNlOWIxOTQzLi42MDIwODYz
ZDgzMDg0YjUzMDU5ODcxYTlkODZmYjViOTc2MzUyOTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9BdG9taWNzLmgKKysrIGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCkBAIC0yMzYsNiAr
MjM2LDE2IEBAIGlubGluZSB2b2lkIHg4Nl9jcHVpZCgpCiAjaWYgT1MoV0lORE9XUykKICAgICBp
bnQgaW5mb1s0XTsKICAgICBfX2NwdWlkKGluZm8sIDApOworI2VsaWYgQ1BVKFg4NikgJiYgZGVm
aW5lZChfX1BJQ19fKSAmJiBfX0dOVUNfXyA8IDUKKyAgICBpbnRwdHJfdCBhID0gMCwgYiwgYywg
ZDsKKyAgICBhc20gdm9sYXRpbGUoCisgICAgICAgICJwdXNobCAlJWVieDsiIC8vIHNhdmUgJWVi
eAorICAgICAgICAiY3B1aWQ7IgorICAgICAgICAibW92bCAlJWVieCwgJTA7IiAvLyBzYXZlIHdo
YXQgY3B1aWQgcHV0IGluICVlYnggaW50byB0aGUgZmlyc3Qgb3V0cHV0IChiKQorICAgICAgICAi
cG9wbCAlJWVieDsiIC8vIHJlc3RvcmUgdGhlIG9sZCAlZWJ4IHZhbHVlCisgICAgICAgIDogIj1y
IihiKSwgIithIihhKSwgIj1jIihjKSwgIj1kIihkKQorICAgICAgICA6CisgICAgICAgIDogIm1l
bW9yeSIpOwogI2Vsc2UKICAgICBpbnRwdHJfdCBhID0gMCwgYiwgYywgZDsKICAgICBhc20gdm9s
YXRpbGUoCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294401</attachid>
            <date>2016-11-10 13:12:55 -0800</date>
            <delta_ts>2016-11-15 13:09:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164588-20161110220842.patch</filename>
            <type>text/plain</type>
            <size>1848</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJmZjllOGVlYzA4MTUzZGRhMDM1ZDc4
NTVmMTNhZGE2MjQ4MGE1NDcuLjhmNTg5NzJhNDJlMGU3OWRmMjM3YzAxZDVjMWJiNTU1OWYwYzQ4
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMTEtMTAgIENhcmxvcyBBbGJlcnRvIExvcGV6
IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0pTQ10gQnVpbGQgYnJva2Vu
IGZvciAzMi1iaXQgeDg2IGFmdGVyIHIyMDgzMDYgd2l0aCBHQ0MgNC45CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1ODgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcm92aWRlIGFzc2VtYmx5IGZvciBl
eGVjdXRpbmcgdGhlIGNwdWlkIGluc3RydWN0aW9uIHdoZW4gY29tcGlsaW5nCisgICAgICAgIGlu
IFBJQyBtb2RlIHdpdGggdGhlIEdDQyA0LjkgRUJYIG9uIDMyLWJpdCB4ODYuCisKKyAgICAgICAg
Tm90ZSB0aGF0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgY3B1aWQgaGVyZSBhcmUgbm90IHVzZWQu
IFRoZSBwdXJwb3NlCisgICAgICAgIG9mIGNhbGxpbmcgdGhpcyBpbnN0cnVjdGlvbiBpcyB0byBm
b3JjZSB0aGUgQ1BVIHRvIGNvbXBsZXRlIGFuZCBzeW5jCisgICAgICAgIGFueSBidWZmZXJlZCBt
b2RpZmljYXRpb25zIG9uIHJlZ2lzdGVycywgbWVtb3J5IG9yIGZsYWdzIGJlZm9yZQorICAgICAg
ICBmZXRjaGluZyBhbmQgZXhlY3V0aW5nIHRoZSBuZXh0IGluc3RydWN0aW9uLgorCisgICAgICAg
ICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6eDg2X2NwdWlkKToKKwogMjAxNi0xMS0w
OSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IEFsbG93IFJlZlB0cnMgb2YgY29uc3QgVGhyZWFkU2FmZVJlZkNvdW50ZWQgdHlwZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaCBiL1NvdXJjZS9XVEYvd3RmL0F0b21pY3Mu
aAppbmRleCA5YjlhMmY3ODg3YTVmMzE5OWMyMTkwNzI1NTgyOGI1YjNlOWIxOTQzLi41MDIzYWIz
NDU4YWU2OWY4YmY4MmE2OGNiODk0OWI1YTA1OTZmNjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9BdG9taWNzLmgKKysrIGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCkBAIC0yMzYsNiAr
MjM2LDE2IEBAIGlubGluZSB2b2lkIHg4Nl9jcHVpZCgpCiAjaWYgT1MoV0lORE9XUykKICAgICBp
bnQgaW5mb1s0XTsKICAgICBfX2NwdWlkKGluZm8sIDApOworI2VsaWYgQ1BVKFg4NikgJiYgZGVm
aW5lZChfX1BJQ19fKSAmJiBDT01QSUxFUihHQ0MpICYmIF9fR05VQ19fIDwgNQorICAgIGludHB0
cl90IGEgPSAwLCBiLCBjLCBkOworICAgIGFzbSB2b2xhdGlsZSgKKyAgICAgICAgInB1c2hsICUl
ZWJ4OyIgLy8gc2F2ZSAlZWJ4CisgICAgICAgICJjcHVpZDsiCisgICAgICAgICJtb3ZsICUlZWJ4
LCAlMDsiIC8vIHNhdmUgd2hhdCBjcHVpZCBwdXQgaW4gJWVieCBpbnRvIHRoZSBmaXJzdCBvdXRw
dXQgKGIpCisgICAgICAgICJwb3BsICUlZWJ4OyIgLy8gcmVzdG9yZSB0aGUgb2xkICVlYnggdmFs
dWUKKyAgICAgICAgOiAiPXIiKGIpLCAiK2EiKGEpLCAiPWMiKGMpLCAiPWQiKGQpCisgICAgICAg
IDoKKyAgICAgICAgOiAibWVtb3J5Iik7CiAjZWxzZQogICAgIGludHB0cl90IGEgPSAwLCBiLCBj
LCBkOwogICAgIGFzbSB2b2xhdGlsZSgK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294870</attachid>
            <date>2016-11-15 13:09:21 -0800</date>
            <delta_ts>2016-11-16 13:01:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164588-20161115220918.patch</filename>
            <type>text/plain</type>
            <size>1917</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDMwODdkNWI1NTA5NjMzMTE5MjI1NDVh
NWU1NDliN2EyNGY4YTI4MDkuLjFkMmZhMzAwZDcxZjk0ZGU4YzhmZGM5MDVjOTAwMmU4OThkZjBi
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMTEtMTUgIENhcmxvcyBBbGJlcnRvIExvcGV6
IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0pTQ10gQnVpbGQgYnJva2Vu
IGZvciAzMi1iaXQgeDg2IGFmdGVyIHIyMDgzMDYgd2l0aCBHQ0MgNC45CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1ODgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcm92aWRlIGFzc2VtYmx5IGZvciBl
eGVjdXRpbmcgdGhlIGNwdWlkIGluc3RydWN0aW9uIHdoZW4gY29tcGlsaW5nCisgICAgICAgIGlu
IFBJQyBtb2RlIHdpdGggdGhlIEdDQyA0LjkgRUJYIG9uIDMyLWJpdCB4ODYuCisKKyAgICAgICAg
Tm90ZSB0aGF0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgY3B1aWQgaGVyZSBhcmUgbm90IHVzZWQu
IFRoZSBwdXJwb3NlCisgICAgICAgIG9mIGNhbGxpbmcgdGhpcyBpbnN0cnVjdGlvbiBpcyB0byBm
b3JjZSB0aGUgQ1BVIHRvIGNvbXBsZXRlIGFuZCBzeW5jCisgICAgICAgIGFueSBidWZmZXJlZCBt
b2RpZmljYXRpb25zIG9uIHJlZ2lzdGVycywgbWVtb3J5IG9yIGZsYWdzIGJlZm9yZQorICAgICAg
ICBmZXRjaGluZyBhbmQgZXhlY3V0aW5nIHRoZSBuZXh0IGluc3RydWN0aW9uLgorCisgICAgICAg
ICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6eDg2X2NwdWlkKToKKwogMjAxNi0xMS0x
MSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSBHQyBzaG91
bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmggYi9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNz
LmgKaW5kZXggNjg3ZmExNDBjOTE5ZWRlOTM0Y2YyNjQxMzQ3MDdmYjAwZGExMjhjNi4uNGE4ZWU0
OGU3NjIwYWViMTQ2YzM4M2Q2NzllNTJlZWViOTgxMWEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvQXRvbWljcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaApAQCAtMjY2LDYg
KzI2NiwxOCBAQCBpbmxpbmUgdm9pZCB4ODZfY3B1aWQoKQogI2lmIE9TKFdJTkRPV1MpCiAgICAg
aW50IGluZm9bNF07CiAgICAgX19jcHVpZChpbmZvLCAwKTsKKyNlbGlmIENQVShYODYpCisgICAg
Ly8gR0NDIDQuOSBvbiB4ODYgaW4gUElDIG1vZGUgY2FuJ3QgdXNlICVlYngsIHNvIHdlIGhhdmUg
dG8gc2F2ZSBhbmQgcmVzdG9yZSBpdCBtYW51YWxseS4KKyAgICAvLyBCdXQgc2luY2Ugd2UgZG9u
J3QgY2FyZSBhYm91dCB3aGF0IGNwdWlkIHJldHVybnMgKHdlIHVzZSBpdCBhcyBhIHNlcmlhbGl6
aW5nIGluc3RydWN0aW9uKSwKKyAgICAvLyB3ZSBjYW4gc2ltcGx5IHRocm93IGF3YXkgd2hhdCBj
cHVpZCBwdXQgaW4gJWVieC4KKyAgICBpbnRwdHJfdCBhID0gMCwgYywgZDsKKyAgICBhc20gdm9s
YXRpbGUoCisgICAgICAgICJwdXNobCAlJWVieFxuXHQiCisgICAgICAgICJjcHVpZFxuXHQiCisg
ICAgICAgICJwb3BsICUlZWJ4XG5cdCIKKyAgICAgICAgOiAiK2EiKGEpLCAiPWMiKGMpLCAiPWQi
KGQpCisgICAgICAgIDoKKyAgICAgICAgOiAibWVtb3J5Iik7CiAjZWxzZQogICAgIGludHB0cl90
IGEgPSAwLCBiLCBjLCBkOwogICAgIGFzbSB2b2xhdGlsZSgK
</data>

          </attachment>
      

    </bug>

</bugzilla>