On 8/23/2012 4:24 AM, Paolo Bonzini wrote:
Some comments on the patches:

+       c_fix_arg       = "%0\n"
+               "#define ioctl(fd, func, arg) ((ioctl)((fd), (func), 
((int)(arg))))\n";
This can be simply

#define ioctl(fd, func, arg) ioctl(fd, func, (int)arg)

thanks to C and cpp precedence rules.

OK. I just over-parenthesize all function-macros by default because I can never remember the rules exactly and worry about not anticipating what someone puts in a macro.
+       c_fix_arg       = "%0\n"
+               "#ifdef IN_GCC\n"
+               "#define mkdir(dir, mode) ((mode), (mkdir)(dir))\n"
+               "#endif\n";
Are you sure about the #ifdef/#endif?  In fact, you definitely do not
want a _global_ include to have a dependency on a user symbol.
The idea is I don't want to break existing code, so I only want this macro to take effect inside of GCC proper, as (AFAIK) anything built with the new compiler gets the fixed includes, and there's lots of VxWorks code that relies on single-argument mkdir.

The alternative is varaidic macros, but I'm no expert on the nuances of c89 vs c99 variadic macros.

Add fix to make write() const correct on VxWorks

VxWorks' write() takes its second argument as non-const, so the
compiler complains if one tries to pass a const pointer to it.
I think this does not need to be VxWorks-specific, but I'm not sure of
the standards for fixincludes. Bruce?
I set it to only vxworks for now as that's the only platform that I 1. know has the issue and 2. know that it's safe to do this change.

Subject: [PATCH 10/10] Make open() call more compatible in gcc/gcov-io.c

In gcc/gcov-io.c, the call to open() only has two arguments. This
is fine, as long as the system open() is standards compliant.
So you have to add another fixincludes hack, adding a macro indirection
like the one you have for ioctl:

#define open(a, b, ...)      __open(a, b , ##__VA_ARGS__, 0660)
#define __open(a, b, c, ...) (open)(a, b, c)

Again, just not sure about variadic macro compatibility. If that will work for both c89 and c99 and c++, then that looks good to me.

--
Robert Mason

Reply via email to