RISC-V技术论坛
直播中

胖子的逆袭

13年用户 1184经验值
私信 关注
[经验]

GD32VF103芯片启动时_init()函数的调用在哪里?

我发现芯片启动时并没有在源码中调用_init函数,却在反汇编文件中发现它被调用了,这是如何实现的呢。下面是我的分析过程:
1、在start.S文件中有这样的语句
        /* Call global constructors */        la a0, __libc_fini_array        call atexit        call __libc_init_array2、在lds文件中并没有这两个标签的链接地址
3、在_init()函数实现的地方并没有为它打上链接到这个段(__libc_fini_array)的标签。
void _init(){        SystemInit();        //ECLIC init        eclic_init(ECLIC_NUM_INTERRUPTS);        eclic_mode_enable();        disable_mcycle_minstret();}4、在生成的反汇编文件中找到了这个标签并在这段代码中调用了_init函数
0800233c <__libc_init_array>: 800233c:        ff010113                  addi        sp,sp,-16 ..... 8002350:        6c440793                  addi        a5,s0,1732 # 80026c4 <__init_array_start> 8002354:        6c490913                  addi        s2,s2,1732 # 80026c4 <__init_array_start> .... 8002368:        02090063                  beqz        s2,8002388 <__libc_init_array+0x4c> 800236c:        6c440413                  addi        s0,s0,1732 8002370:        00000493                  li        s1,0 .... 8002384:        fe9918e3                  bne        s2,s1,8002374 <__libc_init_array+0x38> 8002388:        ad5fe0ef                  jal        ra,8000e5c <_init> 800238c:        08002437                  lui        s0,0x8002 8002390:        08002937                  lui        s2,0x8002 ... 80023a4:        02090063                  beqz        s2,80023c4 <__libc_init_array+0x88> 80023a8:        6c440413                  addi        s0,s0,1732 ... 80023d8:        00008067                  ret我想知道实际上_init函数是如何实现调用的,谢谢
                                                                                

更多回帖

发帖
×
20
完善资料,
赚取积分