-/* evax-alpha.c -- BFD back-end for ALPHA EVAX (openVMS/AXP) files.
- Copyright 1996 Free Software Foundation, Inc.
- Written by Klaus Kรคmpf (kkaempf@progis.de)
+/* evax-alpha.c -- BFD back-end for ALPHA EVAX (openVMS/Alpha) files.
+ Copyright 1996, 1997 Free Software Foundation, Inc.
+ Written by Klaus K"ampf (kkaempf@progis.de)
of proGIS Softwareentwicklung, Aachen, Germany
This program is free software; you can redistribute it and/or modify
PARAMS ((bfd *abfd, PTR file, asymbol *symbol, bfd_print_symbol_type how));
static void evax_get_symbol_info
PARAMS ((bfd *abfd, asymbol *symbol, symbol_info *ret));
-static boolean evax_bfd_is_local_label PARAMS ((bfd *abfd, asymbol *symbol));
+static boolean evax_bfd_is_local_label_name PARAMS ((bfd *abfd, const char *));
static alent *evax_get_lineno PARAMS ((bfd *abfd, asymbol *symbol));
static boolean evax_find_nearest_line
PARAMS ((bfd *abfd, asection *section, asymbol **symbols, bfd_vma offset,
ret->type = 'A';
else if (bfd_is_und_section (sec))
ret->type = 'U';
- else if (bfd_is_abs_section (sec))
- ret->type = 'A';
else if (bfd_is_ind_section (sec))
ret->type = 'I';
else if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
a compiler generated local label, else return false. */
static boolean
-evax_bfd_is_local_label (abfd, symbol)
+evax_bfd_is_local_label_name (abfd, name)
bfd *abfd;
- asymbol *symbol;
+ const char *name;
{
#if EVAX_DEBUG
- evax_debug (1, "evax_bfd_is_local_label(%p, %p)\n", abfd, symbol);
+ evax_debug (1, "evax_bfd_is_local_label_name(%p, %s)\n", abfd, name);
#endif
- return false;
+ return name[0] == '$';
}
0xffffffff, /* dst_mask */
false), /* pcrel_offset */
+ /* A 64 bit reference to a procedure, written as 32 bit value. */
+ HOWTO (ALPHA_R_CODEADDR, /* type */
+ 0, /* rightshift */
+ 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed,/* complain_on_overflow */
+ reloc_nil, /* special_function */
+ "CODEADDR", /* name */
+ false, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ false), /* pcrel_offset */
+
};
/* Return a pointer to a howto structure which, when invoked, will perform
case BFD_RELOC_32_PCREL: alpha_type = ALPHA_R_SREL32; break;
case BFD_RELOC_64_PCREL: alpha_type = ALPHA_R_SREL64; break;
case BFD_RELOC_ALPHA_LINKAGE: alpha_type = ALPHA_R_LINKAGE; break;
-#if 0
- case ???: alpha_type = ALPHA_R_OP_PUSH; break;
- case ???: alpha_type = ALPHA_R_OP_STORE; break;
- case ???: alpha_type = ALPHA_R_OP_PSUB; break;
- case ???: alpha_type = ALPHA_R_OP_PRSHIFT;break;
- case ???: alpha_type = ALPHA_R_GPVALUE; break;
-#endif
+ case BFD_RELOC_ALPHA_CODEADDR: alpha_type = ALPHA_R_CODEADDR; break;
default:
(*_bfd_error_handler) ("reloc (%d) is *UNKNOWN*", code);
return (const struct reloc_howto_struct *) NULL;