linux gcc march arch,Gcc的spec中arch什么的指定

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文件时,这些默认的就无效。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值