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

Re: #ifndef __powerpc__ (Re: xinit: Exec format error. Binary file notexecutable. )



>>  > 				kprintf(cp, oflags, vp, 
>>  > 					NULL, va_arg(ap, va_list));

あ、よくみたら va_arg(ap, va_list) とかなってる…。

powerpc の va_list って struct ... ap[1] なので関数の引数にすると、その
アドレスしか渡らないんですよね。

最近困っているのは ld.elf_so です。
こういうの、powerpc では動きません:

#include <stdarg.h>

h(ap)
	va_list *ap;
{
	printf("%d\n", va_arg(*ap, int));
}

g(ap)
	va_list ap;
{
	return h(&ap);
}

f(int arg, ...)
{
	va_list ap;

	va_start(ap, arg);
	g(ap);
	va_end(ap);
}

main()
{
	f(0, 1);
}

この例に限っていえば h() を
h(ap)
	va_list **ap;
{
	printf("%d\n", va_arg(**ap, int));
}

とすれば期待通りになります。

ANSI C に「&va_list してはいけない」なんて規則はないものでしょうか。:-)