2017-06-06 7 views
-1

Ich benutze Gnu Sparc Tool-Kette. Ich habe sparc-ab-elf-gcc und sparc-ab-linux-gcc. ('ab' ist der Name des Prozessors). Ich möchte ein Programm kompilieren, das malloc und free (dieses Programm soll unter Linux laufen) auf baremetal (ohne os) erstellt. Also sollte ich es mit sparc-ab-elf-gcc kompilieren. Ich habe gehört, dass ich dlmalloc für diesen Fall verwenden kann. (siehe stdlib-like library on bare metal environment? (memory management and hopefully pthread support)), aber ich sehe einen Kompilierfehler für ein einfaches Testprogramm, das nur einmal malloc und einmal frei gibt.Fehler während dlmalloc Kompilierung für Bare-Metal (Elf) Programm Build

// test malloc, realloc and free 
#include <aldebaran.h> 
#include <malloc.h> 


int main() 
{ 
int i; 

ab_printf("%s\n",CKIM_XX); 
char *buff = dlmalloc(100); 
for(i = 0; i < 100; i++) { 
    buff[i] = (char) i; 
} 
ab_printf("buff = %x\n'"); 
for(i=0; i<100; i++) { 
    ab_printf("%d ", buff[i]); 
} 
ab_printf("\n"); 
dlfree(buff); 
return 0; 
} 


[email protected]:~/prj2/abts/yolo-bare/darknet] make test3 
sparc-ab-elf-gcc -c -I./src -I../include -I/opt/abde/sparc-ab-elf/include -DALDEBARAN_FPGA -DABC_CT -O3 -ffast-math -fcommon -msoft-float -mcpu=v8 -Wa,-xarch=v8plusb -Wall -Wfatal-errors ./src/malloc.c -o obj/malloc.o 
./src/malloc.c:571:40: fatal error: sys/mman.h: No such file or directory 
compilation terminated. 
make: *** [obj/malloc.o] Error 1 

My Bare-Metal-System nicht sys/mman.h (ich es auf der elf-Toolchain Bibliothek gesucht), so versuchte es noch einmal nach LACKS_SYS_MMAN_H Definition und bekam

[email protected]:~/prj2/abts/yolo-bare/darknet] make test3 
sparc-ab-elf-gcc -c -I./src -I../include -I/opt/abde/sparc-ab-elf/include -DALDEBARAN_FPGA -DABC_CT -O3 -ffast-math -fcommon -msoft-float -mcpu=v8 -Wa,-xarch=v8plusb -Wall -Wfatal-errors -DLACKS_SYS_MMAN_H ./src/test3.c -o obj/test3.o 
sparc-ab-elf-gcc -c -I./src -I../include -I/opt/abde/sparc-ab-elf/include -DALDEBARAN_FPGA -DABC_CT -O3 -ffast-math -fcommon -msoft-float -mcpu=v8 -Wa,-xarch=v8plusb -Wall -Wfatal-errors -DLACKS_SYS_MMAN_H ./src/malloc.c -o obj/malloc.o 
./src/malloc.c: In function 'mmap_alloc': 
./src/malloc.c:2924:5: warning: implicit declaration of function 'mmap' [-Wimplicit-function-declaration] 
./src/malloc.c:2924:24: error: 'PROT_READ' undeclared (first use in this function) 
compilation terminated due to -Wfatal-errors. 
make: *** [obj/malloc.o] Error 1 

Die dlmalloc.c ist ein sehr langes Programm. (I teilte es in malloc.h und malloc.c) Im Folgenden ist die Funktion machen Fehler ..

/* Malloc using mmap */ 
static void* mmap_alloc(mstate m, size_t nb) { 
    size_t mmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); 
    if (m->footprint_limit != 0) { 
    size_t fp = m->footprint + mmsize; 
    if (fp <= m->footprint || fp > m->footprint_limit) 
     return 0; 
    } 
    if (mmsize > nb) {  /* Check for wrap around 0 */ 
    char* mm = (char*)(CALL_DIRECT_MMAP(mmsize)); <=== line causing error. 
    if (mm != CMFAIL) { 
     size_t offset = align_offset(chunk2mem(mm)); 
     size_t psize = mmsize - offset - MMAP_FOOT_PAD; 
     mchunkptr p = (mchunkptr)(mm + offset); 
     p->prev_foot = offset; 
     p->head = psize; 
     mark_inuse_foot(m, p, psize); 
     chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; 
     chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; 

     if (m->least_addr == 0 || mm < m->least_addr) 
     m->least_addr = mm; 
     if ((m->footprint += mmsize) > m->max_footprint) 
     m->max_footprint = m->footprint; 
     assert(is_aligned(chunk2mem(p))); 
     check_mmapped_chunk(m, p); 
     return chunk2mem(p); 
    } 
    } 
    return 0; 
} 

kann mir jemand gibt ein Licht?

+0

Dies ist einfach eine [mcve] für diese Frage zu machen. – Stargateur

Antwort

0

ich hörte ich für diesen Fall verwenden dlmalloc kann

lesen, die wieder beantworten. Beachten Sie insbesondere: "... Sie sollten adapt ...". Sie haben den Anpassungsteil nicht gemacht.

+0

Ja, ich war gerade dabei, mich anzupassen, als ich auf den Fehler stieß. Nach einigen Gedanken, nachdem ich entschieden habe, dass es eine größere Arbeit ist als ich dachte, wandte ich mich von der Verwendung von dlmalloc ab und tat es auf eine andere Weise. (nicht mit malloc). –

+0

Das Problem war, dass es etwas mit der Toolchain zu tun hat, und ich habe noch ein weiteres persistiges Problem beim Aufbau der Toolchain in meinem System. also werde ich aus meiner Hand kommen, dachte ich. –

Verwandte Themen