Googletest stürzt immer ab nach sem_wait

Gast #6307767
Lesenswert?

Guten morgen,
wir habne ein Programm in einer VM (Debian) geschrieben. Dieses testen 
wir jetzt mit googletest. Hierbei stürzt es aber immer ab. Beim Crash 
springt der Debugger zu
0x7ffff6fb2fff    48 81 c4 88 00 00 00           add    $0x88,%rsp

was genau bedeutet denn $0x88 und %rsp?
1
...
2
    tid = get_taskID();
3

4
    taskDataHead = getTaskDataHead();
5
    taskData = getTaskFromThreadId(tid, taskDataHead);
6

7
    if(taskData != NULL)
8
    {
9
        sem_wait(&taskData->sem_elements.full);
10
        sem_wait(&taskData->sem_elements.lock);
11

12
        size_t triggeredByMailbox = isTaskTriggeredByMailbox(taskData);
13
...

es stürzt immer nach dem zweite Aufruf von sem_wait ab.
Auch wenn ich danach nochmal tid=get_taskID() aufrufen würde, würde es 
dort abstürzen.

Die Semaphoren arbeiten an für sich im normalen ablauf (zumindest ist es 
dort noch nie gecrasht). Außer jetzt bei den google-Tests.
Es gab bei der Initialisierung natürlich auch
1
        sem_init(&newNode->sem_elements.lock, 0, 1);
2
        sem_init(&newNode->sem_elements.full, 0, 0);

Woran könnte das liegen? Kommt google nicht mit semaphoren klar?
Gast #6307859
Lesenswert?

> was genau bedeutet denn $0x88 und %rsp?

"Addiere 0x88 zum Stackpointer"

Wenn der Stackpointer bei Benutzung normalerweise dekrementiert wird,
entspricht das etwa dem "Aufraeumen" eines Stackframes beim
Verlassen einer Funktion.
Gast #6307885
Lesenswert?

In solchen fällen lasse ich immer zuerst mal valgrind und asan drüber 
laufen (aber nicht beide zusammen, die vertragen sich nicht). Wenn man 
glück hat, und da irgend was überschrieben wurde, finden die dann 
manchmal die eigentliche Problemstelle. Kompiliere es auch mal mit 
-fstack-protector-all eingeschalten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren