2017-06-06 5 views
-1

私はgnu sparcツールチェーンを使用しています。私はsparc-ab-elf-gccとsparc-ab-linux-gccを持っています。 ( 'ab'はプロセッサ名です)。私はmallocとfree(このプログラムはlinux上で動作するはずです)をベアメタル(osなし)で使用するプログラムをコンパイルしたいと思います。ですから、sparc-ab-elf-gccを使ってコンパイルする必要があります。私はこの場合dlmallocを使用できると聞きました。 (stdlib-like library on bare metal environment? (memory management and hopefully pthread support)参照)、mallocとfreeを毎回実行する単純なテストプログラムのコンパイルエラーが表示されています。ベアメタル(elf)プログラムビルド用のdlmallocコンパイル中にエラーが発生しました

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

私のベアメタルシステムはSYS/mman.hは(私はエルフのツールチェーンライブラリでそれを検索する)ので、LACKS_SYS_MMAN_Hを定義した後、再び試してみました

[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 

dlmalloc.cを持っていません非常に長いプログラムです。 (私はmalloc.hとmalloc.cに分けた)以下は関数の作成エラーです。

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

誰かが私に光を与えてくれますか?

+0

これは、この質問に対して[mcve]を作成するのは簡単です。 – Stargateur

答えて

0

私はこのような場合のために再び答える

読むをdlmallocを使用することができます聞きました。特に注意してください: "...あなたはに対応できるはずです ..."。あなたは適応部分をしていません。

+0

はい、エラーが発生したとき、私は適応の過程にいました。思ったよりも、思ったよりも大きな仕事だと思った後、私はdlmallocを使用して別の方法でやり直しました。 (mallocを使用しない)。 –

+0

問題は、ツールチェーンと何か関係があるように思えましたが、私のシステムでツールチェーンを構築する際にもう一つ古い永続的な問題があります。だから私は思っていた手から抜け出すだろう。 –

関連する問題