gcc的spec中arch什么的指定
来源:互联网 发布:淘宝客 微淘是免费的吗 编辑:程序博客网 时间:2024/04/30 00:59
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=<value optimized out>,
spec=<value optimized out>) 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 <<EOF
/* 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文件要放在<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }A:link { so-language: zxx }-->
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文件时,这些默认的就无效。明天才能研究这个问题了。
- gcc的spec中arch什么的指定
- gcc编译器的spec规范
- GCC 的编译配置文件(Spec File)
- GCC Spec Files
- GCC Spec Files
- gcc spec file --sysroot
- GCC Spec修改N例
- gcc编译中头文件路径指定
- spec中内容格式
- Flash spec中是如何定义图形的
- interface_cast做什么的?&&Android中真正的Player
- qt中moc的作用 编译链接什么的
- vSphere 主机添加磁盘时出现 “指定的参数错误。Vim.Host.DiskPartitionInfo.-spec” 报错
- arch中文化
- Ubuntu安装其他版本的gcc,并指定gcc版本
- 关于linux的spec
- linux中,arch,processor和mach的关系
- Arch Linux中Java SDK的安装与配置
- 黑马程序员训练营:枚举
- MULTI BIN的wince 5.0+smdk2440下的实现(扩大你的内存)
- db file scattered read
- LOTUS中常用到的API函数
- 总结性知识:107个常用Javascript语句
- gcc的spec中arch什么的指定
- 私立在校生宁愿不上大学
- 黑马程序员训练营:反射
- Office SharePoint Server 2007
- 编程中遇到的问题——4月9日
- Delphi——FindFirst学习
- 关于mysql 报错2013
- 我的个界面啊
- Android 菜单(OptionMenu)大全 建立你自己的菜单