/* vms.c -- BFD back-end for EVAX (openVMS/Alpha) files.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ Copyright (C) 1996-2019 Free Software Foundation, Inc.
Initial version written by Klaus Kaempf (kkaempf@rmi.de)
Major rewrite by Adacore.
/* PR 21813: Check for an undersized record. */
if (PRIV (recrd.buf_size) < sizeof (* eihd))
{
- _bfd_error_handler (_("Corrupt EIHD record - size is too small"));
+ _bfd_error_handler (_("corrupt EIHD record - size is too small"));
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
section->size = size;
section->vma = vaddr;
- if (!bfd_set_section_flags (abfd, section, bfd_flags))
+ if (!bfd_set_section_flags (section, bfd_flags))
return FALSE;
}
/* PR 21611: Check that offset is valid. */
if (offset > PRIV (recrd.rec_size) - (EIHS__L_DMTBYTES + 4))
{
- _bfd_error_handler (_("Unable to read EIHS record at offset %#x"), offset);
+ _bfd_error_handler (_("unable to read EIHS record at offset %#x"),
+ offset);
bfd_set_error (bfd_error_file_truncated);
return FALSE;
}
section->size = dstsize;
section->filepos = VMS_BLOCK_SIZE * (dstvbn - 1);
- if (!bfd_set_section_flags (abfd, section, bfd_flags))
+ if (!bfd_set_section_flags (section, bfd_flags))
return FALSE;
PRIV (dst_section) = section;
section->size = dmtbytes;
section->filepos = VMS_BLOCK_SIZE * (dmtvbn - 1);
- if (!bfd_set_section_flags (abfd, section, bfd_flags))
+ if (!bfd_set_section_flags (section, bfd_flags))
return FALSE;
}
if (PRIV (recrd.rec_size) < 8)
{
- _bfd_error_handler (_("Corrupt EGSD record: its size (%#x) is too small"),
+ _bfd_error_handler (_("corrupt EGSD record: its size (%#x) is too small"),
PRIV (recrd.rec_size));
bfd_set_error (bfd_error_bad_value);
return FALSE;
/* PR 21615: Check for size overflow. */
if (PRIV (recrd.rec_size) < gsd_size)
{
- _bfd_error_handler (_("Corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"),
+ _bfd_error_handler (_("corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"),
gsd_size, PRIV (recrd.rec_size));
bfd_set_error (bfd_error_bad_value);
return FALSE;
if (gsd_size < 4)
{
- _bfd_error_handler (_("Corrupt EGSD record: size (%#x) is too small"),
+ _bfd_error_handler (_("corrupt EGSD record: size (%#x) is too small"),
gsd_size);
bfd_set_error (bfd_error_bad_value);
return FALSE;
new_flags |= SEC_CODE;
new_flags &= ~SEC_DATA;
}
- if (!bfd_set_section_flags (abfd, section, new_flags))
+ if (!bfd_set_section_flags (section, new_flags))
return FALSE;
/* Give a non-overlapping vma to non absolute sections. */
/* PR 21813: Check for an out of range index. */
if (psindx < 0 || psindx >= (int) PRIV (section_count))
{
- _bfd_error_handler (_("Corrupt EGSD record: its psindx field is too big (%#lx)"),
+ _bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"),
psindx);
bfd_set_error (bfd_error_bad_value);
return FALSE;
/* PR 21813: Check for an out of range index. */
if (psindx < 0 || psindx >= (int) PRIV (section_count))
{
- _bfd_error_handler (_("Corrupt EGSD record: its psindx field is too big (%#lx)"),
+ _bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"),
psindx);
bfd_set_error (bfd_error_bad_value);
return FALSE;
/* PR 21813: Check for an out of range index. */
if (psindx < 0 || psindx >= (int) PRIV (section_count))
{
- _bfd_error_handler (_("Corrupt EGSD record: its psindx field is too big (%#lx)"),
+ _bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"),
psindx);
bfd_set_error (bfd_error_bad_value);
return FALSE;
case EGSD__C_SYMM:
case EGSD__C_SYMV:
default:
- _bfd_error_handler (_("Unknown EGSD subtype %d"), gsd_type);
+ _bfd_error_handler (_("unknown EGSD subtype %d"), gsd_type);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
if (PRIV (stackptr) >= STACKSIZE)
{
bfd_set_error (bfd_error_bad_value);
- _bfd_error_handler (_("Stack overflow (%d) in _bfd_vms_push"), PRIV (stackptr));
+ _bfd_error_handler (_("stack overflow (%d) in _bfd_vms_push"), PRIV (stackptr));
exit (1);
}
}
if (PRIV (stackptr) == 0)
{
bfd_set_error (bfd_error_bad_value);
- _bfd_error_handler (_("Stack underflow in _bfd_vms_pop"));
+ _bfd_error_handler (_("stack underflow in _bfd_vms_pop"));
exit (1);
}
PRIV (stackptr)--;
len = *ascic;
if (ascic + len >= max_ascic)
{
- _bfd_error_handler (_("Corrupt vms value"));
+ _bfd_error_handler (_("corrupt vms value"));
*vma = 0;
*hp = NULL;
return;
if (cmd_length < 4 || (ptr + cmd_length > maxptr + 4))
{
corrupt_etir:
- _bfd_error_handler (_("Corrupt ETIR record encountered"));
+ _bfd_error_handler (_("corrupt ETIR record encountered"));
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
section = bfd_make_section (abfd, "$DST$");
if (!section)
return FALSE;
- if (!bfd_set_section_flags (abfd, section, flags))
+ if (!bfd_set_section_flags (section, flags))
return FALSE;
PRIV (dst_section) = section;
}
/* PR 21813: Check for an undersized record. */
if (PRIV (recrd.buf_size) < sizeof (* eeom))
{
- _bfd_error_handler (_("Corrupt EEOM record - size is too small"));
+ _bfd_error_handler (_("corrupt EEOM record - size is too small"));
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
PRIV (eom_data).eom_w_comcod = bfd_getl16 (eeom->comcod);
if (PRIV (eom_data).eom_w_comcod > 1)
{
- _bfd_error_handler (_("Object module NOT error-free !\n"));
+ _bfd_error_handler (_("object module not error-free !"));
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
if (section->reloc_count == 0)
_bfd_error_handler
- (_("SEC_RELOC with no relocs in section %A"), section);
+ (_("SEC_RELOC with no relocs in section %pA"), section);
#if VMS_DEBUG
else
/* Regular relocs are intertwined with binary data. */
if (curr_addr > addr)
- _bfd_error_handler (_("Size error in section %A"),
+ _bfd_error_handler (_("size error in section %pA"),
section);
size = addr - curr_addr;
sto_imm (abfd, section, size, curr_data, curr_addr);
break;
case ALPHA_R_LINKAGE:
+ size = 16;
etir_output_check (abfd, section, curr_addr, 64);
_bfd_vms_output_begin_subrec (recwr, ETIR__C_STC_LP_PSB);
_bfd_vms_output_long
break;
case ALPHA_R_BSR:
- _bfd_error_handler (_("Spurious ALPHA_R_BSR reloc"));
+ _bfd_error_handler (_("spurious ALPHA_R_BSR reloc"));
break;
case ALPHA_R_LDA:
break;
default:
- _bfd_error_handler (_("Unhandled relocation %s"),
+ _bfd_error_handler (_("unhandled relocation %s"),
rptr->howto->name);
break;
}
{
/* Output rest of section. */
if (curr_addr > section->size)
- _bfd_error_handler (_("Size error in section %A"), section);
+ {
+ _bfd_error_handler (_("size error in section %pA"), section);
+ return FALSE;
+ }
size = section->size - curr_addr;
sto_imm (abfd, section, size, curr_data, curr_addr);
curr_data += size;
case DST__K_SET_LINUM_INCR:
_bfd_error_handler
- (_("DST__K_SET_LINUM_INCR not implemented"));
+ (_("%s not implemented"), "DST__K_SET_LINUM_INCR");
cmd_length = 2;
break;
case DST__K_SET_LINUM_INCR_W:
_bfd_error_handler
- (_("DST__K_SET_LINUM_INCR_W not implemented"));
+ (_("%s not implemented"), "DST__K_SET_LINUM_INCR_W");
cmd_length = 3;
break;
case DST__K_RESET_LINUM_INCR:
_bfd_error_handler
- (_("DST__K_RESET_LINUM_INCR not implemented"));
+ (_("%s not implemented"), "DST__K_RESET_LINUM_INCR");
cmd_length = 1;
break;
case DST__K_BEG_STMT_MODE:
_bfd_error_handler
- (_("DST__K_BEG_STMT_MODE not implemented"));
+ (_("%s not implemented"), "DST__K_BEG_STMT_MODE");
cmd_length = 1;
break;
case DST__K_END_STMT_MODE:
_bfd_error_handler
- (_("DST__K_END_STMT_MODE not implemented"));
+ (_("%s not implemented"), "DST__K_END_STMT_MODE");
cmd_length = 1;
break;
case DST__K_SET_PC:
_bfd_error_handler
- (_("DST__K_SET_PC not implemented"));
+ (_("%s not implemented"), "DST__K_SET_PC");
cmd_length = 2;
break;
case DST__K_SET_PC_W:
_bfd_error_handler
- (_("DST__K_SET_PC_W not implemented"));
+ (_("%s not implemented"), "DST__K_SET_PC_W");
cmd_length = 3;
break;
case DST__K_SET_PC_L:
_bfd_error_handler
- (_("DST__K_SET_PC_L not implemented"));
+ (_("%s not implemented"), "DST__K_SET_PC_L");
cmd_length = 5;
break;
case DST__K_SET_STMTNUM:
_bfd_error_handler
- (_("DST__K_SET_STMTNUM not implemented"));
+ (_("%s not implemented"), "DST__K_SET_STMTNUM");
cmd_length = 2;
break;
section and build the list of modules. This is sufficient
since we can compute the start address and the end address
of every module from the section contents. */
- bfd_size_type size = bfd_get_section_size (dmt);
+ bfd_size_type size = bfd_section_size (dmt);
unsigned char *ptr, *end;
ptr = (unsigned char *) bfd_alloc (abfd, size);
{
_bfd_error_handler
/* xgettext:c-format */
- (_("Unknown reloc %s + %s"), _bfd_vms_etir_name (prev_cmd),
+ (_("unknown reloc %s + %s"), _bfd_vms_etir_name (prev_cmd),
_bfd_vms_etir_name (cmd));
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("Unknown reloc %s + %s"), _bfd_vms_etir_name (cmd),
+ (_("unknown reloc %s + %s"), _bfd_vms_etir_name (cmd),
_bfd_vms_etir_name (ETIR__C_STA_LW));
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("Unknown reloc %s + %s"), _bfd_vms_etir_name (cmd),
+ (_("unknown reloc %s + %s"), _bfd_vms_etir_name (cmd),
_bfd_vms_etir_name (ETIR__C_STA_QW));
return FALSE;
}
&& prev_cmd != ETIR__C_STA_PQ)
{
/* xgettext:c-format */
- _bfd_error_handler (_("Unknown reloc %s + %s"),
+ _bfd_error_handler (_("unknown reloc %s + %s"),
_bfd_vms_etir_name (prev_cmd),
_bfd_vms_etir_name (ETIR__C_STO_LW));
return FALSE;
if (prev_cmd != ETIR__C_OPR_ADD && prev_cmd != ETIR__C_STA_QW)
{
/* xgettext:c-format */
- _bfd_error_handler (_("Unknown reloc %s + %s"),
+ _bfd_error_handler (_("unknown reloc %s + %s"),
_bfd_vms_etir_name (prev_cmd),
_bfd_vms_etir_name (ETIR__C_STO_QW));
return FALSE;
if (prev_cmd != ETIR__C_STA_PQ)
{
/* xgettext:c-format */
- _bfd_error_handler (_("Unknown reloc %s + %s"),
+ _bfd_error_handler (_("unknown reloc %s + %s"),
_bfd_vms_etir_name (prev_cmd),
_bfd_vms_etir_name (ETIR__C_STO_OFF));
return FALSE;
if (prev_cmd != ETIR__C_STA_LW && prev_cmd != ETIR__C_STA_QW)
{
/* xgettext:c-format */
- _bfd_error_handler (_("Unknown reloc %s + %s"),
+ _bfd_error_handler (_("unknown reloc %s + %s"),
_bfd_vms_etir_name (prev_cmd),
_bfd_vms_etir_name (ETIR__C_OPR_ADD));
return FALSE;
continue;
default:
- _bfd_error_handler (_("Unknown reloc %s"),
+ _bfd_error_handler (_("unknown reloc %s"),
_bfd_vms_etir_name (cmd));
return FALSE;
}
asection *sec;
struct vms_section_data_struct *vms_sec;
arelent *reloc;
+ bfd_size_type size;
/* Get section to which the relocation applies. */
if (cur_psect < 0 || cur_psect > (int)PRIV (section_count))
{
- _bfd_error_handler (_("Invalid section index in ETIR"));
+ _bfd_error_handler (_("invalid section index in ETIR"));
return FALSE;
}
sec = PRIV (sections)[cur_psect];
if (sec == bfd_abs_section_ptr)
{
- _bfd_error_handler (_("Relocation for non-REL psect"));
+ _bfd_error_handler (_("relocation for non-REL psect"));
return FALSE;
}
}
if (sym == NULL)
{
- _bfd_error_handler (_("Unknown symbol in command %s"),
+ _bfd_error_handler (_("unknown symbol in command %s"),
_bfd_vms_etir_name (cmd));
reloc->sym_ptr_ptr = NULL;
}
reloc->address = cur_address;
reloc->addend = cur_addend;
- vaddr += bfd_get_reloc_size (reloc->howto);
+ if (reloc_code == ALPHA_R_LINKAGE)
+ size = 16;
+ else
+ size = bfd_get_reloc_size (reloc->howto);
+ vaddr += size;
}
cur_addend = 0;
/* Hack. Linkage is done by linker. */
HOWTO (ALPHA_R_LINKAGE, /* Type. */
0, /* Rightshift. */
- 8, /* Size (0 = byte, 1 = short, 2 = long). */
- 256, /* Bitsize. */
+ 0, /* Size (0 = byte, 1 = short, 2 = long). */
+ 0, /* Bitsize. */
FALSE, /* PC relative. */
0, /* Bitpos. */
complain_overflow_dont,/* Complain_on_overflow. */
/* Return a pointer to a howto structure which, when invoked, will perform
the relocation code on data from the architecture noted. */
-static const struct reloc_howto_struct *
+static reloc_howto_type *
alpha_vms_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
bfd_reloc_code_real_type code)
{
return FALSE;
}
- bfd_get_outsymbols (abfd) = NULL;
- bfd_get_symcount (abfd) = 0;
+ abfd->outsymbols = NULL;
+ abfd->symcount = 0;
/* Mark all sections which will be included in the output file. */
for (o = abfd->sections; o != NULL; o = o->next)
{
(*info->callbacks->einfo)
/* xgettext:c-format */
- (_("%P: multiple entry points: in modules %B and %B\n"),
+ (_("%P: multiple entry points: in modules %pB and %pB\n"),
startbfd, sub);
continue;
}
vms_debug2 ((1, "vms_new_section_hook (%p, [%u]%s)\n",
abfd, section->index, section->name));
- if (! bfd_set_section_alignment (abfd, section, 0))
+ if (!bfd_set_section_alignment (section, 0))
return FALSE;
vms_debug2 ((7, "%u: %s\n", section->index, section->name));
else if (bfd_is_ind_section (sec))
ret->type = 'I';
else if ((symbol->flags & BSF_FUNCTION)
- || (bfd_get_section_flags (abfd, sec) & SEC_CODE))
+ || (bfd_section_flags (sec) & SEC_CODE))
ret->type = 'T';
- else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
+ else if (bfd_section_flags (sec) & SEC_DATA)
ret->type = 'D';
- else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
+ else if (bfd_section_flags (sec) & SEC_ALLOC)
ret->type = 'B';
else
ret->type = '?';
return (struct vms_private_data_struct *)abfd->tdata.any;
}
-#define vms_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
+#define vms_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false
#define vms_bfd_link_just_syms _bfd_generic_link_just_syms
#define vms_bfd_copy_link_hash_symbol_type \
_bfd_generic_copy_link_hash_symbol_type
#define vms_bfd_is_group_section bfd_generic_is_group_section
+#define vms_bfd_group_name bfd_generic_group_name
#define vms_bfd_discard_group bfd_generic_discard_group
#define vms_section_already_linked _bfd_generic_section_already_linked
#define vms_bfd_define_common_symbol bfd_generic_define_common_symbol
-#define vms_bfd_define_start_stop bfd_generic_define_start_stop
+#define vms_bfd_link_hide_symbol _bfd_generic_link_hide_symbol
+#define vms_bfd_define_start_stop bfd_generic_define_start_stop
#define vms_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
#define vms_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
/* Symbols table. */
#define alpha_vms_make_empty_symbol _bfd_generic_make_empty_symbol
-#define alpha_vms_bfd_is_target_special_symbol \
- ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
+#define alpha_vms_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false
#define alpha_vms_print_symbol vms_print_symbol
#define alpha_vms_get_symbol_info vms_get_symbol_info
#define alpha_vms_get_symbol_version_string \
#define alpha_vms_bfd_lookup_section_flags bfd_generic_lookup_section_flags
#define alpha_vms_bfd_merge_sections bfd_generic_merge_sections
#define alpha_vms_bfd_is_group_section bfd_generic_is_group_section
+#define alpha_vms_bfd_group_name bfd_generic_group_name
#define alpha_vms_bfd_discard_group bfd_generic_discard_group
#define alpha_vms_section_already_linked \
_bfd_generic_section_already_linked
#define alpha_vms_bfd_define_common_symbol bfd_generic_define_common_symbol
+#define alpha_vms_bfd_link_hide_symbol _bfd_generic_link_hide_symbol
#define alpha_vms_bfd_define_start_stop bfd_generic_define_start_stop
#define alpha_vms_bfd_link_just_syms _bfd_generic_link_just_syms
#define alpha_vms_bfd_copy_link_hash_symbol_type \
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16,
- {_bfd_dummy_target, alpha_vms_object_p, /* bfd_check_format. */
- _bfd_vms_lib_alpha_archive_p, _bfd_dummy_target},
- {bfd_false, alpha_vms_mkobject, /* bfd_set_format. */
- _bfd_vms_lib_alpha_mkarchive, bfd_false},
- {bfd_false, alpha_vms_write_object_contents, /* bfd_write_contents. */
- _bfd_vms_lib_write_archive_contents, bfd_false},
+ { /* bfd_check_format. */
+ _bfd_dummy_target,
+ alpha_vms_object_p,
+ _bfd_vms_lib_alpha_archive_p,
+ _bfd_dummy_target
+ },
+ { /* bfd_set_format. */
+ _bfd_bool_bfd_false_error,
+ alpha_vms_mkobject,
+ _bfd_vms_lib_alpha_mkarchive,
+ _bfd_bool_bfd_false_error
+ },
+ { /* bfd_write_contents. */
+ _bfd_bool_bfd_false_error,
+ alpha_vms_write_object_contents,
+ _bfd_vms_lib_write_archive_contents,
+ _bfd_bool_bfd_false_error
+ },
BFD_JUMP_TABLE_GENERIC (alpha_vms),
BFD_JUMP_TABLE_COPY (vms),