赞
踩
在调试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-gnu-readelf -S ./user/_sh
- There are 17 section headers, starting at offset 0xcfd0:
-
- Section Headers:
- [Nr] Name Type Address Offset
- Size EntSize
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。