gcc/gcc.c中的set_collect_gcc_options这里面有COLLECT_GCC_OPTIONS='-march=armv4t' '-mtune=arm920t

(gdb) p switches[0]

$15 = {part1 = 0x80792b1 "march=armv4t", args = 0x0, live_cond = 1,

validated = 1 '\001', ordering = 0 '\000'}

(gdb) p switches[1]

$16 = {part1 = 0x80792c1 "mtune=arm920t", args = 0x0, live_cond = 0,

validated = 1 '\001', ordering = 0 '\000'}

(gdb) p switches[2]

$17 = {part1 = 0x80792d1 "mfloat-abi=soft", args = 0x0, live_cond = 0,

validated = 1 '\001', ordering = 0 '\000'}

(gdb) p switches[3]

$18 = {part1 = 0x0, args = 0xf7fb3420, live_cond = 1768697683,

validated = 98 'b', ordering = 47 '/'}

(gdb) p n_switches

$19 = 3

switches的赋值 在do_self_spec和process_command

多次调用do_self_spec

Breakpoint 1, do_self_spec (

spec=0xffffd150 "%{!march=*:%{!mcpu=*:-mcpu=arm920t}}")

at ../../gcc-4.4.5/gcc/gcc.c:4614

4614      do_spec_2 (spec);

Breakpoint 1, do_self_spec (

spec=0xffffd150 "%{!march=*:%{!mcpu=*:-march=armv4t}}")

at ../../gcc-4.4.5/gcc/gcc.c:4614

4614      do_spec_2 (spec);

bt的结果为:

(gdb) bt

#0  do_self_spec (spec=0xffffd150 "%{!march=*:%{!mcpu=*:-mcpu=arm920t}}")

at ../../gcc-4.4.5/gcc/gcc.c:4614

#1  0x080523e2 in do_option_spec (name=,

spec=) at ../../gcc-4.4.5/gcc/gcc.c:4605

#2  0x0805349b in main (argc=2, argv=0xffffd334)

at ../../gcc-4.4.5/gcc/gcc.c:6376

现在我看来看看main函数是怎么调用do_option_spec的

Breakpoint 2, do_option_spec (name=0x805f57a "tune",

spec=0x8062370 "%{!mcpu=*:%{!mtune=*:-mtune=%(VALUE)}} ")

at ../../gcc-4.4.5/gcc/gcc.c:4572

4572      for (i = 0; i < ARRAY_SIZE (configure_default_options); i++)

(gdb) c

Continuing.

Breakpoint 1, do_self_spec (

spec=0xffffd150 "%{!mcpu=*:%{!mtune=*:-mtune=arm920t}} ")

at ../../gcc-4.4.5/gcc/gcc.c:4614

4614      do_spec_2 (spec);

看到转变了吧,我说调用gcc的 -dumpspecs找不到arm920t这样的关键字。。。

在do_option_spec中的configure_default_options

(gdb) p configure_default_options

$23 = {{name = 0x805f576 "cpu", value = 0x805fdf8 "arm920t"}, {

name = 0x805f571 "arch", value = 0x805fe00 "armv4t"}, {

name = 0x805f57a "tune", value = 0x805fdf8 "arm920t"}, {

name = 0x8066f0a "float", value = 0x8066fb1 "soft"}}

configure_default_option是哪来的呢

cat > configargs.h <

/* Generated automatically. */

static const char configuration_arguments[] = "$gcc_config_arguments_str";

static const char thread_model[] = "$thread_file";

static const struct {

const char *name, *value;

} configure_default_options[] = $configure_default_options;

EOF

specs文件要放在

gcc -print-libgcc-file-name这个文件所在的文件夹中。

现在,用Android里的编译器改下specs就可以编译在mini2440上跑的android了嘿嘿。

不过目前还不知道android调用哪个版本的编译器。。。

说到这还是不知道怎么编辑specs文件我们再来看看在main函数中是怎么调用do_option_spec的

Breakpoint 1, do_option_spec (name=0x805f571 "arch",

spec=0x8062320 "%{!march=*:%{!mcpu=*:-march=%(VALUE)}}")

at ../../gcc-4.4.5/gcc/gcc.c:4572

4572    ../../gcc-4.4.5/gcc/gcc.c: No such file or directory.

in ../../gcc-4.4.5/gcc/gcc.c

static void do_option_spec (const char *name, const char *spec)

在main函数中

for (i = 0; i < ARRAY_SIZE (option_default_specs); i++)

do_option_spec (option_default_specs[i].name,

option_default_specs[i].spec);

(gdb) p option_default_specs

$1 = {{name = 0x805f571 "arch",

spec = 0x8062320 "%{!march=*:%{!mcpu=*:-march=%(VALUE)}}"}, {

name = 0x805f576 "cpu",

spec = 0x8062348 "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}"}, {

name = 0x805f57a "tune",

spec = 0x8062370 "%{!mcpu=*:%{!mtune=*:-mtune=%(VALUE)}}"}, {

name = 0x8066f0a "float",

spec = 0x8062398 "%{!msoft-float:%{!mhard-float:%{!mfloat-abi=*:-mfloat-abi=%(VALUE)}}}"}, {name = 0x805f57f "fpu",

spec = 0x805f583 "%{!mfpu=*:-mfpu=%(VALUE)}"}, {name = 0x8065fd3 "abi",

spec = 0x805f59d "%{!mabi=*:-mabi=%(VALUE)}"}, {name = 0x805f5b7 "mode",

spec = 0x80623e0 "%{!marm:%{!mthumb:-m%(VALUE)}}"}}

