C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Statically linked library causes segmentation violation upon

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
Guest






PostPosted: Sat Jun 03, 2006 6:56 am    Post subject: Statically linked library causes segmentation violation upon Reply with quote



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);
}
}
Back to top
Salt_Peter
Guest





PostPosted: Sat Jun 03, 2006 9:10 am    Post subject: Re: Statically linked library causes segmentation violation Reply with quote



google (AT) voom (DOT) net wrote:
Quote:
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;
}
}
Back to top
Guest






PostPosted: Sat Jun 10, 2006 3:51 am    Post subject: Re: Statically linked library causes segmentation violation Reply with quote



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::python.

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/show_bug.cgi?id=101448
"simple fix is to rebuild libjpeg as C++":
http://dburns.dhs.org/osgarchiver/archives/August2003/0000.html

Same problem, but with boost::python:
http://mail.python.org/pipermail/c++-sig/2003-June/004246.html

More information on ABI:
http://www.usenix.org/publications/library/proceedings/als00/2000papers/papers/full_papers/browndavid/browndavid_html/

John McGehee, Voom, Inc.
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.