Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Statically linked library causes segmentation violation upon C++ throw

Reply
Thread Tools

Statically linked library causes segmentation violation upon C++ throw

 
 
google@voom.net
Guest
Posts: n/a
 
      06-03-2006
I statically link the Synopsys Milkyway C-API library ("MDA") into my
C++ application. When my C++ application throws an exception, it seg
faults instead.

The details of my environment are:
x86 (Pentium) CPU or AMD x86_64 (Opteron)
Red Hat Enterprise Linux 3 OS
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-54)
Also reproduced with gcc version 3.3.2

The Synopsys Milkyway C-API library is,
Static linked library (dynamic linked not available)
Developed in C, not C++
supported on Red Hat Enterprise Linux 3.0, gcc version 3.3.2

The problem is platform-dependent:

- The problem occurs when I compile for 32 bits and link to the x86
MDA library, and run on either x86 and AMD x86_64 (Opteron)

- No problem when I compile for 64 bits and link to the x86_64 MDA,
and run on AMD x86_64

- No problem in the absence of IA32 MDE

In summary, there is something wrong with the 32 bit x86 version of MDA
library, regardless of whether it is run on an x86 machine or an AMD
x86_64 machine. But how to fix it?

The attached test program executes the MDA initialization function
MWXDb_omwxInit(), and then throws an exception. This causes the seg
fault as described above. When I comment out MWXDb_omwxInit(), throw
works as expected.

---------
#include <cstdio>
#include <cstdlib>
#include "omwx_proto.h" // Include file for MDA

void
thrower(const int in)
{
if (in > 1) {
printf("Throw an exception.\n");
throw 3;
}
printf("Did not throw an exception.\n");
}

int
main(int argc,
char **argv)
{
// When present, causes the mda lib to be included,
// and the throw to fail with a segv.
// When commented out, the throw works fine.
MWXDb_omwxInit(argc, argv, 1);

try {
thrower(argc);

} catch(int &excp) {
printf("Caught exception %d.\n", excp);
}
}

 
Reply With Quote
 
 
 
 
Salt_Peter
Guest
Posts: n/a
 
      06-03-2006
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> I statically link the Synopsys Milkyway C-API library ("MDA") into my
> C++ application. When my C++ application throws an exception, it seg
> faults instead.
>
> The details of my environment are:
> x86 (Pentium) CPU or AMD x86_64 (Opteron)
> Red Hat Enterprise Linux 3 OS
> gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-54)
> Also reproduced with gcc version 3.3.2
>
> The Synopsys Milkyway C-API library is,
> Static linked library (dynamic linked not available)
> Developed in C, not C++
> supported on Red Hat Enterprise Linux 3.0, gcc version 3.3.2
>
> The problem is platform-dependent:
>
> - The problem occurs when I compile for 32 bits and link to the x86
> MDA library, and run on either x86 and AMD x86_64 (Opteron)
>
> - No problem when I compile for 64 bits and link to the x86_64 MDA,
> and run on AMD x86_64
>
> - No problem in the absence of IA32 MDE
>
> In summary, there is something wrong with the 32 bit x86 version of MDA
> library, regardless of whether it is run on an x86 machine or an AMD
> x86_64 machine. But how to fix it?
>
> The attached test program executes the MDA initialization function
> MWXDb_omwxInit(), and then throws an exception. This causes the seg
> fault as described above. When I comment out MWXDb_omwxInit(), throw
> works as expected.
>
> ---------
> #include <cstdio>
> #include <cstdlib>
> #include "omwx_proto.h" // Include file for MDA
>
> void
> thrower(const int in)
> {
> if (in > 1) {
> printf("Throw an exception.\n");
> throw 3;
> }
> printf("Did not throw an exception.\n");
> }
>
> int
> main(int argc,
> char **argv)
> {
> // When present, causes the mda lib to be included,
> // and the throw to fail with a segv.
> // When commented out, the throw works fine.
> MWXDb_omwxInit(argc, argv, 1);
>
> try {
> thrower(argc);
>
> } catch(int &excp) {
> printf("Caught exception %d.\n", excp);
> }
> }
>


#include <iostream>
#include <ostream>
#include "omwx_proto.h" // Include file for MDA

int main(int argc, char **argv)
{
try
{
thrower(argc);
MWXDb_omwxInit(argc, argv, 1);
// do stuff
// release
}
catch(int& e const)
{
std::cout << "error: " << e << std::endl;
}
}
 
Reply With Quote
 
 
 
 
google@voom.net
Guest
Posts: n/a
 
      06-09-2006
The following is not the solution to *my particular problem* with the
Synopsys Milkyway C-API. However, to make this a more useful thread
for others, I will add some more information that I found. Perhaps
this might even jog someone's memory wrt my problem.

I discovered that this same problem has occured in other software, like
MySQL, syslog(), libjpeg, and boost:ython.

I suspected gcc bug 16698:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16698
This bug was not in gcc 2.95.3, but did appear in 3.0.4, 3.2.3, 3.3.3,
3.4.0, and 4.0.0. It is fixed in gcc 3.4.2. Perhaps if the Milkyway
C-API 2004.06 was compiled with gcc 2.95, and the troublesome 2005.09
was compiled with gcc 3.3.2?

Alas, both versions of the Synopsys Milkyway C-API were compiled with
gcc 3.2.2 and 3.3.2. If my problem was due to gcc bug 16698, I would
have seen it in both versions of the Synopsys Milkyway C-API, or in
neither version.

Here are some more references. There is also some talk a problem with
ABI (Application Binary Interface).

Same problem, but with syslog():
http://gcc.gnu.org/ml/gcc-help/2004-04/msg00069.html

Same problem, but with libjpeg:
https://bugzilla.redhat.com/bugzilla....cgi?id=101448
"simple fix is to rebuild libjpeg as C++":
http://dburns.dhs.org/osgarchiver/ar...2003/0000.html

Same problem, but with boost:ython:
http://mail.python.org/pipermail/c++...ne/004246.html

More information on ABI:
http://www.usenix.org/publications/l...owndavid_html/

John McGehee, Voom, Inc.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Statically linked extension and relative import David Cournapeau Python 0 05-07-2009 09:33 AM
python "import" of statically linked module with SWIG samsappleton Python 0 03-11-2008 04:35 AM
what is fast dynamically linked executable or statically linked executable ?how to decide? pratap C Programming 20 03-07-2007 04:46 AM
statically linked python Ralph Butler Python 3 06-20-2006 01:39 AM
Statically-linked binary SegFaults David Douthitt C Programming 1 05-20-2004 09:47 PM



Advertisments