* aoutx.h (some_aout_object_p): Clean up tdata properly on error.
[deliverable/binutils-gdb.git] / bfd / vms.c
CommitLineData
252b5132
RH
1/* vms.c -- BFD back-end for VAX (openVMS/VAX) and
2 EVAX (openVMS/Alpha) files.
3f3c5c34 3 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
7898deda 4 Free Software Foundation, Inc.
252b5132
RH
5
6 Written by Klaus K"ampf (kkaempf@rmi.de)
7
8This program is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
22#include "bfd.h"
23#include "sysdep.h"
24#include "bfdlink.h"
25#include "libbfd.h"
26
27#include "vms.h"
28
29static boolean vms_initialize PARAMS ((bfd *));
5f771d47 30static unsigned int priv_section_count;
252b5132
RH
31static boolean fill_section_ptr PARAMS ((struct bfd_hash_entry *, PTR));
32static boolean vms_fixup_sections PARAMS ((bfd *));
33static boolean copy_symbols PARAMS ((struct bfd_hash_entry *, PTR));
34static bfd_reloc_status_type reloc_nil
35 PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
36static const struct bfd_target *vms_object_p PARAMS ((bfd *abfd));
37static const struct bfd_target *vms_archive_p PARAMS ((bfd *abfd));
38static boolean vms_mkobject PARAMS ((bfd *abfd));
39static boolean vms_write_object_contents PARAMS ((bfd *abfd));
40static boolean vms_close_and_cleanup PARAMS ((bfd *abfd));
41static boolean vms_bfd_free_cached_info PARAMS ((bfd *abfd));
42static boolean vms_new_section_hook PARAMS ((bfd *abfd, asection *section));
43static boolean vms_get_section_contents
44 PARAMS ((bfd *abfd, asection *section, PTR x1, file_ptr x2,
45 bfd_size_type x3));
46static boolean vms_get_section_contents_in_window
47 PARAMS ((bfd *abfd, asection *section, bfd_window *w, file_ptr offset,
48 bfd_size_type count));
49static boolean vms_bfd_copy_private_bfd_data PARAMS ((bfd *src, bfd *dest));
50static boolean vms_bfd_copy_private_section_data
51 PARAMS ((bfd *srcbfd, asection *srcsec, bfd *dstbfd, asection *dstsec));
52static boolean vms_bfd_copy_private_symbol_data
53 PARAMS ((bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym));
54static boolean vms_bfd_print_private_bfd_data
55 PARAMS ((bfd *abfd, void *file));
56static char *vms_core_file_failing_command PARAMS ((bfd *abfd));
57static int vms_core_file_failing_signal PARAMS ((bfd *abfd));
58static boolean vms_core_file_matches_executable_p
59 PARAMS ((bfd *abfd, bfd *bbfd));
60static boolean vms_slurp_armap PARAMS ((bfd *abfd));
61static boolean vms_slurp_extended_name_table PARAMS ((bfd *abfd));
62static boolean vms_construct_extended_name_table
63 PARAMS ((bfd *abfd, char **tabloc, bfd_size_type *tablen,
64 const char **name));
65static void vms_truncate_arname
dc810e39 66 PARAMS ((bfd *abfd, const char *pathname, char *arhdr));
252b5132
RH
67static boolean vms_write_armap
68 PARAMS ((bfd *arch, unsigned int elength, struct orl *map,
69 unsigned int orl_count, int stridx));
70static PTR vms_read_ar_hdr PARAMS ((bfd *abfd));
71static bfd *vms_get_elt_at_index PARAMS ((bfd *abfd, symindex index));
72static bfd *vms_openr_next_archived_file PARAMS ((bfd *arch, bfd *prev));
73static boolean vms_update_armap_timestamp PARAMS ((bfd *abfd));
dc810e39 74static int vms_generic_stat_arch_elt PARAMS ((bfd *, struct stat *));
252b5132
RH
75static long vms_get_symtab_upper_bound PARAMS ((bfd *abfd));
76static long vms_get_symtab PARAMS ((bfd *abfd, asymbol **symbols));
77static void vms_print_symbol
78 PARAMS ((bfd *abfd, PTR file, asymbol *symbol, bfd_print_symbol_type how));
79static void vms_get_symbol_info
80 PARAMS ((bfd *abfd, asymbol *symbol, symbol_info *ret));
81static boolean vms_bfd_is_local_label_name PARAMS ((bfd *abfd, const char *));
82static alent *vms_get_lineno PARAMS ((bfd *abfd, asymbol *symbol));
83static boolean vms_find_nearest_line
84 PARAMS ((bfd *abfd, asection *section, asymbol **symbols, bfd_vma offset,
85 const char **file, const char **func, unsigned int *line));
86static asymbol *vms_bfd_make_debug_symbol
87 PARAMS ((bfd *abfd, void *ptr, unsigned long size));
88static long vms_read_minisymbols
89 PARAMS ((bfd *abfd, boolean dynamic, PTR *minisymsp, unsigned int *sizep));
90static asymbol *vms_minisymbol_to_symbol
91 PARAMS ((bfd *abfd, boolean dynamic, const PTR minisym, asymbol *sym));
92static long vms_get_reloc_upper_bound PARAMS ((bfd *abfd, asection *sect));
93static long vms_canonicalize_reloc
94 PARAMS ((bfd *abfd, asection *srcsec, arelent **location,
95 asymbol **symbols));
96static const struct reloc_howto_struct *vms_bfd_reloc_type_lookup
97 PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
98static boolean vms_set_arch_mach
99 PARAMS ((bfd *abfd, enum bfd_architecture arch, unsigned long mach));
100static boolean vms_set_section_contents
101 PARAMS ((bfd *abfd, asection *section, PTR location, file_ptr offset,
102 bfd_size_type count));
103static int vms_sizeof_headers PARAMS ((bfd *abfd, boolean reloc));
104static bfd_byte *vms_bfd_get_relocated_section_contents
105 PARAMS ((bfd *abfd, struct bfd_link_info *link_info,
106 struct bfd_link_order *link_order, bfd_byte *data,
107 boolean relocateable, asymbol **symbols));
108static boolean vms_bfd_relax_section
109 PARAMS ((bfd *abfd, asection *section, struct bfd_link_info *link_info,
110 boolean *again));
111static boolean vms_bfd_gc_sections
112 PARAMS ((bfd *abfd, struct bfd_link_info *link_info));
8550eb6e
JJ
113static boolean vms_bfd_merge_sections
114 PARAMS ((bfd *abfd, struct bfd_link_info *link_info));
252b5132
RH
115static struct bfd_link_hash_table *vms_bfd_link_hash_table_create
116 PARAMS ((bfd *abfd));
e2d34d7d
DJ
117static void vms_bfd_link_hash_table_free
118 PARAMS ((struct bfd_link_hash_table *hash));
252b5132
RH
119static boolean vms_bfd_link_add_symbols
120 PARAMS ((bfd *abfd, struct bfd_link_info *link_info));
121static boolean vms_bfd_final_link
122 PARAMS ((bfd *abfd, struct bfd_link_info *link_info));
123static boolean vms_bfd_link_split_section
124 PARAMS ((bfd *abfd, asection *section));
125static long vms_get_dynamic_symtab_upper_bound PARAMS ((bfd *abfd));
126static long vms_canonicalize_dynamic_symtab
127 PARAMS ((bfd *abfd, asymbol **symbols));
128static long vms_get_dynamic_reloc_upper_bound PARAMS ((bfd *abfd));
129static long vms_canonicalize_dynamic_reloc
130 PARAMS ((bfd *abfd, arelent **arel, asymbol **symbols));
131static boolean vms_bfd_merge_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd));
132static boolean vms_bfd_set_private_flags PARAMS ((bfd *abfd, flagword flags));
133
3f3c5c34 134#define vms_make_empty_symbol _bfd_generic_make_empty_symbol
2d653fc7 135#define vms_bfd_link_just_syms _bfd_generic_link_just_syms
e61463e1 136#define vms_bfd_discard_group bfd_generic_discard_group
252b5132
RH
137\f
138/*===========================================================================*/
139
140const bfd_target vms_alpha_vec =
141{
252b5132
RH
142 "vms-alpha", /* name */
143 bfd_target_evax_flavour,
c3c89269
NC
144 BFD_ENDIAN_LITTLE, /* data byte order is little */
145 BFD_ENDIAN_LITTLE, /* header byte order is little */
252b5132
RH
146
147 (HAS_RELOC | HAS_SYMS
148 | WP_TEXT | D_PAGED), /* object flags */
149 (SEC_ALLOC | SEC_LOAD | SEC_RELOC
150 | SEC_READONLY | SEC_CODE | SEC_DATA
151 | SEC_HAS_CONTENTS | SEC_IN_MEMORY), /* sect flags */
152 0, /* symbol_leading_char */
153 ' ', /* ar_pad_char */
154 15, /* ar_max_namelen */
155 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
156 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
157 bfd_getl16, bfd_getl_signed_16, bfd_putl16,
158 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
159 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
160 bfd_getl16, bfd_getl_signed_16, bfd_putl16,
161
162 {_bfd_dummy_target, vms_object_p, /* bfd_check_format */
163 vms_archive_p, _bfd_dummy_target},
164 {bfd_false, vms_mkobject, /* bfd_set_format */
165 _bfd_generic_mkarchive, bfd_false},
166 {bfd_false, vms_write_object_contents, /* bfd_write_contents */
167 _bfd_write_archive_contents, bfd_false},
168
169 BFD_JUMP_TABLE_GENERIC (vms),
170 BFD_JUMP_TABLE_COPY (vms),
171 BFD_JUMP_TABLE_CORE (vms),
172 BFD_JUMP_TABLE_ARCHIVE (vms),
173 BFD_JUMP_TABLE_SYMBOLS (vms),
174 BFD_JUMP_TABLE_RELOCS (vms),
175 BFD_JUMP_TABLE_WRITE (vms),
176 BFD_JUMP_TABLE_LINK (vms),
177 BFD_JUMP_TABLE_DYNAMIC (vms),
178
c3c89269 179 NULL,
55f2d5ed 180
252b5132
RH
181 (PTR) 0
182};
183
184const bfd_target vms_vax_vec =
185{
252b5132
RH
186 "vms-vax", /* name */
187 bfd_target_ovax_flavour,
c3c89269
NC
188 BFD_ENDIAN_LITTLE, /* data byte order is little */
189 BFD_ENDIAN_LITTLE, /* header byte order is little */
252b5132
RH
190
191 (HAS_RELOC | HAS_SYMS /* object flags */
192 | WP_TEXT | D_PAGED
193 | HAS_LINENO | HAS_DEBUG | HAS_LOCALS),
194
195 (SEC_ALLOC | SEC_LOAD | SEC_RELOC
196 | SEC_READONLY | SEC_CODE | SEC_DATA
197 | SEC_HAS_CONTENTS | SEC_IN_MEMORY), /* sect flags */
198 0, /* symbol_leading_char */
199 ' ', /* ar_pad_char */
200 15, /* ar_max_namelen */
201 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
202 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
203 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
204 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
205 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
206 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
207
208 {_bfd_dummy_target, vms_object_p, /* bfd_check_format */
209 vms_archive_p, _bfd_dummy_target},
210 {bfd_false, vms_mkobject, /* bfd_set_format */
211 _bfd_generic_mkarchive, bfd_false},
212 {bfd_false, vms_write_object_contents, /* bfd_write_contents */
213 _bfd_write_archive_contents, bfd_false},
214
215 BFD_JUMP_TABLE_GENERIC (vms),
216 BFD_JUMP_TABLE_COPY (vms),
217 BFD_JUMP_TABLE_CORE (vms),
218 BFD_JUMP_TABLE_ARCHIVE (vms),
219 BFD_JUMP_TABLE_SYMBOLS (vms),
220 BFD_JUMP_TABLE_RELOCS (vms),
221 BFD_JUMP_TABLE_WRITE (vms),
222 BFD_JUMP_TABLE_LINK (vms),
223 BFD_JUMP_TABLE_DYNAMIC (vms),
224
c3c89269 225 NULL,
55f2d5ed 226
252b5132
RH
227 (PTR) 0
228};
229\f
230/*===========================================================================*/
231
232/* Initialize private data */
233
234static boolean
235vms_initialize (abfd)
236 bfd *abfd;
237{
238 int i;
dc810e39 239 bfd_size_type amt;
252b5132 240
dc810e39 241 bfd_set_start_address (abfd, (bfd_vma) -1);
252b5132 242
dc810e39 243 amt = sizeof (struct vms_private_data_struct);
487e54f2 244 abfd->tdata.any = (struct vms_private_data_struct*) bfd_alloc (abfd, amt);
252b5132
RH
245 if (abfd->tdata.any == 0)
246 return false;
247
248#ifdef __ALPHA
8a0c27cd 249 PRIV (is_vax) = 0;
252b5132 250#else
8a0c27cd 251 PRIV (is_vax) = 1;
252b5132 252#endif
8a0c27cd
KH
253 PRIV (vms_buf) = 0;
254 PRIV (buf_size) = 0;
255 PRIV (rec_length) = 0;
256 PRIV (file_format) = FF_UNKNOWN;
257 PRIV (fixup_done) = false;
258 PRIV (sections) = NULL;
259
dc810e39 260 amt = sizeof (struct stack_struct) * STACKSIZE;
487e54f2 261 PRIV (stack) = (struct stack_struct *) bfd_alloc (abfd, amt);
8a0c27cd 262 if (PRIV (stack) == 0)
487e54f2 263 goto error_ret1;
8a0c27cd 264 PRIV (stackptr) = 0;
252b5132 265
dc810e39 266 amt = sizeof (struct bfd_hash_table);
487e54f2 267 PRIV (vms_symbol_table) = (struct bfd_hash_table *) bfd_alloc (abfd, amt);
8a0c27cd 268 if (PRIV (vms_symbol_table) == 0)
487e54f2 269 goto error_ret1;
252b5132 270
8a0c27cd 271 if (!bfd_hash_table_init (PRIV (vms_symbol_table), _bfd_vms_hash_newfunc))
487e54f2 272 goto error_ret1;
252b5132 273
dc810e39 274 amt = sizeof (struct location_struct) * LOCATION_SAVE_SIZE;
487e54f2 275 PRIV (location_stack) = (struct location_struct *) bfd_alloc (abfd, amt);
8a0c27cd 276 if (PRIV (location_stack) == 0)
487e54f2 277 goto error_ret2;
252b5132
RH
278
279 for (i = 0; i < VMS_SECTION_COUNT; i++)
8a0c27cd 280 PRIV (vms_section_table)[i] = NULL;
252b5132 281
487e54f2
AM
282 amt = MAX_OUTREC_SIZE;
283 PRIV (output_buf) = (unsigned char *) bfd_alloc (abfd, amt);
8a0c27cd 284 if (PRIV (output_buf) == 0)
487e54f2
AM
285 goto error_ret2;
286
8a0c27cd
KH
287 PRIV (push_level) = 0;
288 PRIV (pushed_size) = 0;
289 PRIV (length_pos) = 2;
290 PRIV (output_size) = 0;
291 PRIV (output_alignment) = 1;
252b5132
RH
292
293 return true;
487e54f2
AM
294
295 error_ret2:
296 bfd_hash_table_free (PRIV (vms_symbol_table));
297 error_ret1:
298 bfd_release (abfd, abfd->tdata.any);
299 abfd->tdata.any = 0;
300 return false;
252b5132
RH
301}
302
252b5132
RH
303/* Fill symbol->section with section ptr
304 symbol->section is filled with the section index for defined symbols
305 during reading the GSD/EGSD section. But we need the pointer to the
306 bfd section later.
307
308 It has the correct value for referenced (undefined section) symbols
309
310 called from bfd_hash_traverse in vms_fixup_sections */
311
312static boolean
313fill_section_ptr (entry, sections)
314 struct bfd_hash_entry *entry;
315 PTR sections;
316{
317 asection *sec;
318 asymbol *sym;
319
320 sym = ((vms_symbol_entry *)entry)->symbol;
321 sec = sym->section;
322
323#if VMS_DEBUG
324 vms_debug (6, "fill_section_ptr: sym %p, sec %p\n", sym, sec);
325#endif
326
327 /* fill forward references (these contain section number, not section ptr). */
328
5f771d47 329 if ((unsigned int) sec < priv_section_count)
252b5132
RH
330 {
331 sec = ((vms_symbol_entry *)entry)->symbol->section =
332 ((asection **)sections)[(int)sec];
333 }
334
335 if (strcmp (sym->name, sec->name) == 0)
336 sym->flags |= BSF_SECTION_SYM;
337
338 return true;
339}
340
252b5132
RH
341/* Fixup sections
342 set up all pointers and arrays, counters and sizes are fixed now
343
344 we build a private sections vector for easy access since sections
345 are always referenced by an index number.
346
347 alloc PRIV(sections) according to abfd->section_count
348 copy abfd->sections to PRIV(sections) */
349
350static boolean
351vms_fixup_sections (abfd)
352 bfd *abfd;
353{
8a0c27cd 354 if (PRIV (fixup_done))
252b5132
RH
355 return true;
356
357 /*
358 * traverse symbol table and fill in all section pointers
359 */
360
361 /* can't provide section count as argument to fill_section_ptr(). */
8a0c27cd
KH
362 priv_section_count = PRIV (section_count);
363 bfd_hash_traverse (PRIV (vms_symbol_table), fill_section_ptr,
364 (PTR) (PRIV (sections)));
252b5132 365
8a0c27cd 366 PRIV (fixup_done) = true;
252b5132
RH
367
368 return true;
369}
370
371/*===========================================================================*/
372
373/* Check the format for a file being read.
374 Return a (bfd_target *) if it's an object file or zero if not. */
375
376static const struct bfd_target *
377vms_object_p (abfd)
378 bfd *abfd;
379{
380 int err = 0;
381 int prev_type;
382 const struct bfd_target *target_vector = 0;
383 const bfd_arch_info_type *arch = 0;
487e54f2 384 PTR tdata_save = abfd->tdata.any;
252b5132
RH
385
386#if VMS_DEBUG
387 vms_debug (1, "vms_object_p(%p)\n", abfd);
388#endif
389
390 if (!vms_initialize (abfd))
487e54f2 391 goto error_ret;
252b5132 392
dc810e39 393 if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET))
487e54f2 394 goto err_wrong_format;
252b5132
RH
395
396 prev_type = -1;
397
398 do
399 {
400#if VMS_DEBUG
401 vms_debug (7, "reading at %08lx\n", bfd_tell(abfd));
402#endif
403 if (_bfd_vms_next_record (abfd) < 0)
404 {
405#if VMS_DEBUG
55f2d5ed 406 vms_debug (2, "next_record failed\n");
252b5132 407#endif
487e54f2 408 goto err_wrong_format;
252b5132
RH
409 }
410
411 if ((prev_type == EOBJ_S_C_EGSD)
8a0c27cd 412 && (PRIV (rec_type) != EOBJ_S_C_EGSD))
252b5132 413 {
82e51918 414 if (! vms_fixup_sections (abfd))
252b5132
RH
415 {
416#if VMS_DEBUG
417 vms_debug (2, "vms_fixup_sections failed\n");
418#endif
487e54f2 419 goto err_wrong_format;
252b5132
RH
420 }
421 }
422
8a0c27cd 423 prev_type = PRIV (rec_type);
252b5132
RH
424
425 if (target_vector == 0)
426 {
427 if (prev_type <= OBJ_S_C_MAXRECTYP)
428 target_vector = &vms_vax_vec;
429 else
430 target_vector = &vms_alpha_vec;
431 }
432
433 switch (prev_type)
434 {
435 case OBJ_S_C_HDR:
436 case EOBJ_S_C_EMH:
437 err = _bfd_vms_slurp_hdr (abfd, prev_type);
438 break;
439 case OBJ_S_C_EOM:
440 case OBJ_S_C_EOMW:
441 case EOBJ_S_C_EEOM:
442 err = _bfd_vms_slurp_eom (abfd, prev_type);
443 break;
444 case OBJ_S_C_GSD:
445 case EOBJ_S_C_EGSD:
446 err = _bfd_vms_slurp_gsd (abfd, prev_type);
447 break;
448 case OBJ_S_C_TIR:
449 case EOBJ_S_C_ETIR:
450 err = _bfd_vms_slurp_tir (abfd, prev_type);
451 break;
452 case OBJ_S_C_DBG:
453 case EOBJ_S_C_EDBG:
454 err = _bfd_vms_slurp_dbg (abfd, prev_type);
455 break;
456 case OBJ_S_C_TBT:
457 case EOBJ_S_C_ETBT:
458 err = _bfd_vms_slurp_tbt (abfd, prev_type);
459 break;
460 case OBJ_S_C_LNK:
461 err = _bfd_vms_slurp_lnk (abfd, prev_type);
462 break;
463 default:
464 err = -1;
465 }
466 if (err != 0)
467 {
468#if VMS_DEBUG
469 vms_debug (2, "slurp type %d failed with %d\n", prev_type, err);
470#endif
487e54f2 471 goto err_wrong_format;
252b5132
RH
472 }
473 }
474 while ((prev_type != EOBJ_S_C_EEOM) && (prev_type != OBJ_S_C_EOM) && (prev_type != OBJ_S_C_EOMW));
475
476 if (target_vector == &vms_vax_vec)
477 {
82e51918 478 if (! vms_fixup_sections (abfd))
252b5132
RH
479 {
480#if VMS_DEBUG
481 vms_debug (2, "vms_fixup_sections failed\n");
482#endif
487e54f2 483 goto err_wrong_format;
252b5132
RH
484 }
485
486 /* set arch_info to vax */
55f2d5ed 487
252b5132
RH
488 arch = bfd_scan_arch ("vax");
489 PRIV (is_vax) = 1;
490#if VMS_DEBUG
491 vms_debug (2, "arch is vax\n");
492#endif
493 }
494 else if (target_vector == &vms_alpha_vec)
495 {
496 /* set arch_info to alpha */
55f2d5ed 497
252b5132
RH
498 arch = bfd_scan_arch ("alpha");
499 PRIV (is_vax) = 0;
500#if VMS_DEBUG
501 vms_debug (2, "arch is alpha\n");
502#endif
503 }
504
505 if (arch == 0)
506 {
507#if VMS_DEBUG
508 vms_debug (2, "arch not found\n");
509#endif
487e54f2 510 goto err_wrong_format;
252b5132
RH
511 }
512 abfd->arch_info = arch;
513
514 return target_vector;
487e54f2
AM
515
516 err_wrong_format:
517 bfd_set_error (bfd_error_wrong_format);
518 error_ret:
519 if (abfd->tdata.any != tdata_save && abfd->tdata.any != NULL)
520 bfd_release (abfd, abfd->tdata.any);
521 abfd->tdata.any = tdata_save;
522 return NULL;
252b5132
RH
523}
524
252b5132
RH
525/* Check the format for a file being read.
526 Return a (bfd_target *) if it's an archive file or zero. */
527
528static const struct bfd_target *
529vms_archive_p (abfd)
5f771d47 530 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
531{
532#if VMS_DEBUG
533 vms_debug (1, "vms_archive_p(%p)\n", abfd);
534#endif
535
536 return 0;
537}
538
252b5132
RH
539/* Set the format of a file being written. */
540
541static boolean
542vms_mkobject (abfd)
543 bfd *abfd;
544{
545#if VMS_DEBUG
546 vms_debug (1, "vms_mkobject(%p)\n", abfd);
547#endif
548
549 if (!vms_initialize (abfd))
487e54f2 550 return 0;
252b5132
RH
551
552 {
553#ifdef __VAX
554 const bfd_arch_info_type *arch = bfd_scan_arch ("vax");
555#else
556 const bfd_arch_info_type *arch = bfd_scan_arch ("alpha");
557#endif
558 if (arch == 0)
559 {
560 bfd_set_error(bfd_error_wrong_format);
561 return 0;
562 }
563 abfd->arch_info = arch;
564 }
565
566 return true;
567}
568
252b5132
RH
569/* Write cached information into a file being written, at bfd_close. */
570
571static boolean
572vms_write_object_contents (abfd)
573 bfd *abfd;
574{
575#if VMS_DEBUG
576 vms_debug (1, "vms_write_object_contents(%p)\n", abfd);
577#endif
578
579 if (abfd->section_count > 0) /* we have sections */
580 {
8a0c27cd 581 if (PRIV (is_vax))
252b5132
RH
582 {
583 if (_bfd_vms_write_hdr (abfd, OBJ_S_C_HDR) != 0)
584 return false;
585 if (_bfd_vms_write_gsd (abfd, OBJ_S_C_GSD) != 0)
586 return false;
587 if (_bfd_vms_write_tir (abfd, OBJ_S_C_TIR) != 0)
588 return false;
589 if (_bfd_vms_write_tbt (abfd, OBJ_S_C_TBT) != 0)
590 return false;
591 if (_bfd_vms_write_dbg (abfd, OBJ_S_C_DBG) != 0)
592 return false;
593 if (abfd->section_count > 255)
594 {
595 if (_bfd_vms_write_eom (abfd, OBJ_S_C_EOMW) != 0)
596 return false;
597 }
598 else
599 {
600 if (_bfd_vms_write_eom (abfd, OBJ_S_C_EOM) != 0)
601 return false;
602 }
603 }
604 else
605 {
606 if (_bfd_vms_write_hdr (abfd, EOBJ_S_C_EMH) != 0)
607 return false;
608 if (_bfd_vms_write_gsd (abfd, EOBJ_S_C_EGSD) != 0)
609 return false;
610 if (_bfd_vms_write_tir (abfd, EOBJ_S_C_ETIR) != 0)
611 return false;
612 if (_bfd_vms_write_tbt (abfd, EOBJ_S_C_ETBT) != 0)
613 return false;
614 if (_bfd_vms_write_dbg (abfd, EOBJ_S_C_EDBG) != 0)
615 return false;
616 if (_bfd_vms_write_eom (abfd, EOBJ_S_C_EEOM) != 0)
617 return false;
618 }
619 }
620 return true;
621}
622
623/*-- 4.1, generic -----------------------------------------------------------*/
624
625/* Called when the BFD is being closed to do any necessary cleanup. */
626
627static boolean
628vms_close_and_cleanup (abfd)
629 bfd *abfd;
630{
252b5132
RH
631#if VMS_DEBUG
632 vms_debug (1, "vms_close_and_cleanup(%p)\n", abfd);
633#endif
634 if (abfd == 0)
635 return true;
636
8a0c27cd 637 if (PRIV (vms_buf) != NULL)
487e54f2 638 free (PRIV (vms_buf));
252b5132 639
8a0c27cd 640 if (PRIV (sections) != NULL)
487e54f2 641 free (PRIV (sections));
252b5132 642
8a0c27cd 643 if (PRIV (vms_symbol_table))
487e54f2 644 bfd_hash_table_free (PRIV (vms_symbol_table));
252b5132 645
487e54f2 646 bfd_release (abfd, abfd->tdata.any);
252b5132
RH
647 abfd->tdata.any = NULL;
648
649 return true;
650}
651
252b5132
RH
652/* Ask the BFD to free all cached information. */
653static boolean
654vms_bfd_free_cached_info (abfd)
5f771d47 655 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
656{
657#if VMS_DEBUG
658 vms_debug (1, "vms_bfd_free_cached_info(%p)\n", abfd);
659#endif
660 return true;
661}
662
252b5132
RH
663/* Called when a new section is created. */
664
665static boolean
666vms_new_section_hook (abfd, section)
667 bfd *abfd;
668 asection *section;
669{
4e6bfe8a
AM
670 /* Count hasn't been incremented yet. */
671 unsigned int section_count = abfd->section_count + 1;
672
252b5132 673#if VMS_DEBUG
4e6bfe8a
AM
674 vms_debug (1, "vms_new_section_hook (%p, [%d]%s), count %d\n",
675 abfd, section->index, section->name, section_count);
252b5132 676#endif
4e6bfe8a 677 bfd_set_section_alignment (abfd, section, 4);
252b5132 678
4e6bfe8a 679 if (section_count > PRIV (section_count))
252b5132 680 {
4e6bfe8a 681 bfd_size_type amt = section_count;
dc810e39
AM
682 amt *= sizeof (asection *);
683 PRIV (sections) = (asection **) bfd_realloc (PRIV (sections), amt);
8a0c27cd 684 if (PRIV (sections) == 0)
252b5132 685 return false;
4e6bfe8a 686 PRIV (section_count) = section_count;
252b5132
RH
687 }
688#if VMS_DEBUG
8a0c27cd 689 vms_debug (6, "section_count: %d\n", PRIV (section_count));
252b5132 690#endif
8a0c27cd 691 PRIV (sections)[section->index] = section;
252b5132
RH
692#if VMS_DEBUG
693 vms_debug (7, "%d: %s\n", section->index, section->name);
694#endif
695
696 return true;
697}
698
252b5132
RH
699/* Read the contents of a section.
700 buf points to a buffer of buf_size bytes to be filled with
701 section data (starting at offset into section) */
702
703static boolean
704vms_get_section_contents (abfd, section, buf, offset, buf_size)
5f771d47
ILT
705 bfd *abfd ATTRIBUTE_UNUSED;
706 asection *section ATTRIBUTE_UNUSED;
707 PTR buf ATTRIBUTE_UNUSED;
708 file_ptr offset ATTRIBUTE_UNUSED;
709 bfd_size_type buf_size ATTRIBUTE_UNUSED;
252b5132
RH
710{
711#if VMS_DEBUG
712 vms_debug (1, "vms_get_section_contents(%p, %s, %p, off %ld, size %d)\n",
713 abfd, section->name, buf, offset, (int)buf_size);
714#endif
715
716 /* shouldn't be called, since all sections are IN_MEMORY */
717
718 return false;
719}
720
721/* Read the contents of a section.
722 buf points to a buffer of buf_size bytes to be filled with
723 section data (starting at offset into section) */
724
725static boolean
726vms_get_section_contents_in_window (abfd, section, w, offset, count)
5f771d47
ILT
727 bfd *abfd ATTRIBUTE_UNUSED;
728 asection *section ATTRIBUTE_UNUSED;
729 bfd_window *w ATTRIBUTE_UNUSED;
730 file_ptr offset ATTRIBUTE_UNUSED;
731 bfd_size_type count ATTRIBUTE_UNUSED;
252b5132
RH
732{
733#if VMS_DEBUG
734 vms_debug (1, "vms_get_section_contents_in_window(%p, %s, %p, off %ld, count %d)\n",
735 abfd, section->name, w, offset, (int)count);
736#endif
737
738 /* shouldn't be called, since all sections are IN_MEMORY */
739
740 return false;
741}
742
743/*-- Part 4.2, copy private data --------------------------------------------*/
744
745/* Called to copy BFD general private data from one object file
746 to another. */
747
748static boolean
749vms_bfd_copy_private_bfd_data (src, dest)
5f771d47
ILT
750 bfd *src ATTRIBUTE_UNUSED;
751 bfd *dest ATTRIBUTE_UNUSED;
252b5132
RH
752{
753#if VMS_DEBUG
754 vms_debug (1, "vms_bfd_copy_private_bfd_data(%p, %p)\n", src, dest);
755#endif
756 return true;
757}
758
252b5132
RH
759/* Merge private BFD information from the BFD @var{ibfd} to the
760 the output file BFD @var{obfd} when linking. Return <<true>>
761 on success, <<false>> on error. Possible error returns are:
762
763 o <<bfd_error_no_memory>> -
764 Not enough memory exists to create private data for @var{obfd}. */
765
766static boolean
767vms_bfd_merge_private_bfd_data (ibfd, obfd)
5f771d47
ILT
768 bfd *ibfd ATTRIBUTE_UNUSED;
769 bfd *obfd ATTRIBUTE_UNUSED;
252b5132
RH
770{
771#if VMS_DEBUG
772 vms_debug (1,"vms_bfd_merge_private_bfd_data(%p, %p)\n", ibfd, obfd);
773#endif
774 return true;
775}
776
252b5132
RH
777/* Set private BFD flag information in the BFD @var{abfd}.
778 Return <<true>> on success, <<false>> on error. Possible error
779 returns are:
780
781 o <<bfd_error_no_memory>> -
782 Not enough memory exists to create private data for @var{obfd}. */
783
784static boolean
785vms_bfd_set_private_flags (abfd, flags)
5f771d47
ILT
786 bfd *abfd ATTRIBUTE_UNUSED;
787 flagword flags ATTRIBUTE_UNUSED;
252b5132
RH
788{
789#if VMS_DEBUG
790 vms_debug (1,"vms_bfd_set_private_flags(%p, %lx)\n", abfd, (long)flags);
791#endif
792 return true;
793}
794
252b5132
RH
795/* Called to copy BFD private section data from one object file
796 to another. */
797
798static boolean
799vms_bfd_copy_private_section_data (srcbfd, srcsec, dstbfd, dstsec)
5f771d47
ILT
800 bfd *srcbfd ATTRIBUTE_UNUSED;
801 asection *srcsec ATTRIBUTE_UNUSED;
802 bfd *dstbfd ATTRIBUTE_UNUSED;
803 asection *dstsec ATTRIBUTE_UNUSED;
252b5132
RH
804{
805#if VMS_DEBUG
806 vms_debug (1, "vms_bfd_copy_private_section_data(%p, %s, %p, %s)\n",
807 srcbfd, srcsec->name, dstbfd, dstsec->name);
808#endif
809 return true;
810}
811
812/* Called to copy BFD private symbol data from one object file
813 to another. */
814
55f2d5ed 815static boolean
252b5132 816vms_bfd_copy_private_symbol_data (ibfd, isym, obfd, osym)
5f771d47
ILT
817 bfd *ibfd ATTRIBUTE_UNUSED;
818 asymbol *isym ATTRIBUTE_UNUSED;
819 bfd *obfd ATTRIBUTE_UNUSED;
820 asymbol *osym ATTRIBUTE_UNUSED;
252b5132
RH
821{
822#if VMS_DEBUG
823 vms_debug (1, "vms_bfd_copy_private_symbol_data(%p, %s, %p, %s)\n",
824 ibfd, isym->name, obfd, osym->name);
825#endif
826 return true;
827}
828
829/*-- Part 4.3, core file ----------------------------------------------------*/
830
831/* Return a read-only string explaining which program was running
832 when it failed and produced the core file abfd. */
833
834static char *
835vms_core_file_failing_command (abfd)
5f771d47 836 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
837{
838#if VMS_DEBUG
839 vms_debug (1, "vms_core_file_failing_command(%p)\n", abfd);
840#endif
841 return 0;
842}
843
252b5132
RH
844/* Returns the signal number which caused the core dump which
845 generated the file the BFD abfd is attached to. */
846
847static int
848vms_core_file_failing_signal (abfd)
5f771d47 849 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
850{
851#if VMS_DEBUG
852 vms_debug (1, "vms_core_file_failing_signal(%p)\n", abfd);
853#endif
854 return 0;
855}
856
252b5132
RH
857/* Return true if the core file attached to core_bfd was generated
858 by a run of the executable file attached to exec_bfd, false otherwise. */
859
860static boolean
861vms_core_file_matches_executable_p (abfd, bbfd)
5f771d47
ILT
862 bfd *abfd ATTRIBUTE_UNUSED;
863 bfd *bbfd ATTRIBUTE_UNUSED;
252b5132
RH
864{
865#if VMS_DEBUG
866 vms_debug (1, "vms_core_file_matches_executable_p(%p, %p)\n", abfd, bbfd);
867#endif
868 return false;
869}
870
871/*-- Part 4.4, archive ------------------------------------------------------*/
872
873/* ??? do something with an archive map.
874 Return false on error, true otherwise. */
875
876static boolean
877vms_slurp_armap (abfd)
5f771d47 878 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
879{
880#if VMS_DEBUG
881 vms_debug (1, "vms_slurp_armap(%p)\n", abfd);
882#endif
883 return false;
884}
885
252b5132
RH
886/* ??? do something with an extended name table.
887 Return false on error, true otherwise. */
888
889static boolean
890vms_slurp_extended_name_table (abfd)
5f771d47 891 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
892{
893#if VMS_DEBUG
894 vms_debug (1, "vms_slurp_extended_name_table(%p)\n", abfd);
895#endif
896 return false;
897}
898
252b5132
RH
899/* ??? do something with an extended name table.
900 Return false on error, true otherwise. */
901
902static boolean
903vms_construct_extended_name_table (abfd, tabloc, tablen, name)
5f771d47
ILT
904 bfd *abfd ATTRIBUTE_UNUSED;
905 char **tabloc ATTRIBUTE_UNUSED;
906 bfd_size_type *tablen ATTRIBUTE_UNUSED;
907 const char **name ATTRIBUTE_UNUSED;
252b5132
RH
908{
909#if VMS_DEBUG
910 vms_debug (1, "vms_construct_extended_name_table(%p)\n", abfd);
911#endif
912 return false;
913}
914
252b5132
RH
915/* Truncate the name of an archive to match system-dependent restrictions */
916
917static void
918vms_truncate_arname (abfd, pathname, arhdr)
5f771d47 919 bfd *abfd ATTRIBUTE_UNUSED;
dc810e39 920 const char *pathname ATTRIBUTE_UNUSED;
5f771d47 921 char *arhdr ATTRIBUTE_UNUSED;
252b5132
RH
922{
923#if VMS_DEBUG
924 vms_debug (1, "vms_truncate_arname(%p, %s, %s)\n", abfd, pathname, arhdr);
925#endif
926 return;
927}
928
252b5132
RH
929/* ??? write archive map */
930
931static boolean
932vms_write_armap (arch, elength, map, orl_count, stridx)
5f771d47
ILT
933 bfd *arch ATTRIBUTE_UNUSED;
934 unsigned int elength ATTRIBUTE_UNUSED;
935 struct orl *map ATTRIBUTE_UNUSED;
936 unsigned int orl_count ATTRIBUTE_UNUSED;
937 int stridx ATTRIBUTE_UNUSED;
252b5132
RH
938{
939#if VMS_DEBUG
940 vms_debug (1, "vms_write_armap(%p, %d, %p, %d %d)\n",
941 arch, elength, map, orl_count, stridx);
942#endif
943 return true;
944}
945
946/* Read archive header ??? */
947
948static PTR
949vms_read_ar_hdr (abfd)
5f771d47 950 bfd * abfd ATTRIBUTE_UNUSED;
252b5132
RH
951{
952#if VMS_DEBUG
953 vms_debug (1, "vms_read_ar_hdr(%p)\n", abfd);
954#endif
955 return (PTR)0;
956}
957
252b5132
RH
958/* Provided a BFD, @var{archive}, containing an archive and NULL, open
959 an input BFD on the first contained element and returns that.
960 Subsequent calls should pass the archive and the previous return value
961 to return a created BFD to the next contained element.
962 NULL is returned when there are no more. */
963
964static bfd *
965vms_openr_next_archived_file (arch, prev)
5f771d47
ILT
966 bfd *arch ATTRIBUTE_UNUSED;
967 bfd *prev ATTRIBUTE_UNUSED;
252b5132
RH
968{
969#if VMS_DEBUG
970 vms_debug (1, "vms_openr_next_archived_file(%p, %p)\n", arch, prev);
971#endif
01fff6e2 972 return NULL;
252b5132
RH
973}
974
252b5132
RH
975/* Return the BFD which is referenced by the symbol in ABFD indexed by
976 INDEX. INDEX should have been returned by bfd_get_next_mapent. */
977
978static bfd *
979vms_get_elt_at_index (abfd, index)
980 bfd *abfd;
981 symindex index;
982{
983#if VMS_DEBUG
984 vms_debug (1, "vms_get_elt_at_index(%p, %p)\n", abfd, index);
985#endif
986 return _bfd_generic_get_elt_at_index(abfd, index);
987}
988
252b5132
RH
989/* ???
990 -> bfd_generic_stat_arch_elt */
991
992static int
dc810e39 993vms_generic_stat_arch_elt (abfd, st)
252b5132 994 bfd *abfd;
dc810e39 995 struct stat *st;
252b5132
RH
996{
997#if VMS_DEBUG
dc810e39 998 vms_debug (1, "vms_generic_stat_arch_elt(%p, %p)\n", abfd, st);
252b5132 999#endif
dc810e39 1000 return bfd_generic_stat_arch_elt (abfd, st);
252b5132
RH
1001}
1002
252b5132
RH
1003/* This is a new function in bfd 2.5 */
1004
1005static boolean
1006vms_update_armap_timestamp (abfd)
5f771d47 1007 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
1008{
1009#if VMS_DEBUG
1010 vms_debug (1, "vms_update_armap_timestamp(%p)\n", abfd);
1011#endif
1012 return true;
1013}
1014
1015/*-- Part 4.5, symbols --------------------------------------------------------*/
1016
1017/* Return the number of bytes required to store a vector of pointers
1018 to asymbols for all the symbols in the BFD abfd, including a
1019 terminal NULL pointer. If there are no symbols in the BFD,
1020 then return 0. If an error occurs, return -1. */
1021
1022static long
1023vms_get_symtab_upper_bound (abfd)
1024 bfd *abfd;
1025{
1026#if VMS_DEBUG
8a0c27cd 1027 vms_debug (1, "vms_get_symtab_upper_bound(%p), %d symbols\n", abfd, PRIV (gsd_sym_count));
252b5132 1028#endif
8a0c27cd 1029 return (PRIV (gsd_sym_count)+1) * sizeof (asymbol *);
252b5132
RH
1030}
1031
252b5132
RH
1032/* Copy symbols from hash table to symbol vector
1033
1034 called from bfd_hash_traverse in vms_get_symtab
1035 init counter to 0 if entry == 0 */
1036
1037static boolean
1038copy_symbols (entry, arg)
1039 struct bfd_hash_entry *entry;
1040 PTR arg;
1041{
1042 bfd *abfd = (bfd *) arg;
1043
1044 if (entry == NULL) /* init counter */
8a0c27cd 1045 PRIV (symnum) = 0;
252b5132 1046 else /* fill vector, inc counter */
8a0c27cd 1047 PRIV (symcache)[PRIV (symnum)++] = ((vms_symbol_entry *)entry)->symbol;
252b5132
RH
1048
1049 return true;
1050}
1051
252b5132
RH
1052/* Read the symbols from the BFD abfd, and fills in the vector
1053 location with pointers to the symbols and a trailing NULL.
1054
1055 return # of symbols read */
1056
1057static long
1058vms_get_symtab (abfd, symbols)
1059 bfd *abfd;
1060 asymbol **symbols;
1061{
1062#if VMS_DEBUG
1063 vms_debug (1, "vms_get_symtab(%p, <ret>)\n", abfd);
1064#endif
1065
1066 /* init counter */
1067 (void)copy_symbols((struct bfd_hash_entry *)0, abfd);
1068
1069 /* traverse table and fill symbols vector */
1070
8a0c27cd
KH
1071 PRIV (symcache) = symbols;
1072 bfd_hash_traverse(PRIV (vms_symbol_table), copy_symbols, (PTR)abfd);
252b5132 1073
8a0c27cd 1074 symbols[PRIV (gsd_sym_count)] = NULL;
252b5132 1075
8a0c27cd 1076 return PRIV (gsd_sym_count);
252b5132
RH
1077}
1078
252b5132
RH
1079/* Print symbol to file according to how. how is one of
1080 bfd_print_symbol_name just print the name
1081 bfd_print_symbol_more print more (???)
1082 bfd_print_symbol_all print all we know, which is not much right now :-) */
1083
1084static void
1085vms_print_symbol (abfd, file, symbol, how)
60b89a18 1086 bfd *abfd;
252b5132
RH
1087 PTR file;
1088 asymbol *symbol;
1089 bfd_print_symbol_type how;
1090{
1091#if VMS_DEBUG
1092 vms_debug (1, "vms_print_symbol(%p, %p, %p, %d)\n", abfd, file, symbol, how);
1093#endif
1094
1095 switch (how)
1096 {
1097 case bfd_print_symbol_name:
1098 case bfd_print_symbol_more:
55f2d5ed 1099 fprintf ((FILE *)file," %s", symbol->name);
252b5132
RH
1100 break;
1101
252b5132
RH
1102 case bfd_print_symbol_all:
1103 {
dc810e39 1104 const char *section_name = symbol->section->name;
252b5132 1105
60b89a18 1106 bfd_print_symbol_vandf (abfd, (PTR)file, symbol);
252b5132 1107
55f2d5ed 1108 fprintf ((FILE *)file," %-8s %s", section_name, symbol->name);
252b5132
RH
1109 }
1110 break;
1111 }
1112 return;
1113}
1114
252b5132
RH
1115/* Return information about symbol in ret.
1116
1117 fill type, value and name
1118 type:
1119 A absolute
1120 B bss segment symbol
1121 C common symbol
1122 D data segment symbol
1123 f filename
1124 t a static function symbol
1125 T text segment symbol
1126 U undefined
1127 - debug */
1128
1129static void
1130vms_get_symbol_info (abfd, symbol, ret)
5f771d47 1131 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
1132 asymbol *symbol;
1133 symbol_info *ret;
1134{
1135 asection *sec;
1136
1137#if VMS_DEBUG
1138 vms_debug (1, "vms_get_symbol_info(%p, %p, %p)\n", abfd, symbol, ret);
1139#endif
1140
1141 sec = symbol->section;
1142
1143 if (ret == 0)
1144 return;
1145
1146 if (bfd_is_com_section (sec))
1147 ret->type = 'C';
1148 else if (bfd_is_abs_section (sec))
1149 ret->type = 'A';
1150 else if (bfd_is_und_section (sec))
1151 ret->type = 'U';
1152 else if (bfd_is_ind_section (sec))
1153 ret->type = 'I';
1154 else if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
1155 ret->type = 'T';
1156 else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
1157 ret->type = 'D';
1158 else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
1159 ret->type = 'B';
1160 else
1161 ret->type = '-';
1162
1163 if (ret->type != 'U')
1164 ret->value = symbol->value + symbol->section->vma;
1165 else
1166 ret->value = 0;
1167 ret->name = symbol->name;
1168
1169 return;
1170}
1171
252b5132
RH
1172/* Return true if the given symbol sym in the BFD abfd is
1173 a compiler generated local label, else return false. */
1174
1175static boolean
1176vms_bfd_is_local_label_name (abfd, name)
5f771d47 1177 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
1178 const char *name;
1179{
1180#if VMS_DEBUG
1181 vms_debug (1, "vms_bfd_is_local_label_name(%p, %s)\n", abfd, name);
1182#endif
1183 return name[0] == '$';
1184}
1185
252b5132
RH
1186/* Get source line number for symbol */
1187
1188static alent *
1189vms_get_lineno (abfd, symbol)
5f771d47
ILT
1190 bfd *abfd ATTRIBUTE_UNUSED;
1191 asymbol *symbol ATTRIBUTE_UNUSED;
252b5132
RH
1192{
1193#if VMS_DEBUG
1194 vms_debug (1, "vms_get_lineno(%p, %p)\n", abfd, symbol);
1195#endif
1196 return 0;
1197}
1198
252b5132
RH
1199/* Provided a BFD, a section and an offset into the section, calculate and
1200 return the name of the source file and the line nearest to the wanted
1201 location. */
1202
1203static boolean
1204vms_find_nearest_line (abfd, section, symbols, offset, file, func, line)
5f771d47
ILT
1205 bfd *abfd ATTRIBUTE_UNUSED;
1206 asection *section ATTRIBUTE_UNUSED;
1207 asymbol **symbols ATTRIBUTE_UNUSED;
1208 bfd_vma offset ATTRIBUTE_UNUSED;
dc810e39
AM
1209 const char **file ATTRIBUTE_UNUSED;
1210 const char **func ATTRIBUTE_UNUSED;
5f771d47 1211 unsigned int *line ATTRIBUTE_UNUSED;
252b5132
RH
1212{
1213#if VMS_DEBUG
1214 vms_debug (1, "vms_find_nearest_line(%p, %s, %p, %ld, <ret>, <ret>, <ret>)\n",
1215 abfd, section->name, symbols, (long int)offset);
1216#endif
1217 return false;
1218}
1219
252b5132
RH
1220/* Back-door to allow format-aware applications to create debug symbols
1221 while using BFD for everything else. Currently used by the assembler
1222 when creating COFF files. */
1223
1224static asymbol *
1225vms_bfd_make_debug_symbol (abfd, ptr, size)
5f771d47
ILT
1226 bfd *abfd ATTRIBUTE_UNUSED;
1227 void *ptr ATTRIBUTE_UNUSED;
1228 unsigned long size ATTRIBUTE_UNUSED;
252b5132
RH
1229{
1230#if VMS_DEBUG
1231 vms_debug (1, "vms_bfd_make_debug_symbol(%p, %p, %ld)\n", abfd, ptr, size);
1232#endif
1233 return 0;
1234}
1235
252b5132
RH
1236/* Read minisymbols. For minisymbols, we use the unmodified a.out
1237 symbols. The minisymbol_to_symbol function translates these into
1238 BFD asymbol structures. */
1239
1240static long
1241vms_read_minisymbols (abfd, dynamic, minisymsp, sizep)
1242 bfd *abfd;
1243 boolean dynamic;
1244 PTR *minisymsp;
1245 unsigned int *sizep;
1246{
1247#if VMS_DEBUG
1248 vms_debug (1, "vms_read_minisymbols(%p, %d, %p, %d)\n", abfd, dynamic, minisymsp, *sizep);
1249#endif
1250 return _bfd_generic_read_minisymbols (abfd, dynamic, minisymsp, sizep);
1251}
1252
1253/* Convert a minisymbol to a BFD asymbol. A minisymbol is just an
1254 unmodified a.out symbol. The SYM argument is a structure returned
1255 by bfd_make_empty_symbol, which we fill in here. */
1256
1257static asymbol *
1258vms_minisymbol_to_symbol (abfd, dynamic, minisym, sym)
1259 bfd *abfd;
1260 boolean dynamic;
1261 const PTR minisym;
1262 asymbol *sym;
1263{
1264#if VMS_DEBUG
1265 vms_debug (1, "vms_minisymbol_to_symbol(%p, %d, %p, %p)\n", abfd, dynamic, minisym, sym);
1266#endif
1267 return _bfd_generic_minisymbol_to_symbol (abfd, dynamic, minisym, sym);
1268}
1269
1270/*-- Part 4.6, relocations --------------------------------------------------*/
1271
1272/* Return the number of bytes required to store the relocation information
1273 associated with section sect attached to bfd abfd.
1274 If an error occurs, return -1. */
1275
1276static long
1277vms_get_reloc_upper_bound (abfd, section)
5f771d47
ILT
1278 bfd *abfd ATTRIBUTE_UNUSED;
1279 asection *section ATTRIBUTE_UNUSED;
252b5132
RH
1280{
1281#if VMS_DEBUG
1282 vms_debug (1, "vms_get_reloc_upper_bound(%p, %s)\n", abfd, section->name);
1283#endif
1284 return -1L;
1285}
1286
252b5132
RH
1287/* Call the back end associated with the open BFD abfd and translate the
1288 external form of the relocation information attached to sec into the
1289 internal canonical form. Place the table into memory at loc, which has
1290 been preallocated, usually by a call to bfd_get_reloc_upper_bound.
1291 Returns the number of relocs, or -1 on error. */
1292
1293static long
1294vms_canonicalize_reloc (abfd, section, location, symbols)
5f771d47
ILT
1295 bfd *abfd ATTRIBUTE_UNUSED;
1296 asection *section ATTRIBUTE_UNUSED;
1297 arelent **location ATTRIBUTE_UNUSED;
1298 asymbol **symbols ATTRIBUTE_UNUSED;
252b5132
RH
1299{
1300#if VMS_DEBUG
1301 vms_debug (1, "vms_canonicalize_reloc(%p, %s, <ret>, <ret>)\n", abfd, section->name);
1302#endif
1303 return false;
1304}
1305
1306/*---------------------------------------------------------------------------*/
1307/* this is just copied from ecoff-alpha, needs to be fixed probably */
1308
1309/* How to process the various reloc types. */
1310
1311static bfd_reloc_status_type
1312reloc_nil (abfd, reloc, sym, data, sec, output_bfd, error_message)
5f771d47
ILT
1313 bfd *abfd ATTRIBUTE_UNUSED;
1314 arelent *reloc ATTRIBUTE_UNUSED;
1315 asymbol *sym ATTRIBUTE_UNUSED;
1316 PTR data ATTRIBUTE_UNUSED;
1317 asection *sec ATTRIBUTE_UNUSED;
1318 bfd *output_bfd ATTRIBUTE_UNUSED;
1319 char **error_message ATTRIBUTE_UNUSED;
252b5132
RH
1320{
1321#if VMS_DEBUG
1322 vms_debug (1, "reloc_nil(abfd %p, output_bfd %p)\n", abfd, output_bfd);
1323 vms_debug (2, "In section %s, symbol %s\n",
1324 sec->name, sym->name);
1325 vms_debug (2, "reloc sym %s, addr %08lx, addend %08lx, reloc is a %s\n",
1326 reloc->sym_ptr_ptr[0]->name,
1327 (unsigned long)reloc->address,
1328 (unsigned long)reloc->addend, reloc->howto->name);
1329 vms_debug (2, "data at %p\n", data);
1330/* _bfd_hexdump (2, data, bfd_get_reloc_size(reloc->howto),0); */
1331#endif
1332
1333 return bfd_reloc_ok;
1334}
1335
1336/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
1337 from smaller values. Start with zero, widen, *then* decrement. */
1338#define MINUS_ONE (((bfd_vma)0) - 1)
1339
1340static reloc_howto_type alpha_howto_table[] =
1341{
1342 HOWTO (ALPHA_R_IGNORE, /* type */
1343 0, /* rightshift */
1344 0, /* size (0 = byte, 1 = short, 2 = long) */
1345 8, /* bitsize */
1346 true, /* pc_relative */
1347 0, /* bitpos */
1348 complain_overflow_dont, /* complain_on_overflow */
1349 reloc_nil, /* special_function */
1350 "IGNORE", /* name */
1351 true, /* partial_inplace */
1352 0, /* src_mask */
1353 0, /* dst_mask */
1354 true), /* pcrel_offset */
1355
1356 /* A 64 bit reference to a symbol. */
1357 HOWTO (ALPHA_R_REFQUAD, /* type */
1358 0, /* rightshift */
1359 4, /* size (0 = byte, 1 = short, 2 = long) */
1360 64, /* bitsize */
1361 false, /* pc_relative */
1362 0, /* bitpos */
1363 complain_overflow_bitfield, /* complain_on_overflow */
1364 reloc_nil, /* special_function */
1365 "REFQUAD", /* name */
1366 true, /* partial_inplace */
1367 MINUS_ONE, /* src_mask */
1368 MINUS_ONE, /* dst_mask */
1369 false), /* pcrel_offset */
1370
1371 /* A 21 bit branch. The native assembler generates these for
1372 branches within the text segment, and also fills in the PC
1373 relative offset in the instruction. */
1374 HOWTO (ALPHA_R_BRADDR, /* type */
1375 2, /* rightshift */
1376 2, /* size (0 = byte, 1 = short, 2 = long) */
1377 21, /* bitsize */
1378 true, /* pc_relative */
1379 0, /* bitpos */
1380 complain_overflow_signed, /* complain_on_overflow */
1381 reloc_nil, /* special_function */
1382 "BRADDR", /* name */
1383 true, /* partial_inplace */
1384 0x1fffff, /* src_mask */
1385 0x1fffff, /* dst_mask */
1386 false), /* pcrel_offset */
1387
1388 /* A hint for a jump to a register. */
1389 HOWTO (ALPHA_R_HINT, /* type */
1390 2, /* rightshift */
1391 1, /* size (0 = byte, 1 = short, 2 = long) */
1392 14, /* bitsize */
1393 true, /* pc_relative */
1394 0, /* bitpos */
1395 complain_overflow_dont, /* complain_on_overflow */
1396 reloc_nil, /* special_function */
1397 "HINT", /* name */
1398 true, /* partial_inplace */
1399 0x3fff, /* src_mask */
1400 0x3fff, /* dst_mask */
1401 false), /* pcrel_offset */
1402
1403 /* 16 bit PC relative offset. */
1404 HOWTO (ALPHA_R_SREL16, /* type */
1405 0, /* rightshift */
1406 1, /* size (0 = byte, 1 = short, 2 = long) */
1407 16, /* bitsize */
1408 true, /* pc_relative */
1409 0, /* bitpos */
1410 complain_overflow_signed, /* complain_on_overflow */
1411 reloc_nil, /* special_function */
1412 "SREL16", /* name */
1413 true, /* partial_inplace */
1414 0xffff, /* src_mask */
1415 0xffff, /* dst_mask */
1416 false), /* pcrel_offset */
1417
1418 /* 32 bit PC relative offset. */
1419 HOWTO (ALPHA_R_SREL32, /* type */
1420 0, /* rightshift */
1421 2, /* size (0 = byte, 1 = short, 2 = long) */
1422 32, /* bitsize */
1423 true, /* pc_relative */
1424 0, /* bitpos */
1425 complain_overflow_signed, /* complain_on_overflow */
1426 reloc_nil, /* special_function */
1427 "SREL32", /* name */
1428 true, /* partial_inplace */
1429 0xffffffff, /* src_mask */
1430 0xffffffff, /* dst_mask */
1431 false), /* pcrel_offset */
1432
1433 /* A 64 bit PC relative offset. */
1434 HOWTO (ALPHA_R_SREL64, /* type */
1435 0, /* rightshift */
1436 4, /* size (0 = byte, 1 = short, 2 = long) */
1437 64, /* bitsize */
1438 true, /* pc_relative */
1439 0, /* bitpos */
1440 complain_overflow_signed, /* complain_on_overflow */
1441 reloc_nil, /* special_function */
1442 "SREL64", /* name */
1443 true, /* partial_inplace */
1444 MINUS_ONE, /* src_mask */
1445 MINUS_ONE, /* dst_mask */
1446 false), /* pcrel_offset */
1447
1448 /* Push a value on the reloc evaluation stack. */
1449 HOWTO (ALPHA_R_OP_PUSH, /* type */
1450 0, /* rightshift */
1451 0, /* size (0 = byte, 1 = short, 2 = long) */
1452 0, /* bitsize */
1453 false, /* pc_relative */
1454 0, /* bitpos */
1455 complain_overflow_dont, /* complain_on_overflow */
1456 reloc_nil, /* special_function */
1457 "OP_PUSH", /* name */
1458 false, /* partial_inplace */
1459 0, /* src_mask */
1460 0, /* dst_mask */
1461 false), /* pcrel_offset */
1462
1463 /* Store the value from the stack at the given address. Store it in
1464 a bitfield of size r_size starting at bit position r_offset. */
1465 HOWTO (ALPHA_R_OP_STORE, /* type */
1466 0, /* rightshift */
1467 4, /* size (0 = byte, 1 = short, 2 = long) */
1468 64, /* bitsize */
1469 false, /* pc_relative */
1470 0, /* bitpos */
1471 complain_overflow_dont, /* complain_on_overflow */
1472 reloc_nil, /* special_function */
1473 "OP_STORE", /* name */
1474 false, /* partial_inplace */
1475 0, /* src_mask */
1476 MINUS_ONE, /* dst_mask */
1477 false), /* pcrel_offset */
1478
1479 /* Subtract the reloc address from the value on the top of the
1480 relocation stack. */
1481 HOWTO (ALPHA_R_OP_PSUB, /* type */
1482 0, /* rightshift */
1483 0, /* size (0 = byte, 1 = short, 2 = long) */
1484 0, /* bitsize */
1485 false, /* pc_relative */
1486 0, /* bitpos */
1487 complain_overflow_dont, /* complain_on_overflow */
1488 reloc_nil, /* special_function */
1489 "OP_PSUB", /* name */
1490 false, /* partial_inplace */
1491 0, /* src_mask */
1492 0, /* dst_mask */
1493 false), /* pcrel_offset */
1494
1495 /* Shift the value on the top of the relocation stack right by the
1496 given value. */
1497 HOWTO (ALPHA_R_OP_PRSHIFT, /* type */
1498 0, /* rightshift */
1499 0, /* size (0 = byte, 1 = short, 2 = long) */
1500 0, /* bitsize */
1501 false, /* pc_relative */
1502 0, /* bitpos */
1503 complain_overflow_dont, /* complain_on_overflow */
1504 reloc_nil, /* special_function */
1505 "OP_PRSHIFT", /* name */
1506 false, /* partial_inplace */
1507 0, /* src_mask */
1508 0, /* dst_mask */
1509 false), /* pcrel_offset */
1510
1511 /* Hack. Linkage is done by linker. */
1512 HOWTO (ALPHA_R_LINKAGE, /* type */
1513 0, /* rightshift */
1514 8, /* size (0 = byte, 1 = short, 2 = long) */
1515 256, /* bitsize */
1516 false, /* pc_relative */
1517 0, /* bitpos */
1518 complain_overflow_dont, /* complain_on_overflow */
1519 reloc_nil, /* special_function */
1520 "LINKAGE", /* name */
1521 false, /* partial_inplace */
1522 0, /* src_mask */
1523 0, /* dst_mask */
1524 false), /* pcrel_offset */
1525
1526 /* A 32 bit reference to a symbol. */
1527 HOWTO (ALPHA_R_REFLONG, /* type */
1528 0, /* rightshift */
1529 2, /* size (0 = byte, 1 = short, 2 = long) */
1530 32, /* bitsize */
1531 false, /* pc_relative */
1532 0, /* bitpos */
1533 complain_overflow_bitfield, /* complain_on_overflow */
1534 reloc_nil, /* special_function */
1535 "REFLONG", /* name */
1536 true, /* partial_inplace */
1537 0xffffffff, /* src_mask */
1538 0xffffffff, /* dst_mask */
1539 false), /* pcrel_offset */
1540
1541 /* A 64 bit reference to a procedure, written as 32 bit value. */
1542 HOWTO (ALPHA_R_CODEADDR, /* type */
1543 0, /* rightshift */
1544 4, /* size (0 = byte, 1 = short, 2 = long) */
1545 64, /* bitsize */
1546 false, /* pc_relative */
1547 0, /* bitpos */
1548 complain_overflow_signed,/* complain_on_overflow */
1549 reloc_nil, /* special_function */
1550 "CODEADDR", /* name */
1551 false, /* partial_inplace */
1552 0xffffffff, /* src_mask */
1553 0xffffffff, /* dst_mask */
1554 false), /* pcrel_offset */
1555
1556};
1557
1558/* Return a pointer to a howto structure which, when invoked, will perform
1559 the relocation code on data from the architecture noted. */
1560
1561static const struct reloc_howto_struct *
1562vms_bfd_reloc_type_lookup (abfd, code)
5f771d47 1563 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
1564 bfd_reloc_code_real_type code;
1565{
1566 int alpha_type;
1567
1568#if VMS_DEBUG
1569 vms_debug (1, "vms_bfd_reloc_type_lookup(%p, %d)\t", abfd, code);
1570#endif
1571
1572 switch (code)
1573 {
1574 case BFD_RELOC_16: alpha_type = ALPHA_R_SREL16; break;
1575 case BFD_RELOC_32: alpha_type = ALPHA_R_REFLONG; break;
1576 case BFD_RELOC_64: alpha_type = ALPHA_R_REFQUAD; break;
1577 case BFD_RELOC_CTOR: alpha_type = ALPHA_R_REFQUAD; break;
1578 case BFD_RELOC_23_PCREL_S2: alpha_type = ALPHA_R_BRADDR; break;
1579 case BFD_RELOC_ALPHA_HINT: alpha_type = ALPHA_R_HINT; break;
1580 case BFD_RELOC_16_PCREL: alpha_type = ALPHA_R_SREL16; break;
1581 case BFD_RELOC_32_PCREL: alpha_type = ALPHA_R_SREL32; break;
1582 case BFD_RELOC_64_PCREL: alpha_type = ALPHA_R_SREL64; break;
1583 case BFD_RELOC_ALPHA_LINKAGE: alpha_type = ALPHA_R_LINKAGE; break;
1584 case BFD_RELOC_ALPHA_CODEADDR: alpha_type = ALPHA_R_CODEADDR; break;
1585 default:
1586 (*_bfd_error_handler) ("reloc (%d) is *UNKNOWN*", code);
1587 return (const struct reloc_howto_struct *) NULL;
1588 }
1589#if VMS_DEBUG
1590 vms_debug (2, "reloc is %s\n", alpha_howto_table[alpha_type].name);
1591#endif
1592 return &alpha_howto_table[alpha_type];
1593}
1594
252b5132
RH
1595/*-- Part 4.7, writing an object file ---------------------------------------*/
1596
1597/* Set the architecture and machine type in BFD abfd to arch and mach.
1598 Find the correct pointer to a structure and insert it into the arch_info
1599 pointer. */
1600
1601static boolean
1602vms_set_arch_mach (abfd, arch, mach)
1603 bfd *abfd;
5f771d47
ILT
1604 enum bfd_architecture arch ATTRIBUTE_UNUSED;
1605 unsigned long mach ATTRIBUTE_UNUSED;
252b5132
RH
1606{
1607#if VMS_DEBUG
1608 vms_debug (1, "vms_set_arch_mach(%p, %d, %ld)\n", abfd, arch, mach);
1609#endif
1610 abfd->arch_info = bfd_scan_arch("alpha");
1611
1612 return true;
1613}
1614
252b5132
RH
1615/* Sets the contents of the section section in BFD abfd to the data starting
1616 in memory at data. The data is written to the output section starting at
1617 offset offset for count bytes.
1618
1619 Normally true is returned, else false. Possible error returns are:
1620 o bfd_error_no_contents - The output section does not have the
1621 SEC_HAS_CONTENTS attribute, so nothing can be written to it.
1622 o and some more too */
1623
1624static boolean
1625vms_set_section_contents (abfd, section, location, offset, count)
1626 bfd *abfd;
1627 asection *section;
1628 PTR location;
1629 file_ptr offset;
1630 bfd_size_type count;
1631{
1632#if VMS_DEBUG
1633 vms_debug (1, "vms_set_section_contents(%p, sec %s, loc %p, off %ld, count %d)\n",
1634 abfd, section->name, location, (long int)offset, (int)count);
1635 vms_debug (2, "secraw %d, seccooked %d\n", (int)section->_raw_size, (int)section->_cooked_size);
1636#endif
1637 return _bfd_save_vms_section(abfd, section, location, offset, count);
1638}
1639
252b5132
RH
1640/*-- Part 4.8, linker -------------------------------------------------------*/
1641
1642/* Get the size of the section headers. */
1643
1644static int
1645vms_sizeof_headers (abfd, reloc)
5f771d47
ILT
1646 bfd *abfd ATTRIBUTE_UNUSED;
1647 boolean reloc ATTRIBUTE_UNUSED;
252b5132
RH
1648{
1649#if VMS_DEBUG
1650 vms_debug (1, "vms_sizeof_headers(%p, %s)\n", abfd, (reloc)?"True":"False");
1651#endif
1652 return 0;
1653}
1654
252b5132
RH
1655/* Provides default handling of relocation effort for back ends
1656 which can't be bothered to do it efficiently. */
1657
1658static bfd_byte *
1659vms_bfd_get_relocated_section_contents (abfd, link_info, link_order, data,
1660 relocateable, symbols)
5f771d47
ILT
1661 bfd *abfd ATTRIBUTE_UNUSED;
1662 struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
1663 struct bfd_link_order *link_order ATTRIBUTE_UNUSED;
1664 bfd_byte *data ATTRIBUTE_UNUSED;
1665 boolean relocateable ATTRIBUTE_UNUSED;
1666 asymbol **symbols ATTRIBUTE_UNUSED;
252b5132
RH
1667{
1668#if VMS_DEBUG
1669 vms_debug (1, "vms_bfd_get_relocated_section_contents(%p, %p, %p, %p, %s, %p)\n",
1670 abfd, link_info, link_order, data, (relocateable)?"True":"False", symbols);
1671#endif
1672 return 0;
1673}
1674
252b5132
RH
1675/* ??? */
1676
1677static boolean
1678vms_bfd_relax_section (abfd, section, link_info, again)
5f771d47
ILT
1679 bfd *abfd ATTRIBUTE_UNUSED;
1680 asection *section ATTRIBUTE_UNUSED;
1681 struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
1682 boolean *again ATTRIBUTE_UNUSED;
252b5132
RH
1683{
1684#if VMS_DEBUG
1685 vms_debug (1, "vms_bfd_relax_section(%p, %s, %p, <ret>)\n",
1686 abfd, section->name, link_info);
1687#endif
1688 return true;
1689}
1690
1691static boolean
1692vms_bfd_gc_sections (abfd, link_info)
5f771d47
ILT
1693 bfd *abfd ATTRIBUTE_UNUSED;
1694 struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
252b5132
RH
1695{
1696#if VMS_DEBUG
1697 vms_debug (1, "vms_bfd_gc_sections(%p, %p)\n", abfd, link_info);
1698#endif
1699 return true;
1700}
1701
8550eb6e
JJ
1702static boolean
1703vms_bfd_merge_sections (abfd, link_info)
1704 bfd *abfd ATTRIBUTE_UNUSED;
1705 struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
1706{
1707#if VMS_DEBUG
1708 vms_debug (1, "vms_bfd_merge_sections(%p, %p)\n", abfd, link_info);
1709#endif
1710 return true;
1711}
1712
252b5132
RH
1713/* Create a hash table for the linker. Different backends store
1714 different information in this table. */
1715
1716static struct bfd_link_hash_table *
1717vms_bfd_link_hash_table_create (abfd)
5f771d47 1718 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
1719{
1720#if VMS_DEBUG
1721 vms_debug (1, "vms_bfd_link_hash_table_create(%p)\n", abfd);
1722#endif
1723 return 0;
1724}
1725
e2d34d7d
DJ
1726/* Free a linker hash table. */
1727
1728static void
1729vms_bfd_link_hash_table_free (hash)
1730 struct bfd_link_hash_table *hash ATTRIBUTE_UNUSED;
1731{
1732#if VMS_DEBUG
1733 vms_debug (1, "vms_bfd_link_hash_table_free(%p)\n", abfd);
1734#endif
1735}
1736
252b5132
RH
1737/* Add symbols from this object file into the hash table. */
1738
1739static boolean
1740vms_bfd_link_add_symbols (abfd, link_info)
5f771d47
ILT
1741 bfd *abfd ATTRIBUTE_UNUSED;
1742 struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
252b5132
RH
1743{
1744#if VMS_DEBUG
1745 vms_debug (1, "vms_bfd_link_add_symbols(%p, %p)\n", abfd, link_info);
1746#endif
1747 return false;
1748}
1749
252b5132
RH
1750/* Do a link based on the link_order structures attached to each
1751 section of the BFD. */
1752
1753static boolean
1754vms_bfd_final_link (abfd, link_info)
5f771d47
ILT
1755 bfd *abfd ATTRIBUTE_UNUSED;
1756 struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
252b5132
RH
1757{
1758#if VMS_DEBUG
1759 vms_debug (1, "vms_bfd_final_link(%p, %p)\n", abfd, link_info);
1760#endif
1761 return true;
1762}
1763
1764/* Should this section be split up into smaller pieces during linking. */
1765
1766static boolean
1767vms_bfd_link_split_section (abfd, section)
5f771d47
ILT
1768 bfd *abfd ATTRIBUTE_UNUSED;
1769 asection *section ATTRIBUTE_UNUSED;
252b5132
RH
1770{
1771#if VMS_DEBUG
1772 vms_debug (1, "vms_bfd_link_split_section(%p, %s)\n", abfd, section->name);
1773#endif
1774 return false;
1775}
1776
1777/*-- Part 4.9, dynamic symbols and relocations ------------------------------*/
1778
1779/* Get the amount of memory required to hold the dynamic symbols. */
1780
1781static long
1782vms_get_dynamic_symtab_upper_bound (abfd)
5f771d47 1783 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
1784{
1785#if VMS_DEBUG
1786 vms_debug (1, "vms_get_dynamic_symtab_upper_bound(%p)\n", abfd);
1787#endif
1788 return 0;
1789}
1790
1791static boolean
1792vms_bfd_print_private_bfd_data (abfd, file)
5f771d47
ILT
1793 bfd *abfd ATTRIBUTE_UNUSED;
1794 void *file ATTRIBUTE_UNUSED;
252b5132
RH
1795{
1796#if VMS_DEBUG
1797 vms_debug (1, "vms_bfd_print_private_bfd_data(%p)\n", abfd);
1798#endif
1799 return 0;
1800}
1801
252b5132
RH
1802/* Read in the dynamic symbols. */
1803
1804static long
1805vms_canonicalize_dynamic_symtab (abfd, symbols)
5f771d47
ILT
1806 bfd *abfd ATTRIBUTE_UNUSED;
1807 asymbol **symbols ATTRIBUTE_UNUSED;
252b5132
RH
1808{
1809#if VMS_DEBUG
1810 vms_debug (1, "vms_canonicalize_dynamic_symtab(%p, <ret>)\n", abfd);
1811#endif
1812 return 0L;
1813}
1814
252b5132
RH
1815/* Get the amount of memory required to hold the dynamic relocs. */
1816
1817static long
1818vms_get_dynamic_reloc_upper_bound (abfd)
5f771d47 1819 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
1820{
1821#if VMS_DEBUG
1822 vms_debug (1, "vms_get_dynamic_reloc_upper_bound(%p)\n", abfd);
1823#endif
1824 return 0L;
1825}
1826
252b5132
RH
1827/* Read in the dynamic relocs. */
1828
1829static long
1830vms_canonicalize_dynamic_reloc (abfd, arel, symbols)
5f771d47
ILT
1831 bfd *abfd ATTRIBUTE_UNUSED;
1832 arelent **arel ATTRIBUTE_UNUSED;
1833 asymbol **symbols ATTRIBUTE_UNUSED;
252b5132
RH
1834{
1835#if VMS_DEBUG
1836 vms_debug (1, "vms_canonicalize_dynamic_reloc(%p)\n", abfd);
1837#endif
1838 return 0L;
1839}
This page took 0.225714 seconds and 4 git commands to generate.