Problems with exception handling in conjunction with shared objects
Ori Amitzur
ori@uxsrvc.tti-telecom.com
Tue Sep 28 07:42:00 GMT 1999
I am using g++ 2.95 on AIX 4.3 powerpc. I created a shared object that
contains
the following code:
// File shared.cxx
class Contained {
public:
~Contained() {}
};
class Container {
public:
Container() {
throw 5;
}
private:
Contained _contained;
};
void Throw()
{
Container c;
}
The executable contains the following code:
// File main.cxx
#include <iostream.h>
extern void Throw();
int main(int,char **)
{
try {
Throw();
} catch (int &i) {
cout << "Caught " << i << endl;
}
return 0;
}
This code causes Illegal Instruction with coredump.
I found that the following prerequisists must be fulfilled for the problem
to occure:
1. The exception is thrown in a shared object
2. The exception is thrown in a constrctor of an object (the Container
object)
3. "Container" contains an object that has a destructor (the Contained)
4. The exception is caught in the executable (main)
I am compiling the source code using g++ -c XXX.cxx
XXX stands either for shared or main.
I am creating the shared object using
g++ -o libshared.so -shared -Xlinker -G shared.o
I am creating the executable using g++ -o exe -Xlinker -brtl -lshared main.o
A similar problem occurs if the file shared.cxx contains the following code:
// File shared.cxx
#include <iostream.h>
void Throw()
{
try {
throw 5;
} catch (int &i) {
cout << i << " caught" << endl;
}
}
In this case program always crashes.
It seems to me like a bug. Any other ideas ?
Ori Amitzur
More information about the Gcc-bugs
mailing list