在调试risc-v-bm的时候,实现malloc函数后,risc-v-bm出现错误。原因是在exec中,没有实现对bss段的初始化。
怎么找到这个问题的呢?malloc代码
#ifdef UMALLOCK_TEST
void *_malloc(size_t size)
#else
void *malloc(size_t size)
#endif
{
block_metadata_t *ptr = _block_head;
while(ptr){
/*查找一个和想分配内存size一样大的block
如果没有一样大的block就分配一个
*/
if(ptr->size >= size){
remove_from_freelist(ptr);
if(ptr->size == size){
return BLOCK_MEM(ptr);
......
_block_head变量是全局定义为0的。但是第一次调用malloc时,ptr应该是0,但是却不是。
编译器将其放在了bss段。
$ riscv64-linux-