1 /* Declarations for meta-data attribute tags. 2 Copyright (C) 2011 Free Software Foundation, Inc. 3 Contributed by Iain Sandoe 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3, or (at your option) 10 any later version. 11 12 GCC is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING3. If not see 19 <http://www.gnu.org/licenses/>. */ 20 21 /* These are identifiers used to flag meta-data attributes such that they 22 survive LTO and might be placed in correct sections for the target. */ 23 24 enum objc_runtime_tree_index 25 { 26 OCTI_RT_OBJC_META, 27 OCTI_RT_META_BASE, 28 29 OCTI_RT_META_CLASS, 30 OCTI_RT_META_METACLASS, 31 OCTI_RT_META_CATEGORY, 32 OCTI_RT_META_PROTOCOL, 33 34 OCTI_RT_META_CLASS_CLS_VARS, 35 OCTI_RT_META_CLASS_NST_VARS, 36 37 OCTI_RT_META_CLASS_CLS_METH, 38 OCTI_RT_META_CLASS_NST_METH, 39 OCTI_RT_META_CATEG_CLS_METH, 40 OCTI_RT_META_CATEG_NST_METH, 41 OCTI_RT_META_PROTO_CLS_METH, 42 OCTI_RT_META_PROTO_NST_METH, 43 44 OCTI_RT_META_CLASS_PROT, 45 OCTI_RT_META_CATEG_PROT, 46 OCTI_RT_META_PROT_REFS, 47 48 OCTI_RT_META_MSG_REFS, 49 OCTI_RT_META_SEL_REFS, 50 51 OCTI_RT_META_CLSLST_REFS, 52 OCTI_RT_META_CLASS_REF, 53 OCTI_RT_META_SUPER_REF, 54 OCTI_RT_META_CLSLST_NLZY_LAB, 55 OCTI_RT_META_CLSLST_LAB, 56 OCTI_RT_META_LAB_PROTOLIST, 57 OCTI_RT_META_LAB_NLZY_CAT, 58 OCTI_RT_META_LAB_CAT, 59 60 OCTI_RT_META_PROPERTY_LIST, 61 OCTI_RT_META_PROTOCOL_EXT, 62 OCTI_RT_META_CLASS_EXT, 63 64 OCTI_RT_META_CLASS_NAME, 65 OCTI_RT_META_METHD_NAME, 66 OCTI_RT_META_METHD_TYPE, 67 OCTI_RT_META_PROPN_ATTR, 68 69 OCTI_RT_META_MODULES, 70 OCTI_RT_META_SYMTAB, 71 OCTI_RT_META_INFO, 72 73 OCTI_RT_META_EHTYPE, 74 75 OCTI_RT_META_CONST_STR, 76 77 OCTI_RT_META_MAX 78 }; 79 80 /* Tags for the META data so that the backend can put them in the correct 81 sections for targets/runtimes (Darwin/NeXT) that require this. 82 This information also survives LTO - which might produce mixed language 83 output. */ 84 85 /* Objective-C meta data attribute tag */ 86 #define objc_meta objc_rt_trees[OCTI_RT_OBJC_META] 87 /* Attribute values, base = default section. */ 88 #define meta_base objc_rt_trees[OCTI_RT_META_BASE] 89 90 /* CLASS. */ 91 #define meta_class objc_rt_trees[OCTI_RT_META_CLASS] 92 /* METACLASS. */ 93 #define meta_metaclass objc_rt_trees[OCTI_RT_META_METACLASS] 94 /* CLASS. */ 95 #define meta_category objc_rt_trees[OCTI_RT_META_CATEGORY] 96 /* PROTOCOL. */ 97 #define meta_protocol objc_rt_trees[OCTI_RT_META_PROTOCOL] 98 99 /* Class class vars section. */ 100 #define meta_clac_vars objc_rt_trees[OCTI_RT_META_CLASS_CLS_VARS] 101 /* Class instance vars section. */ 102 #define meta_clai_vars objc_rt_trees[OCTI_RT_META_CLASS_NST_VARS] 103 /* Class class methods section. */ 104 #define meta_clac_meth objc_rt_trees[OCTI_RT_META_CLASS_CLS_METH] 105 /* Class instance methods section. */ 106 #define meta_clai_meth objc_rt_trees[OCTI_RT_META_CLASS_NST_METH] 107 /* Category class methods section. */ 108 #define meta_catc_meth objc_rt_trees[OCTI_RT_META_CATEG_CLS_METH] 109 /* Category instance methods section. */ 110 #define meta_cati_meth objc_rt_trees[OCTI_RT_META_CATEG_NST_METH] 111 #define meta_proto_cls_meth \ 112 objc_rt_trees[OCTI_RT_META_PROTO_CLS_METH] 113 #define meta_proto_nst_meth \ 114 objc_rt_trees[OCTI_RT_META_PROTO_NST_METH] 115 116 /* Class protocols. */ 117 #define meta_clas_prot objc_rt_trees[OCTI_RT_META_CLASS_PROT] 118 /* Category protocols. */ 119 #define meta_catg_prot objc_rt_trees[OCTI_RT_META_CATEG_PROT] 120 /* Protocol references. */ 121 #define meta_proto_ref objc_rt_trees[OCTI_RT_META_PROT_REFS] 122 123 /* Message refs. */ 124 #define meta_mref objc_rt_trees[OCTI_RT_META_MSG_REFS] 125 /* Selector refs. */ 126 #define meta_sel_refs objc_rt_trees[OCTI_RT_META_SEL_REFS] 127 128 /* Class list refs. */ 129 #define meta_class_ref objc_rt_trees[OCTI_RT_META_CLSLST_REFS] 130 #define meta_class_reference \ 131 objc_rt_trees[OCTI_RT_META_CLASS_REF] 132 #define meta_superclass_ref \ 133 objc_rt_trees[OCTI_RT_META_SUPER_REF] 134 /* Class list Label. */ 135 #define meta_label_classlist \ 136 objc_rt_trees[OCTI_RT_META_CLSLST_LAB] 137 /* Class list Label (non lazy). */ 138 #define meta_label_nonlazy_classlist \ 139 objc_rt_trees[OCTI_RT_META_CLSLST_NLZY_LAB] 140 #define meta_label_categorylist \ 141 objc_rt_trees[OCTI_RT_META_LAB_CAT] 142 #define meta_label_nonlazy_categorylist \ 143 objc_rt_trees[OCTI_RT_META_LAB_NLZY_CAT] 144 145 #define meta_label_protocollist \ 146 objc_rt_trees[OCTI_RT_META_LAB_PROTOLIST] 147 148 149 /* V1 - property list. */ 150 #define meta_proplist objc_rt_trees[OCTI_RT_META_PROPERTY_LIST] 151 #define meta_protocol_extension \ 152 objc_rt_trees[OCTI_RT_META_PROTOCOL_EXT] 153 #define meta_class_extension \ 154 objc_rt_trees[OCTI_RT_META_CLASS_EXT] 155 /* String sections. */ 156 #define meta_class_name objc_rt_trees[OCTI_RT_META_CLASS_NAME] 157 #define meta_meth_name objc_rt_trees[OCTI_RT_META_METHD_NAME] 158 #define meta_meth_type objc_rt_trees[OCTI_RT_META_METHD_TYPE] 159 #define meta_prop_name_attr \ 160 objc_rt_trees[OCTI_RT_META_PROPN_ATTR] 161 162 #define meta_modules objc_rt_trees[OCTI_RT_META_MODULES] 163 #define meta_symtab objc_rt_trees[OCTI_RT_META_SYMTAB] 164 #define meta_info objc_rt_trees[OCTI_RT_META_INFO] 165 166 #define meta_ehtype objc_rt_trees[OCTI_RT_META_EHTYPE] 167 168 #define meta_const_str objc_rt_trees[OCTI_RT_META_CONST_STR] 169 170 #define OBJCMETA(DECL,VERS,KIND) \ 171 if (VERS) \ 172 DECL_ATTRIBUTES (DECL) = build_tree_list ((VERS), (KIND)); 173