iPhone -mthumb-interlinking

时间:2010-01-15 19:54:03

标签: iphone gcc compilation arm

我知道如何使用-mthumb和-mno-thumb编译器标志,或多或少地了解它正在做什么。

但是-mthumb-interlinking标志在做什么?什么时候需要,如果我在项目设置中设置'compile for thumb',它是否为整个项目设置了?

感谢您的信息!

2 个答案:

答案 0 :(得分:1)

打开终端并输入man gcc

你的意思是-mthumb-interwork?

   -mthumb-interwork
       Generate code which supports calling between the ARM and Thumb
       instruction sets.  Without this option the two instruction sets
       cannot be reliably used inside one program.  The default is
       -mno-thumb-interwork, since slightly larger code is generated when
       -mthumb-interwork is specified.

如果这与构建配置有关,您应该能够为每个配置单独设置它,例如Release或Debug。

您为什么要更改这些设置?我知道使用拇指指令可以节省一些内存,但是在这种情况下它会保存得足够重要吗?

答案 1 :(得分:0)

  

我的应用程序使用了thumb和vfp代码,但我从来没有特别说明   set -thumb-interwork flag ..怎么可能?

根据手册页,没有那个标志的两个指令集

  

无法在一个程序中可靠地使用。

它说“可靠”;因此,如果没有这个选项,它们似乎仍然可以在一个程序中混合,但它可能“不可靠”。我认为通常将两个指令集混合起来,编译器足够聪明,可以确定何时必须从一个集合切换到另一个集合。但是,可能存在边界情况,编译器无法正确理解,并且可能无法看到它应该在此处切换指令集,导致应用程序失败(大多数可能它会崩溃)。此选项生成特殊代码,因此无论您的代码是什么,切换始终正确且可靠地进行;缺点是每个全局可见函数都需要这个额外的代码,因此增加了二进制端(我不知道它是否也可能会减慢函数调用的速度,我个人希望如此)。

请注意以下两个设置:

  

-mcallee超互通
             提供文件中所有外部可见的功能   编译了ARM指令集头              在执行其余部分之前切换到Thumb模式   功能。这允许这些              从非交互代码调用的函数。

     

-mcaller超互通
             允许通过函数指针调用(包括虚拟调用)   函数)无论如何都能正确执行              是否已编译目标代码   是否互通。开销很小              如果这个选项,执行函数指针的成本   已启用。

虽然我认为你只需要那些,但是在构建库以便与其他项目一起使用时;但我不确定。 GCC拇指处理绝对是“未记录的”。