C guarantees that void* and char* have compatible representations, so
as long that's the only difference, you won't have runtime problems.
You can obviously have compile-time problems, though: for example,
in C, if va_list is a void*, then it can be implicitly converted to any pointer
type instead of (as with char*) only explicitly converted; and in C++, you
can get different manglings, which is actually how we found out that our
ARM target was misdeclaring it. But otherwise it should be fine, as long
as that's the only difference.
However, other targets may have more complicated differences than
just void* vs. char*.
John.