| /* Declarations for meta-data attribute tags. |
| Copyright (C) 2011-2022 Free Software Foundation, Inc. |
| Contributed by Iain Sandoe |
| |
| This file is part of GCC. |
| |
| GCC is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3, or (at your option) |
| any later version. |
| |
| GCC is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GCC; see the file COPYING3. If not see |
| <http://www.gnu.org/licenses/>. */ |
| |
| /* These are identifiers used to flag meta-data attributes such that they |
| survive LTO and might be placed in correct sections for the target. */ |
| |
| enum objc_runtime_tree_index |
| { |
| OCTI_RT_OBJC_META, |
| OCTI_RT_META_BASE, |
| |
| OCTI_RT_META_CLASS, |
| OCTI_RT_META_METACLASS, |
| OCTI_RT_META_CATEGORY, |
| OCTI_RT_META_PROTOCOL, |
| |
| OCTI_RT_META_CLASS_CLS_VARS, |
| OCTI_RT_META_CLASS_NST_VARS, |
| |
| OCTI_RT_META_CLASS_CLS_METH, |
| OCTI_RT_META_CLASS_NST_METH, |
| OCTI_RT_META_CATEG_CLS_METH, |
| OCTI_RT_META_CATEG_NST_METH, |
| OCTI_RT_META_PROTO_CLS_METH, |
| OCTI_RT_META_PROTO_NST_METH, |
| |
| OCTI_RT_META_CLASS_PROT, |
| OCTI_RT_META_CATEG_PROT, |
| OCTI_RT_META_PROT_REFS, |
| |
| OCTI_RT_META_MSG_REFS, |
| OCTI_RT_META_SEL_REFS, |
| |
| OCTI_RT_META_CLSLST_REFS, |
| OCTI_RT_META_CLASS_REF, |
| OCTI_RT_META_SUPER_REF, |
| OCTI_RT_META_CLSLST_NLZY_LAB, |
| OCTI_RT_META_CLSLST_LAB, |
| OCTI_RT_META_LAB_PROTOLIST, |
| OCTI_RT_META_LAB_NLZY_CAT, |
| OCTI_RT_META_LAB_CAT, |
| |
| OCTI_RT_META_PROPERTY_LIST, |
| OCTI_RT_META_PROTOCOL_EXT, |
| OCTI_RT_META_CLASS_EXT, |
| |
| OCTI_RT_META_CLASS_NAME, |
| OCTI_RT_META_METHD_NAME, |
| OCTI_RT_META_METHD_TYPE, |
| OCTI_RT_META_PROPN_ATTR, |
| |
| OCTI_RT_META_MODULES, |
| OCTI_RT_META_SYMTAB, |
| OCTI_RT_META_INFO, |
| |
| OCTI_RT_META_EHTYPE, |
| |
| OCTI_RT_META_CONST_STR, |
| |
| OCTI_RT_META_IVAR_REF, |
| |
| OCTI_RT_META_MAX |
| }; |
| |
| extern GTY(()) tree objc_rt_trees[OCTI_RT_META_MAX]; |
| |
| /* Tags for the META data so that the backend can put them in the correct |
| sections for targets/runtimes (Darwin/NeXT) that require this. |
| This information also survives LTO - which might produce mixed language |
| output. */ |
| |
| /* Objective-C meta data attribute tag */ |
| #define objc_meta objc_rt_trees[OCTI_RT_OBJC_META] |
| /* Attribute values, base = default section. */ |
| #define meta_base objc_rt_trees[OCTI_RT_META_BASE] |
| |
| /* CLASS. */ |
| #define meta_class objc_rt_trees[OCTI_RT_META_CLASS] |
| /* METACLASS. */ |
| #define meta_metaclass objc_rt_trees[OCTI_RT_META_METACLASS] |
| /* CLASS. */ |
| #define meta_category objc_rt_trees[OCTI_RT_META_CATEGORY] |
| /* PROTOCOL. */ |
| #define meta_protocol objc_rt_trees[OCTI_RT_META_PROTOCOL] |
| |
| /* Class class vars section. */ |
| #define meta_clac_vars objc_rt_trees[OCTI_RT_META_CLASS_CLS_VARS] |
| /* Class instance vars section. */ |
| #define meta_clai_vars objc_rt_trees[OCTI_RT_META_CLASS_NST_VARS] |
| /* Class class methods section. */ |
| #define meta_clac_meth objc_rt_trees[OCTI_RT_META_CLASS_CLS_METH] |
| /* Class instance methods section. */ |
| #define meta_clai_meth objc_rt_trees[OCTI_RT_META_CLASS_NST_METH] |
| /* Category class methods section. */ |
| #define meta_catc_meth objc_rt_trees[OCTI_RT_META_CATEG_CLS_METH] |
| /* Category instance methods section. */ |
| #define meta_cati_meth objc_rt_trees[OCTI_RT_META_CATEG_NST_METH] |
| #define meta_proto_cls_meth \ |
| objc_rt_trees[OCTI_RT_META_PROTO_CLS_METH] |
| #define meta_proto_nst_meth \ |
| objc_rt_trees[OCTI_RT_META_PROTO_NST_METH] |
| |
| /* Class protocols. */ |
| #define meta_clas_prot objc_rt_trees[OCTI_RT_META_CLASS_PROT] |
| /* Category protocols. */ |
| #define meta_catg_prot objc_rt_trees[OCTI_RT_META_CATEG_PROT] |
| /* Protocol references. */ |
| #define meta_proto_ref objc_rt_trees[OCTI_RT_META_PROT_REFS] |
| |
| /* Message refs. */ |
| #define meta_mref objc_rt_trees[OCTI_RT_META_MSG_REFS] |
| /* Selector refs. */ |
| #define meta_sel_refs objc_rt_trees[OCTI_RT_META_SEL_REFS] |
| |
| /* Class list refs. */ |
| #define meta_class_ref objc_rt_trees[OCTI_RT_META_CLSLST_REFS] |
| #define meta_class_reference \ |
| objc_rt_trees[OCTI_RT_META_CLASS_REF] |
| #define meta_superclass_ref \ |
| objc_rt_trees[OCTI_RT_META_SUPER_REF] |
| /* Class list Label. */ |
| #define meta_label_classlist \ |
| objc_rt_trees[OCTI_RT_META_CLSLST_LAB] |
| /* Class list Label (non lazy). */ |
| #define meta_label_nonlazy_classlist \ |
| objc_rt_trees[OCTI_RT_META_CLSLST_NLZY_LAB] |
| #define meta_label_categorylist \ |
| objc_rt_trees[OCTI_RT_META_LAB_CAT] |
| #define meta_label_nonlazy_categorylist \ |
| objc_rt_trees[OCTI_RT_META_LAB_NLZY_CAT] |
| |
| #define meta_label_protocollist \ |
| objc_rt_trees[OCTI_RT_META_LAB_PROTOLIST] |
| |
| |
| /* V1 - property list. */ |
| #define meta_proplist objc_rt_trees[OCTI_RT_META_PROPERTY_LIST] |
| #define meta_protocol_extension \ |
| objc_rt_trees[OCTI_RT_META_PROTOCOL_EXT] |
| #define meta_class_extension \ |
| objc_rt_trees[OCTI_RT_META_CLASS_EXT] |
| /* String sections. */ |
| #define meta_class_name objc_rt_trees[OCTI_RT_META_CLASS_NAME] |
| #define meta_meth_name objc_rt_trees[OCTI_RT_META_METHD_NAME] |
| #define meta_meth_type objc_rt_trees[OCTI_RT_META_METHD_TYPE] |
| #define meta_prop_name_attr \ |
| objc_rt_trees[OCTI_RT_META_PROPN_ATTR] |
| |
| #define meta_modules objc_rt_trees[OCTI_RT_META_MODULES] |
| #define meta_symtab objc_rt_trees[OCTI_RT_META_SYMTAB] |
| #define meta_info objc_rt_trees[OCTI_RT_META_INFO] |
| |
| #define meta_ehtype objc_rt_trees[OCTI_RT_META_EHTYPE] |
| |
| #define meta_const_str objc_rt_trees[OCTI_RT_META_CONST_STR] |
| |
| #define meta_ivar_ref objc_rt_trees[OCTI_RT_META_IVAR_REF] |
| |
| #define OBJCMETA(DECL,VERS,KIND) \ |
| if (VERS) \ |
| DECL_ATTRIBUTES (DECL) = build_tree_list ((VERS), (KIND)); |