This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

libstdc++/1576: crash before entering main



>Number:         1576
>Category:       libstdc++
>Synopsis:       crash before entering main
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jan 06 17:26:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     libstdc++-2.91
>Release:        libstdc++-2.91
>Organization:
>Environment:
RedHat Linux on SGI 330 (bug 
>Description:
Some programs, that load multiple DSOs, crash before entering main.

Initialization of the standard input and output streams (cin, cout, etc.) 
is split across two files, stdstream.cc and ios.cc.  The initialization 
code assumes that the portion in stdstream.cc is always executed before 
the portion in ios.cc.  This assumption is not always true, and some 
programs crash during execution of ios_base::Init::Init().
>How-To-Repeat:

>Fix:
The following patch appears to fix the bug (see also attached file):


*** /usr/tmp/libstdc++-2.91/include/bits/std_istream.h  Thu Oct  5 04:27:01 2000--- include/bits/std_istream.h  Sat Jan  6 18:07:25 2001
***************
*** 66,76 ****
  
      public:
        // 27.6.1.1.1 Constructor/destructor:
        explicit 
        basic_istream(__streambuf_type* __sb)
        { 
!       this->init(__sb);
!       _M_gcount = streamsize(0);
        }
  
        virtual 
--- 66,83 ----
  
      public:
        // 27.6.1.1.1 Constructor/destructor:
+       //XXX ILM
+       // The constructor does nothing if __sb is 0;
+       // this is necessary for proper initialization
+       // of cin, wcin (see ios.cc, stdstreams.cc).
        explicit 
        basic_istream(__streambuf_type* __sb)
        { 
!       if (__sb)
!       {
!         this->init(__sb);
!         _M_gcount = streamsize(0);
!       }
        }
  
        virtual 
*** /usr/tmp/libstdc++-2.91/include/bits/std_ostream.h  Thu Oct  5 04:27:01 2000--- include/bits/std_ostream.h  Sat Jan  6 18:07:29 2001
***************
*** 60,68 ****
        typedef ctype<_CharT>                                   __ctype_type;
  
        // 27.6.2.2 Constructor/destructor:
        explicit 
        basic_ostream(__streambuf_type* __sb)
!       { this->init(__sb); }
  
        virtual 
        ~basic_ostream() 
--- 60,76 ----
        typedef ctype<_CharT>                                   __ctype_type;
  
        // 27.6.2.2 Constructor/destructor:
+       //XXX ILM
+       // The constructor does nothing if __sb is 0;
+       // this is necessary for proper initialization
+       // of cout, cerr, clog, wcin, wcerr, wclog (see
+       // ios.cc, stdstreams.cc).
        explicit 
        basic_ostream(__streambuf_type* __sb)
!       {
!         if (__sb)
!         this->init(__sb);
!       }
  
        virtual 
        ~basic_ostream() 
*** /usr/tmp/libstdc++-2.91/src/ios.cc  Wed Nov 22 20:53:40 2000
--- src/ios.cc  Sat Jan  6 18:06:51 2001
***************
*** 125,163 ****
    {
      if (++_S_ios_base_init == 1)
        {
!       // NB: std_iostream.h creates the four standard files with
!       // default buffers. At this point, we swap out the default
!       // buffers for the properly-constructed ones, and dispose of
!       // the default buffers.
!       streambuf* __old;
                _M_cout = new filebuf(1, "stdout", ios_base::out);
        _M_cin = new filebuf(0, "stdin", ios_base::in);
        _M_cerr = new filebuf(2, "stderr", ios_base::out);
!       __old = cout.rdbuf(_M_cout);
!       __old->~streambuf();
!       __old = cin.rdbuf(_M_cin);
!       __old->~streambuf();
        cin.tie(&cout);
!       __old = cerr.rdbuf(_M_cerr);
!       __old->~streambuf();
        cerr.flags(ios_base::unitbuf);
!       __old = clog.rdbuf(_M_cerr);
!       __old->~streambuf();
  #ifdef _GLIBCPP_USE_WCHAR_T
-       wstreambuf* __wold;
        _M_wcout = new wfilebuf(1, "stdout", ios_base::out);
        _M_wcin = new wfilebuf(0, "stdin", ios_base::in);
        _M_wcerr = new wfilebuf(2, "stderr", ios_base::out);
!       __wold = wcout.rdbuf(_M_wcout);
!       __wold->~wstreambuf();
!       __wold = wcin.rdbuf(_M_wcin);
!       __wold->~wstreambuf();
        wcin.tie(&wcout);
!       __wold = wcerr.rdbuf(_M_wcerr);
!       __wold->~wstreambuf();
        wcerr.flags(ios_base::unitbuf);
!       __wold = wclog.rdbuf(_M_wcerr);
!       __wold->~wstreambuf();
  #endif
        }
    }
--- 125,153 ----
    {
      if (++_S_ios_base_init == 1)
        {
!       //XXX ILM
!       // stdstreams.cc creates the eight standard streams (cin,
!       // cout etc.), without initializing them.  Here we initialize
!       // the standard streams with properly constructed buffers.
                _M_cout = new filebuf(1, "stdout", ios_base::out);
        _M_cin = new filebuf(0, "stdin", ios_base::in);
        _M_cerr = new filebuf(2, "stderr", ios_base::out);
!       new (&cout) ostream (_M_cout);
!       new (&cin) istream (_M_cin);
        cin.tie(&cout);
!       new (&cerr) ostream (_M_cerr);
        cerr.flags(ios_base::unitbuf);
!       new (&clog) ostream (_M_cerr);
  #ifdef _GLIBCPP_USE_WCHAR_T
        _M_wcout = new wfilebuf(1, "stdout", ios_base::out);
        _M_wcin = new wfilebuf(0, "stdin", ios_base::in);
        _M_wcerr = new wfilebuf(2, "stderr", ios_base::out);
!       new (&wcout) wostream (_M_wcout);
!       new (&wcin) wistream (_M_wcin);
        wcin.tie(&wcout);
!       new (&wcerr) wostream (_M_wcerr);
        wcerr.flags(ios_base::unitbuf);
!       new (&wclog) wostream (_M_wcerr);
  #endif
        }
    }
*** /usr/tmp/libstdc++-2.91/src/stdstreams.cc   Fri Apr 21 13:33:33 2000
--- src/stdstreams.cc   Sat Jan  6 18:07:07 2001
***************
*** 32,48 ****
  
  namespace std {
  
!   filebuf __cfileinit;
!   istream cin(&__cfileinit);
!   ostream cout(&__cfileinit);
!   ostream cerr(&__cfileinit);
!   ostream clog(&__cfileinit);
  #ifdef _GLIBCPP_USE_WCHAR_T
!   wfilebuf __wfileinit;
!   wistream wcin(&__wfileinit);
!   wostream wcout(&__wfileinit);
!   wostream wcerr(&__wfileinit);
!   wostream wclog(&__wfileinit);
  #endif
   
  } // std
--- 32,56 ----
  
  namespace std {
  
!   //XXX ILM
!   // The eight standard streams (cin, cout etc.) are initialized
!   // when ios_base::Init::Init() (in ios.cc) is called for the
!   // first time.
!   // We don't know if the first call to ios_base::Init::Init()
!   // happens before or after C++ dynamic initialization of the
!   // static cin, cout etc. variables below (3.6.2), so we make
!   // sure that the C++ dynamic initialization is a no-op (see
!   // std_istream.h, std_ostream.h).
! 
!   istream cin(0);
!   ostream cout(0);
!   ostream cerr(0);
!   ostream clog(0);
  #ifdef _GLIBCPP_USE_WCHAR_T
!   wistream wcin(0);
!   wostream wcout(0);
!   wostream wcerr(0);
!   wostream wclog(0);
  #endif
   
  } // std
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="libpatch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="libpatch"

U29tZSBwcm9ncmFtcywgdGhhdCBsb2FkIG11bHRpcGxlIERTT3MsIGNyYXNoIGJlZm9yZSBlbnRl
cmluZyBtYWluLgoKSW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRw
dXQgc3RyZWFtcyAoY2luLCBjb3V0LCBldGMuKQppcyBzcGxpdCBhY3Jvc3MgdHdvIGZpbGVzLCBz
dGRzdHJlYW0uY2MgYW5kIGlvcy5jYy4gIFRoZSBpbml0aWFsaXphdGlvbgpjb2RlIGFzc3VtZXMg
dGhhdCB0aGUgcG9ydGlvbiBpbiBzdGRzdHJlYW0uY2MgaXMgYWx3YXlzIGV4ZWN1dGVkIGJlZm9y
ZQp0aGUgcG9ydGlvbiBpbiBpb3MuY2MuICBUaGlzIGFzc3VtcHRpb24gaXMgbm90IGFsd2F5cyB0
cnVlLCBhbmQgc29tZQpwcm9ncmFtcyBjcmFzaCBkdXJpbmcgZXhlY3V0aW9uIG9mIGlvc19iYXNl
OjpJbml0OjpJbml0KCkuCgpUaGUgZm9sbG93aW5nIHBhdGNoIGFwcGVhcnMgdG8gZml4IHRoZSBi
dWc6CgoKKioqIC91c3IvdG1wL2xpYnN0ZGMrKy0yLjkxL2luY2x1ZGUvYml0cy9zdGRfaXN0cmVh
bS5oCVRodSBPY3QgIDUgMDQ6Mjc6MDEgMjAwMC0tLSBpbmNsdWRlL2JpdHMvc3RkX2lzdHJlYW0u
aAlTYXQgSmFuICA2IDE4OjA3OjI1IDIwMDEKKioqKioqKioqKioqKioqCioqKiA2Niw3NiAqKioq
CiAgCiAgICAgIHB1YmxpYzoKICAgICAgICAvLyAyNy42LjEuMS4xIENvbnN0cnVjdG9yL2Rlc3Ry
dWN0b3I6CiAgICAgICAgZXhwbGljaXQgCiAgICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1
Zl90eXBlKiBfX3NiKQogICAgICAgIHsgCiEgCXRoaXMtPmluaXQoX19zYik7CiEgCV9NX2djb3Vu
dCA9IHN0cmVhbXNpemUoMCk7CiAgICAgICAgfQogIAogICAgICAgIHZpcnR1YWwgCi0tLSA2Niw4
MyAtLS0tCiAgCiAgICAgIHB1YmxpYzoKICAgICAgICAvLyAyNy42LjEuMS4xIENvbnN0cnVjdG9y
L2Rlc3RydWN0b3I6CisgICAgICAgLy9YWFggSUxNCisgICAgICAgLy8gVGhlIGNvbnN0cnVjdG9y
IGRvZXMgbm90aGluZyBpZiBfX3NiIGlzIDA7CisgICAgICAgLy8gdGhpcyBpcyBuZWNlc3Nhcnkg
Zm9yIHByb3BlciBpbml0aWFsaXphdGlvbgorICAgICAgIC8vIG9mIGNpbiwgd2NpbiAoc2VlIGlv
cy5jYywgc3Rkc3RyZWFtcy5jYykuCiAgICAgICAgZXhwbGljaXQgCiAgICAgICAgYmFzaWNfaXN0
cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICAgIHsgCiEgCWlmIChfX3NiKQohIAl7
CiEgCSAgdGhpcy0+aW5pdChfX3NiKTsKISAJICBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOwoh
IAl9CiAgICAgICAgfQogIAogICAgICAgIHZpcnR1YWwgCioqKiAvdXNyL3RtcC9saWJzdGRjKyst
Mi45MS9pbmNsdWRlL2JpdHMvc3RkX29zdHJlYW0uaAlUaHUgT2N0ICA1IDA0OjI3OjAxIDIwMDAt
LS0gaW5jbHVkZS9iaXRzL3N0ZF9vc3RyZWFtLmgJU2F0IEphbiAgNiAxODowNzoyOSAyMDAxCioq
KioqKioqKioqKioqKgoqKiogNjAsNjggKioqKgogICAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJU
PiAgICAgICAgICAgCQkJX19jdHlwZV90eXBlOwogIAogICAgICAgIC8vIDI3LjYuMi4yIENvbnN0
cnVjdG9yL2Rlc3RydWN0b3I6CiAgICAgICAgZXhwbGljaXQgCiAgICAgICAgYmFzaWNfb3N0cmVh
bShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQohICAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQog
IAogICAgICAgIHZpcnR1YWwgCiAgICAgICAgfmJhc2ljX29zdHJlYW0oKSAKLS0tIDYwLDc2IC0t
LS0KICAgICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gICAgICAgICAgIAkJCV9fY3R5cGVfdHlw
ZTsKICAKICAgICAgICAvLyAyNy42LjIuMiBDb25zdHJ1Y3Rvci9kZXN0cnVjdG9yOgorICAgICAg
IC8vWFhYIElMTQorICAgICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBkb2VzIG5vdGhpbmcgaWYgX19z
YiBpcyAwOworICAgICAgIC8vIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBwcm9wZXIgaW5pdGlhbGl6
YXRpb24KKyAgICAgICAvLyBvZiBjb3V0LCBjZXJyLCBjbG9nLCB3Y2luLCB3Y2Vyciwgd2Nsb2cg
KHNlZQorICAgICAgIC8vIGlvcy5jYywgc3Rkc3RyZWFtcy5jYykuCiAgICAgICAgZXhwbGljaXQg
CiAgICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQohICAgICAgIHsK
ISAgICAgICAgIGlmIChfX3NiKQohIAkgIHRoaXMtPmluaXQoX19zYik7CiEgICAgICAgfQogIAog
ICAgICAgIHZpcnR1YWwgCiAgICAgICAgfmJhc2ljX29zdHJlYW0oKSAKKioqIC91c3IvdG1wL2xp
YnN0ZGMrKy0yLjkxL3NyYy9pb3MuY2MJV2VkIE5vdiAyMiAyMDo1Mzo0MCAyMDAwCi0tLSBzcmMv
aW9zLmNjCVNhdCBKYW4gIDYgMTg6MDY6NTEgMjAwMQoqKioqKioqKioqKioqKioKKioqIDEyNSwx
NjMgKioqKgogICAgewogICAgICBpZiAoKytfU19pb3NfYmFzZV9pbml0ID09IDEpCiAgICAgICAg
ewohIAkvLyBOQjogc3RkX2lvc3RyZWFtLmggY3JlYXRlcyB0aGUgZm91ciBzdGFuZGFyZCBmaWxl
cyB3aXRoCiEgCS8vIGRlZmF1bHQgYnVmZmVycy4gQXQgdGhpcyBwb2ludCwgd2Ugc3dhcCBvdXQg
dGhlIGRlZmF1bHQKISAJLy8gYnVmZmVycyBmb3IgdGhlIHByb3Blcmx5LWNvbnN0cnVjdGVkIG9u
ZXMsIGFuZCBkaXNwb3NlIG9mCiEgCS8vIHRoZSBkZWZhdWx0IGJ1ZmZlcnMuCiEgCXN0cmVhbWJ1
ZiogX19vbGQ7CiAgICAgICAgIAlfTV9jb3V0ID0gbmV3IGZpbGVidWYoMSwgInN0ZG91dCIsIGlv
c19iYXNlOjpvdXQpOwogIAlfTV9jaW4gPSBuZXcgZmlsZWJ1ZigwLCAic3RkaW4iLCBpb3NfYmFz
ZTo6aW4pOwogIAlfTV9jZXJyID0gbmV3IGZpbGVidWYoMiwgInN0ZGVyciIsIGlvc19iYXNlOjpv
dXQpOwohIAlfX29sZCA9IGNvdXQucmRidWYoX01fY291dCk7CiEgCV9fb2xkLT5+c3RyZWFtYnVm
KCk7CiEgCV9fb2xkID0gY2luLnJkYnVmKF9NX2Npbik7CiEgCV9fb2xkLT5+c3RyZWFtYnVmKCk7
CiAgCWNpbi50aWUoJmNvdXQpOwohIAlfX29sZCA9IGNlcnIucmRidWYoX01fY2Vycik7CiEgCV9f
b2xkLT5+c3RyZWFtYnVmKCk7CiAgCWNlcnIuZmxhZ3MoaW9zX2Jhc2U6OnVuaXRidWYpOwohIAlf
X29sZCA9IGNsb2cucmRidWYoX01fY2Vycik7CiEgCV9fb2xkLT5+c3RyZWFtYnVmKCk7CiAgI2lm
ZGVmIF9HTElCQ1BQX1VTRV9XQ0hBUl9UCi0gCXdzdHJlYW1idWYqIF9fd29sZDsKICAJX01fd2Nv
dXQgPSBuZXcgd2ZpbGVidWYoMSwgInN0ZG91dCIsIGlvc19iYXNlOjpvdXQpOwogIAlfTV93Y2lu
ID0gbmV3IHdmaWxlYnVmKDAsICJzdGRpbiIsIGlvc19iYXNlOjppbik7CiAgCV9NX3djZXJyID0g
bmV3IHdmaWxlYnVmKDIsICJzdGRlcnIiLCBpb3NfYmFzZTo6b3V0KTsKISAJX193b2xkID0gd2Nv
dXQucmRidWYoX01fd2NvdXQpOwohIAlfX3dvbGQtPn53c3RyZWFtYnVmKCk7CiEgCV9fd29sZCA9
IHdjaW4ucmRidWYoX01fd2Npbik7CiEgCV9fd29sZC0+fndzdHJlYW1idWYoKTsKICAJd2Npbi50
aWUoJndjb3V0KTsKISAJX193b2xkID0gd2NlcnIucmRidWYoX01fd2NlcnIpOwohIAlfX3dvbGQt
Pn53c3RyZWFtYnVmKCk7CiAgCXdjZXJyLmZsYWdzKGlvc19iYXNlOjp1bml0YnVmKTsKISAJX193
b2xkID0gd2Nsb2cucmRidWYoX01fd2NlcnIpOwohIAlfX3dvbGQtPn53c3RyZWFtYnVmKCk7CiAg
I2VuZGlmCiAgICAgICAgfQogICAgfQotLS0gMTI1LDE1MyAtLS0tCiAgICB7CiAgICAgIGlmICgr
K19TX2lvc19iYXNlX2luaXQgPT0gMSkKICAgICAgICB7CiEgCS8vWFhYIElMTQohIAkvLyBzdGRz
dHJlYW1zLmNjIGNyZWF0ZXMgdGhlIGVpZ2h0IHN0YW5kYXJkIHN0cmVhbXMgKGNpbiwKISAJLy8g
Y291dCBldGMuKSwgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlbS4gIEhlcmUgd2UgaW5pdGlhbGl6
ZQohIAkvLyB0aGUgc3RhbmRhcmQgc3RyZWFtcyB3aXRoIHByb3Blcmx5IGNvbnN0cnVjdGVkIGJ1
ZmZlcnMuCiAgICAgICAgIAlfTV9jb3V0ID0gbmV3IGZpbGVidWYoMSwgInN0ZG91dCIsIGlvc19i
YXNlOjpvdXQpOwogIAlfTV9jaW4gPSBuZXcgZmlsZWJ1ZigwLCAic3RkaW4iLCBpb3NfYmFzZTo6
aW4pOwogIAlfTV9jZXJyID0gbmV3IGZpbGVidWYoMiwgInN0ZGVyciIsIGlvc19iYXNlOjpvdXQp
OwohIAluZXcgKCZjb3V0KSBvc3RyZWFtIChfTV9jb3V0KTsKISAJbmV3ICgmY2luKSBpc3RyZWFt
IChfTV9jaW4pOwogIAljaW4udGllKCZjb3V0KTsKISAJbmV3ICgmY2Vycikgb3N0cmVhbSAoX01f
Y2Vycik7CiAgCWNlcnIuZmxhZ3MoaW9zX2Jhc2U6OnVuaXRidWYpOwohIAluZXcgKCZjbG9nKSBv
c3RyZWFtIChfTV9jZXJyKTsKICAjaWZkZWYgX0dMSUJDUFBfVVNFX1dDSEFSX1QKICAJX01fd2Nv
dXQgPSBuZXcgd2ZpbGVidWYoMSwgInN0ZG91dCIsIGlvc19iYXNlOjpvdXQpOwogIAlfTV93Y2lu
ID0gbmV3IHdmaWxlYnVmKDAsICJzdGRpbiIsIGlvc19iYXNlOjppbik7CiAgCV9NX3djZXJyID0g
bmV3IHdmaWxlYnVmKDIsICJzdGRlcnIiLCBpb3NfYmFzZTo6b3V0KTsKISAJbmV3ICgmd2NvdXQp
IHdvc3RyZWFtIChfTV93Y291dCk7CiEgCW5ldyAoJndjaW4pIHdpc3RyZWFtIChfTV93Y2luKTsK
ICAJd2Npbi50aWUoJndjb3V0KTsKISAJbmV3ICgmd2NlcnIpIHdvc3RyZWFtIChfTV93Y2Vycik7
CiAgCXdjZXJyLmZsYWdzKGlvc19iYXNlOjp1bml0YnVmKTsKISAJbmV3ICgmd2Nsb2cpIHdvc3Ry
ZWFtIChfTV93Y2Vycik7CiAgI2VuZGlmCiAgICAgICAgfQogICAgfQoqKiogL3Vzci90bXAvbGli
c3RkYysrLTIuOTEvc3JjL3N0ZHN0cmVhbXMuY2MJRnJpIEFwciAyMSAxMzozMzozMyAyMDAwCi0t
LSBzcmMvc3Rkc3RyZWFtcy5jYwlTYXQgSmFuICA2IDE4OjA3OjA3IDIwMDEKKioqKioqKioqKioq
KioqCioqKiAzMiw0OCAqKioqCiAgCiAgbmFtZXNwYWNlIHN0ZCB7CiAgCiEgICBmaWxlYnVmIF9f
Y2ZpbGVpbml0OwohICAgaXN0cmVhbSBjaW4oJl9fY2ZpbGVpbml0KTsKISAgIG9zdHJlYW0gY291
dCgmX19jZmlsZWluaXQpOwohICAgb3N0cmVhbSBjZXJyKCZfX2NmaWxlaW5pdCk7CiEgICBvc3Ry
ZWFtIGNsb2coJl9fY2ZpbGVpbml0KTsKICAjaWZkZWYgX0dMSUJDUFBfVVNFX1dDSEFSX1QKISAg
IHdmaWxlYnVmIF9fd2ZpbGVpbml0OwohICAgd2lzdHJlYW0gd2NpbigmX193ZmlsZWluaXQpOwoh
ICAgd29zdHJlYW0gd2NvdXQoJl9fd2ZpbGVpbml0KTsKISAgIHdvc3RyZWFtIHdjZXJyKCZfX3dm
aWxlaW5pdCk7CiEgICB3b3N0cmVhbSB3Y2xvZygmX193ZmlsZWluaXQpOwogICNlbmRpZgogICAK
ICB9IC8vIHN0ZAotLS0gMzIsNTYgLS0tLQogIAogIG5hbWVzcGFjZSBzdGQgewogIAohICAgLy9Y
WFggSUxNCiEgICAvLyBUaGUgZWlnaHQgc3RhbmRhcmQgc3RyZWFtcyAoY2luLCBjb3V0IGV0Yy4p
IGFyZSBpbml0aWFsaXplZAohICAgLy8gd2hlbiBpb3NfYmFzZTo6SW5pdDo6SW5pdCgpIChpbiBp
b3MuY2MpIGlzIGNhbGxlZCBmb3IgdGhlCiEgICAvLyBmaXJzdCB0aW1lLgohICAgLy8gV2UgZG9u
J3Qga25vdyBpZiB0aGUgZmlyc3QgY2FsbCB0byBpb3NfYmFzZTo6SW5pdDo6SW5pdCgpCiEgICAv
LyBoYXBwZW5zIGJlZm9yZSBvciBhZnRlciBDKysgZHluYW1pYyBpbml0aWFsaXphdGlvbiBvZiB0
aGUKISAgIC8vIHN0YXRpYyBjaW4sIGNvdXQgZXRjLiB2YXJpYWJsZXMgYmVsb3cgKDMuNi4yKSwg
c28gd2UgbWFrZQohICAgLy8gc3VyZSB0aGF0IHRoZSBDKysgZHluYW1pYyBpbml0aWFsaXphdGlv
biBpcyBhIG5vLW9wIChzZWUKISAgIC8vIHN0ZF9pc3RyZWFtLmgsIHN0ZF9vc3RyZWFtLmgpLgoh
IAohICAgaXN0cmVhbSBjaW4oMCk7CiEgICBvc3RyZWFtIGNvdXQoMCk7CiEgICBvc3RyZWFtIGNl
cnIoMCk7CiEgICBvc3RyZWFtIGNsb2coMCk7CiAgI2lmZGVmIF9HTElCQ1BQX1VTRV9XQ0hBUl9U
CiEgICB3aXN0cmVhbSB3Y2luKDApOwohICAgd29zdHJlYW0gd2NvdXQoMCk7CiEgICB3b3N0cmVh
bSB3Y2VycigwKTsKISAgIHdvc3RyZWFtIHdjbG9nKDApOwogICNlbmRpZgogICAKICB9IC8vIHN0
ZAo=

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]