Ich versuche, ein Multithread-Programm unter valgrind arbeiten zu lassen. Es verwendet die sigaltstack()
Funktion, um einen alternativen Stapel für einen Signalhandler zu konfigurieren. Wenn es nicht unter valgrind läuft, läuft es perfekt. Wenn Sie Valgrind verwenden, schlägt der folgende Code jedoch mit "Operation nicht zulässig" fehl.Warum versagt sigaltstack() mit "Operation not allowed" nur unter valgrind?
char *sp = X;
size_t stack_size = Y;
...
ss.ss_sp = sp;
ss.ss_size = stack_size;
ss.ss_flags = 0;
if (sigaltstack(&ss, &oss) < 0)
{
DEBUGF("%s()2: %s\n", __func__, strerror(errno));
return false;
}
Dieser Code ist Teil der Rockbox-Simulationsfunktion. Wenn Sie möchten, können Sie den Fehler reproduzieren, indem Sie den neuesten Rockbox-Baum klonen, einen Simulator erstellen und ihn unter valgrind ohne andere Optionen ausführen.
Valgrind soll ordnungsgemäß mit sigaltstack arbeiten. Es gibt einen (sehr minimalen) Test, der sigaltstack syscall aufruft. Bitte erstellen Sie ein minimales Beispiel, das nicht funktioniert, und melden Sie einen Fehler auf https://bugs.kde.org/enter_bug.cgi?product=valgrind Vielen Dank – phd