Subject: Re: pcc?
To: None <tech-userlevel@NetBSD.org>
From: Anders Magnusson <ragge@ludd.ltu.se>
List: tech-userlevel
Date: 12/29/2007 17:03:58
--%--multipart-mixed-boundary-1.18150.1198944238--%
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

> 
> 
> I'm running NetBSD-4 with modified cdefs.h
> and pcc fails like this.
> But I don't see any changes related to pcc in HEAD's stdarg.h.
> Any comments?
> 
Yes, I haven't checked it in yet.  I added builtins for the stdarg stuff
to the compiler a while ago, and will check in the fixes together with
some more that I have pending.  Some more debugging to do first, though.

You until then patch your i386/stdarg.h with the patch provided.

-- Ragge

> 0 ~> cat main.c         
> #include <stdarg.h>
> #include <stdio.h>
> 
> void my_log (const char *format, ... )
> {
>    va_list ap;
> 
>    va_start (ap, format);
>    vprintf (format, ap);
>    va_end (ap);
> }
> 
> int main ()
> {
>    my_log ("Hello World!\n");
>    return 0;
> }
> 0 ~> gcc -o main main.c && ./main
> Hello World!
> 0 ~> pcc -o main main.c && ./main 
> main.o: In function `my_log':
> : undefined reference to `__builtin_next_arg'
> 1 ~>
> 
> -- 
> Best regards, Aleksey Cheusov.
> 


--%--multipart-mixed-boundary-1.18150.1198944238--%
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Description: ascii text
Content-Disposition: attachment; filename="stdarg.h.diff"

*** stdarg.h.orig	Fri Jul 27 12:39:20 2007
--- stdarg.h	Fri Jul 27 18:45:00 2007
***************
*** 56,63 ****
--- 56,68 ----
  #define	__va_size(type) \
  	(((sizeof(type) + sizeof(long) - 1) / sizeof(long)) * sizeof(long))
  
+ #ifdef __PCC__
+ #define va_start(ap, last) \
+ 	((ap) = (va_list)(&last) + (sizeof(last) < 4 ? 4 : sizeof(last)))
+ #else
  #define	va_start(ap, last) \
  	((ap) = (va_list)__builtin_next_arg(last))
+ #endif
  
  #define	va_arg(ap, type) \
  	(*(type *)(void *)((ap) += __va_size(type), (ap) - __va_size(type)))

--%--multipart-mixed-boundary-1.18150.1198944238--%--