0

ハードコーディングされたステートメントを評価するために 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:~$

4

1 に答える 1

2

アセンブラのバグにより、デバッグ コードがアラインされていないデータ アクセスを追加します。-g は使用しないでください。デバッグ情報が必要な場合は、おそらく -gstabs を使用してください。問題を修正するガスの更新もあるかもしれません。

于 2011-09-27T14:05:35.100 に答える