/* Declarations for meta-data attribute tags. Copyright (C) 2011-2014 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 . */ /* 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_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 OBJCMETA(DECL,VERS,KIND) \ if (VERS) \ DECL_ATTRIBUTES (DECL) = build_tree_list ((VERS), (KIND));