<?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>20511</bug_id>
          
          <creation_ts>2008-08-25 07:34:27 -0700</creation_ts>
          <short_desc>Remove static initializers on Windows (StaticConstructors.h)</short_desc>
          <delta_ts>2008-09-03 16:47:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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="danceoffwithyourpantsoff">danceoffwithyourpantsoff</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aroben</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>89282</commentid>
    <comment_count>0</comment_count>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-08-25 07:34:27 -0700</bug_when>
    <thetext>StaticConstructors.h does some really ugly macro replacements, to allow you to declare something an object than is global, but to have the construct run when you choose.  This is done by declaring the variable as a void*[], and later filling it in with placement new.  This won&apos;t link with MSVC, because they types aren&apos;t correct, you&apos;re expecting to link against a FooType, and you&apos;re getting a void*[].  Overall, this is approach is a super ugly hack, and I think the system should just be fixed.  Can we not just make these function calls (lazy initialized singletons?), or structure with a pointer that is NULL, and then gets initialized in the init routines?  I realize this would require changing a bunch of accessing code, but I think it is the correct solution.

In the mean time, I have a hacky working solution in MSVC (although, it&apos;s less hacky then the current code).  The problem is that in order to make it work, AVOID_STATIC_CONSTRUCTORS must actually be undefined, which will require either fixing the whole system, or leaving it undefined, even when we really are avoiding static constructors...

If you drop this in StaticConstructors.h, it will avoid static initialization under MSVC:

// This is a hack.  For MSVC, AVOID_STATIC_CONSTRUCTORS will not
// be set in config.h, because it&apos;s not supported.  The problem is that, we
// need to take a bunch of the paths that !AVOID_STATIC_CONSTRUCTORS takes
// this is the easiest thing to do:
// - Leave AVOID_STATIC_CONSTRUCTORS undefined, if we define it, the variables
//   will not be extern&apos;d and we won&apos;t be able to link.  Also, we need the
//   default empty constructor for QualifiedName that we only get if
//   AVOID_STATIC_CONSTRUCTORS is undefined.
// - Assume that all includes of this header want ALL of their static
//   initializers ignored.  This is currently the case.  This means that if
//   a .cc includes this header (or it somehow gets included), all static
//   initializers after the include will be ignored.
// - We do this with a pragma, so that all of the static initializer pointers
//   go into our own section, and the CRT won&apos;t call them.  Eventually it would
//   be nice if the section was discarded, because we don&apos;t want the pointers.
//   See: http://msdn.microsoft.com/en-us/library/7977wcck(VS.80).aspx
#ifndef AVOID_STATIC_CONSTRUCTORS
#if COMPILER(MSVC)
#pragma warning(disable:4075)
#pragma init_seg(&quot;.unwantedstaticinits&quot;)
#endif
#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89290</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-08-25 09:23:20 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Can we not just make these function calls
&gt; (lazy initialized singletons?), or structure with a pointer that is NULL, and
&gt; then gets initialized in the init routines?  I realize this would require
&gt; changing a bunch of accessing code, but I think it is the correct solution.

Sure, we could do something like that. There are two issues:

    1) What would the accessing code look like? Would it be significantly less elegant?
    2) What would this do to performance? Would the code be measurably slower?

If we tackle both issues, we could certainly change this.

&gt; In the mean time, I have a hacky working solution in MSVC (although, it&apos;s less
&gt; hacky then the current code).  The problem is that in order to make it work,
&gt; AVOID_STATIC_CONSTRUCTORS must actually be undefined, which will require either
&gt; fixing the whole system, or leaving it undefined, even when we really are
&gt; avoiding static constructors.

Or we could just change the name to make it clear that what was formerly named AVOID_STATIC_CONSTRUCTORS is really about a specific technique for doing avoiding static constructors with GCC. There&apos;s nothing sacred about the current macro name.

I&apos;d love to see a patch that changes the name of the macro for clarity and also applies your technique for MSVC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89486</commentid>
    <comment_count>2</comment_count>
      <attachid>23029</attachid>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-08-27 07:06:32 -0700</bug_when>
    <thetext>Created attachment 23029
Patch attempt at guard rename and MSVC support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89495</commentid>
    <comment_count>3</comment_count>
      <attachid>23029</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-08-27 09:50:37 -0700</bug_when>
    <thetext>Comment on attachment 23029
Patch attempt at guard rename and MSVC support

 92 #if COMPILER(MSVC)
 93 #define HIDE_STATIC_CONSTRUCTORS_FROM_MSVC 1
 94 #else
 95 #define HIDE_STATIC_CONSTRUCTORS_FROM_GCC 1
 96 #endif

