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