mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-28 20:43:45 +08:00
bfd/
2010-06-01 Tristan Gingold <gingold@adacore.com> * vms-alpha.c (struct vms_private_data_struct): Add transfer_address field. Remove unused dst_info field. (alpha_vms_write_exec): Use transfer_address. (_bfd_vms_write_egsd): Add a comment about LIB$INITIALIZE. (alpha_vms_bfd_final_link): Set transfer_address. ld/ 2010-06-01 Tristan Gingold <gingold@adacore.com> * scripttempl/alphavms.sc: Add comments. Move $LINK$ to the readonly output-section. Handle LIB$INITIALIZE and sections created by gcc. * emultempl/vms.em (vms_place_orphan): Add comments.
This commit is contained in:
parent
b1797dc84a
commit
46d00b8af1
@ -1,3 +1,11 @@
|
||||
2010-06-01 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* vms-alpha.c (struct vms_private_data_struct): Add
|
||||
transfer_address field. Remove unused dst_info field.
|
||||
(alpha_vms_write_exec): Use transfer_address.
|
||||
(_bfd_vms_write_egsd): Add a comment about LIB$INITIALIZE.
|
||||
(alpha_vms_bfd_final_link): Set transfer_address.
|
||||
|
||||
2010-05-31 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* vms-lib.c (credat_lo, credat_hi): New fields.
|
||||
|
@ -273,6 +273,9 @@ struct vms_private_data_struct
|
||||
struct hdr_struct hdr_data; /* data from HDR/EMH record */
|
||||
struct eom_struct eom_data; /* data from EOM/EEOM record */
|
||||
|
||||
/* Transfer addresses (entry points). */
|
||||
bfd_vma transfer_address[4];
|
||||
|
||||
/* Array of GSD sections to get the correspond BFD one. */
|
||||
unsigned int section_max; /* Size of the sections array. */
|
||||
unsigned int section_count; /* Number of GSD sections. */
|
||||
@ -301,7 +304,6 @@ struct vms_private_data_struct
|
||||
|
||||
struct module *modules; /* list of all compilation units */
|
||||
|
||||
struct dst_info *dst_info;
|
||||
asection *dst_section;
|
||||
|
||||
unsigned int dst_ptr_offsets_count; /* # of offsets in following array */
|
||||
@ -2983,11 +2985,10 @@ alpha_vms_write_exec (bfd *abfd)
|
||||
|
||||
bfd_putl32 (sizeof (struct vms_eiha), eiha->size);
|
||||
bfd_putl32 (0, eiha->spare);
|
||||
bfd_putl32 (0x00000340, eiha->tfradr1); /* SYS$IMGACT */
|
||||
bfd_putl32 (0xffffffff, eiha->tfradr1_h);
|
||||
bfd_putl64 (bfd_get_start_address (abfd), eiha->tfradr2);
|
||||
bfd_putl64 (0, eiha->tfradr3);
|
||||
bfd_putl64 (0, eiha->tfradr4);
|
||||
bfd_putl64 (PRIV (transfer_address[0]), eiha->tfradr1);
|
||||
bfd_putl64 (PRIV (transfer_address[1]), eiha->tfradr2);
|
||||
bfd_putl64 (PRIV (transfer_address[2]), eiha->tfradr3);
|
||||
bfd_putl64 (PRIV (transfer_address[3]), eiha->tfradr4);
|
||||
bfd_putl64 (0, eiha->inishr);
|
||||
|
||||
/* Alloc EIHI. */
|
||||
@ -3389,21 +3390,28 @@ done:
|
||||
char *hash;
|
||||
|
||||
symbol = abfd->outsymbols[symnum];
|
||||
old_flags = symbol->flags;
|
||||
|
||||
/* Work-around a missing feature: consider __main as the main entry point. */
|
||||
if (*(symbol->name) == '_')
|
||||
{
|
||||
if (strcmp (symbol->name, "__main") == 0)
|
||||
bfd_set_start_address (abfd, (bfd_vma)symbol->value);
|
||||
}
|
||||
old_flags = symbol->flags;
|
||||
|
||||
/* Only put in the GSD the global and the undefined symbols. */
|
||||
if (old_flags & BSF_FILE)
|
||||
continue;
|
||||
|
||||
if ((old_flags & BSF_GLOBAL) == 0 /* Not xdef... */
|
||||
&& !bfd_is_und_section (symbol->section) /* and not xref... */
|
||||
&& !((old_flags & BSF_SECTION_SYM) != 0 /* and not LIB$INITIALIZE. */
|
||||
&& strcmp (symbol->section->name, "LIB$INITIALIZE") == 0))
|
||||
continue;
|
||||
if ((old_flags & BSF_GLOBAL) == 0 && !bfd_is_und_section (symbol->section))
|
||||
{
|
||||
/* If the LIB$INITIIALIZE section is present, add a reference to
|
||||
LIB$INITIALIZE symbol. FIXME: this should be done explicitely
|
||||
in the assembly file. */
|
||||
if (!((old_flags & BSF_SECTION_SYM) != 0
|
||||
&& strcmp (symbol->section->name, "LIB$INITIALIZE") == 0))
|
||||
continue;
|
||||
}
|
||||
|
||||
/* 13 bytes egsd, max 64 chars name -> should be 77 bytes. */
|
||||
if (_bfd_vms_output_check (recwr, 80) < 0)
|
||||
@ -8668,6 +8676,22 @@ alpha_vms_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
|
||||
}
|
||||
}
|
||||
|
||||
/* Set transfer addresses. */
|
||||
{
|
||||
int i;
|
||||
struct bfd_link_hash_entry *h;
|
||||
|
||||
i = 0;
|
||||
PRIV (transfer_address[i++]) = 0xffffffff00000340; /* SYS$IMGACT */
|
||||
h = bfd_link_hash_lookup (info->hash, "LIB$INITIALIZE", FALSE, FALSE, TRUE);
|
||||
if (h != NULL && h->type == bfd_link_hash_defined)
|
||||
PRIV (transfer_address[i++]) =
|
||||
alpha_vms_get_sym_value (h->u.def.section, h->u.def.value);
|
||||
PRIV (transfer_address[i++]) = bfd_get_start_address (abfd);
|
||||
while (i < 4)
|
||||
PRIV (transfer_address[i++]) = 0;
|
||||
}
|
||||
|
||||
/* Allocate contents. */
|
||||
base_addr = (bfd_vma)-1;
|
||||
last_addr = 0;
|
||||
|
@ -1,3 +1,10 @@
|
||||
2010-06-01 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* scripttempl/alphavms.sc: Add comments. Move $LINK$ to the
|
||||
readonly output-section. Handle LIB$INITIALIZE and sections
|
||||
created by gcc.
|
||||
* emultempl/vms.em (vms_place_orphan): Add comments.
|
||||
|
||||
2010-05-28 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* Makefile.am (eshlelf_fd.c): Fix typo in rule.
|
||||
|
@ -94,11 +94,14 @@ vms_place_orphan (asection *s,
|
||||
0, 0, 0, 0
|
||||
};
|
||||
|
||||
/* We have nothing to say for anything other than a final link. */
|
||||
/* We have nothing to say for anything other than a final link or an excluded
|
||||
section. */
|
||||
if (link_info.relocatable
|
||||
|| (s->flags & (SEC_EXCLUDE | SEC_LOAD)) != SEC_LOAD)
|
||||
return NULL;
|
||||
|
||||
/* FIXME: we should place sections by VMS program section flags. */
|
||||
|
||||
/* Only handle data sections. */
|
||||
if ((s->flags & SEC_DATA) == 0)
|
||||
return NULL;
|
||||
|
@ -11,20 +11,35 @@ SECTIONS
|
||||
{
|
||||
${RELOCATING+. = ${PAGESIZE};}
|
||||
|
||||
/* RW initialized data. */
|
||||
\$DATA\$ ALIGN (${PAGESIZE}) : {
|
||||
*(\$DATA\$)
|
||||
*(\$LINK\$)
|
||||
}
|
||||
/* RW data unmodified (zero-initialized). */
|
||||
\$BSS\$ ALIGN (${PAGESIZE}) : {
|
||||
*(\$BSS\$)
|
||||
}
|
||||
/* RO, executable code. */
|
||||
\$CODE\$ ALIGN (${PAGESIZE}) : {
|
||||
*(\$CODE\$)
|
||||
}
|
||||
/* RO initialized data. */
|
||||
\$LITERAL\$ ALIGN (${PAGESIZE}) : {
|
||||
*(\$LINK\$)
|
||||
*(\$LITERAL\$)
|
||||
*(\$READONLY\$)
|
||||
*(\$READONLY_ADDR\$)
|
||||
*(eh_frame)
|
||||
*(jcr)
|
||||
*(ctors)
|
||||
*(dtors)
|
||||
*(gcc_except_table)
|
||||
|
||||
/* LIB$INITIALIZE stuff. */
|
||||
*(LIB\$INITIALIZDZ) /* Start marker. */
|
||||
*(LIB\$INITIALIZD_) /* Hi priority. */
|
||||
*(LIB\$INITIALIZE) /* User. */
|
||||
*(LIB\$INITIALIZE$) /* End marker. */
|
||||
}
|
||||
|
||||
\$DST\$ 0 : {
|
||||
|
Loading…
Reference in New Issue
Block a user