TacOS-team / tacos

Système d'exploitation / Operating System
GNU General Public License v3.0
9 stars 4 forks source link

Affectation de structure peut faire planter sous bochs #143

Closed MaximeCheramy closed 9 years ago

MaximeCheramy commented 12 years ago

Si la structure à copier est trop grosse, au lieu de faire plein de movl, il va utiliser un rep ce qui fait planter Bochs...

#include <stdio.h>
#include <string.h>

struct toto {
    int c[17];
};

int main() {
struct toto a;
struct toto b;

b = a;
//memcpy(&b, &a, sizeof(a));

return 0;
}
MaximeCheramy commented 12 years ago

Visiblement, le DF dans EFLAG est bien positionné et les adresses de a et b semblent bien être alignées 32bits.

Cela dit, même si ce n'est pas l'origine du bug, il faudrait peut être vérifier cette histoire d'alignement de la pile et rajouter une instruction asm pour fixer le DF là où ça pourrait être utile.

NicolasFloquet commented 10 years ago

Ce bug a 2ans, faudrait voir si il est toujours d'actualité

MaximeCheramy commented 10 years ago

Oui, il est toujours d'actualité. Le bug concerne Bochs, VirtualBox et KVM. C'est pour le moment contourné en remplaçant systématiquement par des memcpy (voir l'un des derniers commits)

MaximeCheramy commented 10 years ago

Et dans le même genre :

Ceci crash avec Bochs :

struct tm t = {
 .tm_sec = seconds,
 .tm_min = minutes,
 .tm_hour = hours;
 .tm_mday = date->day,
 .tm_mon = date->month - 1,
 .tm_year = date->year + 80,
};

Alors que :

struct tm t1;
t1.tm_sec = seconds;
t1.tm_min = minutes;
t1.tm_hour = hours;
t1.tm_mday = date->day;
t1.tm_mon = date->month - 1;
t1.tm_year = date->year + 80;

marche.