/i/Yazılım

Umuyoruz ki geleceğin yazılımcıları bu altinciden çıkacak!
    başlık yok! burası bom boş!
  1. 1.
    +3 -1
    Merhaba panpalarım sözlükte C ve Assembly ile uğraşan bir sürü kişi var mutlaka sorunuma çözüm bulan biri olacaktır:

    Çok garip bir hata yaşıyorum ve iki gündür sürekli debug etsem de çözüm bulamadım.

    işletim sistemimde higher half bellek modeli kullanırken memalign() ile 128 byte ve üzeri bir hizada allokasyon yaparsam ve bir görevi sonlandırıp verisini free(gorev) ile temizlersem, sıradaki göreve geçerken alakasız bir adrese erişim sonucu işlemci page fault veriyor.

    işinize yarar mı bilmem ama işletim sistemimin hata ekranından registerlar şöyle:





    işin garip yanı görevlerin stackları 64 byte ve üzeri hizada olursa bu sorun oluşmuyor. Fakat C Calling Convention'a göre 16 byte hiza yeterli. Yine aynı şekilde olan görevlerin verisini free() ile temizlemezsem veya higher half paging kullanmazsam da bu sorun oluşmuyor.

    Bir tür stack bozulması olduğu belli ama buna ne sebep oluyor? Çoklu görev sistemim mi, higher half paging mi yoksa Newlib mi bir türlü anlayamadım...

    Kodlara gelirsek,

    Şu görev değiştirme kodu:
    https://hastebin.com/tiverisuqo.pl

    Şu higher half kodu:
    https://hastebin.com/ujumidakad.css

    Şu da linker scripti:
    https://hastebin.com/libuvopize.hs

    Acil yardım edin panpalarım şimdiden teşekkürler.
    ···
   tümünü göster