1

我正在自学一些 ARM 程序集,但我什至无法运行一个简单的程序。我建立了一个工具链和一切,我的代码编译得很好。但是,当我在带有 Android(我正在测试的唯一平台)的 Galaxy Nexus 上从/data/local/tmp/执行我的程序时,我总是会收到“已停止(信号)”和/或“139 分段错误”(通常没有数字)。这发生在我尝试从 C 代码调用汇编函数的那一刻。

neontest.c:

#include <stdio.h>

void neon_test(void); // I also tried variations like extern, but no avail

int main(int argc, char* argv[]) {
    printf("\nHello World\n"); // works just fine
    neon_test(); // segmentation fault
    printf("Done!");
    return 0;
}

(neontest.h 文件当前为空)

neontest_neon.s:

.text // added because some wiki said so
.arch armv7a
.fpu neon
.thumb
.syntax unified

.align 4
.global neon_test
.func neon_test
neon_test:
    NOP
.endfunc

.end

我担心这是一个权利问题,但我不知道如何正确识别超出这一点的问题。

4

2 回答 2

1

有一个解决方案在大多数情况下都有效:

使用调试器

它将向您显示错误发生的确切位置,并且通常或多或少地清楚发生了什么。

也就是说,这里有几个猜测:

  1. BX LR正如@hivert 所说,您确实忘记了 return ( )。
  2. Thumb 函数必须用 标记,.thumb_func以便链接器正确处理它。只是.thumb还不够。
于 2013-07-23T09:53:17.353 回答
1

您需要使用正确的 asm 指令从函数返回。在 ARM cortex m3 上,它的 bx lr 指令,不确定什么是适合您平台的指令。

于 2013-07-23T10:15:53.820 回答