Utilisation de Visual Studio 2015 sur un projet pilote de noyau. J'ai remarqué que ce genre de chose se passe;VS2015 Les pointeurs ne cessent de changer, l'alignement?
dprintf("os %p; os_lock %p\n", os, &os->os_lock);
mutex_init(&os->os_lock);
mutex_enter(&os->os_lock);
void mutex_init(kmutex_t *mp) {
dprintf("%s is %p\n", __func__, mp);
...
void mutex_enter(kmutex_t *mp) {
dprintf("%s is %p\n", __func__, mp);
...
os 0xffffa08b29041ac0; os_lock 0xffffa08b29041df8
mutex_init is 0xffffa08b29041df8
mutex_enter is 0xffffa08b29041df0 <---
Alors que s'est-il passé là? Bien sûr, c'est une chose d'alignement que VS2015 est en train de faire pour une raison quelconque, mais c'est très déroutant puisque le premier appel est correct, alors il décide de le rattraper dans le 2ème. Cela semble juste une très mauvaise chose. La structure est faite avec l'alignement dans l'esprit, et os_lock
est + 0x338 po.
Je peux jeter #pragma pack(8)
autour de cette structure pour l'arrêter, mais il semble arriver dans un certain nombre d'autres endroits, et il doit s'arrêter :) Je ne peux pas imaginer que VS2015 soit aussi aléatoire, donc ça doit être quelque chose que je réussis à faire.