This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: libstdc++ debugging, was:Re: Heads up: Several thousand g++ andlibstdc++ test failures on sparc[64]


Pétur Runólfsson wrote:


We now have two possibilities:
1) _S_initialize_once is not called.
2) _S_initialize_once is called, but it fails to initialize _S_global,
or _S_global is clobbered sometime after it is initialized.

Can you find out which?
Does removing the #ifdef __GHTREADS block help? If it does, feel
free to post a patch. It will make locale initialization
non-threadsafe, but that's how things were before this mess anyway.

Pétur,


had a short time to try, as you see below, the once is never touched.
Well, I check again by tomorrow. But so far my tries. (Andreas's special debugging, get the routines, point to them in gdb with hex.)


I removed the #ifdef __GHTREADS (commented) and so on.

Thanks again!

Andreas

Continued:

locale::_S_initialize:

  void
  locale::_S_initialize_once()
  {
    // 2 references.
    // One reference for _S_classic, one for _S_global
    _S_classic = new (&c_locale_impl) _Impl(2);
    _S_global = _S_classic; 	
    new (&c_locale) locale(_S_classic);
  }

  void
  locale::_S_initialize()
  {
#ifdef __GTHREADS
    if (__gthread_active_p())
      __gthread_once(&_S_once, _S_initialize_once);
    else
#endif
      {
	if (!_S_classic)
	  _S_initialize_once();
      }
  }


Find S_initialize in libstdc++.so.6, add the address to the offset from above:
0xFF280000 + 6aaf8 = 0xff2eAAF80


Set breakpoint @ 0xff2eAAF8

Step through till crash :)

_ZNSt6locale13_S_initializeEv()
0xFF280000 + 0x6aaf8 = 0xff2eaaf8
(gdb) disass 0xff2eaaf8 0xff2eaaf8+16
Dump of assembler code from 0xff2eaaf8 to 0xff2eab08:
0xff2eaaf8:     save  %sp, -112, %sp
0xff2eaafc:     sethi  %hi(0x800), %g1
0xff2eab00:     sethi  %hi(0x55c00), %l7
0xff2eab04:     call  0xff2cb850
(gdb) disass 0xff2cb850 0xff2cb850+16
Dump of assembler code from 0xff2cb850 to 0xff2cb860:
0xff2cb850:     retl
0xff2cb854:     add  %o7, %l7, %l7
0xff2cb858:     retl
0xff2cb85c:     add  %o7, %l7, %l7

(gdb) b *0xff2eaaf8
Breakpoint 3 at 0xff2eaaf8
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /opt/gcc/gcc-cvs/objdir/sparc-sun-solaris2.9/libstdc++-v3/header_cassert.exe


Breakpoint 3, 0xff2eaaf8 in ?? () from /usr/local/lib/libstdc++.so.6


_ZNSt6locale5facet18_S_initialize_onceEv()
0xFF280000 + 0x6a718 = 0xff2ea718
(gdb) disass 0xff2ea718 0xff2ea718+20
Dump of assembler code from 0xff2ea718 to 0xff2ea72c:
0xff2ea718:     save  %sp, -112, %sp
0xff2ea71c:     sethi  %hi(0x400), %g1
0xff2ea720:     sethi  %hi(0x400), %i5
0xff2ea724:     sethi  %hi(0x56000), %l7
0xff2ea728:     call  0xff2cb850

(gdb) b *0xff2ea718
Breakpoint 1 at 0xff2ea718
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /opt/gcc/gcc-cvs/objdir/sparc-sun-solaris2.9/libstdc++-v3/header_cassert.exe


Program received signal SIGSEGV, Segmentation fault. 0xff2cc4c0 in ?? () from /usr/local/lib/libstdc++.so.6 (gdb)


_ZNSt6locale18_S_initialize_onceEv()
0xFF280000 + 0x6aa90 = 0xff2eaa90
(gdb) disass 0xff2eaa90 0xff2eaa90+20
Dump of assembler code from 0xff2eaa90 to 0xff2eaaa4:
0xff2eaa90: save %sp, -112, %sp
0xff2eaa94: sethi %hi(0x400), %g1
0xff2eaa98: sethi %hi(0x55c00), %l7
0xff2eaa9c: call 0xff2cb850
0xff2eaaa0:
add %l7, 0x3e4, %l7 ! 0x55fe4 <_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPwEEEEvv+23883>


(gdb) b *0xff2eaa90
Breakpoint 2 at 0xff2eaa90
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /opt/gcc/gcc-cvs/objdir/sparc-sun-solaris2.9/libstdc++-v3/header_cassert.exe


Program received signal SIGSEGV, Segmentation fault. 0xff2cc4c0 in ?? () from /usr/local/lib/libstdc++.so.6 (gdb)



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