libstdc++ 10.2.0 issue

Jonathan Wakely jwakely.gcc@gmail.com
Mon Mar 22 12:13:37 GMT 2021


On Mon, 22 Mar 2021 at 10:27, WK via Libstdc++ <libstdc++@gcc.gnu.org> wrote:
>
> Hello,
>
> I'm trying to build cross-arch and cross-OS 10.2.0 toolchain: FreeBSD8.4
> for ARM. I successfully built it but I have problems with C++ programs.
>
> Even simple hello world using cout is crashing with segmentation fault,
> but when I compile C hello world with printf() everything works ok.
>
> When I load core file to GDB it shows following:
>
> Reading symbols from a.out...
> [New LWP 100065]
> Core was generated by `a.out'.
> Program terminated with signal SIGSEGV, Segmentation fault.
> #0  0x000559f4 in std::ostream::sentry::sentry (this=0xbfffecb8, __os=...)
>      at
> /home/witkow/comp/arm-freebsd8-cross-toolchain/work/gcc-10.2.0/objdir/arm-unknown-freebsd8/libstdc++-v3/include/bits/ostream.tcc:51
> 51
> (gdb) bt
> #0  0x000559f4 in std::ostream::sentry::sentry (this=0xbfffecb8, __os=...)
>      at
> /home/witkow/comp/arm-freebsd8-cross-toolchain/work/gcc-10.2.0/objdir/arm-unknown-freebsd8/libstdc++-v3/include/bits/ostream.tcc:51
> #1  0x00056124 in std::__ostream_insert<char, std::char_traits<char> >
> (__out=..., __s=0xbfffecfc "Hello c++ world", __n=15)
>      at
> /home/witkow/comp/arm-freebsd8-cross-toolchain/work/gcc-10.2.0/objdir/arm-unknown-freebsd8/libstdc++-v3/include/bits/ostream_insert.h:82
> #2  0x00011180 in main (argc=1, argv=0xbfffed44) at 2.cpp:14
>
>
>
>
> (gdb) frame 0
> #0  0x000559f4 in std::ostream::sentry::sentry (this=0xbfffecb8, __os=...)
>      at
> /home/witkow/comp/arm-freebsd8-cross-toolchain/work/gcc-10.2.0/objdir/arm-unknown-freebsd8/libstdc++-v3/include/bits/ostream.tcc:51
> 51
> (gdb) info args
> this = 0xbfffecb8
> __os = @0xde628: {<std::basic_ios<char, std::char_traits<char> >> =
> <invalid address>, _vptr.basic_ostream = 0x0}
> (gdb)
>
>
>
>
> (gdb) disassemble
> Dump of assembler code for function _ZNSo6sentryC2ERSo:
>     0x000559ec <+0>:    ldr     r3, [r1]
>     0x000559f0 <+4>:    push    {r4, r5, r6, lr}
> => 0x000559f4 <+8>:     ldr     r3, [r3, #-12]
>     0x000559f8 <+12>:   mov     r4, r0
>     0x000559fc <+16>:   add     r0, r1, r3
>     0x00055a00 <+20>:   ldr     r3, [r0, #112]  ; 0x70
>     0x00055a04 <+24>:   mov     r2, #0
>     0x00055a08 <+28>:   cmp     r3, r2
>     0x00055a0c <+32>:   mov     r5, r1
>     0x00055a10 <+36>:   str     r1, [r4, #4]
>     0x00055a14 <+40>:   strb    r2, [r4]
>     0x00055a18 <+44>:   ldr     r1, [r0, #20]
>     0x00055a1c <+48>:   beq     0x55a50 <_ZNSo6sentryC2ERSo+100>
>     0x00055a20 <+52>:   cmp     r1, r2
>     0x00055a24 <+56>:   beq     0x55a38 <_ZNSo6sentryC2ERSo+76>
>     0x00055a28 <+60>:   orr     r1, r1, #4
>     0x00055a2c <+64>:   bl      0x3cb14
> <_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate>
>     0x00055a30 <+68>:   mov     r0, r4
>     0x00055a34 <+72>:   pop     {r4, r5, r6, pc}
>     0x00055a38 <+76>:   mov     r0, r3
>     0x00055a3c <+80>:   bl      0x55324 <_ZNSo5flushEv>
>     0x00055a40 <+84>:   ldr     r3, [r5]
>     0x00055a44 <+88>:   ldr     r0, [r3, #-12]
>     0x00055a48 <+92>:   add     r0, r5, r0
>     0x00055a4c <+96>:   ldr     r1, [r0, #20]
>     0x00055a50 <+100>:  cmp     r1, #0
>     0x00055a54 <+104>:  bne     0x55a28 <_ZNSo6sentryC2ERSo+60>
>     0x00055a58 <+108>:  mov     r3, #1
>     0x00055a5c <+112>:  mov     r0, r4
>     0x00055a60 <+116>:  strb    r3, [r4]
>     0x00055a64 <+120>:  pop     {r4, r5, r6, pc}
> End of assembler dump.
>
>
>
>
> (gdb) info registers
> r0             0xbfffecb8          3221220536
> r1             0xde628             910888
> r2             0xf                 15
> r3             0x0                 0
> r4             0xde628             910888
> r5             0x0                 0
> r6             0xf                 15
> r7             0x0                 0
> r8             0xbfffecfc          3221220604
> r9             0x0                 0
> r10            0xbfffecb8          3221220536
> r11            0xbfffed14          3221220628
> r12            0x64                100
> sp             0xbfffeca0          0xbfffeca0
> lr             0x56124             352548
> pc             0x559f4             0x559f4
> <std::ostream::sentry::sentry(std::ostream&)+8>
> cpsr           0x20000010          536870928
>
>
>
> and seems like the problem occurs in 0x000559f4 address because there is
> null-pointer dereference because R3 register is 0.
>
> I'm wondering how can I investigate and fix the problem? Any ideas what
> could I do to fix it?

It looks like the global constructors that initialize the cout, cin,
etc streams haven't run.


More information about the Libstdc++ mailing list