If the GCC technique is really GCC-specific, then I think we should guard it with #if COMPILER too. That might prevent use from having to mention these STATIC_CONSTRUCTORS macros at all in the config.h file, which would be a good thing, and might remove the need for the #undef. But that can be done in a separate patch.

But is the name good? Does this hide static constructors or eliminate them entirely? We might want to tweak the terminology to be as precise as possible. I&apos;m not sure what the best terminology is for these global objects that need load time initialization. And for what exactly we&apos;re doing -- eliminating the load time initialization and replacing it with explicit initialization.

 23 // For WebCore we need to avoid having static constructors.  We use two hacks

I don&apos;t think the term &quot;hacks&quot; is really good here. There&apos;s just too much subjective opinion about what is and is not a &quot;hack&quot;. The sentence about portability is clear and specific enough without using the term &quot;hack&quot;. We should try to use specific language that&apos;s more precise

We normally don&apos;t use two spaces after periods in comments.

 28 // initializers.  The constructors will never be called and the object will

Should be &quot;objects&quot;, not &quot;object&quot;.

 31 // We both of these tricks, we then must defined and explicitly call an init

Missing verb here in &quot;Web both&quot;. Typo &quot;defined&quot;.

I&apos;ll say r=me, since these nitpicks are small things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89522</commentid>
    <comment_count>4</comment_count>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-08-27 13:37:41 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 23029 [edit])
&gt;  92 #if COMPILER(MSVC)
&gt;  93 #define HIDE_STATIC_CONSTRUCTORS_FROM_MSVC 1
&gt;  94 #else
&gt;  95 #define HIDE_STATIC_CONSTRUCTORS_FROM_GCC 1
&gt;  96 #endif
&gt; 
&gt; If the GCC technique is really GCC-specific, then I think we should guard it
&gt; with #if COMPILER too. That might prevent use from having to mention these
&gt; STATIC_CONSTRUCTORS macros at all in the config.h file, which would be a good
&gt; thing, and might remove the need for the #undef. But that can be done in a
&gt; separate patch.

This is at least somewhat GCC specific.  Whether it would work on other compiler chains (what else really is used outside of gcc and msvc?) I&apos;m not sure.  Even if you used a compiler like ICC, I imagine you&apos;re still going to use the GNU linker tools.

I think someone who understands the system better might want to do the config.h changes, or compiler guards.  I noticed it&apos;s removed on Symbian, but I have no idea how webkit is build there.

&gt; 
&gt; But is the name good? Does this hide static constructors or eliminate them
&gt; entirely? We might want to tweak the terminology to be as precise as possible.
&gt; I&apos;m not sure what the best terminology is for these global objects that need
&gt; load time initialization. And for what exactly we&apos;re doing -- eliminating the
&gt; load time initialization and replacing it with explicit initialization.

Hide is the best term I could come up with.  Avoid isn&apos;t much better.  The idea is more or less this are static objects with static constructors, but we&apos;re somehow tricking the compiler into ignoring them, and we&apos;ll do it ourself.  MAKE_GCC_IGNORE_SOME_STATIC_CONSTRUCTORS ? :\

I would like the name to be as clear as possible, but I didn&apos;t come up with anything great.  I think you will need to read the documentation in the header to really understand what&apos;s going on anyway.  I don&apos;t think a single guard name is going to convey everything we need to convey.

&gt; 
&gt;  23 // For WebCore we need to avoid having static constructors.  We use two
&gt; hacks
&gt; 
&gt; I don&apos;t think the term &quot;hacks&quot; is really good here. There&apos;s just too much
&gt; subjective opinion about what is and is not a &quot;hack&quot;. The sentence about
&gt; portability is clear and specific enough without using the term &quot;hack&quot;. We
&gt; should try to use specific language that&apos;s more precise

It is a hack.  I will avoid using the term though.

&gt; 
&gt; We normally don&apos;t use two spaces after periods in comments.

All those high school typing classes gone to waste.

&gt; 
&gt;  28 // initializers.  The constructors will never be called and the object will
&gt; 
&gt; Should be &quot;objects&quot;, not &quot;object&quot;.
&gt; 
&gt;  31 // We both of these tricks, we then must defined and explicitly call an
&gt; init
&gt; 
&gt; Missing verb here in &quot;Web both&quot;. Typo &quot;defined&quot;.
&gt; 
&gt; I&apos;ll say r=me, since these nitpicks are small things.
&gt; 

I will fix this all up and send another patch tomorrow.  Thanks for the quick review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89615</commentid>
    <comment_count>5</comment_count>
      <attachid>23051</attachid>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-08-28 02:42:39 -0700</bug_when>
    <thetext>Created attachment 23051
HIDE -&gt; SKIP, English fixes in comments.

