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