Hi,
I'm trying to link C++ code using RVDS 6.0.
On runtime during C++ initialization (__cpp_initialize_aeabi), it calls the following function:
t._ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE _ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE 0x800d56d8: aa0103e2 .... MOV x2,x1 0x800d56dc: d2800001 .... MOV x1,#0 0x800d56e0: 17ffc7d2 .... B _ZNSoC2EPSt15basic_streambufIcSt11char_traitsIcEE ; 0x800c7628
t._ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE _ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE
0x800d56d8: aa0103e2 .... MOV x2,x1
0x800d56dc: d2800001 .... MOV x1,#0
0x800d56e0: 17ffc7d2 .... B _ZNSoC2EPSt15basic_streambufIcSt11char_traitsIcEE ; 0x800c7628
Because x1 is set to 0. The function _ZNSoC2EPSt15basic_streambufIcSt11char_traitsIcEE will crash.
The content of the register:_ZNSoC2EPSt15basic_streambufIcSt11char_traitsIcEE
x2: std::__rw_cout_buffer 0x8011d290 Data 160 ios.o(.bss) x0: std::__rw_indestructible_cout 0x8011d330 Data 144 ios.o(.bss) x1 = 0
x2: std::__rw_cout_buffer 0x8011d290 Data 160 ios.o(.bss)
x0: std::__rw_indestructible_cout 0x8011d330 Data 144 ios.o(.bss)
x1 = 0
I think the reason initialization calls this function because one of the members of the class is of "string" type.
Do I need to set any option or define anything before I use "string" or streambuf?
Thanks,
-Andreas
Hi Andreas,
would you be able to provide a sample code to reproduce this issue ? Which target are you compiling for ?
Which release of ARM Compiler 6 are you using ? You can get this information by typing in the DS-5 command line:
armclang --vsn
Stefano