[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:14534] Re: fail to port; ne
後藤といいます。
On Thu, 23 Aug 2001 16:55:35 +0900
Atsuhito Kohda <kohda@xxxxxxxxxxxxxxxxxxxx> wrote:
> PowerPC への port で ne が失敗します。
>
> gcc `cat __OPT__` -c -o list.o list.c
> gcc `cat __OPT__` -c -o menu.o menu.c
> menu.c: In function `makev_proc':
> menu.c:104: incompatible types in assignment
> menu.c:111: incompatible types in assignment
>
> i386 では build できるようですし potato 版は Sparc で
> build できてるのでこちらのミスかもわかりませんが該当個所
> は
>
> args=*(va_list *)vp;
>
> p=va_arg(args,char *);
> if (p==NULL)
> strcpy(mip->str,"null"); else
> strcpy(mip->str,p);
>
> *(va_list *)vp=args;
>
> です。
どのバージョンについてなのかよくわからないですが、
#BTSにつっこんだほうがいいと私も思います。こういう部分が
#はっきりするし、解決するまでの課程が記録に残るので。
3+00pre16-2 では、以下のように変更すると、とりあえず一見正常に動作する
バイナリが出来ます。100%正しく動作するかはチェックしていません。
--- menu.c.orig
+++ menu.c
@@ -101,14 +101,14 @@
va_list args;
char *p;
- args=*(va_list *)vp;
+ *args=*(*(va_list *)vp);
p=va_arg(args,char *);
if (p==NULL)
strcpy(mip->str,"null"); else
strcpy(mip->str,p);
- *(va_list *)vp=args;
+ *(*(va_list *)vp)=*args;
}
ただし、 この変更をすると今度はi386で動作しなくなると思います。
どうやら、va_listの実装がアーキテクチャによって異なる模様です。
/usr/include/glib-1.2/glib.h 内には、以下のようなマクロの定義が
ありました。(実は、上に示した変更はこの記述を参考にしています)。
/* Define G_VA_COPY() to do the right thing for copying va_list variables.
* glibconfig.h may have already defined G_VA_COPY as va_copy or __va_copy.
*/
#if !defined (G_VA_COPY)
# if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
# define G_VA_COPY(ap1, ap2) (*(ap1) = *(ap2))
# elif defined (G_VA_COPY_AS_ARRAY)
# define G_VA_COPY(ap1, ap2) g_memmove ((ap1), (ap2), sizeof (va_list))
# else /* va_list is a pointer */
# define G_VA_COPY(ap1, ap2) ((ap1) = (ap2))
# endif /* va_list is a pointer */
#endif /* !G_VA_COPY */
この記述を参考にして#ifでくくればいいと思いますが、そうすると
autoconfに組み込みたくなるわけで、作者に連絡してしっかりと対応して
もらうべきだと思います(が、まだ何もしていません)。
--
後藤 直久 ngoto@xxxxxxxxxxxxxxxxxxxxxx
大阪大学 遺伝情報実験センター ゲノム情報解析分野 (安永研究室) D1
(理学研究科 生物科学専攻 D1)