Ich versuche, einige benutzerdefinierte Code zu unserer internen libc im Zusammenhang mit Atexit Behandlung hinzuzufügen.gcc Symbol Auflösung Shadowing
In unserer libc definieren wir dies, weil wir auf benutzerdefinierte CRT-Dateien verlinken und nicht GCCs verwenden, die dies definieren.
void *__dso_handle __attribute__((__visibility__("hidden"),__weak__)) = &__dso_handle;
GCC fügt auch diese zu Binärdateien, wenn sie verbinden.
In der libc ist die Funktion atexit die
int atexit(void (*func)(void))
{
return __cxa_atexit((void (*)(void*))func, NULL, __dso_handle);
}
Das Problem ist, ich bin vor nur ruft, dass der verwendete _dso_handle Wert die lokale eines von libc ist, wenn ich es dynamisch die Abruf- machen möchte eine von dem Modul, das atexit() zur Laufzeit aufruft, so dass die richtige dso mit der atexit-Funktion registriert wird.
Ich überprüfte Attribute und ich fand nichts, das dort helfen könnte.
Beachten Sie, dass atexit im Gegensatz zu glibc in der dynamischen Version von libc beibehalten wird, um die Abwärtskompatibilität mit älteren Binärdateien zu erhalten.