|
|
1.1 root 1:
2: #ifndef _MACHO_LDSYMS_H_
3: #define _MACHO_LDSYMS_H_
4:
5: #import <mach-o/loader.h>
6:
7: /*
8: * This file describes the link editor defined symbols. The semantics of a
9: * link editor symbol is that it is defined by the link editor only if it is
10: * referenced and it is an error for the user to define them (see the man page
11: * ld(1)). The standard UNIX link editor symbols: __end, __etext and __edata
12: * are not not supported by the NeXT Mach-O link editor. These symbols are
13: * really not meaningful in a Mach-O object file and the link editor symbols
14: * that are supported (described here) replace them. In the case of the
15: * standard UNIX link editor symbols the program can use the symbol
16: * __mh_execute_header and walk the load commands of it's program to determine
17: * the ending (or beginning) of any section or segment in the program. Note
18: * that the compiler prepends an underbar to all external symbol names coded
19: * in a high level language. Thus in 'C' names are coded without an underbar
20: * and symbol names in the symbol table have an underbar. There are two cpp
21: * macros for each link editor defined name in this file. The macro with a
22: * leading underbar is the symbol name and the one without is the name as
23: * coded in 'C'.
24: */
25:
26: /*
27: * The value of the link editor defined symbol _MH_EXECUTE_SYM is the address
28: * of the mach header in a Mach-O executable file type. It does not appear in
29: * any file type other than a MH_EXECUTE file type. The type of the symbol is
30: * absolute as the header is not part of any section.
31: */
32: #define _MH_EXECUTE_SYM "__mh_execute_header"
33: #define MH_EXECUTE_SYM "_mh_execute_header"
34: extern const struct mach_header _mh_execute_header;
35:
36: /*
37: * The value of the link editor defined symbol _MH_BUNDLE_SYM is the address
38: * of the mach header in a Mach-O bundle file type. It does not appear in
39: * any file type other than a MH_BUNDLE file type. The type of the symbol is
40: * an N_SECT symbol even thought the header is not part of any section. This
41: * symbol is private to the code in the bundle it is a part of.
42: */
43: #define _MH_BUNDLE_SYM "__mh_bundle_header"
44: #define MH_BUNDLE_SYM "_mh_bundle_header"
45: extern const struct mach_header _mh_bundle_header;
46:
47: /*
48: * The value of the link editor defined symbol _MH_DYLIB_SYM is the address
49: * of the mach header in a Mach-O dylib file type. It does not appear in
50: * any file type other than a MH_DYLIB file type. The type of the symbol is
51: * an N_SECT symbol even thought the header is not part of any section. This
52: * symbol is private to the code in the library it is a part of.
53: */
54: #define _MH_DYLIB_SYM "__mh_dylib_header"
55: #define MH_DYLIB_SYM "_mh_dylib_header"
56: extern const struct mach_header _mh_dylib_header;
57:
58: /*
59: * The value of the link editor defined symbol _MH_DYLINKER_SYM is the address
60: * of the mach header in a Mach-O dylinker file type. It does not appear in
61: * any file type other than a MH_DYLINKER file type. The type of the symbol is
62: * an N_SECT symbol even thought the header is not part of any section. This
63: * symbol is private to the code in the dynamic linker it is a part of.
64: */
65: #define _MH_DYLINKER_SYM "__mh_dylinker_header"
66: #define MH_DYLINKER_SYM "_mh_dylinker_header"
67: extern const struct mach_header _mh_dylinker_header;
68:
69: /*
70: * For the MH_PRELOAD file type the headers are not loaded as part of any
71: * segment so the link editor defines symbols defined for the beginning
72: * and ending of each segment and each section in each segment. The names for
73: * the symbols for a segment's beginning and end will have the form:
74: * __SEGNAME__begin and __SEGNAME__end where __SEGNAME is the name of the
75: * segment. The names for the symbols for a section's beginning and end will
76: * have the form: __SEGNAME__sectname__begin and __SEGNAME__sectname__end
77: * where __sectname is the name of the section and __SEGNAME is the segment it
78: * is in.
79: *
80: * The above symbols' types are those of the section they are referring to.
81: * This is true even for symbols who's values are end's of a section and
82: * that value is next address after that section and not really in that
83: * section. This results in these symbols having types referring to sections
84: * who's values are not in that section.
85: */
86:
87: #endif /* _MACHO_LDSYMS_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.