I seem to be having a problem with programs not catching C++ exceptions
when compiled with GCCSDK 4.7.
Full version:
(GCCSDK GCC 4.7.4 Release 1 Development) 4.7.4 20140527 (
prerelease) [gcc-4_7-branch revision 210956]
The following simple program (main.cc) will crash rather than catch
the exception as expected.
#include <iostream>
#include <stdexcept>
int main(int argc, char *argv[])
{
try
{
std::cout << "Before throw" << std::endl;
throw std::runtime_error("Test throw and catch");
} catch(...)
{
std::cout << "Caught thrown exception as expected\n" << std::endl;
}
std::cout << "After try/catch block" << std::endl;
}
I'm compiling it using the following makefile.
# Makefile for exceptcrash
SRC=main.cc
CXX=~/gccsdk/cross/bin/arm-unknown-riscos-g++
CXXFLAGS= -O2 -mthrowback
TARGET=exceptnotcaught
all: $(TARGET)
$(TARGET): $(SRC:.cc=.o)
$(CXX) -static $(SRC:.cc=.o) -o $(TARGET)ELF,e1f
~/gccsdk/cross/bin/elf2aif $(TARGET)ELF,e1f $(TARGET),ff8
The ELF version crashes as well at the aif version.
The output from the program is:
Before throw
terminate called after throwing an instance of 'std::runtime_error'
terminate called recursively
Fatal signal received: Aborted
Stack backtrace:
Running thread 0x84968
( c56e84) pc: 6c774 lr: 6cc18 sp: c56e88 __write_backtrace()
( c56ef4) pc: 6c890 lr: 6cf7c sp: c56ef8 __unixlib_raise_signal()
( c56f04) pc: 6cf60 lr: 536cc sp: c56f08 raise()
( c56f18) pc: 53690 lr: 3d1e4 sp: c56f1c abort()
( c56f38) pc: 3d118 lr: 34b08 sp: c56f3c __gnu_cxx::__verbose_terminate_handler()()
( c56f48) pc: 34afc lr: 34b60 sp: c56f4c __cxxabiv1::__terminate(void (*)())()
( c56f8c) pc: 3d114 lr: 34b08 sp: c56f90 __gnu_cxx::__verbose_terminate_handler()()
( c56f9c) pc: 34af8 lr: 34b60 sp: c56fa0 __cxxabiv1::__terminate(void (*)())()
( c56fec) pc: 84f0 lr: 5828c sp: c56ff0 main()
Can anyone else confirm this isn't working?
Regards,
Alan
No comments:
Post a Comment