嵌入式Linux-GNU编译工具链
主要记录Linux源码及编译体系中与GNU编译工具链相关的知识。
冉冉云
嵌入式软件开发、linux爱好者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
GCC内链汇编——特定于riscv的constraints
constraints含义f浮点寄存器I12bit有符号立即数J整数0KA 5-bit unsigned immediate for CSR access instructions.A一个存放在通用寄存器中的地址SA constraint that matches an absolute symbolic address.更多特定于体系结构的constraints可见17.8.5 Constraints for Particular Mac...原创 2021-09-18 20:27:44 · 348 阅读 · 0 评论 -
GCC的-Wl,--wrap编译选项
GCC的--wrap是一个链接器选项,假如我们要编译的源文件为main.c,编译命令如下:gcc main.c -Wl,--wrap=func -o main.elf有以下效果:如果符号func没有(在当前源文件)定义,就链接到__wrap_func如果符号__real_func没有(在当前源文件)定义,就链接到func举例如下:/* a.c */#include <stdio.h>extern int foo();extern int __real_foo();in原创 2021-08-23 23:29:47 · 5075 阅读 · 5 评论 -
GNU链接器的LMA和VMA
LMA:加载存储地址,指的是加载到存储器的地址,即加载到哪里VMA:虚拟存储地址,也就是链接地址,指示代码和数据运行的时候应该位于何处对于主机程序通常LMA是等于VMA的,比如编译PC上写的程序,链接到哪个地址就直接在加载时申请相应的虚拟地址,在实际访问时申请物理地址并和之前申请的虚拟地址建立映射关系。但在嵌入式系统中,两者通常不等,比如芯片启动时的启动程序一般存放在ROM/支持XIP的flash中(RAM易失,存不住),启动程序中的数据(.data、.bss等)一开始也是加载到ROM中的,但RO.原创 2021-07-23 09:01:52 · 942 阅读 · 0 评论 -
GCC的attribute——format
1 解释format是GCC提供的众多attribute之一,这个attribute的作用是告知编译器检查传给相应函数的参数中的格式字符串:/* 这是用在声明的情况,用在定义也可以 *//* 一般全局函数用在声明,这样包含相应头文件并使用该全局函数的源码就会被编译器做相应检查 *//* 而局部函数就在本文件使用,无需声明,那么这个attribute可以直接用在定义 */extern in...原创 2020-04-04 22:54:35 · 1314 阅读 · 0 评论 -
GCC的头文件和库文件的搜索路径
见linux的环境变量总结的1.2节~1.4节。原创 2020-11-09 21:32:24 · 374 阅读 · 0 评论 -
gcc的编译选项总结
目录前言1 常用的编译选项2 不常用的编译选项2.1 -x3 ARM架构专有的编译选项前言本文用于记录我在学习和工作中遇到的各种GCC选项,虽然这些选项可以在GNU的手册上查到,不过这里做个总结,可以避免每次都去查手册,算是一个备忘吧。本文的内容会不断更新扩充。1 常用的编译选项选项作用-o指定输出文件名称-c只预处理、编译、汇编,但不链接2 不常用的编译选项2.1 -xlinker input file原创 2020-07-03 14:20:13 · 7586 阅读 · 0 评论 -
GNU汇编器——.syntax
目录1 从一个汇编错误说起2 .syntax的用法参考文献1 从一个汇编错误说起从u-boot移植了一些代码,在编译时GNU汇编器报告了一些错误:Error: bad instruction `movsne r3,r3,lsr#4'Error: bad instruction `subsge r2,r2,#4'Error: bad instruction `movsne r2,r2,lsr#4'Error: bad instruction `subsge r2,r2,#4'错误本身并不难懂,原创 2020-07-02 15:38:22 · 3741 阅读 · 1 评论 -
GNU汇编器——.irp和.macro
目录1 从一个汇编错误开始说起2 GNU汇编器的.irp3 GNU汇编器的.macro4 当.irp遇到.macro参考文献1 从一个汇编错误开始说起最近从u-boot中摘了一段代码出来(源于kernel),这段代码作用是用软件(汇编)实现除法和取模运算,因为有些老的CPU是没有相关的硬件指令的。在编译的时候,汇编器报了一些错误,这些错误都是同一类型,这里仅列出其中的一个:Error: bad instruction 'reteq lr'。错误本身还是比较好理解的,arm32是没有ret指令的。但让人原创 2020-07-02 11:26:44 · 3604 阅读 · 0 评论
分享