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