static const struct default_spec

option_default_specs[] = { OPTION_DEFAULT_SPECS };

OPTION_DEFAULT_SPECS在gcc/config/arm/arm.h中定义

这么看来怎么改咧。猜测是不是存在有specs文件时,这些默认的就无效。

linux gcc march arch,Gcc的spec中arch什么的指定相关推荐

  1. linux gcc 静态编译,GCC 程序编译的静态链接和动态链接

    (给Linux爱好者加星标,提升Linux技能)转自:Mr_Bluyee 在链接阶段中,所有对应于源文件的 .o 文件.'-l' 选项指定的库文件.无法识别的文件名(包括指定的.o目标文件和.a库文件 ...

  2. 荔枝派 Nano 全志 F1C100s 编译运行 Linux ubuntu并升级gcc

    首先是荔枝派的官方文档,写的不是很细,应当说我们必须明确几点: 出厂时 SPI Flash 自带了一个 U-Boot+Linux Kernel(出厂的时候可能烧过了),可直接拿来用.如果希望自己烧固件 ...

  3. 以Linux系统上的gcc为例,解密C语言编译背后的全过程!

    在这个互联网时代,很多人都选择了计算机专业,而只要是计算机专业的小伙伴,可能都会学C语言,但是大家是否都清楚C语言编译的完整过程呢,今天我就带着大家一起来做个解密吧. C语言相对于汇编语言是一种高级语 ...

  4. linux 内核编译错误 gcc: error: elf_i386: No such file or directory

    编译内核出现以下错误 CC arch/x86/mm/mmio-mod.oLD arch/x86/mm/mmiotrace.oLD arch/x86/mm/built-in.oCC arch/x86/c ...

  5. 【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )

    文章目录 一.常用的编译器 二.使用 Qt 中的 gcc 编译器 三.独立安装 MinGW 一.常用的编译器 常用编译器 : MSVC GCC MinGW CLANG ; MSVC : 微软 Micr ...

  6. linux下编译安装gcc,Linux编译安装GCC 5.1.0

    Linux下编写C/C++程序自然缺不了一个优秀的编译器,Linux下比较常见的自然是GCC了.2015年4月下旬GCC也出到了5.1.0版本,对于C++11/14也有了更好的支持了.因为最近在学习O ...

  7. linux系统下用GCC、JAVA和Python编程

    一:linux系统下用GCC编程 方法一: 1.C语言文件建立 [root@localhost kang]# vim tang.c 2.编写代码 代码输入后,按下shift+;打出冒号输入wq按回车保 ...

  8. 【CentOS Linux 7】【gcc编译器】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  9. linux怎么在线安装gcc,Linux 在线安装软件 gcc在线安装的操作方法

    Linux在线安装相关命令: yum install:全部安装 yum install :安装指定的程序包 yum groupinsall :安装程序组 yum -y update:升级所有包,改变软 ...

最新文章

  1. 狂神说Java 之SpringBoot整合Shiro框架笔记!
  2. underscore 系列之防冲突与 Utility Functions
  3. flutter 自定义 AppBar
  4. 腾讯物联网开发者社区平台Tencent Things Network发布 让IoT应用开发快速安全
  5. 耶鲁大学计算机科学录取,2020年耶鲁大学排名TFE Times美国最佳计算机科学硕士专业排名第18...
  6. python怎么安装bokeh_python怎么安装bokeh
  7. 仓库处理中 无法修改_临沂用友U8erp系统软件如何新增仓库?
  8. java易忘代码备份
  9. android xml 预览,解决Android studio xml界面无法预览问题
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_03 过滤器_1_FileFilter过滤器的原理和使用...
  11. C++递归算法经典实例详解
  12. 一位共阴数码管0至F数码显示
  13. 软件测试从业者年纪大了以后该怎么办?我能继续测试!可以自救...
  14. Vuex--mapState, mapGetters, mapActions, mapMutations--使用/教程/实例
  15. 蚁群算法及蚂蚁系统的原理(js实现版)
  16. 前端访问nginx发布的视频文件,实现在线播放
  17. 使用线程池优化多线程编程
  18. [css] CSS画一个三角形,CSS绘制空心三角形
  19. BPF学习笔记(五)--Systemtap BPF/BCC bpftrace 实践对比
  20. java-生成印章swing

热门文章

  1. Elasticsearch实战篇——Spring Boot整合ElasticSearch
  2. 测试人员报BUG的正确姿势
  3. Linux-Android 修改屏蔽长按键功能
  4. jQuery DataTables
  5. C# 巧用anchor和dock设计复杂界面(控件随着窗体大小的变化而变化)【转】
  6. 批处理获取exe返回结果
  7. Ti的DM368系列芯片的所有PDF资料汇总
  8. 快速上手SpyGlass——基本流程
  9. 圆环内外圆毛刺(凸起)缺口(凹陷)检测halcon
  10. Classification分类halcon算子,持续更新