当前位置:   article > 正文

riscv ELF bss段解析_riscv malloc

riscv malloc

在调试risc-v-bm的时候,实现malloc函数后,risc-v-bm出现错误。原因是在exec中,没有实现对bss段的初始化。

怎么找到这个问题的呢?malloc代码

  1. #ifdef UMALLOCK_TEST
  2. void *_malloc(size_t size)
  3. #else
  4. void *malloc(size_t size)
  5. #endif
  6. {
  7. block_metadata_t *ptr = _block_head;
  8. while(ptr){
  9. /*查找一个和想分配内存size一样大的block
  10. 如果没有一样大的block就分配一个
  11. */
  12. if(ptr->size >= size){
  13. remove_from_freelist(ptr);
  14. if(ptr->size == size){
  15. return BLOCK_MEM(ptr);
  16. ......

_block_head变量是全局定义为0的。但是第一次调用malloc时,ptr应该是0,但是却不是。

编译器将其放在了bss段。

  1. $ riscv64-linux-gnu-readelf -S ./user/_sh
  2. There are 17 section headers, starting at offset 0xcfd0:
  3. Section Headers:
  4. [Nr] Name Type Address Offset
  5. Size EntSize
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/319439
推荐阅读
相关标签
  

闽ICP备14008679号