README.ppc
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:2k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. If your system uses the SVr4 ABI (designed by Motorola), you will only
  2. be able to compile my library files lib/format.c and lib/getargs.c if your
  3. C-compiler supports the macro va_copy() or __va_copy() from stdarg.h.
  4. Mach/Next STep/Apple Rhapsody on ppc use a 'void *' for the type va_list
  5. so you don't need to make changes on these systems.
  6. Solaris/ppc (made in 1992) is the first UNIX implementation for the PPC.
  7. It includes the va_copy() macro that allows you to assign a C object of the
  8. type va_list in a system independant way.
  9. Linux/ppc uses exactly the same construct as Solaris for the type va_list.
  10. You will only be able to compile lib/format.c and lib/getargs.c if your 
  11. C-compiler includes the macro va_copy() or __va_copy(). If this is not the
  12. case, you will need to upgrade your C-compiler first. GCC 2.8.0 and later
  13. includes this macro.
  14. Here is what Solaris /usr/include/sys/varargs.h looks like:
  15. /*
  16.  * va_copy is a Solaris extension to provide a portable way to perform
  17.  * a variable argument list ``bookmarking'' function.
  18.  */
  19. #if defined(__ppc)
  20. #define va_copy(to, from) ((to)[0] = (from)[0])
  21. #else
  22. #define va_copy(to, from) ((to) = (from))
  23. #endif
  24. To be able to compile my lib/format.c and lib/getargs.c on a OS
  25. implementation that uses an array for va_list, you will need
  26. this va_copy() enhancement too.
  27. The files mentioned above already compile on a PPC Apple Rhapsody system.
  28. But as mentioned before, Rhapsody uses a void * for va_list (maybe because
  29. Apple includes badly designed international printf code from BSD 4.4
  30. that requires va_list to be void * to work).
  31. Notice: lib/format.c allows a %r format that needs additional features
  32. in stdarg.h. You need to know whether va_list is an array.
  33. I hope that GCC will include some definitions in future versions
  34. that allow to propagate va_list type objects from var args
  35. in function calls.
  36. GCC
  37. ===
  38. If you are not using GCC 2.8.0, cou can add the following definition 
  39. to va-ppc.h :
  40. /usr/lib/gcc-lib/*-linux-gnulibc1/2.*/include/va-ppc.h
  41. #define va_copy(to, from) ((to)[0] = (from)[0])
  42. and to all other va-*.h files:
  43. #define va_copy(to, from) ((to) = (from))
  44. Important: Check before if you don't have a GCC that is already patched.
  45. Joerg