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