]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/xsym.c
Remove "\nError: " suffix from nat/fork-inferior.c:trace_start_error warning message
[thirdparty/binutils-gdb.git] / bfd / xsym.c
CommitLineData
3af9a47b 1/* xSYM symbol-file support for BFD.
82704155 2 Copyright (C) 1999-2019 Free Software Foundation, Inc.
3af9a47b
NC
3
4 This file is part of BFD, the Binary File Descriptor library.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
cd123cb7 8 the Free Software Foundation; either version 3 of the License, or
3af9a47b
NC
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
e84d6fca 17 along with this program; if not, write to the Free Software
cd123cb7
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
3af9a47b 20
100fc767
TG
21/* xSYM is the debugging format used by CodeWarrior on Mac OS classic. */
22
3db64b00 23#include "sysdep.h"
df7b86aa 24#include "alloca-conf.h"
3af9a47b
NC
25#include "xsym.h"
26#include "bfd.h"
3af9a47b
NC
27#include "libbfd.h"
28
07d6d2b8
AM
29#define bfd_sym_close_and_cleanup _bfd_generic_close_and_cleanup
30#define bfd_sym_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
31#define bfd_sym_new_section_hook _bfd_generic_new_section_hook
32#define bfd_sym_bfd_is_local_label_name bfd_generic_is_local_label_name
d00dd7dc 33#define bfd_sym_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false
07d6d2b8
AM
34#define bfd_sym_get_lineno _bfd_nosymbols_get_lineno
35#define bfd_sym_find_nearest_line _bfd_nosymbols_find_nearest_line
36#define bfd_sym_find_line _bfd_nosymbols_find_line
37#define bfd_sym_find_inliner_info _bfd_nosymbols_find_inliner_info
60bb06bc 38#define bfd_sym_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string
07d6d2b8
AM
39#define bfd_sym_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
40#define bfd_sym_read_minisymbols _bfd_generic_read_minisymbols
41#define bfd_sym_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
42#define bfd_sym_set_arch_mach _bfd_generic_set_arch_mach
43#define bfd_sym_get_section_contents _bfd_generic_get_section_contents
44#define bfd_sym_set_section_contents _bfd_generic_set_section_contents
116c20d2 45#define bfd_sym_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
07d6d2b8
AM
46#define bfd_sym_bfd_relax_section bfd_generic_relax_section
47#define bfd_sym_bfd_gc_sections bfd_generic_gc_sections
48#define bfd_sym_bfd_lookup_section_flags bfd_generic_lookup_section_flags
49#define bfd_sym_bfd_merge_sections bfd_generic_merge_sections
50#define bfd_sym_bfd_is_group_section bfd_generic_is_group_section
51#define bfd_sym_bfd_discard_group bfd_generic_discard_group
52#define bfd_sym_section_already_linked _bfd_generic_section_already_linked
53#define bfd_sym_bfd_define_common_symbol bfd_generic_define_common_symbol
34a87bb0 54#define bfd_sym_bfd_link_hide_symbol _bfd_generic_link_hide_symbol
07d6d2b8
AM
55#define bfd_sym_bfd_define_start_stop bfd_generic_define_start_stop
56#define bfd_sym_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
57#define bfd_sym_bfd_link_add_symbols _bfd_generic_link_add_symbols
58#define bfd_sym_bfd_link_just_syms _bfd_generic_link_just_syms
1338dd10
PB
59#define bfd_sym_bfd_copy_link_hash_symbol_type \
60 _bfd_generic_copy_link_hash_symbol_type
07d6d2b8
AM
61#define bfd_sym_bfd_final_link _bfd_generic_final_link
62#define bfd_sym_bfd_link_split_section _bfd_generic_link_split_section
63#define bfd_sym_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
64#define bfd_sym_bfd_link_check_relocs _bfd_generic_link_check_relocs
3af9a47b
NC
65
66extern const bfd_target sym_vec;
67
68static int
f075ee0c 69pstrcmp (const char *as, const char *bs)
3af9a47b 70{
f075ee0c
AM
71 const unsigned char *a = (const unsigned char *) as;
72 const unsigned char *b = (const unsigned char *) bs;
3af9a47b
NC
73 unsigned char clen;
74 int ret;
75
f075ee0c 76 clen = (a[0] > b[0]) ? b[0] : a[0];
3af9a47b
NC
77 ret = memcmp (a + 1, b + 1, clen);
78 if (ret != 0)
79 return ret;
80
81 if (a[0] == b[0])
82 return 0;
83 else if (a[0] < b[0])
84 return -1;
85 else
f075ee0c 86 return 1;
3af9a47b
NC
87}
88
89static unsigned long
116c20d2
NC
90compute_offset (unsigned long first_page,
91 unsigned long page_size,
92 unsigned long entry_size,
91d6fa6a 93 unsigned long sym_index)
3af9a47b
NC
94{
95 unsigned long entries_per_page = page_size / entry_size;
91d6fa6a
NC
96 unsigned long page_number = first_page + (sym_index / entries_per_page);
97 unsigned long page_offset = (sym_index % entries_per_page) * entry_size;
3af9a47b
NC
98
99 return (page_number * page_size) + page_offset;
100}
101
b34976b6 102bfd_boolean
116c20d2 103bfd_sym_mkobject (bfd *abfd ATTRIBUTE_UNUSED)
3af9a47b 104{
b34976b6 105 return 1;
3af9a47b
NC
106}
107
108void
116c20d2
NC
109bfd_sym_print_symbol (bfd *abfd ATTRIBUTE_UNUSED,
110 void * afile ATTRIBUTE_UNUSED,
111 asymbol *symbol ATTRIBUTE_UNUSED,
112 bfd_print_symbol_type how ATTRIBUTE_UNUSED)
3af9a47b
NC
113{
114 return;
115}
116
b34976b6 117bfd_boolean
116c20d2 118bfd_sym_valid (bfd *abfd)
3af9a47b
NC
119{
120 if (abfd == NULL || abfd->xvec == NULL)
121 return 0;
122
e84d6fca 123 return abfd->xvec == &sym_vec;
3af9a47b
NC
124}
125
126unsigned char *
116c20d2 127bfd_sym_read_name_table (bfd *abfd, bfd_sym_header_block *dshb)
3af9a47b
NC
128{
129 unsigned char *rstr;
130 long ret;
131 size_t table_size = dshb->dshb_nte.dti_page_count * dshb->dshb_page_size;
132 size_t table_offset = dshb->dshb_nte.dti_first_page * dshb->dshb_page_size;
e84d6fca 133
116c20d2 134 rstr = bfd_alloc (abfd, table_size);
3af9a47b
NC
135 if (rstr == NULL)
136 return rstr;
137
138 bfd_seek (abfd, table_offset, SEEK_SET);
139 ret = bfd_bread (rstr, table_size, abfd);
e84d6fca 140 if (ret < 0 || (unsigned long) ret != table_size)
3af9a47b
NC
141 {
142 bfd_release (abfd, rstr);
143 return NULL;
144 }
e84d6fca 145
3af9a47b
NC
146 return rstr;
147}
148
149void
116c20d2
NC
150bfd_sym_parse_file_reference_v32 (unsigned char *buf,
151 size_t len,
152 bfd_sym_file_reference *entry)
3af9a47b
NC
153{
154 BFD_ASSERT (len == 6);
155
156 entry->fref_frte_index = bfd_getb16 (buf);
157 entry->fref_offset = bfd_getb32 (buf + 2);
158}
159
160void
116c20d2
NC
161bfd_sym_parse_disk_table_v32 (unsigned char *buf,
162 size_t len,
163 bfd_sym_table_info *table)
3af9a47b
NC
164{
165 BFD_ASSERT (len == 8);
e84d6fca 166
3af9a47b
NC
167 table->dti_first_page = bfd_getb16 (buf);
168 table->dti_page_count = bfd_getb16 (buf + 2);
169 table->dti_object_count = bfd_getb32 (buf + 4);
e84d6fca 170}
3af9a47b
NC
171
172void
116c20d2
NC
173bfd_sym_parse_header_v32 (unsigned char *buf,
174 size_t len,
175 bfd_sym_header_block *header)
3af9a47b
NC
176{
177 BFD_ASSERT (len == 154);
e84d6fca 178
3af9a47b
NC
179 memcpy (header->dshb_id, buf, 32);
180 header->dshb_page_size = bfd_getb16 (buf + 32);
181 header->dshb_hash_page = bfd_getb16 (buf + 34);
182 header->dshb_root_mte = bfd_getb16 (buf + 36);
183 header->dshb_mod_date = bfd_getb32 (buf + 38);
e84d6fca 184
3af9a47b
NC
185 bfd_sym_parse_disk_table_v32 (buf + 42, 8, &header->dshb_frte);
186 bfd_sym_parse_disk_table_v32 (buf + 50, 8, &header->dshb_rte);
187 bfd_sym_parse_disk_table_v32 (buf + 58, 8, &header->dshb_mte);
188 bfd_sym_parse_disk_table_v32 (buf + 66, 8, &header->dshb_cmte);
189 bfd_sym_parse_disk_table_v32 (buf + 74, 8, &header->dshb_cvte);
190 bfd_sym_parse_disk_table_v32 (buf + 82, 8, &header->dshb_csnte);
191 bfd_sym_parse_disk_table_v32 (buf + 90, 8, &header->dshb_clte);
192 bfd_sym_parse_disk_table_v32 (buf + 98, 8, &header->dshb_ctte);
193 bfd_sym_parse_disk_table_v32 (buf + 106, 8, &header->dshb_tte);
194 bfd_sym_parse_disk_table_v32 (buf + 114, 8, &header->dshb_nte);
195 bfd_sym_parse_disk_table_v32 (buf + 122, 8, &header->dshb_tinfo);
196 bfd_sym_parse_disk_table_v32 (buf + 130, 8, &header->dshb_fite);
197 bfd_sym_parse_disk_table_v32 (buf + 138, 8, &header->dshb_const);
e84d6fca 198
3af9a47b
NC
199 memcpy (&header->dshb_file_creator, buf + 146, 4);
200 memcpy (&header->dshb_file_type, buf + 150, 4);
201}
202
203int
116c20d2 204bfd_sym_read_header_v32 (bfd *abfd, bfd_sym_header_block *header)
3af9a47b
NC
205{
206 unsigned char buf[154];
207 long ret;
e84d6fca 208
3af9a47b
NC
209 ret = bfd_bread (buf, 154, abfd);
210 if (ret != 154)
211 return -1;
e84d6fca 212
3af9a47b 213 bfd_sym_parse_header_v32 (buf, 154, header);
e84d6fca 214
3af9a47b
NC
215 return 0;
216}
217
218int
116c20d2
NC
219bfd_sym_read_header_v34 (bfd *abfd ATTRIBUTE_UNUSED,
220 bfd_sym_header_block *header ATTRIBUTE_UNUSED)
3af9a47b
NC
221{
222 abort ();
223}
224
225int
116c20d2
NC
226bfd_sym_read_header (bfd *abfd,
227 bfd_sym_header_block *header,
228 bfd_sym_version version)
3af9a47b
NC
229{
230 switch (version)
231 {
232 case BFD_SYM_VERSION_3_5:
233 case BFD_SYM_VERSION_3_4:
234 return bfd_sym_read_header_v34 (abfd, header);
235 case BFD_SYM_VERSION_3_3:
236 case BFD_SYM_VERSION_3_2:
237 return bfd_sym_read_header_v32 (abfd, header);
238 case BFD_SYM_VERSION_3_1:
239 default:
116c20d2 240 return 0;
3af9a47b
NC
241 }
242}
243
244int
116c20d2 245bfd_sym_read_version (bfd *abfd, bfd_sym_version *version)
3af9a47b 246{
f075ee0c 247 char version_string[32];
3af9a47b 248 long ret;
e84d6fca 249
3af9a47b
NC
250 ret = bfd_bread (version_string, sizeof (version_string), abfd);
251 if (ret != sizeof (version_string))
252 return -1;
e84d6fca 253
3af9a47b
NC
254 if (pstrcmp (version_string, BFD_SYM_VERSION_STR_3_1) == 0)
255 *version = BFD_SYM_VERSION_3_1;
256 else if (pstrcmp (version_string, BFD_SYM_VERSION_STR_3_2) == 0)
257 *version = BFD_SYM_VERSION_3_2;
258 else if (pstrcmp (version_string, BFD_SYM_VERSION_STR_3_3) == 0)
259 *version = BFD_SYM_VERSION_3_3;
260 else if (pstrcmp (version_string, BFD_SYM_VERSION_STR_3_4) == 0)
261 *version = BFD_SYM_VERSION_3_4;
262 else if (pstrcmp (version_string, BFD_SYM_VERSION_STR_3_5) == 0)
263 *version = BFD_SYM_VERSION_3_5;
264 else
265 return -1;
e84d6fca 266
3af9a47b
NC
267 return 0;
268}
269
270void
116c20d2
NC
271bfd_sym_display_table_summary (FILE *f,
272 bfd_sym_table_info *dti,
273 const char *name)
3af9a47b
NC
274{
275 fprintf (f, "%-6s %13ld %13ld %13ld\n",
276 name,
277 dti->dti_first_page,
278 dti->dti_page_count,
279 dti->dti_object_count);
280}
281
282void
116c20d2 283bfd_sym_display_header (FILE *f, bfd_sym_header_block *dshb)
3af9a47b
NC
284{
285 fprintf (f, " Version: %.*s\n", dshb->dshb_id[0], dshb->dshb_id + 1);
286 fprintf (f, " Page Size: 0x%x\n", dshb->dshb_page_size);
287 fprintf (f, " Hash Page: %lu\n", dshb->dshb_hash_page);
288 fprintf (f, " Root MTE: %lu\n", dshb->dshb_root_mte);
289 fprintf (f, " Modification Date: ");
290 fprintf (f, "[unimplemented]");
291 fprintf (f, " (0x%lx)\n", dshb->dshb_mod_date);
292
293 fprintf (f, " File Creator: %.4s Type: %.4s\n\n",
294 dshb->dshb_file_creator, dshb->dshb_file_type);
e84d6fca 295
3af9a47b
NC
296 fprintf (f, "Table Name First Page Page Count Object Count\n");
297 fprintf (f, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
e84d6fca 298
3af9a47b
NC
299 bfd_sym_display_table_summary (f, &dshb->dshb_nte, "NTE");
300 bfd_sym_display_table_summary (f, &dshb->dshb_rte, "RTE");
301 bfd_sym_display_table_summary (f, &dshb->dshb_mte, "MTE");
302 bfd_sym_display_table_summary (f, &dshb->dshb_frte, "FRTE");
303 bfd_sym_display_table_summary (f, &dshb->dshb_cmte, "CMTE");
304 bfd_sym_display_table_summary (f, &dshb->dshb_cvte, "CVTE");
305 bfd_sym_display_table_summary (f, &dshb->dshb_csnte, "CSNTE");
306 bfd_sym_display_table_summary (f, &dshb->dshb_clte, "CLTE");
307 bfd_sym_display_table_summary (f, &dshb->dshb_ctte, "CTTE");
308 bfd_sym_display_table_summary (f, &dshb->dshb_tte, "TTE");
309 bfd_sym_display_table_summary (f, &dshb->dshb_tinfo, "TINFO");
310 bfd_sym_display_table_summary (f, &dshb->dshb_fite, "FITE");
311 bfd_sym_display_table_summary (f, &dshb->dshb_const, "CONST");
e84d6fca 312
3af9a47b
NC
313 fprintf (f, "\n");
314}
315
316void
116c20d2
NC
317bfd_sym_parse_resources_table_entry_v32 (unsigned char *buf,
318 size_t len,
319 bfd_sym_resources_table_entry *entry)
3af9a47b
NC
320{
321 BFD_ASSERT (len == 18);
322
323 memcpy (&entry->rte_res_type, buf, 4);
324 entry->rte_res_number = bfd_getb16 (buf + 4);
325 entry->rte_nte_index = bfd_getb32 (buf + 6);
326 entry->rte_mte_first = bfd_getb16 (buf + 10);
327 entry->rte_mte_last = bfd_getb16 (buf + 12);
328 entry->rte_res_size = bfd_getb32 (buf + 14);
329}
330
331void
116c20d2
NC
332bfd_sym_parse_modules_table_entry_v33 (unsigned char *buf,
333 size_t len,
334 bfd_sym_modules_table_entry *entry)
3af9a47b
NC
335{
336 BFD_ASSERT (len == 46);
337
338 entry->mte_rte_index = bfd_getb16 (buf);
339 entry->mte_res_offset = bfd_getb32 (buf + 2);
340 entry->mte_size = bfd_getb32 (buf + 6);
341 entry->mte_kind = buf[10];
342 entry->mte_scope = buf[11];
343 entry->mte_parent = bfd_getb16 (buf + 12);
344 bfd_sym_parse_file_reference_v32 (buf + 14, 6, &entry->mte_imp_fref);
345 entry->mte_imp_end = bfd_getb32 (buf + 20);
346 entry->mte_nte_index = bfd_getb32 (buf + 24);
347 entry->mte_cmte_index = bfd_getb16 (buf + 28);
348 entry->mte_cvte_index = bfd_getb32 (buf + 30);
349 entry->mte_clte_index = bfd_getb16 (buf + 34);
350 entry->mte_ctte_index = bfd_getb16 (buf + 36);
351 entry->mte_csnte_idx_1 = bfd_getb32 (buf + 38);
352 entry->mte_csnte_idx_2 = bfd_getb32 (buf + 42);
353}
354
355void
116c20d2
NC
356bfd_sym_parse_file_references_table_entry_v32 (unsigned char *buf,
357 size_t len,
358 bfd_sym_file_references_table_entry *entry)
3af9a47b
NC
359{
360 unsigned int type;
e84d6fca 361
3af9a47b
NC
362 BFD_ASSERT (len == 10);
363
364 memset (entry, 0, sizeof (bfd_sym_file_references_table_entry));
365 type = bfd_getb16 (buf);
366
367 switch (type)
368 {
369 case BFD_SYM_END_OF_LIST_3_2:
370 entry->generic.type = BFD_SYM_END_OF_LIST;
371 break;
372
373 case BFD_SYM_FILE_NAME_INDEX_3_2:
374 entry->filename.type = BFD_SYM_FILE_NAME_INDEX;
375 entry->filename.nte_index = bfd_getb32 (buf + 2);
376 entry->filename.mod_date = bfd_getb32 (buf + 6);
377 break;
378
379 default:
380 entry->entry.mte_index = type;
381 entry->entry.file_offset = bfd_getb32 (buf + 2);
382 }
383}
384
385void
116c20d2
NC
386bfd_sym_parse_contained_modules_table_entry_v32 (unsigned char *buf,
387 size_t len,
388 bfd_sym_contained_modules_table_entry *entry)
3af9a47b
NC
389{
390 unsigned int type;
391
392 BFD_ASSERT (len == 6);
393
394 memset (entry, 0, sizeof (bfd_sym_contained_modules_table_entry));
395 type = bfd_getb16 (buf);
e84d6fca 396
3af9a47b
NC
397 switch (type)
398 {
399 case BFD_SYM_END_OF_LIST_3_2:
400 entry->generic.type = BFD_SYM_END_OF_LIST;
401 break;
402
403 default:
404 entry->entry.mte_index = type;
405 entry->entry.nte_index = bfd_getb32 (buf + 2);
406 break;
407 }
408}
409
410void
116c20d2
NC
411bfd_sym_parse_contained_variables_table_entry_v32 (unsigned char *buf,
412 size_t len,
413 bfd_sym_contained_variables_table_entry *entry)
3af9a47b
NC
414{
415 unsigned int type;
e84d6fca 416
3af9a47b
NC
417 BFD_ASSERT (len == 26);
418
419 memset (entry, 0, sizeof (bfd_sym_contained_variables_table_entry));
420 type = bfd_getb16 (buf);
421
422 switch (type)
423 {
424 case BFD_SYM_END_OF_LIST_3_2:
425 entry->generic.type = BFD_SYM_END_OF_LIST;
426 break;
427
428 case BFD_SYM_SOURCE_FILE_CHANGE_3_2:
429 entry->file.type = BFD_SYM_SOURCE_FILE_CHANGE;
430 bfd_sym_parse_file_reference_v32 (buf + 2, 6, &entry->file.fref);
431 break;
432
433 default:
434 entry->entry.tte_index = type;
435 entry->entry.nte_index = bfd_getb32 (buf + 2);
436 entry->entry.file_delta = bfd_getb16 (buf + 6);
437 entry->entry.scope = buf[8];
438 entry->entry.la_size = buf[9];
439
440 if (entry->entry.la_size == BFD_SYM_CVTE_SCA)
441 {
442 entry->entry.address.scstruct.sca_kind = buf[10];
443 entry->entry.address.scstruct.sca_class = buf[11];
444 entry->entry.address.scstruct.sca_offset = bfd_getb32 (buf + 12);
445 }
446 else if (entry->entry.la_size <= BFD_SYM_CVTE_SCA)
447 {
169a6afd 448#if BFD_SYM_CVTE_SCA > 0
116c20d2
NC
449 memcpy (&entry->entry.address.lastruct.la, buf + 10,
450 BFD_SYM_CVTE_SCA);
169a6afd 451#endif
3af9a47b
NC
452 entry->entry.address.lastruct.la_kind = buf[23];
453 }
454 else if (entry->entry.la_size == BFD_SYM_CVTE_BIG_LA)
455 {
456 entry->entry.address.biglastruct.big_la = bfd_getb32 (buf + 10);
457 entry->entry.address.biglastruct.big_la_kind = buf[12];
458 }
459 }
460}
461
462void
116c20d2
NC
463bfd_sym_parse_contained_statements_table_entry_v32 (unsigned char *buf,
464 size_t len,
465 bfd_sym_contained_statements_table_entry *entry)
3af9a47b
NC
466{
467 unsigned int type;
468
469 BFD_ASSERT (len == 8);
470
471 memset (entry, 0, sizeof (bfd_sym_contained_statements_table_entry));
472 type = bfd_getb16 (buf);
e84d6fca 473
3af9a47b
NC
474 switch (type)
475 {
476 case BFD_SYM_END_OF_LIST_3_2:
477 entry->generic.type = BFD_SYM_END_OF_LIST;
478 break;
479
480 case BFD_SYM_SOURCE_FILE_CHANGE_3_2:
481 entry->file.type = BFD_SYM_SOURCE_FILE_CHANGE;
482 bfd_sym_parse_file_reference_v32 (buf + 2, 6, &entry->file.fref);
483 break;
484
485 default:
486 entry->entry.mte_index = type;
487 entry->entry.mte_offset = bfd_getb16 (buf + 2);
488 entry->entry.file_delta = bfd_getb32 (buf + 4);
489 break;
490 }
491}
492
493void
116c20d2
NC
494bfd_sym_parse_contained_labels_table_entry_v32 (unsigned char *buf,
495 size_t len,
496 bfd_sym_contained_labels_table_entry *entry)
3af9a47b
NC
497{
498 unsigned int type;
499
500 BFD_ASSERT (len == 12);
501
502 memset (entry, 0, sizeof (bfd_sym_contained_labels_table_entry));
503 type = bfd_getb16 (buf);
e84d6fca 504
3af9a47b
NC
505 switch (type)
506 {
507 case BFD_SYM_END_OF_LIST_3_2:
508 entry->generic.type = BFD_SYM_END_OF_LIST;
509 break;
510
511 case BFD_SYM_SOURCE_FILE_CHANGE_3_2:
512 entry->file.type = BFD_SYM_SOURCE_FILE_CHANGE;
513 bfd_sym_parse_file_reference_v32 (buf + 2, 6, &entry->file.fref);
514 break;
515
516 default:
517 entry->entry.mte_index = type;
518 entry->entry.mte_offset = bfd_getb16 (buf + 2);
519 entry->entry.nte_index = bfd_getb32 (buf + 4);
520 entry->entry.file_delta = bfd_getb16 (buf + 8);
521 entry->entry.scope = bfd_getb16 (buf + 10);
522 break;
523 }
524}
525
526void
116c20d2
NC
527bfd_sym_parse_type_table_entry_v32 (unsigned char *buf,
528 size_t len,
529 bfd_sym_type_table_entry *entry)
3af9a47b
NC
530{
531 BFD_ASSERT (len == 4);
e84d6fca 532
3af9a47b
NC
533 *entry = bfd_getb32 (buf);
534}
535
536int
116c20d2
NC
537bfd_sym_fetch_resources_table_entry (bfd *abfd,
538 bfd_sym_resources_table_entry *entry,
91d6fa6a 539 unsigned long sym_index)
3af9a47b 540{
116c20d2 541 void (*parser) (unsigned char *, size_t, bfd_sym_resources_table_entry *);
3af9a47b
NC
542 unsigned long offset;
543 unsigned long entry_size;
544 unsigned char buf[18];
545 bfd_sym_data_struct *sdata = NULL;
546
e84d6fca 547 parser = NULL;
3af9a47b
NC
548 BFD_ASSERT (bfd_sym_valid (abfd));
549 sdata = abfd->tdata.sym_data;
550
91d6fa6a 551 if (sym_index == 0)
3af9a47b
NC
552 return -1;
553
554 switch (sdata->version)
555 {
556 case BFD_SYM_VERSION_3_5:
557 case BFD_SYM_VERSION_3_4:
558 return -1;
559
560 case BFD_SYM_VERSION_3_3:
561 case BFD_SYM_VERSION_3_2:
562 entry_size = 18;
563 parser = bfd_sym_parse_resources_table_entry_v32;
564 break;
565
566 case BFD_SYM_VERSION_3_1:
567 default:
568 return -1;
569 }
570 if (parser == NULL)
571 return -1;
572
573 offset = compute_offset (sdata->header.dshb_rte.dti_first_page,
574 sdata->header.dshb_page_size,
91d6fa6a 575 entry_size, sym_index);
e84d6fca 576
3af9a47b
NC
577 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
578 return -1;
579 if (bfd_bread (buf, entry_size, abfd) != entry_size)
580 return -1;
581
582 (*parser) (buf, entry_size, entry);
e84d6fca 583
3af9a47b
NC
584 return 0;
585}
586
587int
116c20d2
NC
588bfd_sym_fetch_modules_table_entry (bfd *abfd,
589 bfd_sym_modules_table_entry *entry,
91d6fa6a 590 unsigned long sym_index)
3af9a47b 591{
116c20d2 592 void (*parser) (unsigned char *, size_t, bfd_sym_modules_table_entry *);
3af9a47b
NC
593 unsigned long offset;
594 unsigned long entry_size;
595 unsigned char buf[46];
596 bfd_sym_data_struct *sdata = NULL;
597
e84d6fca 598 parser = NULL;
3af9a47b
NC
599 BFD_ASSERT (bfd_sym_valid (abfd));
600 sdata = abfd->tdata.sym_data;
601
91d6fa6a 602 if (sym_index == 0)
3af9a47b
NC
603 return -1;
604
605 switch (sdata->version)
606 {
607 case BFD_SYM_VERSION_3_5:
608 case BFD_SYM_VERSION_3_4:
609 return -1;
610
611 case BFD_SYM_VERSION_3_3:
612 entry_size = 46;
613 parser = bfd_sym_parse_modules_table_entry_v33;
614 break;
615
616 case BFD_SYM_VERSION_3_2:
617 case BFD_SYM_VERSION_3_1:
618 default:
619 return -1;
620 }
621 if (parser == NULL)
622 return -1;
623
624 offset = compute_offset (sdata->header.dshb_mte.dti_first_page,
625 sdata->header.dshb_page_size,
91d6fa6a 626 entry_size, sym_index);
e84d6fca 627
3af9a47b
NC
628 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
629 return -1;
630 if (bfd_bread (buf, entry_size, abfd) != entry_size)
631 return -1;
632
633 (*parser) (buf, entry_size, entry);
e84d6fca 634
3af9a47b
NC
635 return 0;
636}
637
638int
116c20d2
NC
639bfd_sym_fetch_file_references_table_entry (bfd *abfd,
640 bfd_sym_file_references_table_entry *entry,
91d6fa6a 641 unsigned long sym_index)
3af9a47b 642{
116c20d2 643 void (*parser) (unsigned char *, size_t, bfd_sym_file_references_table_entry *);
3af9a47b
NC
644 unsigned long offset;
645 unsigned long entry_size = 0;
646 unsigned char buf[8];
647 bfd_sym_data_struct *sdata = NULL;
648
e84d6fca 649 parser = NULL;
3af9a47b
NC
650 BFD_ASSERT (bfd_sym_valid (abfd));
651 sdata = abfd->tdata.sym_data;
652
91d6fa6a 653 if (sym_index == 0)
3af9a47b
NC
654 return -1;
655
656 switch (sdata->version)
657 {
658 case BFD_SYM_VERSION_3_3:
659 case BFD_SYM_VERSION_3_2:
660 entry_size = 10;
661 parser = bfd_sym_parse_file_references_table_entry_v32;
662 break;
663
664 case BFD_SYM_VERSION_3_5:
665 case BFD_SYM_VERSION_3_4:
666 case BFD_SYM_VERSION_3_1:
667 default:
668 break;
669 }
670
671 if (parser == NULL)
672 return -1;
673
674 offset = compute_offset (sdata->header.dshb_frte.dti_first_page,
675 sdata->header.dshb_page_size,
91d6fa6a 676 entry_size, sym_index);
e84d6fca 677
3af9a47b
NC
678 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
679 return -1;
680 if (bfd_bread (buf, entry_size, abfd) != entry_size)
681 return -1;
682
683 (*parser) (buf, entry_size, entry);
e84d6fca 684
3af9a47b
NC
685 return 0;
686}
687
688int
116c20d2
NC
689bfd_sym_fetch_contained_modules_table_entry (bfd *abfd,
690 bfd_sym_contained_modules_table_entry *entry,
91d6fa6a 691 unsigned long sym_index)
3af9a47b 692{
116c20d2 693 void (*parser) (unsigned char *, size_t, bfd_sym_contained_modules_table_entry *);
3af9a47b
NC
694 unsigned long offset;
695 unsigned long entry_size = 0;
696 unsigned char buf[6];
697 bfd_sym_data_struct *sdata = NULL;
698
e84d6fca 699 parser = NULL;
3af9a47b
NC
700 BFD_ASSERT (bfd_sym_valid (abfd));
701 sdata = abfd->tdata.sym_data;
702
91d6fa6a 703 if (sym_index == 0)
3af9a47b
NC
704 return -1;
705
706 switch (sdata->version)
707 {
708 case BFD_SYM_VERSION_3_3:
709 case BFD_SYM_VERSION_3_2:
710 entry_size = 6;
711 parser = bfd_sym_parse_contained_modules_table_entry_v32;
712 break;
713
714 case BFD_SYM_VERSION_3_5:
715 case BFD_SYM_VERSION_3_4:
716 case BFD_SYM_VERSION_3_1:
717 default:
718 break;
719 }
720
721 if (parser == NULL)
722 return -1;
723
724 offset = compute_offset (sdata->header.dshb_cmte.dti_first_page,
725 sdata->header.dshb_page_size,
91d6fa6a 726 entry_size, sym_index);
e84d6fca 727
3af9a47b
NC
728 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
729 return -1;
730 if (bfd_bread (buf, entry_size, abfd) != entry_size)
731 return -1;
732
733 (*parser) (buf, entry_size, entry);
e84d6fca 734
3af9a47b
NC
735 return 0;
736}
737
738int
116c20d2
NC
739bfd_sym_fetch_contained_variables_table_entry (bfd *abfd,
740 bfd_sym_contained_variables_table_entry *entry,
91d6fa6a 741 unsigned long sym_index)
3af9a47b 742{
116c20d2 743 void (*parser) (unsigned char *, size_t, bfd_sym_contained_variables_table_entry *);
3af9a47b
NC
744 unsigned long offset;
745 unsigned long entry_size = 0;
746 unsigned char buf[26];
747 bfd_sym_data_struct *sdata = NULL;
748
e84d6fca 749 parser = NULL;
3af9a47b
NC
750 BFD_ASSERT (bfd_sym_valid (abfd));
751 sdata = abfd->tdata.sym_data;
752
91d6fa6a 753 if (sym_index == 0)
3af9a47b
NC
754 return -1;
755
756 switch (sdata->version)
757 {
758 case BFD_SYM_VERSION_3_3:
759 case BFD_SYM_VERSION_3_2:
760 entry_size = 26;
761 parser = bfd_sym_parse_contained_variables_table_entry_v32;
762 break;
763
764 case BFD_SYM_VERSION_3_5:
765 case BFD_SYM_VERSION_3_4:
766 case BFD_SYM_VERSION_3_1:
767 default:
768 break;
769 }
770
771 if (parser == NULL)
772 return -1;
773
774 offset = compute_offset (sdata->header.dshb_cvte.dti_first_page,
775 sdata->header.dshb_page_size,
91d6fa6a 776 entry_size, sym_index);
e84d6fca 777
3af9a47b
NC
778 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
779 return -1;
780 if (bfd_bread (buf, entry_size, abfd) != entry_size)
781 return -1;
782
783 (*parser) (buf, entry_size, entry);
e84d6fca 784
3af9a47b
NC
785 return 0;
786}
787
788int
116c20d2
NC
789bfd_sym_fetch_contained_statements_table_entry (bfd *abfd,
790 bfd_sym_contained_statements_table_entry *entry,
91d6fa6a 791 unsigned long sym_index)
3af9a47b 792{
116c20d2 793 void (*parser) (unsigned char *, size_t, bfd_sym_contained_statements_table_entry *);
3af9a47b
NC
794 unsigned long offset;
795 unsigned long entry_size = 0;
796 unsigned char buf[8];
797 bfd_sym_data_struct *sdata = NULL;
798
e84d6fca 799 parser = NULL;
3af9a47b
NC
800 BFD_ASSERT (bfd_sym_valid (abfd));
801 sdata = abfd->tdata.sym_data;
802
91d6fa6a 803 if (sym_index == 0)
3af9a47b
NC
804 return -1;
805
806 switch (sdata->version)
807 {
808 case BFD_SYM_VERSION_3_3:
809 case BFD_SYM_VERSION_3_2:
810 entry_size = 8;
811 parser = bfd_sym_parse_contained_statements_table_entry_v32;
812 break;
813
814 case BFD_SYM_VERSION_3_5:
815 case BFD_SYM_VERSION_3_4:
816 case BFD_SYM_VERSION_3_1:
817 default:
818 break;
819 }
820
821 if (parser == NULL)
822 return -1;
823
824 offset = compute_offset (sdata->header.dshb_csnte.dti_first_page,
825 sdata->header.dshb_page_size,
91d6fa6a 826 entry_size, sym_index);
e84d6fca 827
3af9a47b
NC
828 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
829 return -1;
830 if (bfd_bread (buf, entry_size, abfd) != entry_size)
831 return -1;
832
833 (*parser) (buf, entry_size, entry);
e84d6fca 834
3af9a47b
NC
835 return 0;
836}
837
838int
116c20d2
NC
839bfd_sym_fetch_contained_labels_table_entry (bfd *abfd,
840 bfd_sym_contained_labels_table_entry *entry,
91d6fa6a 841 unsigned long sym_index)
3af9a47b 842{
116c20d2 843 void (*parser) (unsigned char *, size_t, bfd_sym_contained_labels_table_entry *);
3af9a47b
NC
844 unsigned long offset;
845 unsigned long entry_size = 0;
846 unsigned char buf[12];
847 bfd_sym_data_struct *sdata = NULL;
848
e84d6fca 849 parser = NULL;
3af9a47b
NC
850 BFD_ASSERT (bfd_sym_valid (abfd));
851 sdata = abfd->tdata.sym_data;
852
91d6fa6a 853 if (sym_index == 0)
3af9a47b
NC
854 return -1;
855
856 switch (sdata->version)
857 {
858 case BFD_SYM_VERSION_3_3:
859 case BFD_SYM_VERSION_3_2:
860 entry_size = 12;
861 parser = bfd_sym_parse_contained_labels_table_entry_v32;
862 break;
863
864 case BFD_SYM_VERSION_3_5:
865 case BFD_SYM_VERSION_3_4:
866 case BFD_SYM_VERSION_3_1:
867 default:
868 break;
869 }
870
871 if (parser == NULL)
872 return -1;
873
874 offset = compute_offset (sdata->header.dshb_clte.dti_first_page,
875 sdata->header.dshb_page_size,
91d6fa6a 876 entry_size, sym_index);
e84d6fca 877
3af9a47b
NC
878 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
879 return -1;
880 if (bfd_bread (buf, entry_size, abfd) != entry_size)
881 return -1;
882
883 (*parser) (buf, entry_size, entry);
e84d6fca 884
3af9a47b
NC
885 return 0;
886}
887
888int
116c20d2
NC
889bfd_sym_fetch_contained_types_table_entry (bfd *abfd,
890 bfd_sym_contained_types_table_entry *entry,
91d6fa6a 891 unsigned long sym_index)
3af9a47b 892{
116c20d2 893 void (*parser) (unsigned char *, size_t, bfd_sym_contained_types_table_entry *);
3af9a47b
NC
894 unsigned long offset;
895 unsigned long entry_size = 0;
896 unsigned char buf[0];
897 bfd_sym_data_struct *sdata = NULL;
898
e84d6fca 899 parser = NULL;
3af9a47b
NC
900 BFD_ASSERT (bfd_sym_valid (abfd));
901 sdata = abfd->tdata.sym_data;
902
91d6fa6a 903 if (sym_index == 0)
3af9a47b
NC
904 return -1;
905
906 switch (sdata->version)
907 {
908 case BFD_SYM_VERSION_3_3:
909 case BFD_SYM_VERSION_3_2:
910 entry_size = 0;
911 parser = NULL;
912 break;
913
914 case BFD_SYM_VERSION_3_5:
915 case BFD_SYM_VERSION_3_4:
916 case BFD_SYM_VERSION_3_1:
917 default:
918 break;
919 }
920
921 if (parser == NULL)
922 return -1;
923
924 offset = compute_offset (sdata->header.dshb_ctte.dti_first_page,
925 sdata->header.dshb_page_size,
91d6fa6a 926 entry_size, sym_index);
e84d6fca 927
3af9a47b
NC
928 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
929 return -1;
930 if (bfd_bread (buf, entry_size, abfd) != entry_size)
931 return -1;
932
933 (*parser) (buf, entry_size, entry);
e84d6fca 934
3af9a47b
NC
935 return 0;
936}
937
938int
116c20d2
NC
939bfd_sym_fetch_file_references_index_table_entry (bfd *abfd,
940 bfd_sym_file_references_index_table_entry *entry,
91d6fa6a 941 unsigned long sym_index)
3af9a47b 942{
116c20d2 943 void (*parser) (unsigned char *, size_t, bfd_sym_file_references_index_table_entry *);
3af9a47b
NC
944 unsigned long offset;
945 unsigned long entry_size = 0;
946 unsigned char buf[0];
947 bfd_sym_data_struct *sdata = NULL;
948
e84d6fca 949 parser = NULL;
3af9a47b
NC
950 BFD_ASSERT (bfd_sym_valid (abfd));
951 sdata = abfd->tdata.sym_data;
952
91d6fa6a 953 if (sym_index == 0)
3af9a47b
NC
954 return -1;
955
956 switch (sdata->version)
957 {
958 case BFD_SYM_VERSION_3_3:
959 case BFD_SYM_VERSION_3_2:
960 entry_size = 0;
961 parser = NULL;
962 break;
963
964 case BFD_SYM_VERSION_3_5:
965 case BFD_SYM_VERSION_3_4:
966 case BFD_SYM_VERSION_3_1:
967 default:
968 break;
969 }
970
971 if (parser == NULL)
972 return -1;
973
974 offset = compute_offset (sdata->header.dshb_fite.dti_first_page,
975 sdata->header.dshb_page_size,
91d6fa6a 976 entry_size, sym_index);
e84d6fca 977
3af9a47b
NC
978 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
979 return -1;
980 if (bfd_bread (buf, entry_size, abfd) != entry_size)
981 return -1;
982
983 (*parser) (buf, entry_size, entry);
e84d6fca 984
3af9a47b
NC
985 return 0;
986}
987
988int
116c20d2
NC
989bfd_sym_fetch_constant_pool_entry (bfd *abfd,
990 bfd_sym_constant_pool_entry *entry,
91d6fa6a 991 unsigned long sym_index)
3af9a47b 992{
116c20d2 993 void (*parser) (unsigned char *, size_t, bfd_sym_constant_pool_entry *);
3af9a47b
NC
994 unsigned long offset;
995 unsigned long entry_size = 0;
996 unsigned char buf[0];
997 bfd_sym_data_struct *sdata = NULL;
998
e84d6fca 999 parser = NULL;
3af9a47b
NC
1000 BFD_ASSERT (bfd_sym_valid (abfd));
1001 sdata = abfd->tdata.sym_data;
1002
91d6fa6a 1003 if (sym_index == 0)
3af9a47b
NC
1004 return -1;
1005
1006 switch (sdata->version)
1007 {
1008 case BFD_SYM_VERSION_3_3:
1009 case BFD_SYM_VERSION_3_2:
1010 entry_size = 0;
1011 parser = NULL;
1012 break;
1013
1014 case BFD_SYM_VERSION_3_5:
1015 case BFD_SYM_VERSION_3_4:
1016 case BFD_SYM_VERSION_3_1:
1017 default:
1018 break;
1019 }
1020
1021 if (parser == NULL)
1022 return -1;
1023
1024 offset = compute_offset (sdata->header.dshb_fite.dti_first_page,
1025 sdata->header.dshb_page_size,
91d6fa6a 1026 entry_size, sym_index);
e84d6fca 1027
3af9a47b
NC
1028 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
1029 return -1;
1030 if (bfd_bread (buf, entry_size, abfd) != entry_size)
1031 return -1;
1032
1033 (*parser) (buf, entry_size, entry);
e84d6fca 1034
3af9a47b
NC
1035 return 0;
1036}
1037
1038int
116c20d2
NC
1039bfd_sym_fetch_type_table_entry (bfd *abfd,
1040 bfd_sym_type_table_entry *entry,
91d6fa6a 1041 unsigned long sym_index)
3af9a47b 1042{
116c20d2 1043 void (*parser) (unsigned char *, size_t, bfd_sym_type_table_entry *);
3af9a47b
NC
1044 unsigned long offset;
1045 unsigned long entry_size = 0;
1046 unsigned char buf[4];
1047 bfd_sym_data_struct *sdata = NULL;
1048
e84d6fca 1049 parser = NULL;
3af9a47b
NC
1050 BFD_ASSERT (bfd_sym_valid (abfd));
1051 sdata = abfd->tdata.sym_data;
1052
1053 switch (sdata->version)
1054 {
1055 case BFD_SYM_VERSION_3_3:
1056 case BFD_SYM_VERSION_3_2:
1057 entry_size = 4;
1058 parser = bfd_sym_parse_type_table_entry_v32;
1059 break;
1060
1061 case BFD_SYM_VERSION_3_5:
1062 case BFD_SYM_VERSION_3_4:
1063 case BFD_SYM_VERSION_3_1:
1064 default:
1065 break;
1066 }
1067
1068 if (parser == NULL)
1069 return -1;
1070
1071 offset = compute_offset (sdata->header.dshb_tte.dti_first_page,
1072 sdata->header.dshb_page_size,
91d6fa6a 1073 entry_size, sym_index);
e84d6fca 1074
3af9a47b
NC
1075 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
1076 return -1;
1077 if (bfd_bread (buf, entry_size, abfd) != entry_size)
1078 return -1;
1079
1080 (*parser) (buf, entry_size, entry);
e84d6fca 1081
3af9a47b
NC
1082 return 0;
1083}
1084
1085int
116c20d2
NC
1086bfd_sym_fetch_type_information_table_entry (bfd *abfd,
1087 bfd_sym_type_information_table_entry *entry,
1088 unsigned long offset)
3af9a47b
NC
1089{
1090 unsigned char buf[4];
3af9a47b
NC
1091
1092 BFD_ASSERT (bfd_sym_valid (abfd));
3af9a47b 1093
64fb1839 1094 if (offset == 0)
3af9a47b
NC
1095 return -1;
1096
1097 if (bfd_seek (abfd, offset, SEEK_SET) < 0)
1098 return -1;
1099
1100 if (bfd_bread (buf, 4, abfd) != 4)
1101 return -1;
1102 entry->nte_index = bfd_getb32 (buf);
e84d6fca 1103
3af9a47b
NC
1104 if (bfd_bread (buf, 2, abfd) != 2)
1105 return -1;
1106 entry->physical_size = bfd_getb16 (buf);
e84d6fca 1107
3af9a47b
NC
1108 if (entry->physical_size & 0x8000)
1109 {
1110 if (bfd_bread (buf, 4, abfd) != 4)
1111 return -1;
1112 entry->physical_size &= 0x7fff;
1113 entry->logical_size = bfd_getb32 (buf);
1114 entry->offset = offset + 10;
1115 }
1116 else
1117 {
1118 if (bfd_bread (buf, 2, abfd) != 2)
1119 return -1;
1120 entry->physical_size &= 0x7fff;
1121 entry->logical_size = bfd_getb16 (buf);
1122 entry->offset = offset + 8;
1123 }
1124
1125 return 0;
1126}
1127
1128int
116c20d2
NC
1129bfd_sym_fetch_type_table_information (bfd *abfd,
1130 bfd_sym_type_information_table_entry *entry,
91d6fa6a 1131 unsigned long sym_index)
3af9a47b
NC
1132{
1133 bfd_sym_type_table_entry tindex;
1134 bfd_sym_data_struct *sdata = NULL;
1135
1136 BFD_ASSERT (bfd_sym_valid (abfd));
1137 sdata = abfd->tdata.sym_data;
1138
1139 if (sdata->header.dshb_tte.dti_object_count <= 99)
1140 return -1;
91d6fa6a 1141 if (sym_index < 100)
3af9a47b
NC
1142 return -1;
1143
91d6fa6a 1144 if (bfd_sym_fetch_type_table_entry (abfd, &tindex, sym_index - 100) < 0)
3af9a47b
NC
1145 return -1;
1146 if (bfd_sym_fetch_type_information_table_entry (abfd, entry, tindex) < 0)
1147 return -1;
1148
1149 return 0;
1150}
1151
1152const unsigned char *
91d6fa6a 1153bfd_sym_symbol_name (bfd *abfd, unsigned long sym_index)
3af9a47b
NC
1154{
1155 bfd_sym_data_struct *sdata = NULL;
1156
1157 BFD_ASSERT (bfd_sym_valid (abfd));
1158 sdata = abfd->tdata.sym_data;
1159
91d6fa6a 1160 if (sym_index == 0)
f075ee0c 1161 return (const unsigned char *) "";
e84d6fca 1162
91d6fa6a
NC
1163 sym_index *= 2;
1164 if ((sym_index / sdata->header.dshb_page_size)
e84d6fca 1165 > sdata->header.dshb_nte.dti_page_count)
f075ee0c 1166 return (const unsigned char *) "\09[INVALID]";
e84d6fca 1167
91d6fa6a 1168 return (const unsigned char *) sdata->name_table + sym_index;
3af9a47b
NC
1169}
1170
1171const unsigned char *
91d6fa6a 1172bfd_sym_module_name (bfd *abfd, unsigned long sym_index)
3af9a47b
NC
1173{
1174 bfd_sym_modules_table_entry entry;
e84d6fca 1175
91d6fa6a 1176 if (bfd_sym_fetch_modules_table_entry (abfd, &entry, sym_index) < 0)
f075ee0c 1177 return (const unsigned char *) "\09[INVALID]";
3af9a47b
NC
1178
1179 return bfd_sym_symbol_name (abfd, entry.mte_nte_index);
1180}
1181
1182const char *
116c20d2 1183bfd_sym_unparse_storage_kind (enum bfd_sym_storage_kind kind)
3af9a47b
NC
1184{
1185 switch (kind)
1186 {
1187 case BFD_SYM_STORAGE_KIND_LOCAL: return "LOCAL";
1188 case BFD_SYM_STORAGE_KIND_VALUE: return "VALUE";
1189 case BFD_SYM_STORAGE_KIND_REFERENCE: return "REFERENCE";
1190 case BFD_SYM_STORAGE_KIND_WITH: return "WITH";
1191 default: return "[UNKNOWN]";
1192 }
1193}
1194
1195const char *
116c20d2 1196bfd_sym_unparse_storage_class (enum bfd_sym_storage_class kind)
3af9a47b
NC
1197{
1198 switch (kind)
1199 {
1200 case BFD_SYM_STORAGE_CLASS_REGISTER: return "REGISTER";
1201 case BFD_SYM_STORAGE_CLASS_GLOBAL: return "GLOBAL";
1202 case BFD_SYM_STORAGE_CLASS_FRAME_RELATIVE: return "FRAME_RELATIVE";
1203 case BFD_SYM_STORAGE_CLASS_STACK_RELATIVE: return "STACK_RELATIVE";
1204 case BFD_SYM_STORAGE_CLASS_ABSOLUTE: return "ABSOLUTE";
1205 case BFD_SYM_STORAGE_CLASS_CONSTANT: return "CONSTANT";
1206 case BFD_SYM_STORAGE_CLASS_RESOURCE: return "RESOURCE";
1207 case BFD_SYM_STORAGE_CLASS_BIGCONSTANT: return "BIGCONSTANT";
1208 default: return "[UNKNOWN]";
1209 }
1210}
1211
1212const char *
116c20d2 1213bfd_sym_unparse_module_kind (enum bfd_sym_module_kind kind)
3af9a47b
NC
1214{
1215 switch (kind)
1216 {
1217 case BFD_SYM_MODULE_KIND_NONE: return "NONE";
1218 case BFD_SYM_MODULE_KIND_PROGRAM: return "PROGRAM";
1219 case BFD_SYM_MODULE_KIND_UNIT: return "UNIT";
1220 case BFD_SYM_MODULE_KIND_PROCEDURE: return "PROCEDURE";
1221 case BFD_SYM_MODULE_KIND_FUNCTION: return "FUNCTION";
1222 case BFD_SYM_MODULE_KIND_DATA: return "DATA";
1223 case BFD_SYM_MODULE_KIND_BLOCK: return "BLOCK";
1224 default: return "[UNKNOWN]";
1225 }
1226}
1227
1228const char *
116c20d2 1229bfd_sym_unparse_symbol_scope (enum bfd_sym_symbol_scope scope)
3af9a47b
NC
1230{
1231 switch (scope)
1232 {
1233 case BFD_SYM_SYMBOL_SCOPE_LOCAL: return "LOCAL";
1234 case BFD_SYM_SYMBOL_SCOPE_GLOBAL: return "GLOBAL";
1235 default:
1236 return "[UNKNOWN]";
1237 }
1238}
1239
1240void
116c20d2
NC
1241bfd_sym_print_file_reference (bfd *abfd,
1242 FILE *f,
1243 bfd_sym_file_reference *entry)
3af9a47b
NC
1244{
1245 bfd_sym_file_references_table_entry frtentry;
1246 int ret;
1247
e84d6fca
AM
1248 ret = bfd_sym_fetch_file_references_table_entry (abfd, &frtentry,
1249 entry->fref_frte_index);
3af9a47b
NC
1250 fprintf (f, "FILE ");
1251
1252 if ((ret < 0) || (frtentry.generic.type != BFD_SYM_FILE_NAME_INDEX))
1253 fprintf (f, "[INVALID]");
1254 else
1255 fprintf (f, "\"%.*s\"",
1256 bfd_sym_symbol_name (abfd, frtentry.filename.nte_index)[0],
1257 &bfd_sym_symbol_name (abfd, frtentry.filename.nte_index)[1]);
1258
1259 fprintf (f, " (FRTE %lu)", entry->fref_frte_index);
1260}
1261
1262void
116c20d2
NC
1263bfd_sym_print_resources_table_entry (bfd *abfd,
1264 FILE *f,
1265 bfd_sym_resources_table_entry *entry)
3af9a47b
NC
1266{
1267 fprintf (f, " \"%.*s\" (NTE %lu), type \"%.4s\", num %u, size %lu, MTE %lu -- %lu",
1268 bfd_sym_symbol_name (abfd, entry->rte_nte_index)[0],
1269 &bfd_sym_symbol_name (abfd, entry->rte_nte_index)[1],
1270 entry->rte_nte_index, entry->rte_res_type, entry->rte_res_number,
1271 entry->rte_res_size, entry->rte_mte_first, entry->rte_mte_last);
e84d6fca 1272}
3af9a47b
NC
1273
1274void
116c20d2
NC
1275bfd_sym_print_modules_table_entry (bfd *abfd,
1276 FILE *f,
1277 bfd_sym_modules_table_entry *entry)
3af9a47b
NC
1278{
1279 fprintf (f, "\"%.*s\" (NTE %lu)",
1280 bfd_sym_symbol_name (abfd, entry->mte_nte_index)[0],
1281 &bfd_sym_symbol_name (abfd, entry->mte_nte_index)[1],
1282 entry->mte_nte_index);
e84d6fca
AM
1283
1284 fprintf (f, "\n ");
3af9a47b
NC
1285
1286 bfd_sym_print_file_reference (abfd, f, &entry->mte_imp_fref);
e84d6fca
AM
1287 fprintf (f, " range %lu -- %lu",
1288 entry->mte_imp_fref.fref_offset, entry->mte_imp_end);
3af9a47b 1289
e84d6fca 1290 fprintf (f, "\n ");
3af9a47b
NC
1291
1292 fprintf (f, "kind %s", bfd_sym_unparse_module_kind (entry->mte_kind));
1293 fprintf (f, ", scope %s", bfd_sym_unparse_symbol_scope (entry->mte_scope));
e84d6fca 1294
3af9a47b
NC
1295 fprintf (f, ", RTE %lu, offset %lu, size %lu",
1296 entry->mte_rte_index, entry->mte_res_offset, entry->mte_size);
1297
e84d6fca 1298 fprintf (f, "\n ");
3af9a47b 1299
e84d6fca 1300 fprintf (f, "CMTE %lu, CVTE %lu, CLTE %lu, CTTE %lu, CSNTE1 %lu, CSNTE2 %lu",
3af9a47b
NC
1301 entry->mte_cmte_index, entry->mte_cvte_index,
1302 entry->mte_clte_index, entry->mte_ctte_index,
1303 entry->mte_csnte_idx_1, entry->mte_csnte_idx_2);
e84d6fca 1304
3af9a47b
NC
1305 if (entry->mte_parent != 0)
1306 fprintf (f, ", parent %lu", entry->mte_parent);
1307 else
1308 fprintf (f, ", no parent");
1309
1310 if (entry->mte_cmte_index != 0)
1311 fprintf (f, ", child %lu", entry->mte_cmte_index);
1312 else
1313 fprintf (f, ", no child");
3af9a47b
NC
1314}
1315
1316void
116c20d2
NC
1317bfd_sym_print_file_references_table_entry (bfd *abfd,
1318 FILE *f,
1319 bfd_sym_file_references_table_entry *entry)
3af9a47b
NC
1320{
1321 switch (entry->generic.type)
1322 {
1323 case BFD_SYM_FILE_NAME_INDEX:
e84d6fca 1324 fprintf (f, "FILE \"%.*s\" (NTE %lu), modtime ",
3af9a47b
NC
1325 bfd_sym_symbol_name (abfd, entry->filename.nte_index)[0],
1326 &bfd_sym_symbol_name (abfd, entry->filename.nte_index)[1],
1327 entry->filename.nte_index);
1328
1329 fprintf (f, "[UNIMPLEMENTED]");
1330 /* printModDate (entry->filename.mod_date); */
1331 fprintf (f, " (0x%lx)", entry->filename.mod_date);
1332 break;
1333
1334 case BFD_SYM_END_OF_LIST:
1335 fprintf (f, "END");
1336 break;
1337
1338 default:
1339 fprintf (f, "\"%.*s\" (MTE %lu), offset %lu",
1340 bfd_sym_module_name (abfd, entry->entry.mte_index)[0],
1341 &bfd_sym_module_name (abfd, entry->entry.mte_index)[1],
1342 entry->entry.mte_index,
1343 entry->entry.file_offset);
1344 break;
1345 }
1346}
1347
1348void
116c20d2
NC
1349bfd_sym_print_contained_modules_table_entry (bfd *abfd,
1350 FILE *f,
1351 bfd_sym_contained_modules_table_entry *entry)
3af9a47b
NC
1352{
1353 switch (entry->generic.type)
1354 {
1355 case BFD_SYM_END_OF_LIST:
1356 fprintf (f, "END");
1357 break;
1358
1359 default:
1360 fprintf (f, "\"%.*s\" (MTE %lu, NTE %lu)",
1361 bfd_sym_module_name (abfd, entry->entry.mte_index)[0],
1362 &bfd_sym_module_name (abfd, entry->entry.mte_index)[1],
1363 entry->entry.mte_index,
1364 entry->entry.nte_index);
1365 break;
1366 }
1367}
1368
1369void
116c20d2
NC
1370bfd_sym_print_contained_variables_table_entry (bfd *abfd,
1371 FILE *f,
1372 bfd_sym_contained_variables_table_entry *entry)
3af9a47b
NC
1373{
1374 if (entry->generic.type == BFD_SYM_END_OF_LIST)
1375 {
1376 fprintf (f, "END");
1377 return;
1378 }
e84d6fca 1379
3af9a47b
NC
1380 if (entry->generic.type == BFD_SYM_SOURCE_FILE_CHANGE)
1381 {
1382 bfd_sym_print_file_reference (abfd, f, &entry->file.fref);
1383 fprintf (f, " offset %lu", entry->file.fref.fref_offset);
1384 return;
1385 }
e84d6fca 1386
3af9a47b
NC
1387 fprintf (f, "\"%.*s\" (NTE %lu)",
1388 bfd_sym_symbol_name (abfd, entry->entry.nte_index)[0],
1389 &bfd_sym_symbol_name (abfd, entry->entry.nte_index)[1],
1390 entry->entry.nte_index);
e84d6fca 1391
3af9a47b
NC
1392 fprintf (f, ", TTE %lu", entry->entry.tte_index);
1393 fprintf (f, ", offset %lu", entry->entry.file_delta);
1394 fprintf (f, ", scope %s", bfd_sym_unparse_symbol_scope (entry->entry.scope));
1395
1396 if (entry->entry.la_size == BFD_SYM_CVTE_SCA)
1397 fprintf (f, ", latype %s, laclass %s, laoffset %lu",
1398 bfd_sym_unparse_storage_kind (entry->entry.address.scstruct.sca_kind),
1399 bfd_sym_unparse_storage_class (entry->entry.address.scstruct.sca_class),
1400 entry->entry.address.scstruct.sca_offset);
1401 else if (entry->entry.la_size <= BFD_SYM_CVTE_LA_MAX_SIZE)
1402 {
1403 unsigned long i;
1404
1405 fprintf (f, ", la [");
1406 for (i = 0; i < entry->entry.la_size; i++)
1407 fprintf (f, "0x%02x ", entry->entry.address.lastruct.la[i]);
1408 fprintf (f, "]");
1409 }
1410 else if (entry->entry.la_size == BFD_SYM_CVTE_BIG_LA)
1411 fprintf (f, ", bigla %lu, biglakind %u",
e84d6fca 1412 entry->entry.address.biglastruct.big_la,
3af9a47b
NC
1413 entry->entry.address.biglastruct.big_la_kind);
1414
1415 else
1416 fprintf (f, ", la [INVALID]");
1417}
1418
1419void
116c20d2
NC
1420bfd_sym_print_contained_statements_table_entry (bfd *abfd,
1421 FILE *f,
1422 bfd_sym_contained_statements_table_entry *entry)
3af9a47b
NC
1423{
1424 if (entry->generic.type == BFD_SYM_END_OF_LIST)
1425 {
1426 fprintf (f, "END");
1427 return;
1428 }
e84d6fca 1429
3af9a47b
NC
1430 if (entry->generic.type == BFD_SYM_SOURCE_FILE_CHANGE)
1431 {
1432 bfd_sym_print_file_reference (abfd, f, &entry->file.fref);
1433 fprintf (f, " offset %lu", entry->file.fref.fref_offset);
1434 return;
1435 }
1436
1437 fprintf (f, "\"%.*s\" (MTE %lu), offset %lu, delta %lu",
1438 bfd_sym_module_name (abfd, entry->entry.mte_index)[0],
1439 &bfd_sym_module_name (abfd, entry->entry.mte_index)[1],
1440 entry->entry.mte_index,
1441 entry->entry.mte_offset,
1442 entry->entry.file_delta);
1443}
1444
1445void
116c20d2
NC
1446bfd_sym_print_contained_labels_table_entry (bfd *abfd,
1447 FILE *f,
1448 bfd_sym_contained_labels_table_entry *entry)
3af9a47b
NC
1449{
1450 if (entry->generic.type == BFD_SYM_END_OF_LIST)
1451 {
1452 fprintf (f, "END");
1453 return;
1454 }
1455
1456 if (entry->generic.type == BFD_SYM_SOURCE_FILE_CHANGE)
1457 {
1458 bfd_sym_print_file_reference (abfd, f, &entry->file.fref);
1459 fprintf (f, " offset %lu", entry->file.fref.fref_offset);
1460 return;
1461 }
1462
1463 fprintf (f, "\"%.*s\" (MTE %lu), offset %lu, delta %lu, scope %s",
1464 bfd_sym_module_name (abfd, entry->entry.mte_index)[0],
1465 &bfd_sym_module_name (abfd, entry->entry.mte_index)[1],
1466 entry->entry.mte_index,
1467 entry->entry.mte_offset,
1468 entry->entry.file_delta,
1469 bfd_sym_unparse_symbol_scope (entry->entry.scope));
1470}
1471
1472void
116c20d2
NC
1473bfd_sym_print_contained_types_table_entry (bfd *abfd ATTRIBUTE_UNUSED,
1474 FILE *f,
1475 bfd_sym_contained_types_table_entry *entry ATTRIBUTE_UNUSED)
3af9a47b
NC
1476{
1477 fprintf (f, "[UNIMPLEMENTED]");
1478}
1479
1480const char *
116c20d2 1481bfd_sym_type_operator_name (unsigned char num)
3af9a47b
NC
1482{
1483 switch (num)
1484 {
1485 case 1: return "TTE";
1486 case 2: return "PointerTo";
1487 case 3: return "ScalarOf";
1488 case 4: return "ConstantOf";
1489 case 5: return "EnumerationOf";
1490 case 6: return "VectorOf";
1491 case 7: return "RecordOf";
1492 case 8: return "UnionOf";
1493 case 9: return "SubRangeOf";
1494 case 10: return "SetOf";
1495 case 11: return "NamedTypeOf";
1496 case 12: return "ProcOf";
1497 case 13: return "ValueOf";
1498 case 14: return "ArrayOf";
1499 default: return "[UNKNOWN OPERATOR]";
1500 }
1501}
1502
1503const char *
116c20d2 1504bfd_sym_type_basic_name (unsigned char num)
3af9a47b
NC
1505{
1506 switch (num)
1507 {
1508 case 0: return "void";
1509 case 1: return "pascal string";
1510 case 2: return "unsigned long";
1511 case 3: return "signed long";
1512 case 4: return "extended (10 bytes)";
1513 case 5: return "pascal boolean (1 byte)";
1514 case 6: return "unsigned byte";
1515 case 7: return "signed byte";
1516 case 8: return "character (1 byte)";
1517 case 9: return "wide character (2 bytes)";
1518 case 10: return "unsigned short";
1519 case 11: return "signed short";
1520 case 12: return "singled";
1521 case 13: return "double";
1522 case 14: return "extended (12 bytes)";
1523 case 15: return "computational (8 bytes)";
1524 case 16: return "c string";
1525 case 17: return "as-is string";
1526 default: return "[UNKNOWN BASIC TYPE]";
1527 }
1528}
1529
1530int
116c20d2
NC
1531bfd_sym_fetch_long (unsigned char *buf,
1532 unsigned long len,
1533 unsigned long offset,
1534 unsigned long *offsetptr,
1535 long *value)
3af9a47b
NC
1536{
1537 int ret;
1538
1539 if (offset >= len)
1540 {
1541 *value = 0;
1542 offset += 0;
1543 ret = -1;
1544 }
1545 else if (! (buf[offset] & 0x80))
1546 {
1547 *value = buf[offset];
1548 offset += 1;
1549 ret = 0;
1550 }
1551 else if (buf[offset] == 0xc0)
1552 {
1553 if ((offset + 5) > len)
1554 {
1555 *value = 0;
1556 offset = len;
1557 ret = -1;
1558 }
1559 else
1560 {
1561 *value = bfd_getb32 (buf + offset + 1);
1562 offset += 5;
1563 ret = 0;
1564 }
1565 }
1566 else if ((buf[offset] & 0xc0) == 0xc0)
1567 {
1568 *value = -(buf[offset] & 0x3f);
1569 offset += 1;
1570 ret = 0;
1571 }
1572 else if ((buf[offset] & 0xc0) == 0x80)
1573 {
1574 if ((offset + 2) > len)
1575 {
1576 *value = 0;
1577 offset = len;
1578 ret = -1;
1579 }
1580 else
1581 {
1582 *value = bfd_getb16 (buf + offset) & 0x3fff;
1583 offset += 2;
1584 ret = 0;
1585 }
1586 }
1587 else
1588 abort ();
1589
1590 if (offsetptr != NULL)
1591 *offsetptr = offset;
1592
1593 return ret;
1594}
1595
1596void
116c20d2
NC
1597bfd_sym_print_type_information (bfd *abfd,
1598 FILE *f,
1599 unsigned char *buf,
1600 unsigned long len,
1601 unsigned long offset,
1602 unsigned long *offsetptr)
3af9a47b
NC
1603{
1604 unsigned int type;
1605
1606 if (offset >= len)
1607 {
1608 fprintf (f, "[NULL]");
1609
1610 if (offsetptr != NULL)
1611 *offsetptr = offset;
e84d6fca 1612 return;
3af9a47b 1613 }
e84d6fca 1614
3af9a47b
NC
1615 type = buf[offset];
1616 offset++;
1617
1618 if (! (type & 0x80))
1619 {
1620 fprintf (f, "[%s] (0x%x)", bfd_sym_type_basic_name (type & 0x7f), type);
1621
1622 if (offsetptr != NULL)
1623 *offsetptr = offset;
1624 return;
1625 }
1626
1627 if (type & 0x40)
1628 fprintf (f, "[packed ");
1629 else
1630 fprintf (f, "[");
1631
1632 switch (type & 0x3f)
1633 {
1634 case 1:
1635 {
1636 long value;
1637 bfd_sym_type_information_table_entry tinfo;
1638
e84d6fca 1639 bfd_sym_fetch_long (buf, len, offset, &offset, &value);
3af9a47b
NC
1640 if (value <= 0)
1641 fprintf (f, "[INVALID]");
1642 else
1643 {
1644 if (bfd_sym_fetch_type_table_information (abfd, &tinfo, value) < 0)
1645 fprintf (f, "[INVALID]");
1646 else
e84d6fca 1647 fprintf (f, "\"%.*s\"",
3af9a47b
NC
1648 bfd_sym_symbol_name (abfd, tinfo.nte_index)[0],
1649 &bfd_sym_symbol_name (abfd, tinfo.nte_index)[1]);
1650 }
0af1713e 1651 fprintf (f, " (TTE %lu)", (unsigned long) value);
3af9a47b
NC
1652 break;
1653 }
1654
1655 case 2:
1656 fprintf (f, "pointer (0x%x) to ", type);
1657 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1658 break;
1659
1660 case 3:
1661 {
f075ee0c 1662 long value;
3af9a47b
NC
1663
1664 fprintf (f, "scalar (0x%x) of ", type);
1665 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1666 bfd_sym_fetch_long (buf, len, offset, &offset, &value);
f075ee0c 1667 fprintf (f, " (%lu)", (unsigned long) value);
3af9a47b
NC
1668 break;
1669 }
e84d6fca 1670
3af9a47b
NC
1671 case 5:
1672 {
f075ee0c
AM
1673 long lower, upper, nelem;
1674 int i;
3af9a47b
NC
1675
1676 fprintf (f, "enumeration (0x%x) of ", type);
1677 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
e84d6fca
AM
1678 bfd_sym_fetch_long (buf, len, offset, &offset, &lower);
1679 bfd_sym_fetch_long (buf, len, offset, &offset, &upper);
1680 bfd_sym_fetch_long (buf, len, offset, &offset, &nelem);
f075ee0c
AM
1681 fprintf (f, " from %lu to %lu with %lu elements: ",
1682 (unsigned long) lower, (unsigned long) upper,
1683 (unsigned long) nelem);
3af9a47b
NC
1684
1685 for (i = 0; i < nelem; i++)
1686 {
1687 fprintf (f, "\n ");
1688 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1689 }
1690 break;
1691 }
1692
1693 case 6:
1694 fprintf (f, "vector (0x%x)", type);
1695 fprintf (f, "\n index ");
1696 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1697 fprintf (f, "\n target ");
1698 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1699 break;
1700
1701 case 7:
1702 case 8:
1703 {
1704 long nrec, eloff, i;
1705
1706 if ((type & 0x3f) == 7)
1707 fprintf (f, "record (0x%x) of ", type);
1708 else
1709 fprintf (f, "union (0x%x) of ", type);
e84d6fca
AM
1710
1711 bfd_sym_fetch_long (buf, len, offset, &offset, &nrec);
0af1713e 1712 fprintf (f, "%lu elements: ", (unsigned long) nrec);
3af9a47b
NC
1713
1714 for (i = 0; i < nrec; i++)
1715 {
e84d6fca 1716 bfd_sym_fetch_long (buf, len, offset, &offset, &eloff);
3af9a47b 1717 fprintf (f, "\n ");
0af1713e 1718 fprintf (f, "offset %lu: ", (unsigned long) eloff);
3af9a47b
NC
1719 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1720 }
1721 break;
1722 }
1723
1724 case 9:
1725 fprintf (f, "subrange (0x%x) of ", type);
1726 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1727 fprintf (f, " lower ");
1728 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1729 fprintf (f, " upper ");
1730 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1731 break;
1732
1733 case 11:
1734 {
1735 long value;
1736
1737 fprintf (f, "named type (0x%x) ", type);
e84d6fca 1738 bfd_sym_fetch_long (buf, len, offset, &offset, &value);
3af9a47b
NC
1739 if (value <= 0)
1740 fprintf (f, "[INVALID]");
1741 else
e84d6fca 1742 fprintf (f, "\"%.*s\"",
3af9a47b
NC
1743 bfd_sym_symbol_name (abfd, value)[0],
1744 &bfd_sym_symbol_name (abfd, value)[1]);
1745
0af1713e 1746 fprintf (f, " (NTE %lu) with type ", (unsigned long) value);
3af9a47b
NC
1747 bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset);
1748 break;
1749 }
1750
1751 default:
1752 fprintf (f, "%s (0x%x)", bfd_sym_type_operator_name (type), type);
1753 break;
1754 }
e84d6fca 1755
3af9a47b
NC
1756 if (type == (0x40 | 0x6))
1757 {
1758 /* Vector. */
1759 long n, width, m;
1760 long l;
1761 long i;
1762
e84d6fca
AM
1763 bfd_sym_fetch_long (buf, len, offset, &offset, &n);
1764 bfd_sym_fetch_long (buf, len, offset, &offset, &width);
1765 bfd_sym_fetch_long (buf, len, offset, &offset, &m);
3af9a47b
NC
1766 /* fprintf (f, "\n "); */
1767 fprintf (f, " N %ld, width %ld, M %ld, ", n, width, m);
1768 for (i = 0; i < m; i++)
1769 {
e84d6fca 1770 bfd_sym_fetch_long (buf, len, offset, &offset, &l);
3af9a47b
NC
1771 if (i != 0)
1772 fprintf (f, " ");
1773 fprintf (f, "%ld", l);
1774 }
1775 }
1776 else if (type & 0x40)
1777 {
1778 /* Other packed type. */
1779 long msb, lsb;
1780
e84d6fca
AM
1781 bfd_sym_fetch_long (buf, len, offset, &offset, &msb);
1782 bfd_sym_fetch_long (buf, len, offset, &offset, &lsb);
3af9a47b
NC
1783 /* fprintf (f, "\n "); */
1784 fprintf (f, " msb %ld, lsb %ld", msb, lsb);
1785 }
1786
1787 fprintf (f, "]");
1788
1789 if (offsetptr != NULL)
1790 *offsetptr = offset;
1791}
1792
1793void
116c20d2
NC
1794bfd_sym_print_type_information_table_entry (bfd *abfd,
1795 FILE *f,
1796 bfd_sym_type_information_table_entry *entry)
3af9a47b
NC
1797{
1798 unsigned char *buf;
1799 unsigned long offset;
1800 unsigned int i;
1801
1802 fprintf (f, "\"%.*s\" (NTE %lu), %lu bytes at %lu, logical size %lu",
1803 bfd_sym_symbol_name (abfd, entry->nte_index)[0],
1804 &bfd_sym_symbol_name (abfd, entry->nte_index)[1],
1805 entry->nte_index,
1806 entry->physical_size, entry->offset, entry->logical_size);
1807
e84d6fca 1808 fprintf (f, "\n ");
3af9a47b 1809
e1fa0163 1810 buf = malloc (entry->physical_size);
3af9a47b
NC
1811 if (buf == NULL)
1812 {
1813 fprintf (f, "[ERROR]\n");
1814 return;
1815 }
1816 if (bfd_seek (abfd, entry->offset, SEEK_SET) < 0)
1817 {
1818 fprintf (f, "[ERROR]\n");
e1fa0163 1819 free (buf);
3af9a47b
NC
1820 return;
1821 }
1822 if (bfd_bread (buf, entry->physical_size, abfd) != entry->physical_size)
1823 {
1824 fprintf (f, "[ERROR]\n");
e1fa0163 1825 free (buf);
3af9a47b
NC
1826 return;
1827 }
1828
1829 fprintf (f, "[");
1830 for (i = 0; i < entry->physical_size; i++)
1831 {
1832 if (i == 0)
1833 fprintf (f, "0x%02x", buf[i]);
1834 else
1835 fprintf (f, " 0x%02x", buf[i]);
1836 }
1837
1838 fprintf (f, "]");
e84d6fca 1839 fprintf (f, "\n ");
3af9a47b
NC
1840
1841 bfd_sym_print_type_information (abfd, f, buf, entry->physical_size, 0, &offset);
1842
1843 if (offset != entry->physical_size)
116c20d2 1844 fprintf (f, "\n [parser used %lu bytes instead of %lu]", offset, entry->physical_size);
e1fa0163 1845 free (buf);
116c20d2 1846}
3af9a47b
NC
1847
1848void
116c20d2
NC
1849bfd_sym_print_file_references_index_table_entry (bfd *abfd ATTRIBUTE_UNUSED,
1850 FILE *f,
1851 bfd_sym_file_references_index_table_entry *entry ATTRIBUTE_UNUSED)
3af9a47b
NC
1852{
1853 fprintf (f, "[UNIMPLEMENTED]");
1854}
1855
1856void
116c20d2
NC
1857bfd_sym_print_constant_pool_entry (bfd *abfd ATTRIBUTE_UNUSED,
1858 FILE *f,
1859 bfd_sym_constant_pool_entry *entry ATTRIBUTE_UNUSED)
3af9a47b
NC
1860{
1861 fprintf (f, "[UNIMPLEMENTED]");
1862}
1863
1864unsigned char *
116c20d2
NC
1865bfd_sym_display_name_table_entry (bfd *abfd,
1866 FILE *f,
1867 unsigned char *entry)
3af9a47b 1868{
91d6fa6a 1869 unsigned long sym_index;
3af9a47b
NC
1870 unsigned long offset;
1871 bfd_sym_data_struct *sdata = NULL;
1872
1873 BFD_ASSERT (bfd_sym_valid (abfd));
1874 sdata = abfd->tdata.sym_data;
91d6fa6a 1875 sym_index = (entry - sdata->name_table) / 2;
e84d6fca
AM
1876
1877 if (sdata->version >= BFD_SYM_VERSION_3_4 && entry[0] == 255 && entry[1] == 0)
3af9a47b 1878 {
e84d6fca 1879 unsigned short length = bfd_getb16 (entry + 2);
91d6fa6a 1880 fprintf (f, "[%8lu] \"%.*s\"\n", sym_index, length, entry + 4);
3af9a47b
NC
1881 offset = 2 + length + 1;
1882 }
1883 else
1884 {
e84d6fca 1885 if (! (entry[0] == 0 || (entry[0] == 1 && entry[1] == '\0')))
91d6fa6a 1886 fprintf (f, "[%8lu] \"%.*s\"\n", sym_index, entry[0], entry + 1);
3af9a47b
NC
1887
1888 if (sdata->version >= BFD_SYM_VERSION_3_4)
1889 offset = entry[0] + 2;
1890 else
1891 offset = entry[0] + 1;
1892 }
1893
1894 return (entry + offset + (offset % 2));
1895}
1896
1897void
116c20d2 1898bfd_sym_display_name_table (bfd *abfd, FILE *f)
3af9a47b
NC
1899{
1900 unsigned long name_table_len;
1901 unsigned char *name_table, *name_table_end, *cur;
1902 bfd_sym_data_struct *sdata = NULL;
1903
1904 BFD_ASSERT (bfd_sym_valid (abfd));
1905 sdata = abfd->tdata.sym_data;
1906
1907 name_table_len = sdata->header.dshb_nte.dti_page_count * sdata->header.dshb_page_size;
1908 name_table = sdata->name_table;
1909 name_table_end = name_table + name_table_len;
e84d6fca 1910
3af9a47b 1911 fprintf (f, "name table (NTE) contains %lu bytes:\n\n", name_table_len);
e84d6fca 1912
3af9a47b
NC
1913 cur = name_table;
1914 for (;;)
1915 {
1916 cur = bfd_sym_display_name_table_entry (abfd, f, cur);
1917 if (cur >= name_table_end)
1918 break;
1919 }
1920}
1921
1922void
116c20d2 1923bfd_sym_display_resources_table (bfd *abfd, FILE *f)
3af9a47b
NC
1924{
1925 unsigned long i;
1926 bfd_sym_resources_table_entry entry;
1927 bfd_sym_data_struct *sdata = NULL;
1928
1929 BFD_ASSERT (bfd_sym_valid (abfd));
1930 sdata = abfd->tdata.sym_data;
1931
1932 fprintf (f, "resource table (RTE) contains %lu objects:\n\n",
1933 sdata->header.dshb_rte.dti_object_count);
e84d6fca 1934
3af9a47b
NC
1935 for (i = 1; i <= sdata->header.dshb_rte.dti_object_count; i++)
1936 {
1937 if (bfd_sym_fetch_resources_table_entry (abfd, &entry, i) < 0)
1938 fprintf (f, " [%8lu] [INVALID]\n", i);
1939 else
1940 {
1941 fprintf (f, " [%8lu] ", i);
1942 bfd_sym_print_resources_table_entry (abfd, f, &entry);
1943 fprintf (f, "\n");
1944 }
1945 }
1946}
1947
1948void
116c20d2 1949bfd_sym_display_modules_table (bfd *abfd, FILE *f)
3af9a47b
NC
1950{
1951 unsigned long i;
1952 bfd_sym_modules_table_entry entry;
1953 bfd_sym_data_struct *sdata = NULL;
1954
1955 BFD_ASSERT (bfd_sym_valid (abfd));
1956 sdata = abfd->tdata.sym_data;
1957
1958 fprintf (f, "module table (MTE) contains %lu objects:\n\n",
1959 sdata->header.dshb_mte.dti_object_count);
1960
1961 for (i = 1; i <= sdata->header.dshb_mte.dti_object_count; i++)
1962 {
1963 if (bfd_sym_fetch_modules_table_entry (abfd, &entry, i) < 0)
1964 fprintf (f, " [%8lu] [INVALID]\n", i);
1965 else
1966 {
1967 fprintf (f, " [%8lu] ", i);
1968 bfd_sym_print_modules_table_entry (abfd, f, &entry);
1969 fprintf (f, "\n");
1970 }
1971 }
1972}
1973
1974void
116c20d2 1975bfd_sym_display_file_references_table (bfd *abfd, FILE *f)
3af9a47b
NC
1976{
1977 unsigned long i;
1978 bfd_sym_file_references_table_entry entry;
1979 bfd_sym_data_struct *sdata = NULL;
1980
1981 BFD_ASSERT (bfd_sym_valid (abfd));
1982 sdata = abfd->tdata.sym_data;
1983
1984 fprintf (f, "file reference table (FRTE) contains %lu objects:\n\n",
1985 sdata->header.dshb_frte.dti_object_count);
1986
1987 for (i = 1; i <= sdata->header.dshb_frte.dti_object_count; i++)
1988 {
1989 if (bfd_sym_fetch_file_references_table_entry (abfd, &entry, i) < 0)
1990 fprintf (f, " [%8lu] [INVALID]\n", i);
1991 else
1992 {
1993 fprintf (f, " [%8lu] ", i);
1994 bfd_sym_print_file_references_table_entry (abfd, f, &entry);
1995 fprintf (f, "\n");
1996 }
1997 }
1998}
1999
2000void
116c20d2 2001bfd_sym_display_contained_modules_table (bfd *abfd, FILE *f)
3af9a47b
NC
2002{
2003 unsigned long i;
e84d6fca 2004 bfd_sym_contained_modules_table_entry entry;
3af9a47b
NC
2005 bfd_sym_data_struct *sdata = NULL;
2006
2007 BFD_ASSERT (bfd_sym_valid (abfd));
2008 sdata = abfd->tdata.sym_data;
2009
2010 fprintf (f, "contained modules table (CMTE) contains %lu objects:\n\n",
2011 sdata->header.dshb_cmte.dti_object_count);
e84d6fca 2012
3af9a47b
NC
2013 for (i = 1; i <= sdata->header.dshb_cmte.dti_object_count; i++)
2014 {
2015 if (bfd_sym_fetch_contained_modules_table_entry (abfd, &entry, i) < 0)
2016 fprintf (f, " [%8lu] [INVALID]\n", i);
2017 else
2018 {
2019 fprintf (f, " [%8lu] ", i);
2020 bfd_sym_print_contained_modules_table_entry (abfd, f, &entry);
2021 fprintf (f, "\n");
2022 }
2023 }
2024}
2025
2026void
116c20d2 2027bfd_sym_display_contained_variables_table (bfd *abfd, FILE *f)
3af9a47b
NC
2028{
2029 unsigned long i;
2030 bfd_sym_contained_variables_table_entry entry;
2031 bfd_sym_data_struct *sdata = NULL;
2032
2033 BFD_ASSERT (bfd_sym_valid (abfd));
2034 sdata = abfd->tdata.sym_data;
2035
2036 fprintf (f, "contained variables table (CVTE) contains %lu objects:\n\n",
2037 sdata->header.dshb_cvte.dti_object_count);
e84d6fca 2038
3af9a47b
NC
2039 for (i = 1; i <= sdata->header.dshb_cvte.dti_object_count; i++)
2040 {
2041 if (bfd_sym_fetch_contained_variables_table_entry (abfd, &entry, i) < 0)
2042 fprintf (f, " [%8lu] [INVALID]\n", i);
2043 else
2044 {
2045 fprintf (f, " [%8lu] ", i);
2046 bfd_sym_print_contained_variables_table_entry (abfd, f, &entry);
2047 fprintf (f, "\n");
2048 }
2049 }
2050
2051 fprintf (f, "\n");
2052}
2053
2054void
116c20d2 2055bfd_sym_display_contained_statements_table (bfd *abfd, FILE *f)
3af9a47b
NC
2056{
2057 unsigned long i;
e84d6fca 2058 bfd_sym_contained_statements_table_entry entry;
3af9a47b
NC
2059 bfd_sym_data_struct *sdata = NULL;
2060
2061 BFD_ASSERT (bfd_sym_valid (abfd));
2062 sdata = abfd->tdata.sym_data;
2063
2064 fprintf (f, "contained statements table (CSNTE) contains %lu objects:\n\n",
2065 sdata->header.dshb_csnte.dti_object_count);
e84d6fca 2066
3af9a47b
NC
2067 for (i = 1; i <= sdata->header.dshb_csnte.dti_object_count; i++)
2068 {
2069 if (bfd_sym_fetch_contained_statements_table_entry (abfd, &entry, i) < 0)
2070 fprintf (f, " [%8lu] [INVALID]\n", i);
2071 else
2072 {
2073 fprintf (f, " [%8lu] ", i);
2074 bfd_sym_print_contained_statements_table_entry (abfd, f, &entry);
2075 fprintf (f, "\n");
2076 }
2077 }
2078}
2079
2080void
116c20d2 2081bfd_sym_display_contained_labels_table (bfd *abfd, FILE *f)
3af9a47b
NC
2082{
2083 unsigned long i;
2084 bfd_sym_contained_labels_table_entry entry;
2085 bfd_sym_data_struct *sdata = NULL;
2086
2087 BFD_ASSERT (bfd_sym_valid (abfd));
2088 sdata = abfd->tdata.sym_data;
2089
2090 fprintf (f, "contained labels table (CLTE) contains %lu objects:\n\n",
2091 sdata->header.dshb_clte.dti_object_count);
e84d6fca 2092
3af9a47b
NC
2093 for (i = 1; i <= sdata->header.dshb_clte.dti_object_count; i++)
2094 {
2095 if (bfd_sym_fetch_contained_labels_table_entry (abfd, &entry, i) < 0)
2096 fprintf (f, " [%8lu] [INVALID]\n", i);
2097 else
2098 {
2099 fprintf (f, " [%8lu] ", i);
2100 bfd_sym_print_contained_labels_table_entry (abfd, f, &entry);
2101 fprintf (f, "\n");
2102 }
2103 }
2104}
2105
2106void
116c20d2 2107bfd_sym_display_contained_types_table (bfd *abfd, FILE *f)
3af9a47b
NC
2108{
2109 unsigned long i;
e84d6fca 2110 bfd_sym_contained_types_table_entry entry;
3af9a47b
NC
2111 bfd_sym_data_struct *sdata = NULL;
2112
2113 BFD_ASSERT (bfd_sym_valid (abfd));
2114 sdata = abfd->tdata.sym_data;
2115
2116 fprintf (f, "contained types table (CTTE) contains %lu objects:\n\n",
2117 sdata->header.dshb_ctte.dti_object_count);
e84d6fca 2118
3af9a47b
NC
2119 for (i = 1; i <= sdata->header.dshb_ctte.dti_object_count; i++)
2120 {
2121 if (bfd_sym_fetch_contained_types_table_entry (abfd, &entry, i) < 0)
2122 fprintf (f, " [%8lu] [INVALID]\n", i);
2123 else
2124 {
2125 fprintf (f, " [%8lu] ", i);
2126 bfd_sym_print_contained_types_table_entry (abfd, f, &entry);
2127 fprintf (f, "\n");
2128 }
2129 }
2130}
2131
2132void
116c20d2 2133bfd_sym_display_file_references_index_table (bfd *abfd, FILE *f)
3af9a47b
NC
2134{
2135 unsigned long i;
e84d6fca 2136 bfd_sym_file_references_index_table_entry entry;
3af9a47b
NC
2137 bfd_sym_data_struct *sdata = NULL;
2138
2139 BFD_ASSERT (bfd_sym_valid (abfd));
2140 sdata = abfd->tdata.sym_data;
2141
2142 fprintf (f, "file references index table (FITE) contains %lu objects:\n\n",
2143 sdata->header.dshb_fite.dti_object_count);
e84d6fca 2144
3af9a47b
NC
2145 for (i = 1; i <= sdata->header.dshb_fite.dti_object_count; i++)
2146 {
2147 if (bfd_sym_fetch_file_references_index_table_entry (abfd, &entry, i) < 0)
2148 fprintf (f, " [%8lu] [INVALID]\n", i);
2149 else
2150 {
2151 fprintf (f, " [%8lu] ", i);
2152 bfd_sym_print_file_references_index_table_entry (abfd, f, &entry);
2153 fprintf (f, "\n");
2154 }
2155 }
2156}
2157
2158void
116c20d2 2159bfd_sym_display_constant_pool (bfd *abfd, FILE *f)
3af9a47b
NC
2160{
2161 unsigned long i;
e84d6fca 2162 bfd_sym_constant_pool_entry entry;
3af9a47b
NC
2163 bfd_sym_data_struct *sdata = NULL;
2164
2165 BFD_ASSERT (bfd_sym_valid (abfd));
2166 sdata = abfd->tdata.sym_data;
2167
2168 fprintf (f, "constant pool (CONST) contains %lu objects:\n\n",
2169 sdata->header.dshb_const.dti_object_count);
e84d6fca 2170
3af9a47b
NC
2171 for (i = 1; i <= sdata->header.dshb_const.dti_object_count; i++)
2172 {
2173 if (bfd_sym_fetch_constant_pool_entry (abfd, &entry, i) < 0)
2174 fprintf (f, " [%8lu] [INVALID]\n", i);
2175 else
2176 {
2177 fprintf (f, " [%8lu] ", i);
2178 bfd_sym_print_constant_pool_entry (abfd, f, &entry);
2179 fprintf (f, "\n");
2180 }
2181 }
2182}
2183
2184void
116c20d2 2185bfd_sym_display_type_information_table (bfd *abfd, FILE *f)
3af9a47b
NC
2186{
2187 unsigned long i;
91d6fa6a 2188 bfd_sym_type_table_entry sym_index;
e84d6fca 2189 bfd_sym_type_information_table_entry entry;
3af9a47b
NC
2190 bfd_sym_data_struct *sdata = NULL;
2191
2192 BFD_ASSERT (bfd_sym_valid (abfd));
2193 sdata = abfd->tdata.sym_data;
2194
2195 if (sdata->header.dshb_tte.dti_object_count > 99)
2196 fprintf (f, "type table (TINFO) contains %lu objects:\n\n",
2197 sdata->header.dshb_tte.dti_object_count - 99);
2198 else
2199 {
2200 fprintf (f, "type table (TINFO) contains [INVALID] objects:\n\n");
2201 return;
2202 }
e84d6fca 2203
3af9a47b
NC
2204 for (i = 100; i <= sdata->header.dshb_tte.dti_object_count; i++)
2205 {
91d6fa6a 2206 if (bfd_sym_fetch_type_table_entry (abfd, &sym_index, i - 100) < 0)
3af9a47b
NC
2207 fprintf (f, " [%8lu] [INVALID]\n", i);
2208 else
2209 {
91d6fa6a 2210 fprintf (f, " [%8lu] (TINFO %lu) ", i, sym_index);
3af9a47b 2211
91d6fa6a 2212 if (bfd_sym_fetch_type_information_table_entry (abfd, &entry, sym_index) < 0)
3af9a47b
NC
2213 fprintf (f, "[INVALID]");
2214 else
2215 bfd_sym_print_type_information_table_entry (abfd, f, &entry);
2216
2217 fprintf (f, "\n");
2218 }
2219 }
2220}
2221
e84d6fca 2222int
116c20d2 2223bfd_sym_scan (bfd *abfd, bfd_sym_version version, bfd_sym_data_struct *mdata)
3af9a47b 2224{
3af9a47b
NC
2225 asection *bfdsec;
2226 const char *name = "symbols";
3af9a47b
NC
2227
2228 mdata->name_table = 0;
2229 mdata->sbfd = abfd;
e84d6fca 2230 mdata->version = version;
3af9a47b 2231
3af9a47b
NC
2232 bfd_seek (abfd, 0, SEEK_SET);
2233 if (bfd_sym_read_header (abfd, &mdata->header, mdata->version) != 0)
e84d6fca 2234 return -1;
3af9a47b
NC
2235
2236 mdata->name_table = bfd_sym_read_name_table (abfd, &mdata->header);
2237 if (mdata->name_table == NULL)
e84d6fca 2238 return -1;
3af9a47b 2239
117ed4f8 2240 bfdsec = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
3af9a47b 2241 if (bfdsec == NULL)
e84d6fca
AM
2242 return -1;
2243
3af9a47b
NC
2244 bfdsec->vma = 0;
2245 bfdsec->lma = 0;
eea6121a 2246 bfdsec->size = 0;
3af9a47b
NC
2247 bfdsec->filepos = 0;
2248 bfdsec->alignment_power = 0;
e84d6fca 2249
e84d6fca
AM
2250 abfd->tdata.sym_data = mdata;
2251
2252 return 0;
2253}
2254
2255const bfd_target *
116c20d2 2256bfd_sym_object_p (bfd *abfd)
e84d6fca 2257{
e84d6fca 2258 bfd_sym_version version = -1;
c9ba0c87 2259 bfd_sym_data_struct *mdata;
e84d6fca 2260
e84d6fca
AM
2261 bfd_seek (abfd, 0, SEEK_SET);
2262 if (bfd_sym_read_version (abfd, &version) != 0)
2263 goto wrong;
2264
c9ba0c87
AM
2265 mdata = (bfd_sym_data_struct *) bfd_alloc (abfd, sizeof (*mdata));
2266 if (mdata == NULL)
e84d6fca
AM
2267 goto fail;
2268
c9ba0c87 2269 if (bfd_sym_scan (abfd, version, mdata) != 0)
e84d6fca
AM
2270 goto wrong;
2271
3af9a47b 2272 return abfd->xvec;
e84d6fca
AM
2273
2274 wrong:
2275 bfd_set_error (bfd_error_wrong_format);
2276
2277 fail:
e84d6fca 2278 return NULL;
3af9a47b
NC
2279}
2280
833fb04e 2281#define bfd_sym_make_empty_symbol _bfd_generic_make_empty_symbol
3af9a47b
NC
2282
2283void
116c20d2 2284bfd_sym_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, asymbol *symbol, symbol_info *ret)
3af9a47b
NC
2285{
2286 bfd_symbol_info (symbol, ret);
2287}
2288
2289long
116c20d2 2290bfd_sym_get_symtab_upper_bound (bfd *abfd ATTRIBUTE_UNUSED)
3af9a47b
NC
2291{
2292 return 0;
2293}
2294
2295long
116c20d2 2296bfd_sym_canonicalize_symtab (bfd *abfd ATTRIBUTE_UNUSED, asymbol **sym ATTRIBUTE_UNUSED)
3af9a47b
NC
2297{
2298 return 0;
2299}
2300
2301int
a6b96beb
AM
2302bfd_sym_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
2303 struct bfd_link_info *info ATTRIBUTE_UNUSED)
3af9a47b
NC
2304{
2305 return 0;
2306}
2307
2308const bfd_target sym_vec =
2309{
116c20d2
NC
2310 "sym", /* Name. */
2311 bfd_target_sym_flavour, /* Flavour. */
2312 BFD_ENDIAN_BIG, /* Byteorder. */
2313 BFD_ENDIAN_BIG, /* Header byteorder. */
2314 (HAS_RELOC | EXEC_P | /* Object flags. */
3af9a47b
NC
2315 HAS_LINENO | HAS_DEBUG |
2316 HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
2317 (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_DATA
116c20d2
NC
2318 | SEC_ROM | SEC_HAS_CONTENTS), /* Section_flags. */
2319 0, /* Symbol_leading_char. */
2320 ' ', /* AR_pad_char. */
2321 16, /* AR_max_namelen. */
0aabe54e 2322 0, /* match priority. */
3af9a47b
NC
2323 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
2324 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
116c20d2 2325 bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */
3af9a47b
NC
2326 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
2327 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
116c20d2
NC
2328 bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Hdrs. */
2329 { /* bfd_check_format. */
3af9a47b 2330 _bfd_dummy_target,
116c20d2 2331 bfd_sym_object_p, /* bfd_check_format. */
3af9a47b
NC
2332 _bfd_dummy_target,
2333 _bfd_dummy_target,
2334 },
116c20d2 2335 { /* bfd_set_format. */
d00dd7dc 2336 _bfd_bool_bfd_false_error,
3af9a47b 2337 bfd_sym_mkobject,
d00dd7dc
AM
2338 _bfd_bool_bfd_false_error,
2339 _bfd_bool_bfd_false_error,
3af9a47b 2340 },
116c20d2 2341 { /* bfd_write_contents. */
d00dd7dc
AM
2342 _bfd_bool_bfd_false_error,
2343 _bfd_bool_bfd_true,
2344 _bfd_bool_bfd_false_error,
2345 _bfd_bool_bfd_false_error,
3af9a47b
NC
2346 },
2347
2348 BFD_JUMP_TABLE_GENERIC (bfd_sym),
2349 BFD_JUMP_TABLE_COPY (_bfd_generic),
2350 BFD_JUMP_TABLE_CORE (_bfd_nocore),
2351 BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
2352 BFD_JUMP_TABLE_SYMBOLS (bfd_sym),
72f6ea61 2353 BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
3af9a47b
NC
2354 BFD_JUMP_TABLE_WRITE (bfd_sym),
2355 BFD_JUMP_TABLE_LINK (bfd_sym),
2356 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
2357
2358 NULL,
e84d6fca 2359
3af9a47b
NC
2360 NULL
2361};