farukyld / bringup-bench

Bringup-Bench is a collection of standalone minimal library and system dependence benchmarks useful for bringing up newly designed CPUs, accelerators, compilers and operating systems. You probably don't need Bringup-Bench, but if you do, you probably need it badly!
Other
0 stars 0 forks source link

`libmin_sbrk`'in 8 byte hizalı olmayan pointer döndürmesi #11

Open farukyld opened 3 weeks ago

farukyld commented 3 weeks ago

iki mümkün çözüm var:

1 - hizasız olarak hesaplanan pointer'ı hizalayarak, her sbrk çağrısında n < 8 byte alanı israf etmek. 2 - daha zorlama bir çözüm olmakla birlikte: hizasız döndürülen pointer'ı malloc ve free içinde göz önünde bulundurarak gösterdiği alana parçalı load/store yapmak.

omerguzelelectronicguy commented 3 weeks ago

normalde nasıl yapılıyor? bu arada bizde hizasız durumda exception veriyor ama bu işine yarar mı?

farukyld commented 2 weeks ago

normalde nasıl yapılıyor?

normalde sbrk ile ilgili bir hizalama kısıtı yok. ama malloc 8 byte hizalı döndürüyor.

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
        void *p;
        p = malloc(1);
        printf("1 byte mallocd: %p\n",p);
        p = malloc(1);
        printf("1 more byte mallocd: %p\n",p);
        int* q = (int*)(((char*)p)+1);
        printf("p + 1 casted to int pointer: %p\n",q);
        int a = 1;
        *q=a;
        p = sbrk(0);
        printf("Initial brk: %p\n", p);
        p = sbrk(1); // Increase the brk (returns OLD brk!)
        p = sbrk(0); // Get the new brk
        printf("New brk: %p\n", p);

        return 0;
}

koduyla denedğimide çıktısı:

> gcc main.c ; ./a.out
1 byte mallocd: 0x556830a732a0
1 more byte mallocd: 0x556830a736d0
p + 1 casted to int pointer: 0x556830a736d1
Initial brk: 0x556830a94000
New brk: 0x556830a94001

Hizasız bir poniter'ı int poniter'ına cast edince hizalama yapıyor mu diye de baktım. yapmıyormuş.

14b7dc617b253fd7408cae3c32249f6c8c190d88'te sbrk 8 byte hizalı döndürecek diye değiştirmiştim. geçici bir çözüm sağlayacak, belki daha sonra hizalama görevini malloc'a alırım, standard kütüphane'de (malloc ve sbrk'in gerçeklendiği libc) olduğu gibi.

bu arada bizde hizasız durumda exception veriyor ama bu işine yarar mı?

bence evet. çünkü kodun temiz olduğundan emin olmamızı sağlar. hem spike'ta da yanlış hatırlamıyorsam hata veriyordu