2017-06-06 6 views
-1

J'utilise la chaîne d'outils gnu sparc. J'ai sparc-ab-elf-gcc et sparc-ab-linux-gcc. ('ab' est le nom du processeur). Je veux compiler un programme qui utilise malloc et free (ce programme est supposé être exécuté sur linux) sur baremetal (sans os). Je devrais donc le compiler en utilisant sparc-ab-elf-gcc. J'ai entendu que je peux utiliser dlmalloc pour ce cas. (voir stdlib-like library on bare metal environment? (memory management and hopefully pthread support)) mais je vois une erreur de compilation pour un programme de test simple qui ne fait que malloc et gratuit une fois à chaque fois.erreur lors de la compilation de dlmalloc pour la construction du programme bare-metal (elf)

// 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 

Mon système métal nu ne pas sys/mman.h (je l'ai cherché sur la bibliothèque toolchain elfe) alors essayé à nouveau après la définition LACKS_SYS_MMAN_H et se

[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 

Le dlmalloc.c est un programme très long. (Je divisaient en malloc.h et malloc.c) Ci-dessous la fonction d'erreur susceptible ..

/* 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; 
} 

quelqu'un peut me donner une lumière?

+0

Il est facile de faire un [mcve] pour cette question. – Stargateur

Répondre

0

J'entendu que je peux utiliser dlmalloc pour ce cas

Lire que répondre à nouveau. Notez en particulier: "... vous devriez pouvoir adapter ...". Vous n'avez pas fait la partie d'adaptation.

+0

Oui, j'étais en train d'adapter quand j'ai rencontré l'erreur. Après quelques réflexions, ayant décidé que cela semblait être un travail plus important que ce que je pensais, je me suis détourné de l'utilisation de dlmalloc et je l'ai fait d'une autre manière. (n'utilisant pas malloc). –

+0

Le problème était qu'il semble avoir quelque chose à faire avec la chaîne d'outils, et j'ai un autre vieux problème persistig dans la construction de la chaîne d'outils dans mon système. alors je vais sortir de ma main, je pensais. –