OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [doc/] [collect2.texi] - Blame information for rev 816

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
2
@c This is part of the GCC manual.
3
@c For copying conditions, see the file gcc.texi.
4
 
5
@node Collect2
6
@chapter @code{collect2}
7
 
8
GCC uses a utility called @code{collect2} on nearly all systems to arrange
9
to call various initialization functions at start time.
10
 
11
The program @code{collect2} works by linking the program once and
12
looking through the linker output file for symbols with particular names
13
indicating they are constructor functions.  If it finds any, it
14
creates a new temporary @samp{.c} file containing a table of them,
15
compiles it, and links the program a second time including that file.
16
 
17
@findex __main
18
@cindex constructors, automatic calls
19
The actual calls to the constructors are carried out by a subroutine
20
called @code{__main}, which is called (automatically) at the beginning
21
of the body of @code{main} (provided @code{main} was compiled with GNU
22
CC)@.  Calling @code{__main} is necessary, even when compiling C code, to
23
allow linking C and C++ object code together.  (If you use
24
@option{-nostdlib}, you get an unresolved reference to @code{__main},
25
since it's defined in the standard GCC library.  Include @option{-lgcc} at
26
the end of your compiler command line to resolve this reference.)
27
 
28
The program @code{collect2} is installed as @code{ld} in the directory
29
where the passes of the compiler are installed.  When @code{collect2}
30
needs to find the @emph{real} @code{ld}, it tries the following file
31
names:
32
 
33
@itemize @bullet
34
@item
35
@file{real-ld} in the directories listed in the compiler's search
36
directories.
37
 
38
@item
39
@file{real-ld} in the directories listed in the environment variable
40
@code{PATH}.
41
 
42
@item
43
The file specified in the @code{REAL_LD_FILE_NAME} configuration macro,
44
if specified.
45
 
46
@item
47
@file{ld} in the compiler's search directories, except that
48
@code{collect2} will not execute itself recursively.
49
 
50
@item
51
@file{ld} in @code{PATH}.
52
@end itemize
53
 
54
``The compiler's search directories'' means all the directories where
55
@command{gcc} searches for passes of the compiler.  This includes
56
directories that you specify with @option{-B}.
57
 
58
Cross-compilers search a little differently:
59
 
60
@itemize @bullet
61
@item
62
@file{real-ld} in the compiler's search directories.
63
 
64
@item
65
@file{@var{target}-real-ld} in @code{PATH}.
66
 
67
@item
68
The file specified in the @code{REAL_LD_FILE_NAME} configuration macro,
69
if specified.
70
 
71
@item
72
@file{ld} in the compiler's search directories.
73
 
74
@item
75
@file{@var{target}-ld} in @code{PATH}.
76
@end itemize
77
 
78
@code{collect2} explicitly avoids running @code{ld} using the file name
79
under which @code{collect2} itself was invoked.  In fact, it remembers
80
up a list of such names---in case one copy of @code{collect2} finds
81
another copy (or version) of @code{collect2} installed as @code{ld} in a
82
second place in the search path.
83
 
84
@code{collect2} searches for the utilities @code{nm} and @code{strip}
85
using the same algorithm as above for @code{ld}.

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.