Chameleon

Chameleon Svn Source Tree

Root/branches/mozodojo/i386/include/mach-o/dyld_images.h

1/*
2 * Copyright (c) 2006-2010 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23#ifndef _DYLD_IMAGES_
24#define _DYLD_IMAGES_
25
26#include <stdbool.h>
27#include <unistd.h>
28#include <mach/mach.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34
35/*
36 *Beginning in Mac OS X 10.4, this is how gdb discovers which mach-o images are loaded in a process.
37 *
38 *gdb looks for the symbol "_dyld_all_image_infos" in dyld. It contains the fields below.
39 *
40 *For a snashot of what images are currently loaded, the infoArray fields contain a pointer
41 *to an array of all images. If infoArray is NULL, it means it is being modified, come back later.
42 *
43 *To be notified of changes, gdb sets a break point on the address pointed to by the notificationn
44 *field. The function it points to is called by dyld with an array of information about what images
45 *have been added (dyld_image_adding) or are about to be removed (dyld_image_removing).
46 *
47 * The notification is called after infoArray is updated. This means that if gdb attaches to a process
48 * and infoArray is NULL, gdb can set a break point on notification and let the proccess continue to
49 * run until the break point. Then gdb can inspect the full infoArray.
50 *
51 * The dyldVersion field always points to a C string that contains the dyld version. For instance,
52 * in dyld-127.3, dyldVersion would contain a pointer to "127.3".
53 *
54 * The errorMessage and terminationFlags fields are normally zero. If dyld terminates a process
55 * (for instance because a required dylib or symbol is missing), then the errorMessage field will
56 * be set to point to a C string message buffer containing the reason dyld terminate the process.
57 * The low bit of the terminationFlags will be set if dyld terminated the process before any user
58 * code ran, in which case there is no need for the crash log to contain the backtrace.
59 *
60 * When dyld terminates a process because some required dylib or symbol cannot be bound, in
61 * addition to the errorMessage field, it now sets the errorKind field and the corresponding
62 * fields: errorClientOfDylibPath, errorTargetDylibPath, errorSymbol.
63 *
64 */
65
66enum dyld_image_mode { dyld_image_adding=0, dyld_image_removing=1 };
67
68struct dyld_image_info {
69const struct mach_header*imageLoadAddress;/* base address image is mapped into */
70const char*imageFilePath;/* path dyld used to load the image */
71uintptr_timageFileModDate;/* time_t of image file */
72/* if stat().st_mtime of imageFilePath does not match imageFileModDate, */
73/* then file has been modified since dyld loaded it */
74};
75
76struct dyld_uuid_info {
77const struct mach_header*imageLoadAddress;/* base address image is mapped into */
78uuid_timageUUID;/* UUID of image */
79};
80
81typedef void (*dyld_image_notifier)(enum dyld_image_mode mode, uint32_t infoCount, const struct dyld_image_info info[]);
82
83/* for use in dyld_all_image_infos.errorKind field */
84enum {dyld_error_kind_none=0,
85dyld_error_kind_dylib_missing=1,
86dyld_error_kind_dylib_wrong_arch=2,
87dyld_error_kind_dylib_version=3,
88dyld_error_kind_symbol_missing=4
89};
90
91
92struct dyld_all_image_infos {
93uint32_tversion;/* 1 in Mac OS X 10.4 and 10.5 */
94uint32_tinfoArrayCount;
95const struct dyld_image_info*infoArray;
96dyld_image_notifiernotification;
97boolprocessDetachedFromSharedRegion;
98/* the following fields are only in version 2 (Mac OS X 10.6, iPhoneOS 2.0) and later */
99boollibSystemInitialized;
100const struct mach_header*dyldImageLoadAddress;
101/* the following field is only in version 3 (Mac OS X 10.6, iPhoneOS 3.0) and later */
102void*jitInfo;
103/* the following fields are only in version 5 (Mac OS X 10.6, iPhoneOS 3.0) and later */
104const char*dyldVersion;
105const char*errorMessage;
106uintptr_tterminationFlags;
107/* the following field is only in version 6 (Mac OS X 10.6, iPhoneOS 3.1) and later */
108void*coreSymbolicationShmPage;
109/* the following field is only in version 7 (Mac OS X 10.6, iPhoneOS 3.1) and later */
110uintptr_tsystemOrderFlag;
111/* the following field is only in version 8 (Mac OS X 10.7, iPhoneOS 3.1) and later */
112uintptr_tuuidArrayCount;
113const struct dyld_uuid_info*uuidArray;/* only images not in dyld shared cache */
114/* the following field is only in version 9 (Mac OS X 10.7, iOS 4.0) and later */
115struct dyld_all_image_infos*dyldAllImageInfosAddress;
116/* the following field is only in version 10 (Mac OS X 10.7, iOS 4.2) and later */
117uintptr_tinitialImageCount;
118/* the following field is only in version 11 (Mac OS X 10.7, iOS 4.2) and later */
119uintptr_terrorKind;
120const char*errorClientOfDylibPath;
121const char*errorTargetDylibPath;
122const char*errorSymbol;
123/* the following field is only in version 12 (Mac OS X 10.7, iOS 4.3) and later */
124uintptr_tsharedCacheSlide;
125};
126extern struct dyld_all_image_infos dyld_all_image_infos;
127
128/*
129 * Beginning in Mac OS X 10.6, rather than looking up the symbol "_dyld_all_image_infos"
130 * in dyld's symbol table, you can add DYLD_ALL_IMAGE_INFOS_OFFSET_OFFSET to the mach_header
131 * for dyld and read the 32-bit unsigned int at that location. Adding that value to dyld's
132 * mach_header address gets you the address of dyld_all_image_infos in dyld.
133 */
134#define DYLD_ALL_IMAGE_INFOS_OFFSET_OFFSET 0x1010
135
136
137
138/*
139 * Beginning in Mac OS X 10.5, this is how gdb discovers where the shared cache is in a process.
140 * Images that are in the shared cache have their segments rearranged, so when using imageFilePath
141 * to load the file from disk, you have to know to adjust addresses based on how their segment
142 * was rearranged.
143 *
144 * gdb looks for the symbol "_dyld_shared_region_ranges" in dyld.
145 *
146 * It contains information the count of shared regions used by the process. The count is
147 * the number of start/length pairs.
148 */
149struct dyld_shared_cache_ranges {
150uintptr_tsharedRegionsCount;/* how many ranges follow */
151struct {
152uintptr_tstart;
153uintptr_tlength;
154}ranges[4];/* max regions */
155};
156extern struct dyld_shared_cache_ranges dyld_shared_cache_ranges;
157
158
159
160#ifdef __cplusplus
161}
162#endif
163
164#endif /* _DYLD_IMAGES_ */
165

Archive Download this file

Revision: 1232