Excepciones de C ++ y la sección .eh_frame ELF
¿Es que la ausencia o daño de la sección .eh_frame ELF es la causa de que las excepciones en mi código C ++ dejen de funcionar? Cualquier excepción que anteriormente se detectó correctamente ahora está llamando a std :: terminate ().
Mi situación:
Mi biblioteca compartida zzz.so tiene bloques try-catch:
try {
throw Exc();
} catch (const Exc &e) {
LOG("ok " << e.what());
} catch (...) {
LOG("all");
}
Un ejecutable que carga el zzz.so (usando ldopen). Llama a una función en zzz.so
Todas las excepciones lanzadas en zzz.so se capturan con éxito dentro de zzz.so y se descargan en mi archivo de registroHay otro aaa.so que se carga en otro binario. Que otro aaa.so está cargando mi zzz.so.Todas las mismas excepciones lanzadas en zzz.so conducen a la llamada std :: terminate ().¿Cómo es eso posible?
actualizar
Todavía no sé CÓMO es posible, pero Clang 3.3 (FreeBSD clang versión 3.3 (tags / RELEASE_33 / final 183502) 20130610) resolvió el problema.