Hopefully addressed all of your advice.  I decided that SKIP is a more accurate description than HIDE, so I&apos;ve updated the guards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89616</commentid>
    <comment_count>6</comment_count>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-08-28 02:44:55 -0700</bug_when>
    <thetext>If you could commit this for me, that would be really great.  I&apos;m not sure if it needs any ChangeLog changes, is so, anonymous authorship is fine.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89618</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-28 03:20:16 -0700</bug_when>
    <thetext>We don&apos;t use 2 spaces after periods in comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89647</commentid>
    <comment_count>8</comment_count>
      <attachid>23051</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-08-28 09:33:02 -0700</bug_when>
    <thetext>Comment on attachment 23051
HIDE -&gt; SKIP, English fixes in comments.

Great!

Looks fine; we can make slight refinements to the macros later, but this is excellent. All we need now is a ChangeLog and it&apos;s ready to go.

review- because I don&apos;t want the committer to have to write the ChangeLog entry -- please include it in the final patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89648</commentid>
    <comment_count>9</comment_count>
      <attachid>23051</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-08-28 09:33:56 -0700</bug_when>
    <thetext>Comment on attachment 23051
HIDE -&gt; SKIP, English fixes in comments.

OK, I&apos;ll add a ChangeLog and land it myself. Next time please write the ChangeLog even if you want to be anonymous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89650</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-08-28 09:37:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; We don&apos;t use 2 spaces after periods in comments?

It&apos;s true, we don&apos;t. There may be occasional uses of it, but it&apos;s not the preferred style. We could put it in the coding guidelines to be more clear.

Here are some starting points for the wider discussion/debate on this: &lt;http://www.webword.com/reports/period.html&gt; and &lt;http://www.google.com/search?q=two+spaces+after+period&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89991</commentid>
    <comment_count>11</comment_count>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-09-03 01:53:47 -0700</bug_when>
    <thetext>Was this committed yet?  If not, now that I can decloak, I can write it with a proper ChangeLog and non-anonymous authorship.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90028</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-03 09:29:59 -0700</bug_when>
    <thetext>No, I haven&apos;t committed yet. Sorry, I didn&apos;t get to it yet!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90039</commentid>
    <comment_count>13</comment_count>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2008-09-03 11:17:54 -0700</bug_when>
    <thetext>No problem.  If you are still up for making the ChangeLog, &quot;Dean McNamee &lt;deanm@chromium.org&gt;&quot;.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90085</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-03 16:47:09 -0700</bug_when>
    <thetext>Landed in r36071.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23029</attachid>
            <date>2008-08-27 07:06:32 -0700</date>
            <delta_ts>2008-08-28 02:42:39 -0700</delta_ts>
            <desc>Patch attempt at guard rename and MSVC support</desc>
            <filename>static_constructor.diff</filename>
            <type>text/plain</type>
            <size>4962</size>
            <attacher name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY29uZmlnLmggYi9XZWJDb3JlL2NvbmZpZy5oCmluZGV4IDY0
MDI1ZjcuLjZkMjYwYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY29uZmlnLmgKKysrIGIvV2ViQ29y
ZS9jb25maWcuaApAQCAtODksOCArODksMTAgQEAKICNkZWZpbmUgV1RGX1VTRV9KQVZBU0NSSVBU
Q09SRV9CSU5ESU5HUyAxCiAjZW5kaWYKIAotI2lmICFDT01QSUxFUihNU1ZDKSAvLyBjYW4ndCBn
ZXQgdGhpcyB0byBjb21waWxlIG9uIFZpc3VhbCBDKysgeWV0Ci0jZGVmaW5lIEFWT0lEX1NUQVRJ
Q19DT05TVFJVQ1RPUlMgMQorI2lmIENPTVBJTEVSKE1TVkMpCisjZGVmaW5lIEhJREVfU1RBVElD
X0NPTlNUUlVDVE9SU19GUk9NX01TVkMgMQorI2Vsc2UKKyNkZWZpbmUgSElERV9TVEFUSUNfQ09O
U1RSVUNUT1JTX0ZST01fR0NDIDEKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMTEx
LDcgKzExMyw3IEBACiAjZGVmaW5lIFdURl9VU0VfSkFWQVNDUklQVENPUkVfQklORElOR1MgMQog
I3VuZGVmIFdJTjMyCiAjdW5kZWYgX1dJTjMyCi0jdW5kZWYgQVZPSURfU1RBVElDX0NPTlNUUlVD
VE9SUworI3VuZGVmIEhJREVfU1RBVElDX0NPTlNUUlVDVE9SU19GUk9NX0dDQwogI2RlZmluZSBV
U0VfU1lTVEVNX01BTExPQyAxCiAjZGVmaW5lIFVfSEFWRV9JTlQ4X1QgMAogI2RlZmluZSBVX0hB
VkVfSU5UMTZfVCAwCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5j
cHAgYi9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHAKaW5kZXggOTU4NDM2ZC4uODlh
ODdmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMuY3BwCisrKyBi
L1dlYkNvcmUvY3NzL01lZGlhRmVhdHVyZU5hbWVzLmNwcApAQCAtMjIsNyArMjIsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZmRlZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JTCisj
aWZkZWYgSElERV9TVEFUSUNfQ09OU1RSVUNUT1JTX0ZST01fR0NDCiAjZGVmaW5lIENTU19NRURJ
QVFVRVJZX05BTUVTX0hJREVfR0xPQkFMUyAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vRXZlbnROYW1lcy5jcHAgYi9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmNwcAppbmRleCBj
NWFhYTM3Li42YTMzN2NlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmNwcAor
KysgYi9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmNwcApAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKLSNpZmRlZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JTCisjaWZk
ZWYgSElERV9TVEFUSUNfQ09OU1RSVUNUT1JTX0ZST01fR0NDCiAjZGVmaW5lIERPTV9FVkVOVF9O
QU1FU19ISURFX0dMT0JBTFMgMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1F1
YWxpZmllZE5hbWUuY3BwIGIvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAKaW5kZXggYzlk
N2UyOC4uN2IwMzNhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAK
KysrIGIvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWZkZWYgQVZPSURfU1RBVElDX0NPTlNUUlVDVE9SUwor
I2lmZGVmIEhJREVfU1RBVElDX0NPTlNUUlVDVE9SU19GUk9NX0dDQwogI2RlZmluZSBXRUJDT1JF
X1FVQUxJRklFRE5BTUVfSElERV9HTE9CQUxTIDEKICNlbHNlCiAjZGVmaW5lIFFOQU1FX0RFRkFV
TFRfQ09OU1RSVUNUT1IKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9X
ZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDBiYWI4MWMuLjg2NmNjNWYgMTAwNzU1Ci0t
LSBhL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvV2ViQ29yZS9kb20vbWFrZV9uYW1l
cy5wbApAQCAtMzM3LDcgKzMzNyw3IEBAIHN1YiBwcmludE5hbWVzQ3BwRmlsZQogCiBwcmludCBG
ICIjaW5jbHVkZSBcImNvbmZpZy5oXCJcbiI7CiAKLXByaW50IEYgIiNpZmRlZiBBVk9JRF9TVEFU
SUNfQ09OU1RSVUNUT1JTXG4iOworcHJpbnQgRiAiI2lmZGVmIEhJREVfU1RBVElDX0NPTlNUUlVD
VE9SU19GUk9NX0dDQ1xuIjsKIHByaW50IEYgIiNkZWZpbmUgRE9NXyRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfU5BTUVTX0hJREVfR0xPQkFMUyAxXG4iOwogcHJpbnQgRiAiI2Vsc2VcbiI7CiBwcmlu
dCBGICIjZGVmaW5lIFFOQU1FX0RFRkFVTFRfQ09OU1RSVUNUT1IgMVxuIjsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljQ29uc3RydWN0b3JzLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L1N0YXRpY0NvbnN0cnVjdG9ycy5oCmluZGV4IGRiYmE3ZmYuLmI2ODg4NjggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljQ29uc3RydWN0b3JzLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9TdGF0aWNDb25zdHJ1Y3RvcnMuaApAQCAtMjAsMTMgKzIwLDM1IEBACiAgKgogICovCiAK
LS8vIEZvciBXZWJDb3JlIHdlIG5lZWQgdG8gYXZvaWQgaGF2aW5nIHN0YXRpYyBjb25zdHJ1Y3Rv
cnMuCi0vLyBPdXIgc3RyYXRlZ3kgaXMgdG8gZGVjbGFyZSB0aGUgZ2xvYmFsIG9iamVjdHMgd2l0
aCBhIGRpZmZlcmVudCB0eXBlIChpbml0aWFsaXplZCB0byAwKQotLy8gYW5kIHRoZW4gdXNlIHBs
YWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFsIG9iamVjdHMgbGF0ZXIuIFRoaXMg
aXMgbm90IGNvbXBsZXRlbHkKLS8vIHBvcnRhYmxlLCBhbmQgaXQgd291bGQgYmUgZ29vZCB0byBm
aWd1cmUgb3V0IGEgMTAwJSBjbGVhbiB3YXkgdGhhdCBzdGlsbCBhdm9pZHMgY29kZSB0aGF0Ci0v
LyBydW5zIGF0IGluaXQgdGltZS4KKy8vIEZvciBXZWJDb3JlIHdlIG5lZWQgdG8gYXZvaWQgaGF2
aW5nIHN0YXRpYyBjb25zdHJ1Y3RvcnMuICBXZSB1c2UgdHdvIGhhY2tzCisvLyBmb3IgR0NDIGFu
ZCBNU1ZDLCB0byBhdm9pZCBoYXZpbmcgdGhlIHN0YXRpYyBpbml0aWFsaXplciByZWdpc3RlcmVk
IGFuZAorLy8gY2FsbGVkIG9uIHByb2dyYW0gc3RhcnR1cC4gIE9uIEdDQywgd2UgZGVjbGFyZSB0
aGUgZ2xvYmFsIG9iamVjdHMgd2l0aCBhCisvLyBkaWZmZXJlbnQgdHlwZSB0aGF0IGNhbiBiZSBQ
T0QgZGVmYXVsdCBpbml0aWFsaXplZCBieSB0aGUgbGlua2VyLiAgT24gTVNWQworLy8gd2UgdXNl
ZCBhIHNwZWNpYWwgY29tcGlsZXIgZmVhdHVyZSB0byBoYXZlIHRoZSBDUlQgaWdub3JlIG91ciBz
dGF0aWMKKy8vIGluaXRpYWxpemVycy4gIFRoZSBjb25zdHJ1Y3RvcnMgd2lsbCBuZXZlciBiZSBj
YWxsZWQgYW5kIHRoZSBvYmplY3Qgd2lsbAorLy8gYmUgbGVmdCB1bmluaXRpYWxpemVkLgorLy8K
Ky8vIFdlIGJvdGggb2YgdGhlc2UgdHJpY2tzLCB3ZSB0aGVuIG11c3QgZGVmaW5lZCBhbmQgZXhw
bGljaXRseSBjYWxsIGFuIGluaXQKKy8vIHJvdXRpbmUgdGhhdCB1c2VzIHBsYWNlbWVudCBuZXcg
dG8gY3JlYXRlIHRoZSBvYmplY3QgYW5kIG92ZXJ3cml0ZSB0aGUKKy8vIHVuaW5pdGlhbGl6ZWQg
cGxhY2Vob2xkZXIuCisvLworLy8gVGhpcyBpcyBub3QgY29tcGxldGVseSBwb3J0YWJsZSwgYnV0
IGlzIHdoYXQgd2UgaGF2ZSBmb3Igbm93IHdpdGhvdXQKKy8vIGNoYW5naW5nIGhvdyBhIGxvdCBv
ZiBjb2RlIGFjY2Vzc2VzIHRoZXNlIGdsb2JhbCBvYmplY3RzLgogCi0jaWZuZGVmIEFWT0lEX1NU
QVRJQ19DT05TVFJVQ1RPUlMKKyNpZmRlZiBISURFX1NUQVRJQ19DT05TVFJVQ1RPUlNfRlJPTV9N
U1ZDCisvLyAtIEFzc3VtZSB0aGF0IGFsbCBpbmNsdWRlcyBvZiB0aGlzIGhlYWRlciB3YW50IEFM
TCBvZiB0aGVpciBzdGF0aWMKKy8vICAgaW5pdGlhbGl6ZXJzIGlnbm9yZWQuICBUaGlzIGlzIGN1
cnJlbnRseSB0aGUgY2FzZS4gIFRoaXMgbWVhbnMgdGhhdCBpZgorLy8gICBhIC5jYyBpbmNsdWRl
cyB0aGlzIGhlYWRlciAob3IgaXQgc29tZWhvdyBnZXRzIGluY2x1ZGVkKSwgYWxsIHN0YXRpYwor
Ly8gICBpbml0aWFsaXplcnMgYWZ0ZXIgdGhlIGluY2x1ZGUgd2lsbCBiZSBpZ25vcmVkLgorLy8g
LSBXZSBkbyB0aGlzIHdpdGggYSBwcmFnbWEsIHNvIHRoYXQgYWxsIG9mIHRoZSBzdGF0aWMgaW5p
dGlhbGl6ZXIgcG9pbnRlcnMKKy8vICAgZ28gaW50byBvdXIgb3duIHNlY3Rpb24sIGFuZCB0aGUg
Q1JUIHdvbid0IGNhbGwgdGhlbS4gIEV2ZW50dWFsbHkgaXQgd291bGQKKy8vICAgYmUgbmljZSBp
ZiB0aGUgc2VjdGlvbiB3YXMgZGlzY2FyZGVkLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIHBv
aW50ZXJzLgorLy8gICBTZWU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS83OTc3d2NjayhWUy44MCkuYXNweAorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDA3NSkKKyNw
cmFnbWEgaW5pdF9zZWcoIi51bndhbnRlZHN0YXRpY2luaXRzIikKKyNlbmRpZgorCisjaWZuZGVm
IEhJREVfU1RBVElDX0NPTlNUUlVDVE9SU19GUk9NX0dDQwogICAgIC8vIERlZmluZSBhbiBnbG9i
YWwgaW4gdGhlIG5vcm1hbCB3YXkuCiAjaWYgQ09NUElMRVIoTVNWQzcpCiAjZGVmaW5lIERFRklO
RV9HTE9CQUwodHlwZSwgbmFtZSkgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0F0b21pY1N0cmluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNw
cAppbmRleCA5OTllM2FiLi43NjEzNGFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQXRvbWljU3RyaW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3Ry
aW5nLmNwcApAQCAtMjAsNyArMjAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZmRl
ZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JTCisjaWZkZWYgSElERV9TVEFUSUNfQ09OU1RSVUNU
T1JTX0ZST01fR0NDCiAjZGVmaW5lIEFUT01JQ1NUUklOR19ISURFX0dMT0JBTFMgMQogI2VuZGlm
CiAK
</data>
<flag name="review"
          id="10251"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23051</attachid>
            <date>2008-08-28 02:42:39 -0700</date>
            <delta_ts>2008-08-28 09:33:56 -0700</delta_ts>
            <desc>HIDE -&gt; SKIP, English fixes in comments.</desc>
            <filename>static_constructor.diff</filename>
            <type>text/plain</type>
            <size>4991</size>
            <attacher name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY29uZmlnLmggYi9XZWJDb3JlL2NvbmZpZy5oCmluZGV4IDY0
