【问题标题】:Error when compiling simple SPARC ASM math code编译简单 SPARC ASM 数学代码时出错
【发布时间】:2011-09-27 08:15:25
【问题描述】:

正在编写 SPARC asm 代码来评估硬编码语句,但我遇到了一个我不理解的错误。我已经到处搜索了,虽然它似乎在一些错误报告中出现了很多,但我没有为程序员找到真正的线索。是的,这是家庭作业,是的,我还没有完成,是的,我到处都有分店延误。我会自己去找他们,但我需要知道错误是什么。这个错误并没有告诉我任何有用的信息,而且我拥有的书籍也没有任何用处。

我在这方面真的很陌生,所以任何帮助都将不胜感激。

  1 /*Justin Reeves*/
  2 /*max{x^3-14x^2+56x-64} from [-2,8]*/
  3 /*for (x = lwr, x <= upr, x++) */
  4 define(lwr_b, -2)       !lower bound
  5 define(upr_b, 8)        !upper bound
  6 define(x_r, %l0)        !x
  7 define(sum_r, %l1)      !sum, each pass of loop may update
  8 define(max_r, %l2)      !max, cmp to sum, store in max if larger
  9
 10     .global main
 11 main:
 12     save    %sp, -64, %sp
 13
 14     ba      loop_test
 15     mov     lwr_b,  x_r     /*init x_r = -2 */
 16
 17 loop_test:
 18     cmp     x_r,    upr_b
 19     ble     sum_loop
 20     nop
 21 /*then x > upr_b and the max has been found*/
 22 /*odd spot for it...but this is the end of the program*/
 23
 24
 25 sum_loop: ! starting backwards to give us an intial nonzero constant sum
 26     mov     -64,    sum_r   /* sum = -64 */
 27
 28     mov     x_r,    %o0     /*56x*/
 29     mov     56,     %o0
 30     clr     %o2
 31     call    .mul            /*AFAIK 56x should now be in %o0*/
 32     nop
 33     add     sum_r,  %o0,    sum_r   /* sum = 56x-64 */
 34
 35     mov     x_r,    %o0     /* 14x^2 */
 36     mov     x_r,    %o1
 37     mov     -14,    %o2
 38     call    .mul
 39     nop
 40     add     sum_r,  %o0,    sum_r   /* sum = -14x^2+56x-64 */
 41
 42     mov     x_r,    %o0
 43     mov     x_r,    %o1
 44     mov     x_r,    %o2
 45     call    .mul
 46     nop
 47     add     sum_r,  %o0,    sum_r   /*sum = x^3-14x^2+56x-64 */
 48
 49     add     x_r,    1,      x_r     /* x++ */
 50     cmp     sum_r,  max_r
 51     bge     collect_lrg             /*branches if sum > max*/
 52     nop
 53
 54 collect_lrg:
 55     mov     sum_r,  max_r
 56     ba      loop_test
 57
 58     mov     1,      %g1     /*exit request*/
 59     ta      0               /*trap to system*/

然后当我尝试定义宏并编译时,我得到:

cs32107@matrix:~$ m4 polynomialv2.m > polynomial.s
cs32107@matrix:~$ gcc -g polynomial.s -o 多项式
ld:致命:重定位错误:R_SPARC_32:文件 /var/tmp//ccVOrnx2.o:符号:偏移量 0xfb5d11dd 未对齐 ld:致命:重定位错误:R_SPARC_32:文件 /var/tmp//ccVOrnx2.o:符号:偏移量 0xfb5d120f 未对齐 ld:致命:重定位错误:R_SPARC_32:文件/var/tmp//ccVOrnx2.o:符号:偏移量0xfb5d1215未对齐 ld:致命:重定位错误:R_SPARC_32:文件/var/tmp//ccVOrnx2.o:符号:偏移量0xfb5d1219未对齐 ld:致命:重定位错误:R_SPARC_32:文件 /var/tmp//ccVOrnx2.o:符号:偏移量 0xfb5d121d 未对齐 ld:致命:重定位错误:R_SPARC_32:文件 /var/tmp//ccVOrnx2.o:符号:偏移量 0xfb5d1266 未对齐 collect2: ld 返回 1 个退出状态 cs32107@matrix:~$

【问题讨论】:

    标签: assembly compiler-errors sparc


    【解决方案1】:

    汇编器中的错误导致调试代码添加未对齐的数据访问。如果您需要调试信息,请不要使用 -g 但可能使用 -gstabs。可能有一个gas更新也可以解决这个问题。

    【讨论】:

    • 其他人现在告诉我它在他们的机器上编译得很好。这是一台校园机器,所以我不能做任何事情,比如安装或更新新包。我是一个小型 ssh 帐户。我很困惑,确实需要 gdb 输出。
    • 嗯,首先要做的是验证它是否在没有 -g 选项的情况下编译,这样你至少可以确定汇编器是问题所在(应该是汇编器添加调试代码,因为您的代码没有任何符号声明,因此它不能包含链接器抱怨的未对齐符号,这是 2005 年左右的一个已知错误)。然后要么在别人的机器上编译文件,要么找出你和他们的机器之间还有什么不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多