.section 后面跟着的“ax” 和%progbits是什么意思? .section .flashtext.Reset_Handler,"ax",%progbits

本文解析了ELF文件中段信息的含义,重点介绍了Reset_Handler段的属性,包括其权限设置为可分配和可执行,以及progbits类型。通过使用readelf工具查看ELF文件的具体段信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.section .flashtext.Reset_Handler,"ax",%progbits

ax表示权限,ax是 allocation  execute的缩写,表示该节区可分配并且可执行

progbits是type

 

通过readelf -S xxx.elf能够看到段的信息

 

/* * CK803S 启动代码 * 平头哥CK803S芯片启动汇编代码 */ .syntax unified .cpu ck803s .arch ck803s .section .vectors, "a", %progbits .type g_vectors, %object .size g_vectors, .-g_vectors g_vectors: .long __stack /* 0: 栈顶指针 */ .long Reset_Handler /* 1: 复位处理函数 */ .long Default_Handler /* 2: NMI处理函数 */ .long Default_Handler /* 3: 硬错误处理函数 */ .long Default_Handler /* 4: 保留 */ .long Default_Handler /* 5: 保留 */ .long Default_Handler /* 6: 保留 */ .long Default_Handler /* 7: 保留 */ .long Default_Handler /* 8: 保留 */ .long Default_Handler /* 9: 保留 */ .long Default_Handler /* 10: 保留 */ .long Default_Handler /* 11: SVC处理函数 */ .long Default_Handler /* 12: 保留 */ .long Default_Handler /* 13: 保留 */ .long xPortPendSVHandler /* 14: PendSV处理函数 (FreeRTOS) */ .long xPortSysTickHandler /* 15: SysTick处理函数 (FreeRTOS) */ /* 外部中断向量 */ .long Default_Handler /* 16: 外部中断0 */ .long Default_Handler /* 17: 外部中断1 */ .long Default_Handler /* 18: 外部中断2 */ .long Default_Handler /* 19: 外部中断3 */ .long Default_Handler /* 20: 外部中断4 */ .long Default_Handler /* 21: 外部中断5 */ .long Default_Handler /* 22: 外部中断6 */ .long Default_Handler /* 23: 外部中断7 */ .long Default_Handler /* 24: 外部中断8 */ .long Default_Handler /* 25: 外部中断9 */ .long Default_Handler /* 26: 外部中断10 */ .long Default_Handler /* 27: 外部中断11 */ .long Default_Handler /* 28: 外部中断12 */ .long Default_Handler /* 29: 外部中断13 */ .long Default_Handler /* 30: 外部中断14 */ .long Default_Handler /* 31: 外部中断15 */ .text .thumb /* 复位处理函数 */ .type Reset_Handler, %function .global Reset_Handler Reset_Handler: /* 设置栈指针 */ lrw r0, __stack mov sp, r0 /* 禁用中断 */ psrclr ie /* 初始化系统 */ bl SystemInit /* 复制数据段到RAM */ lrw r0, _data_load_start /* 源地址 */ lrw r1, _data_start /* 目标地址 */ lrw r2, _data_end /* 结束地址 */ cmphs r1, r2 bt 2f 1: ldw r3, (r0) stw r3, (r1) addi r0, 4 addi r1, 4 cmphs r1, r2 bf 1b 2: /* 清零BSS段 */ lrw r0, _bss_start lrw r1, _bss_end movi r2, 0 cmphs r0, r1 bt 4f 3: stw r2, (r0) addi r0, 4 cmphs r0, r1 bf 3b 4: /* 调用C构造函数 */ bl __libc_init_array /* 跳转到main函数 */ bl main /* 如果main返回,进入死循环 */ 5: br 5b .size Reset_Handler, . - Reset_Handler /* 默认中断处理函数 */ .type Default_Handler, %function .weak Default_Handler Default_Handler: br Default_Handler .size Default_Handler, . - Default_Handler /* 系统初始化函数 */ .type SystemInit, %function .weak SystemInit SystemInit: /* 在这里添加芯片特定的初始化代码 */ /* 例如:时钟配置、PLL设置等 */ rts .size SystemInit, . - SystemInit /* C库初始化函数 */ .type __libc_init_array, %function .weak __libc_init_array __libc_init_array: /* 调用全局构造函数 */ lrw r0, __ctors_start__ lrw r1, __ctors_end__ cmphs r0, r1 bt 2f 1: ldw r2, (r0) jsr r2 addi r0, 4 cmphs r0, r1 bf 1b 2: rts .size __libc_init_array, . - __libc_init_array /* 弱符号别名 */ .weak NMI_Handler .thumb_set NMI_Handler, Default_Handler .weak HardFault_Handler .thumb_set HardFault_Handler, Default_Handler .weak SVC_Handler .thumb_set SVC_Handler, Default_Handler .weak PendSV_Handler .thumb_set PendSV_Handler, xPortPendSVHandler .weak SysTick_Handler .thumb_set SysTick_Handler, xPortSysTickHandler /* 外部中断弱符号别名 */ .weak IRQ0_Handler .thumb_set IRQ0_Handler, Default_Handler .weak IRQ1_Handler .thumb_set IRQ1_Handler, Default_Handler .weak IRQ2_Handler .thumb_set IRQ2_Handler, Default_Handler .weak IRQ3_Handler .thumb_set IRQ3_Handler, Default_Handler .weak IRQ4_Handler .thumb_set IRQ4_Handler, Default_Handler .weak IRQ5_Handler .thumb_set IRQ5_Handler, Default_Handler .weak IRQ6_Handler .thumb_set IRQ6_Handler, Default_Handler .weak IRQ7_Handler .thumb_set IRQ7_Handler, Default_Handler .weak IRQ8_Handler .thumb_set IRQ8_Handler, Default_Handler .weak IRQ9_Handler .thumb_set IRQ9_Handler, Default_Handler .weak IRQ10_Handler .thumb_set IRQ10_Handler, Default_Handler .weak IRQ11_Handler .thumb_set IRQ11_Handler, Default_Handler .weak IRQ12_Handler .thumb_set IRQ12_Handler, Default_Handler .weak IRQ13_Handler .thumb_set IRQ13_Handler, Default_Handler .weak IRQ14_Handler .thumb_set IRQ14_Handler, Default_Handler .weak IRQ15_Handler .thumb_set IRQ15_Handler, Default_Handler .end
07-02
/********************************** (C) COPYRIGHT ******************************* * File Name : startup_CH59x.s * Author : WCH * Version : V1.0.0 * Date : 2021/02/25 * Description : ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ .section .init,"ax",@progbits .global _start .align 1 _start: j handle_reset .section .vector,"ax",@progbits .align 1 _vector_base: .option norvc; .word 0 .word 0 .word NMI_Handler /* NMI Handler */ .word HardFault_Handler /* Hard Fault Handler */ .word 0xF5F9BDA9 .word Ecall_M_Mode_Handler /* 5 */ .word 0 .word 0 .word Ecall_U_Mode_Handler /* 8 */ .word Break_Point_Handler /* 9 */ .word 0 .word 0 .word SysTick_Handler /* SysTick Handler */ .word 0 .word SW_Handler /* SW Handler */ .word 0 /* External Interrupts */ .word TMR0_IRQHandler /* 0: TMR0 */ .word GPIOA_IRQHandler /* GPIOA */ .word GPIOB_IRQHandler /* GPIOB */ .word SPI0_IRQHandler /* SPI0 */ .word BB_IRQHandler /* BLEB */ .word LLE_IRQHandler /* BLEL */ .word USB_IRQHandler /* USB */ .word 0 .word TMR1_IRQHandler /* TMR1 */ .word TMR2_IRQHandler /* TMR2 */ .word UART0_IRQHandler /* UART0 */ .word UART1_IRQHandler /* UART1 */ .word RTC_IRQHandler /* RTC */ .word ADC_IRQHandler /* ADC */ .word I2C_IRQHandler /* I2C */ .word PWMX_IRQHandler /* PWMX */ .word TMR3_IRQHandler /* TMR3 */ .word UART2_IRQHandler /* UART2 */ .word UART3_IRQHandler /* UART3 */ .word WDOG_BAT_IRQHandler /* WDOG_BAT */ .option rvc; .section .vector_handler, "ax", @progbits .weak NMI_Handler .weak HardFault_Handler .weak Ecall_M_Mode_Handler .weak Ecall_U_Mode_Handler .weak Break_Point_Handler .weak SysTick_Handler .weak SW_Handler .weak TMR0_IRQHandler .weak GPIOA_IRQHandler .weak GPIOB_IRQHandler .weak SPI0_IRQHandler .weak BB_IRQHandler .weak LLE_IRQHandler .weak USB_IRQHandler .weak TMR1_IRQHandler .weak TMR2_IRQHandler .weak UART0_IRQHandler .weak UART1_IRQHandler .weak RTC_IRQHandler .weak ADC_IRQHandler .weak I2C_IRQHandler .weak PWMX_IRQHandler .weak TMR3_IRQHandler .weak UART2_IRQHandler .weak UART3_IRQHandler .weak WDOG_BAT_IRQHandler NMI_Handler: 1: j 1b HardFault_Handler: 1: j 1b Ecall_M_Mode_Handler: 1: j 1b Ecall_U_Mode_Handler: 1: j 1b Break_Point_Handler: 1: j 1b SysTick_Handler: 1: j 1b SW_Handler: 1: j 1b TMR0_IRQHandler: 1: j 1b GPIOA_IRQHandler: 1: j 1b GPIOB_IRQHandler: 1: j 1b SPI0_IRQHandler: 1: j 1b BB_IRQHandler: 1: j 1b LLE_IRQHandler: 1: j 1b USB_IRQHandler: 1: j 1b TMR1_IRQHandler: 1: j 1b TMR2_IRQHandler: 1: j 1b UART0_IRQHandler: 1: j 1b UART1_IRQHandler: 1: j 1b RTC_IRQHandler: 1: j 1b ADC_IRQHandler: 1: j 1b I2C_IRQHandler: 1: j 1b PWMX_IRQHandler: 1: j 1b TMR3_IRQHandler: 1: j 1b UART2_IRQHandler: 1: j 1b UART3_IRQHandler: 1: j 1b WDOG_BAT_IRQHandler: 1: j 1b .section .handle_reset,"ax",@progbits .weak handle_reset .align 1 handle_reset: .option push .option norelax la gp, __global_pointer$ .option pop 1: la sp, _eusrstack /* Load highcode code section from flash to RAM */ 2: la a0, _highcode_lma la a1, _highcode_vma_start la a2, _highcode_vma_end bgeu a1, a2, 2f 1: lw t0, (a0) sw t0, (a1) addi a0, a0, 4 addi a1, a1, 4 bltu a1, a2, 1b /* Load data section from flash to RAM */ 2: la a0, _data_lma la a1, _data_vma la a2, _edata bgeu a1, a2, 2f 1: lw t0, (a0) sw t0, (a1) addi a0, a0, 4 addi a1, a1, 4 bltu a1, a2, 1b 2: /* clear bss section */ la a0, _sbss la a1, _ebss bgeu a0, a1, 2f 1: sw zero, (a0) addi a0, a0, 4 bltu a0, a1, 1b 2: /* 流水线控制位 & 动态预测控制位 */ li t0, 0x1f csrw 0xbc0, t0 /* 打开嵌套中断、硬件压栈功能 */ li t0, 0x3 csrw 0x804, t0 li t0, 0x1888 csrw mstatus, t0 la t0, _vector_base /* 配置向量表模式为绝对地址模式 */ ori t0, t0, 3 csrw mtvec, t0 la t0, main csrw mepc, t0 mret 这个代码所示沁恒的单片机的启动文件,帮我注释一下
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值