Mercurial > hg > CbC > CbC_gcc
comparison gcc/collect2-aix.h @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | |
children | 04ced10e8804 |
comparison
equal
deleted
inserted
replaced
52:c156f1bd5cd9 | 55:77e2b8dfacca |
---|---|
1 /* AIX cross support for collect2. | |
2 Copyright (C) 2009 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 | |
7 the terms of the GNU General Public License as published by the Free | |
8 Software Foundation; either version 3, or (at your option) any later | |
9 version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GCC; see the file COPYING3. If not see | |
18 <http://www.gnu.org/licenses/>. */ | |
19 | |
20 /* collect2-aix.c requires mmap support. It should otherwise be | |
21 fairly portable. */ | |
22 #if defined(CROSS_DIRECTORY_STRUCTURE) \ | |
23 && defined(TARGET_AIX_VERSION) \ | |
24 && HAVE_MMAP | |
25 | |
26 #define CROSS_AIX_SUPPORT 1 | |
27 | |
28 /* ------------------------------------------------------------------------- | |
29 Definitions adapted from bfd. (Fairly heavily adapted in some cases.) | |
30 ------------------------------------------------------------------------- */ | |
31 | |
32 /* Compatiblity types for bfd. */ | |
33 typedef unsigned HOST_WIDE_INT bfd_vma; | |
34 | |
35 /* The size of an archive's fl_magic field. */ | |
36 #define FL_MAGIC_SIZE 8 | |
37 | |
38 /* The expected contents of fl_magic for big archives. */ | |
39 #define FL_MAGIC_BIG_AR "<bigaf>\012" | |
40 | |
41 /* The size of each offset string in the header of a big archive. */ | |
42 #define AR_BIG_OFFSET_SIZE 20 | |
43 | |
44 /* The format of the file header in a "big" XCOFF archive. */ | |
45 struct external_big_ar_filehdr | |
46 { | |
47 /* Magic string. */ | |
48 char fl_magic[FL_MAGIC_SIZE]; | |
49 | |
50 /* Offset of the member table (decimal ASCII string). */ | |
51 char fl_memoff[AR_BIG_OFFSET_SIZE]; | |
52 | |
53 /* Offset of the global symbol table for 32-bit objects (decimal ASCII | |
54 string). */ | |
55 char fl_symoff[AR_BIG_OFFSET_SIZE]; | |
56 | |
57 /* Offset of the global symbol table for 64-bit objects (decimal ASCII | |
58 string). */ | |
59 char fl_symoff64[AR_BIG_OFFSET_SIZE]; | |
60 | |
61 /* Offset of the first member in the archive (decimal ASCII string). */ | |
62 char fl_firstmemoff[AR_BIG_OFFSET_SIZE]; | |
63 | |
64 /* Offset of the last member in the archive (decimal ASCII string). */ | |
65 char fl_lastmemoff[AR_BIG_OFFSET_SIZE]; | |
66 | |
67 /* Offset of the first member on the free list (decimal ASCII | |
68 string). */ | |
69 char fl_freeoff[AR_BIG_OFFSET_SIZE]; | |
70 }; | |
71 | |
72 /* Each archive name is followed by this many bytes of magic string. */ | |
73 #define SXCOFFARFMAG 2 | |
74 | |
75 /* The format of a member header in a "big" XCOFF archive. */ | |
76 struct external_big_ar_member | |
77 { | |
78 /* File size not including the header (decimal ASCII string). */ | |
79 char ar_size[AR_BIG_OFFSET_SIZE]; | |
80 | |
81 /* File offset of next archive member (decimal ASCII string). */ | |
82 char ar_nextoff[AR_BIG_OFFSET_SIZE]; | |
83 | |
84 /* File offset of previous archive member (decimal ASCII string). */ | |
85 char ar_prevoff[AR_BIG_OFFSET_SIZE]; | |
86 | |
87 /* File mtime (decimal ASCII string). */ | |
88 char ar_date[12]; | |
89 | |
90 /* File UID (decimal ASCII string). */ | |
91 char ar_uid[12]; | |
92 | |
93 /* File GID (decimal ASCII string). */ | |
94 char ar_gid[12]; | |
95 | |
96 /* File mode (octal ASCII string). */ | |
97 char ar_mode[12]; | |
98 | |
99 /* Length of file name (decimal ASCII string). */ | |
100 char ar_namlen[4]; | |
101 | |
102 /* This structure is followed by the file name. The length of the | |
103 name is given in the namlen field. If the length of the name is | |
104 odd, the name is followed by a null byte. The name and optional | |
105 null byte are followed by XCOFFARFMAG, which is not included in | |
106 namlen. The contents of the archive member follow; the number of | |
107 bytes is given in the size field. */ | |
108 }; | |
109 | |
110 /* The known values of f_magic in an XCOFF file header. */ | |
111 #define U802WRMAGIC 0730 /* Writeable text segments. */ | |
112 #define U802ROMAGIC 0735 /* Readonly sharable text segments. */ | |
113 #define U802TOCMAGIC 0737 /* Readonly text segments and TOC. */ | |
114 #define U803XTOCMAGIC 0757 /* Aix 4.3 64-bit XCOFF. */ | |
115 #define U64_TOCMAGIC 0767 /* AIX 5+ 64-bit XCOFF. */ | |
116 | |
117 /* The number of bytes in an XCOFF file's f_magic field. */ | |
118 #define F_MAGIC_SIZE 2 | |
119 | |
120 /* The format of a 32-bit XCOFF file header. */ | |
121 struct external_filehdr_32 | |
122 { | |
123 /* The magic number. */ | |
124 char f_magic[F_MAGIC_SIZE]; | |
125 | |
126 /* The number of sections. */ | |
127 char f_nscns[2]; | |
128 | |
129 /* Time & date stamp. */ | |
130 char f_timdat[4]; | |
131 | |
132 /* The offset of the symbol table from the start of the file. */ | |
133 char f_symptr[4]; | |
134 | |
135 /* The number of entries in the symbol table. */ | |
136 char f_nsyms[4]; | |
137 | |
138 /* The size of the auxillary header. */ | |
139 char f_opthdr[2]; | |
140 | |
141 /* Flags. */ | |
142 char f_flags[2]; | |
143 }; | |
144 | |
145 /* The format of a 64-bit XCOFF file header. */ | |
146 struct external_filehdr_64 | |
147 { | |
148 /* The magic number. */ | |
149 char f_magic[F_MAGIC_SIZE]; | |
150 | |
151 /* The number of sections. */ | |
152 char f_nscns[2]; | |
153 | |
154 /* Time & date stamp. */ | |
155 char f_timdat[4]; | |
156 | |
157 /* The offset of the symbol table from the start of the file. */ | |
158 char f_symptr[8]; | |
159 | |
160 /* The size of the auxillary header. */ | |
161 char f_opthdr[2]; | |
162 | |
163 /* Flags. */ | |
164 char f_flags[2]; | |
165 | |
166 /* The number of entries in the symbol table. */ | |
167 char f_nsyms[4]; | |
168 }; | |
169 | |
170 /* An internal representation of the XCOFF file header. */ | |
171 struct internal_filehdr | |
172 { | |
173 unsigned short f_magic; | |
174 unsigned short f_nscns; | |
175 long f_timdat; | |
176 bfd_vma f_symptr; | |
177 long f_nsyms; | |
178 unsigned short f_opthdr; | |
179 unsigned short f_flags; | |
180 }; | |
181 | |
182 /* Symbol classes have their names in the debug section if this flag | |
183 is set. */ | |
184 #define DBXMASK 0x80 | |
185 | |
186 /* The format of an XCOFF symbol-table entry. */ | |
187 struct external_syment | |
188 { | |
189 union { | |
190 struct { | |
191 union { | |
192 /* The name of the symbol. There is an implicit null character | |
193 after the end of the array. */ | |
194 char n_name[8]; | |
195 struct { | |
196 /* If n_zeroes is zero, n_offset is the offset the name from | |
197 the start of the string table. */ | |
198 char n_zeroes[4]; | |
199 char n_offset[4]; | |
200 } u; | |
201 } u; | |
202 | |
203 /* The symbol's value. */ | |
204 char n_value[4]; | |
205 } xcoff32; | |
206 struct { | |
207 /* The symbol's value. */ | |
208 char n_value[8]; | |
209 | |
210 /* The offset of the symbol from the start of the string table. */ | |
211 char n_offset[4]; | |
212 } xcoff64; | |
213 } u; | |
214 | |
215 /* The number of the section to which this symbol belongs. */ | |
216 char n_scnum[2]; | |
217 | |
218 /* The type of symbol. (It can be interpreted as an n_lang | |
219 and an n_cpu byte, but we don't care about that here.) */ | |
220 char n_type[2]; | |
221 | |
222 /* The class of symbol (a C_* value). */ | |
223 char n_sclass[1]; | |
224 | |
225 /* The number of auxillary symbols attached to this entry. */ | |
226 char n_numaux[1]; | |
227 }; | |
228 | |
229 /* Definitions required by collect2. */ | |
230 #define C_EXT 2 | |
231 | |
232 #define F_SHROBJ 0x2000 | |
233 | |
234 #define N_UNDEF ((short) 0) | |
235 #define N_TMASK 060 | |
236 #define N_BTSHFT 4 | |
237 | |
238 #define DT_NON 0 | |
239 #define DT_FCN 2 | |
240 | |
241 /* ------------------------------------------------------------------------- | |
242 Local code. | |
243 ------------------------------------------------------------------------- */ | |
244 | |
245 /* An internal representation of an XCOFF symbol-table entry, | |
246 which is associated with the API-defined SYMENT type. */ | |
247 struct internal_syment | |
248 { | |
249 char n_name[9]; | |
250 unsigned int n_zeroes; | |
251 bfd_vma n_offset; | |
252 bfd_vma n_value; | |
253 short n_scnum; | |
254 unsigned short n_flags; | |
255 unsigned short n_type; | |
256 unsigned char n_sclass; | |
257 unsigned char n_numaux; | |
258 }; | |
259 typedef struct internal_syment SYMENT; | |
260 | |
261 /* The internal representation of the API-defined LDFILE type. */ | |
262 struct internal_ldfile | |
263 { | |
264 /* The file handle for the associated file, or -1 if it hasn't been | |
265 opened yet. */ | |
266 int fd; | |
267 | |
268 /* The start of the current XCOFF object, if one has been mapped | |
269 into memory. Null otherwise. */ | |
270 char *object; | |
271 | |
272 /* The offset of OBJECT from the start of the containing page. */ | |
273 size_t page_offset; | |
274 | |
275 /* The size of the file pointed to by OBJECT. Valid iff OFFSET | |
276 is nonnull. */ | |
277 size_t object_size; | |
278 | |
279 /* The offset of the next member in an archive after OBJECT, | |
280 or -1 if this isn't an archive. Valid iff OFFSET is nonnull. */ | |
281 off_t next_member; | |
282 | |
283 /* The parsed version of the XCOFF file header. */ | |
284 struct internal_filehdr filehdr; | |
285 }; | |
286 typedef struct internal_ldfile LDFILE; | |
287 | |
288 /* The API allows the file header to be directly accessed via this macro. */ | |
289 #define HEADER(FILE) ((FILE)->filehdr) | |
290 | |
291 /* API-defined return codes. SUCCESS must be > 0 and FAILURE must be <= 0. */ | |
292 #define SUCCESS 1 | |
293 #define FAILURE 0 | |
294 | |
295 /* API-defined functions. */ | |
296 extern LDFILE *ldopen (char *, LDFILE *); | |
297 extern char *ldgetname (LDFILE *, SYMENT *); | |
298 extern int ldtbread (LDFILE *, long, SYMENT *); | |
299 extern int ldclose (LDFILE *); | |
300 | |
301 #endif |