Chameleon

Chameleon Svn Source Tree

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

Source at commit 1146 created 12 years 11 months ago.
By azimutz, Sync with trunk (r1145). Add nVidia dev id's, 0DF4 for "GeForce GT 450M" (issue 99) and 1251 for "GeForce GTX 560M" (thanks to oSxFr33k for testing).
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: 1146