1/* 2 * Copyright (c) 2003 Apple Computer, 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_GDB_ 24#define _DYLD_GDB_ 25 26/* 27 * For Mac OS X 10.4 or later, use the interface in mach-o/dylib_images.h 28 */ 29#include <mach-o/dyld_images.h> 30 31#ifdef __cplusplus 32extern "C" { 33#endif 34 35/* 36 * Prior to Mac OS 10.4, this is the interface gdb used to discover the mach-o images loaded in a process 37 */ 38#if __i386__ 39/* 40 * gdb_dyld_version is the version of gdb interface that dyld is currently 41 * exporting. For the interface described in this header file gdb_dyld_version 42 * is 2. As the gdb/dyld interface changes this number will be incremented and 43 * comments will be added as to what are the are changes for the various 44 * versions. 45 */ 46extern unsigned int gdb_dyld_version; 47 48/* 49 * gdb_dyld_state_changed is the internal dyld routine called by dyld to notify 50 * gdb that the state of the data structures has changed. gdb is expected to 51 * put a break point on this routine and re-read the internal dyld data 52 * structures below when this break point is hit. 53 */ 54extern void gdb_dyld_state_changed(void); 55 56/* 57 * gdb looks directly at parts of two of dyld's internal data structures. The 58 * list of object file images and the list of library images. The parts of 59 * these structures that gdb looks at will not change unless the value of 60 * gdb_dyld_version changes. The size of these structures and the other fields 61 * that gdb does not look at may change. 62 * 63 * struct object_images { 64 * struct object_image images[NOBJECT_IMAGES]; 65 * unsigned long nimages; 66 * struct object_images *next_images; 67 * ... 68 * }; 69 * 70 * struct library_images { 71 * struct library_image images[NLIBRARY_IMAGES]; 72 * unsigned long nimages; 73 * struct library_images *next_images; 74 * ... 75 * }; 76 * 77 * Both the object_image structure and the library_image structure 78 * start with a structure containing the following fields: 79 * 80 * struct image { 81 * char *physical_name; physical image name (file name) 82 * unsigned long vmaddr_slide; the slide from the staticly linked address 83 * struct mach_header *mh; address of the mach header of the image 84 * unsigned long valid; TRUE if this is struct is valid 85 * char *name; image name for reporting errors 86 * ... 87 * }; 88 * 89 * In gdb_dyld_version 1 the first field was "name". In gdb_dyld_version 2 the 90 * first field was changed to "physical_name" and a new fifth field "name" was 91 * added. These two fields are set to the same values except in the case of 92 * zero-link. In zero-link the NSLinkModule() option 93 * NSLINKMODULE_OPTION_TRAILING_PHYS_NAME is used and then the physical_name is 94 * the file name of the module zero-link loaded that is part of the logical 95 * image "name". 96 */ 97 98/* object_images is the global object_images structure */ 99 100/* the number of gdb_object_image structures present per bucket */ 101extern unsigned int gdb_nobject_images; 102 103/* the size of each gdb_object_image structure */ 104extern unsigned int gdb_object_image_size; 105 106/* library_images is the global library_images structure */ 107 108/* the number of gdb_library_image structures present per bucket */ 109extern unsigned int gdb_nlibrary_images; 110 111/* the size of each gdb_library_image structure */ 112extern unsigned int gdb_library_image_size; 113 114#endif 115 116 117 118#ifdef __cplusplus 119} 120#endif 121 122#endif /* _DYLD_GDB_ */ 123