[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pbsd-mg2] Re: cross compile environment



鈴木(康)です。
<9907222359.AA08872@lachesis.sm.sony.co.jp>の記事において
shin@sm.sony.co.jpさんは書きました。

  | 	gcc(egcs)は-msoft-floatをつけるとどのようなライブラリを呼ぶか
  | 	そのライブラリの実体はどこにあるのか
  | 	gcc(egcs)をどのようにコンフィグするのが正しいのか
  | 
  | などを解説していただけると嬉しいです。

-msoft-float をつけると cc1 がどのようなライブラリ関数を呼ぶか
という点については、arm32 の libc/arch/arm32/fplib を見ると 
後に添付したものだけで、実体は、libc になります。

gcc(egcs)をどのようにコンフィグするのが正しいのかに
ついてですが、
   1. -msoft-float は、CC1SPEC を書き換えてしまう。
   2. libgcc.a では、soft-float ライブラリを使わない。
ようにするのが正しいと思います。


篠原 さんが最初失敗したのは次のようなことになっているのでは
ないかと思います。

  1. 中途半端に libgcc.a ができてしまうと、たとえば
      libgcc 内の __adddf3 が呼ばれて、gcc 内の float library 
      が呼ばれることになる。
  2. これは NetBSD のソースに含まれないので、undefinded に
     なる。

なお、上のやり方で、gcc では問題ないことは確認していますが、egcs でどうか
という点はまだ確認していません。
# arm32 の差分を調べて ソース上は大丈夫だったような記憶があるのですが、
# 自信ありません。

---------------
grep __ arm-gcc.h 
#define float32_add                     __addsf3
#define float64_add                     __adddf3
#define float32_sub                     __subsf3
#define float64_sub                     __subdf3
#define float32_mul                     __mulsf3
#define float64_mul                     __muldf3
#define float32_div                     __divsf3
#define float64_div                     __divdf3
#define int32_to_float32                __floatsisf
#define int32_to_float64                __floatsidf
#define float32_to_int32_round_to_zero  __fixsfsi
#define float64_to_int32_round_to_zero  __fixdfsi
#define float32_to_uint32_round_to_zero __fixunssfsi
#define float64_to_uint32_round_to_zero __fixunsdfsi
#define float32_to_float64              __extendsfdf2
#define float64_to_float32              __truncdfsf2

grep ENTRY fplib_glue.S 
ENTRY(__eqsf2)
ENTRY(__eqdf2)
ENTRY(__nesf2)
ENTRY(__nedf2)
ENTRY(__gtsf2)
ENTRY(__gtdf2)
ENTRY(__gesf2)
ENTRY(__gedf2)
ENTRY(__ltsf2)
ENTRY(__ltdf2)
ENTRY(__lesf2)
ENTRY(__ledf2)
ENTRY(__negsf2)
ENTRY(__negdf2)
--
					鈴木 康司 @NEC
					suz@hpc.bs1.fc.nec.co.jp
					TEL 0423-33-5381