MDI1ZjcuLmQ4YWVjOGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY29uZmlnLmgKKysrIGIvV2ViQ29y
ZS9jb25maWcuaApAQCAtODksOCArODksMTAgQEAKICNkZWZpbmUgV1RGX1VTRV9KQVZBU0NSSVBU
Q09SRV9CSU5ESU5HUyAxCiAjZW5kaWYKIAotI2lmICFDT01QSUxFUihNU1ZDKSAvLyBjYW4ndCBn
ZXQgdGhpcyB0byBjb21waWxlIG9uIFZpc3VhbCBDKysgeWV0Ci0jZGVmaW5lIEFWT0lEX1NUQVRJ
Q19DT05TVFJVQ1RPUlMgMQorI2lmIENPTVBJTEVSKE1TVkMpCisjZGVmaW5lIFNLSVBfU1RBVElD
X0NPTlNUUlVDVE9SU19PTl9NU1ZDIDEKKyNlbHNlCisjZGVmaW5lIFNLSVBfU1RBVElDX0NPTlNU
UlVDVE9SU19PTl9HQ0MgMQogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0xMTEsNyAr
MTEzLDcgQEAKICNkZWZpbmUgV1RGX1VTRV9KQVZBU0NSSVBUQ09SRV9CSU5ESU5HUyAxCiAjdW5k
ZWYgV0lOMzIKICN1bmRlZiBfV0lOMzIKLSN1bmRlZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JT
CisjdW5kZWYgU0tJUF9TVEFUSUNfQ09OU1RSVUNUT1JTX09OX0dDQwogI2RlZmluZSBVU0VfU1lT
VEVNX01BTExPQyAxCiAjZGVmaW5lIFVfSEFWRV9JTlQ4X1QgMAogI2RlZmluZSBVX0hBVkVfSU5U
MTZfVCAwCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHAgYi9X
ZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHAKaW5kZXggOTU4NDM2ZC4uZmNlZTVkZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMuY3BwCisrKyBiL1dlYkNv
cmUvY3NzL01lZGlhRmVhdHVyZU5hbWVzLmNwcApAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKLSNpZmRlZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JTCisjaWZkZWYg
U0tJUF9TVEFUSUNfQ09OU1RSVUNUT1JTX09OX0dDQwogI2RlZmluZSBDU1NfTUVESUFRVUVSWV9O
QU1FU19ISURFX0dMT0JBTFMgMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0V2
ZW50TmFtZXMuY3BwIGIvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAKaW5kZXggYzVhYWEzNy4u
MjkzN2Q4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCi0jaWZkZWYgQVZPSURfU1RBVElDX0NPTlNUUlVDVE9SUworI2lmZGVmIFNLSVBf
U1RBVElDX0NPTlNUUlVDVE9SU19PTl9HQ0MKICNkZWZpbmUgRE9NX0VWRU5UX05BTUVTX0hJREVf
R0xPQkFMUyAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFt
ZS5jcHAgYi9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcAppbmRleCBjOWQ3ZTI4Li5hNjVi
NmFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcAorKysgYi9XZWJD
b3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcApAQCAtMjEsNyArMjEsNyBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKLSNpZmRlZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JTCisjaWZkZWYgU0tJ
UF9TVEFUSUNfQ09OU1RSVUNUT1JTX09OX0dDQwogI2RlZmluZSBXRUJDT1JFX1FVQUxJRklFRE5B
TUVfSElERV9HTE9CQUxTIDEKICNlbHNlCiAjZGVmaW5lIFFOQU1FX0RFRkFVTFRfQ09OU1RSVUNU
T1IKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9XZWJDb3JlL2RvbS9t
YWtlX25hbWVzLnBsCmluZGV4IDBiYWI4MWMuLmI3OGE1MDUgMTAwNzU1Ci0tLSBhL1dlYkNvcmUv
ZG9tL21ha2VfbmFtZXMucGwKKysrIGIvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtMzM3
LDcgKzMzNyw3IEBAIHN1YiBwcmludE5hbWVzQ3BwRmlsZQogCiBwcmludCBGICIjaW5jbHVkZSBc
ImNvbmZpZy5oXCJcbiI7CiAKLXByaW50IEYgIiNpZmRlZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNU
T1JTXG4iOworcHJpbnQgRiAiI2lmZGVmIFNLSVBfU1RBVElDX0NPTlNUUlVDVE9SU19PTl9HQ0Nc
biI7CiBwcmludCBGICIjZGVmaW5lIERPTV8kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31OQU1FU19I
SURFX0dMT0JBTFMgMVxuIjsKIHByaW50IEYgIiNlbHNlXG4iOwogcHJpbnQgRiAiI2RlZmluZSBR
TkFNRV9ERUZBVUxUX0NPTlNUUlVDVE9SIDFcbiI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL1N0YXRpY0NvbnN0cnVjdG9ycy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNDb25zdHJ1
Y3RvcnMuaAppbmRleCBkYmJhN2ZmLi41ZmRjN2MxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL1N0YXRpY0NvbnN0cnVjdG9ycy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljQ29u
c3RydWN0b3JzLmgKQEAgLTIwLDEzICsyMCwzNSBAQAogICoKICAqLwogCi0vLyBGb3IgV2ViQ29y
ZSB3ZSBuZWVkIHRvIGF2b2lkIGhhdmluZyBzdGF0aWMgY29uc3RydWN0b3JzLgotLy8gT3VyIHN0
cmF0ZWd5IGlzIHRvIGRlY2xhcmUgdGhlIGdsb2JhbCBvYmplY3RzIHdpdGggYSBkaWZmZXJlbnQg
dHlwZSAoaW5pdGlhbGl6ZWQgdG8gMCkKLS8vIGFuZCB0aGVuIHVzZSBwbGFjZW1lbnQgbmV3IHRv
IGluaXRpYWxpemUgdGhlIGdsb2JhbCBvYmplY3RzIGxhdGVyLiBUaGlzIGlzIG5vdCBjb21wbGV0
ZWx5Ci0vLyBwb3J0YWJsZSwgYW5kIGl0IHdvdWxkIGJlIGdvb2QgdG8gZmlndXJlIG91dCBhIDEw
MCUgY2xlYW4gd2F5IHRoYXQgc3RpbGwgYXZvaWRzIGNvZGUgdGhhdAotLy8gcnVucyBhdCBpbml0
IHRpbWUuCisvLyBGb3IgV2ViQ29yZSB3ZSBuZWVkIHRvIGF2b2lkIGhhdmluZyBzdGF0aWMgY29u
c3RydWN0b3JzLiBXZSBhY2hpZXZlIHRoaXMKKy8vIHdpdGggdHdvIHNlcGFyYXRlIG1ldGhvZHMg
Zm9yIEdDQyBhbmQgTVNWQy4gQm90aCBtZXRob2RzIHByZXZlbnQgdGhlIHN0YXRpYworLy8gaW5p
dGlhbGl6ZXJzIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCBhbmQgY2FsbGVkIG9uIHByb2dyYW0gc3Rh
cnR1cC4gT24gR0NDLCB3ZQorLy8gZGVjbGFyZSB0aGUgZ2xvYmFsIG9iamVjdHMgd2l0aCBhIGRp
ZmZlcmVudCB0eXBlIHRoYXQgY2FuIGJlIFBPRCBkZWZhdWx0CisvLyBpbml0aWFsaXplZCBieSB0
aGUgbGlua2VyL2xvYWRlci4gT24gTVNWQyB3ZSB1c2UgYSBzcGVjaWFsIGNvbXBpbGVyIGZlYXR1
cmUKKy8vIHRvIGhhdmUgdGhlIENSVCBpZ25vcmUgb3VyIHN0YXRpYyBpbml0aWFsaXplcnMuIFRo
ZSBjb25zdHJ1Y3RvcnMgd2lsbCBuZXZlcgorLy8gYmUgY2FsbGVkIGFuZCB0aGUgb2JqZWN0cyB3
aWxsIGJlIGxlZnQgdW5pbml0aWFsaXplZC4KKy8vCisvLyBXaXRoIGJvdGggb2YgdGhlc2UgYXBw
cm9hY2hlcywgd2UgbXVzdCBkZWZpbmUgYW5kIGV4cGxpY2l0bHkgY2FsbCBhbiBpbml0CisvLyBy
b3V0aW5lIHRoYXQgdXNlcyBwbGFjZW1lbnQgbmV3IHRvIGNyZWF0ZSB0aGUgb2JqZWN0cyBhbmQg
b3ZlcndyaXRlIHRoZQorLy8gdW5pbml0aWFsaXplZCBwbGFjZWhvbGRlcnMuCisvLworLy8gVGhp
cyBpcyBub3QgY29tcGxldGVseSBwb3J0YWJsZSwgYnV0IGlzIHdoYXQgd2UgaGF2ZSBmb3Igbm93
IHdpdGhvdXQKKy8vIGNoYW5naW5nIGhvdyBhIGxvdCBvZiBjb2RlIGFjY2Vzc2VzIHRoZXNlIGds
b2JhbCBvYmplY3RzLgogCi0jaWZuZGVmIEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMKKyNpZmRl
ZiBTS0lQX1NUQVRJQ19DT05TVFJVQ1RPUlNfT05fTVNWQworLy8gLSBBc3N1bWUgdGhhdCBhbGwg
aW5jbHVkZXMgb2YgdGhpcyBoZWFkZXIgd2FudCBBTEwgb2YgdGhlaXIgc3RhdGljCisvLyAgIGlu
aXRpYWxpemVycyBpZ25vcmVkLiBUaGlzIGlzIGN1cnJlbnRseSB0aGUgY2FzZS4gVGhpcyBtZWFu
cyB0aGF0IGlmCisvLyAgIGEgLmNjIGluY2x1ZGVzIHRoaXMgaGVhZGVyIChvciBpdCBzb21laG93
IGdldHMgaW5jbHVkZWQpLCBhbGwgc3RhdGljCisvLyAgIGluaXRpYWxpemVycyBhZnRlciB0aGUg
aW5jbHVkZSB3aWxsIG5vdCBiZSBleGVjdXRlZC4KKy8vIC0gV2UgZG8gdGhpcyB3aXRoIGEgcHJh
Z21hLCBzbyB0aGF0IGFsbCBvZiB0aGUgc3RhdGljIGluaXRpYWxpemVyIHBvaW50ZXJzCisvLyAg
IGdvIGludG8gb3VyIG93biBzZWN0aW9uLCBhbmQgdGhlIENSVCB3b24ndCBjYWxsIHRoZW0uIEV2
ZW50dWFsbHkgaXQgd291bGQKKy8vICAgYmUgbmljZSBpZiB0aGUgc2VjdGlvbiB3YXMgZGlzY2Fy
ZGVkLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIHBvaW50ZXJzLgorLy8gICBTZWU6IGh0dHA6
Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS83OTc3d2NjayhWUy44MCkuYXNweAor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDA3NSkKKyNwcmFnbWEgaW5pdF9zZWcoIi51bndhbnRl
ZHN0YXRpY2luaXRzIikKKyNlbmRpZgorCisjaWZuZGVmIFNLSVBfU1RBVElDX0NPTlNUUlVDVE9S
U19PTl9HQ0MKICAgICAvLyBEZWZpbmUgYW4gZ2xvYmFsIGluIHRoZSBub3JtYWwgd2F5LgogI2lm
IENPTVBJTEVSKE1TVkM3KQogI2RlZmluZSBERUZJTkVfR0xPQkFMKHR5cGUsIG5hbWUpIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHAKaW5kZXggOTk5ZTNhYi4uNDY2ZTdmZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHAKQEAgLTIwLDcgKzIwLDcgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWZkZWYgQVZPSURfU1RBVElDX0NPTlNUUlVDVE9S
UworI2lmZGVmIFNLSVBfU1RBVElDX0NPTlNUUlVDVE9SU19PTl9HQ0MKICNkZWZpbmUgQVRPTUlD
U1RSSU5HX0hJREVfR0xPQkFMUyAxCiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="10260"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>