------- Comment #2 from mjtruog at fastmail dot ca 2010-01-10 18:16 -------
I have been trying to make a simple test case for the ostringstream problem but
have not yet found one. However, I have been able to make a test case for the
crash when using std::cerr. The problems are probably related in some way, but
the std::ostringstream one I found may be harder to recreate. I have the files
to replicate the std::cerr crash scenario below:
main.cpp:
#include <dlfcn.h>
#include <iostream>
// compile with: g++ -g -O0 main.cpp -ldl
int main()
{
char const * const library_name = "./library.so";
void * handle = dlopen(library_name, RTLD_NOW | RTLD_LOCAL |
RTLD_DEEPBIND);
char const * const dlopen_error = dlerror();
if (! handle)
{
std::cerr << "dlopen error: " << dlopen_error << std::endl;
return 1;
}
typedef void (*library_function_type)();
void * function = dlsym(handle, "library_function");
char const * const dlsym_error = dlerror();
if (dlsym_error)
{
std::cerr << "dlsym error: " << dlsym_error << std::endl;
dlclose(handle);
return 1;
}
reinterpret_cast<library_function_type>(function)();
dlclose(handle);
return 0;
}
library1.cpp:
#include <sstream>
#include <iostream>
// example of SEGFAULT when writing to std::cerr
// compile with:
// g++ -g -O0 -rdynamic -c -fPIC -o library.o library1.cpp
// g++ -shared -Wl,-export-dynamic -o library.so library.o
extern "C"
{
void library_function()
{
std::clog << "std::cerr will segfault" << std::endl;
std::cerr << "crash me";
}
}
--
mjtruog at fastmail dot ca changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |UNCONFIRMED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42679