interface.texi 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. @c Copyright (C) 1988-2015 Free Software Foundation, Inc.
  2. @c This is part of the GCC manual.
  3. @c For copying conditions, see the file gcc.texi.
  4. @node Interface
  5. @chapter Interfacing to GCC Output
  6. @cindex interfacing to GCC output
  7. @cindex run-time conventions
  8. @cindex function call conventions
  9. @cindex conventions, run-time
  10. GCC is normally configured to use the same function calling convention
  11. normally in use on the target system. This is done with the
  12. machine-description macros described (@pxref{Target Macros}).
  13. @cindex unions, returning
  14. @cindex structures, returning
  15. @cindex returning structures and unions
  16. However, returning of structure and union values is done differently on
  17. some target machines. As a result, functions compiled with PCC
  18. returning such types cannot be called from code compiled with GCC,
  19. and vice versa. This does not cause trouble often because few Unix
  20. library routines return structures or unions.
  21. GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
  22. long in the same registers used for @code{int} or @code{double} return
  23. values. (GCC typically allocates variables of such types in
  24. registers also.) Structures and unions of other sizes are returned by
  25. storing them into an address passed by the caller (usually in a
  26. register). The target hook @code{TARGET_STRUCT_VALUE_RTX}
  27. tells GCC where to pass this address.
  28. By contrast, PCC on most target machines returns structures and unions
  29. of any size by copying the data into an area of static storage, and then
  30. returning the address of that storage as if it were a pointer value.
  31. The caller must copy the data from that memory area to the place where
  32. the value is wanted. This is slower than the method used by GCC, and
  33. fails to be reentrant.
  34. On some target machines, such as RISC machines and the 80386, the
  35. standard system convention is to pass to the subroutine the address of
  36. where to return the value. On these machines, GCC has been
  37. configured to be compatible with the standard compiler, when this method
  38. is used. It may not be compatible for structures of 1, 2, 4 or 8 bytes.
  39. @cindex argument passing
  40. @cindex passing arguments
  41. GCC uses the system's standard convention for passing arguments. On
  42. some machines, the first few arguments are passed in registers; in
  43. others, all are passed on the stack. It would be possible to use
  44. registers for argument passing on any machine, and this would probably
  45. result in a significant speedup. But the result would be complete
  46. incompatibility with code that follows the standard convention. So this
  47. change is practical only if you are switching to GCC as the sole C
  48. compiler for the system. We may implement register argument passing on
  49. certain machines once we have a complete GNU system so that we can
  50. compile the libraries with GCC@.
  51. On some machines (particularly the SPARC), certain types of arguments
  52. are passed ``by invisible reference''. This means that the value is
  53. stored in memory, and the address of the memory location is passed to
  54. the subroutine.
  55. @cindex @code{longjmp} and automatic variables
  56. If you use @code{longjmp}, beware of automatic variables. ISO C says that
  57. automatic variables that are not declared @code{volatile} have undefined
  58. values after a @code{longjmp}. And this is all GCC promises to do,
  59. because it is very difficult to restore register variables correctly, and
  60. one of GCC's features is that it can put variables in registers without
  61. your asking it to.