1 /* Definitions of Module Structures used by ABI version 8 2 Copyright (C) 1993-2019 Free Software Foundation, Inc. 3 4 This file is part of GCC. 5 6 GCC is free software; you can redistribute it and/or modify it under the 7 terms of the GNU General Public License as published by the Free Software 8 Foundation; either version 3, or (at your option) any later version. 9 10 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 12 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 13 details. 14 15 Under Section 7 of GPL version 3, you are granted additional 16 permissions described in the GCC Runtime Library Exception, version 17 3.1, as published by the Free Software Foundation. 18 19 You should have received a copy of the GNU General Public License and 20 a copy of the GCC Runtime Library Exception along with this program; 21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 22 <http://www.gnu.org/licenses/>. */ 23 24 #ifndef __objc_private_module_abi_8_INCLUDE_GNU 25 #define __objc_private_module_abi_8_INCLUDE_GNU 26 27 /* For every class which happens to have statically allocated instances in 28 this module, one OBJC_STATIC_INSTANCES is allocated by the compiler. 29 INSTANCES is NULL terminated and points to all statically allocated 30 instances of this class. */ 31 struct objc_static_instances 32 { 33 char *class_name; 34 #ifdef __cplusplus 35 id instances[1]; 36 #else 37 id instances[0]; 38 #endif 39 }; 40 41 /* Whereas a Module (defined further down) is the root (typically) of a file, 42 a Symtab is the root of the class and category definitions within the 43 module. 44 45 A Symtab contains a variable length array of pointers to classes and 46 categories defined in the module. */ 47 struct objc_symtab 48 { 49 unsigned long sel_ref_cnt; /* Unused (always set to 0). */ 50 struct objc_selector *refs; /* The table of selectors referenced in 51 this module. This is terminated by a 52 selector with NULL sel_id and NULL 53 sel_types. Note that we use the type 54 'struct objc_selector *' and not 55 'SEL' (which is 'const struct 56 objc_selector *') because the sel_id 57 of these selectors is patched up by 58 the runtime when the module is 59 loaded. */ 60 unsigned short cls_def_cnt; /* Number of classes compiled (defined) 61 in the module. */ 62 unsigned short cat_def_cnt; /* Number of categories compiled 63 (defined) in the module. */ 64 void *defs[1]; /* Variable array of pointers. 65 cls_def_cnt of type Class followed by 66 cat_def_cnt of type Category_t, 67 followed by a NULL terminated array 68 of objc_static_instances. */ 69 }; 70 71 /* The compiler generates one of these structures for each module that 72 composes the executable (eg main.m). 73 74 This data structure is the root of the definition tree for the 75 module. 76 77 A collect program runs between ld stages and creates a ObjC ctor 78 array. That array holds a pointer to each module structure of the 79 executable. */ 80 struct objc_module 81 { 82 unsigned long version; /* Version of the Module data 83 structure. */ 84 unsigned long size; /* sizeof(Module) according to the 85 compiler - only used to sanity check 86 that it matches sizeof(Module) 87 according to the runtime. */ 88 const char* name; /* Name of the file used to compile the 89 module - not set by modern compilers 90 for security reasons. */ 91 struct objc_symtab *symtab; /* Pointer to the Symtab of the module. 92 The Symtab holds an array of pointers 93 to the classes and categories defined 94 in the module. */ 95 }; 96 97 /* The compiler generates one of these structures for a class that has 98 instance variables defined in its specification. */ 99 struct objc_ivar 100 { 101 const char* ivar_name; /* Name of the instance variable as entered 102 in the class definition. */ 103 const char* ivar_type; /* Description of the Ivar's type. Useful 104 for debuggers. */ 105 int ivar_offset; /* Byte offset from the base address of the 106 instance structure to the variable. */ 107 }; 108 109 struct objc_ivar_list 110 { 111 int ivar_count; /* Number of structures (Ivar) 112 contained in the list. One 113 structure per instance variable 114 defined in the class. */ 115 struct objc_ivar ivar_list[1]; /* Variable length structure. */ 116 }; 117 118 /* The compiler generates one (or more) of these structures for a 119 class that has methods defined in its specification. 120 121 The implementation of a class can be broken into separate pieces in 122 a file and categories can break them across modules. To handle this 123 problem is a singly linked list of methods. */ 124 struct objc_method 125 { 126 SEL method_name; /* This variable is the method's name. 127 The compiler puts a char* here, and 128 it's replaced by a real SEL at runtime 129 when the method is registered. */ 130 const char* method_types; /* Description of the method's parameter 131 list. Used when registering the 132 selector with the runtime. When that 133 happens, method_name will contain the 134 method's parameter list. */ 135 IMP method_imp; /* Address of the method in the 136 executable. */ 137 }; 138 139 struct objc_method_list 140 { 141 struct objc_method_list* method_next; /* This variable is used to 142 link a method list to 143 another. It is a singly 144 linked list. */ 145 int method_count; /* Number of methods defined 146 in this structure. */ 147 struct objc_method method_list[1]; /* Variable length 148 structure. */ 149 }; 150 151 /* Note that a 'struct objc_method_description' as embedded inside a 152 Protocol uses the same trick as a 'struct objc_method': the 153 method_name is a 'char *' according to the compiler, who puts the 154 method name as a string in there. At runtime, the selectors need 155 to be registered, and the method_name then becomes a SEL. */ 156 struct objc_method_description_list 157 { 158 int count; 159 struct objc_method_description list[1]; 160 }; 161 162 struct objc_protocol { 163 struct objc_class* class_pointer; 164 char *protocol_name; 165 struct objc_protocol_list *protocol_list; 166 struct objc_method_description_list *instance_methods, *class_methods; 167 }; 168 169 170 struct objc_protocol_list 171 { 172 struct objc_protocol_list *next; 173 size_t count; 174 struct objc_protocol *list[1]; 175 }; 176 177 /* 178 The compiler generates one of these structures for each class. 179 180 This structure is the definition for classes. 181 182 This structure is generated by the compiler in the executable and 183 used by the run-time during normal messaging operations. Therefore 184 some members change type. The compiler generates "char* const" and 185 places a string in the following member variables: super_class. 186 */ 187 struct objc_class { 188 struct objc_class* class_pointer; /* Pointer to the class's meta 189 class. */ 190 struct objc_class* super_class; /* Pointer to the super 191 class. NULL for class 192 Object. */ 193 const char* name; /* Name of the class. */ 194 long version; /* Unknown. */ 195 unsigned long info; /* Bit mask. See class masks 196 defined below. */ 197 long instance_size; /* Size in bytes of the class. 198 The sum of the class 199 definition and all super 200 class definitions. */ 201 #ifdef _WIN64 202 /* We pad the structure manually to prevent warning when -Wpadded is 203 used. The compiler automatically pads the structures that it 204 generates, so this manually padded structure still matches the 205 one generated by the compiler, but if we don't pad manually, 206 -Wpadded detects that padding is being added and generates 207 annoying warnings. This hack is necessary as on LLP64 targets 208 sizeof (long) isn't equal to sizeof (void *). */ 209 long pad; 210 #endif 211 struct objc_ivar_list* ivars; /* Pointer to a structure that 212 describes the instance 213 variables in the class 214 definition. NULL indicates 215 no instance variables. 216 Does not include super 217 class variables. */ 218 struct objc_method_list* methods; /* Linked list of instance 219 methods defined for the 220 class. */ 221 struct sarray * dtable; /* Pointer to instance method 222 dispatch table. */ 223 struct objc_class* subclass_list; /* Subclasses */ 224 struct objc_class* sibling_class; 225 226 struct objc_protocol_list *protocols; /* Protocols conformed to */ 227 void* gc_object_type; 228 }; 229 230 /* This is used to assure consistent access to the info field of 231 classes. */ 232 #ifndef HOST_BITS_PER_LONG 233 # define HOST_BITS_PER_LONG (sizeof(long)*8) 234 #endif 235 236 #define __CLS_INFO(cls) ((cls)->info) 237 #define __CLS_ISINFO(cls, mask) ((__CLS_INFO(cls)&mask)==mask) 238 #define __CLS_SETINFO(cls, mask) (__CLS_INFO(cls) |= mask) 239 #define __CLS_SETNOTINFO(cls, mask) (__CLS_INFO(cls) &= ~mask) 240 241 /* The structure is of type MetaClass */ 242 #define _CLS_META 0x2L 243 #define CLS_ISMETA(cls) ((cls)&&__CLS_ISINFO(cls, _CLS_META)) 244 245 /* The structure is of type Class */ 246 #define _CLS_CLASS 0x1L 247 #define CLS_ISCLASS(cls) ((cls)&&__CLS_ISINFO(cls, _CLS_CLASS)) 248 249 /* The class is initialized within the runtime. This means that it 250 has had correct super and sublinks assigned. */ 251 #define _CLS_RESOLV 0x8L 252 #define CLS_ISRESOLV(cls) __CLS_ISINFO(cls, _CLS_RESOLV) 253 #define CLS_SETRESOLV(cls) __CLS_SETINFO(cls, _CLS_RESOLV) 254 255 /* The class has been send a +initialize message or a such is not 256 defined for this class. */ 257 #define _CLS_INITIALIZED 0x04L 258 #define CLS_ISINITIALIZED(cls) __CLS_ISINFO(cls, _CLS_INITIALIZED) 259 #define CLS_SETINITIALIZED(cls) __CLS_SETINFO(cls, _CLS_INITIALIZED) 260 261 /* The class is being constructed; it has been allocated using 262 objc_allocateClassPair(), but has not been registered yet by using 263 objc_registerClassPair(). This means it is possible to freely add 264 instance variables to the class, but it can't be used for anything 265 yet. */ 266 #define _CLS_IN_CONSTRUCTION 0x10L 267 #define CLS_IS_IN_CONSTRUCTION(cls) __CLS_ISINFO(cls, _CLS_IN_CONSTRUCTION) 268 #define CLS_SET_IN_CONSTRUCTION(cls) __CLS_SETINFO(cls, _CLS_IN_CONSTRUCTION) 269 #define CLS_SET_NOT_IN_CONSTRUCTION(cls) __CLS_SETNOTINFO(cls, _CLS_IN_CONSTRUCTION) 270 271 /* The class number of this class. This must be the same for both the 272 class and its meta class object. */ 273 #define CLS_GETNUMBER(cls) (__CLS_INFO(cls) >> (HOST_BITS_PER_LONG/2)) 274 #define CLS_SETNUMBER(cls, num) \ 275 ({ (cls)->info <<= (HOST_BITS_PER_LONG/2); \ 276 (cls)->info >>= (HOST_BITS_PER_LONG/2); \ 277 __CLS_SETINFO(cls, (((unsigned long)num) << (HOST_BITS_PER_LONG/2))); }) 278 279 /* The compiler generates one of these structures for each category. 280 A class may have many categories and contain both instance and 281 factory methods. */ 282 struct objc_category 283 { 284 const char* category_name; /* Name of the category. 285 Name contained in the 286 () of the category 287 definition. */ 288 const char* class_name; /* Name of the class to 289 which the category 290 belongs. */ 291 struct objc_method_list *instance_methods; /* Linked list of 292 instance methods 293 defined in the 294 category. NULL 295 indicates no instance 296 methods defined. */ 297 struct objc_method_list *class_methods; /* Linked list of 298 factory methods 299 defined in the 300 category. NULL 301 indicates no class 302 methods defined. */ 303 struct objc_protocol_list *protocols; /* List of Protocols 304 conformed to. */ 305 }; 306 307 #endif /* __objc_private_module_abi_8_INCLUDE_GNU */ 308