2010-06-25 Tristan Gingold <gingold@adacore.com>
* vms-alpha.c (_bfd_vms_write_egsd): Set target_index field of sections. Mark .vmsdebug section as SEC_DEBUGGING. Do not create dummy psect anymore. Adjust. (_bfd_vms_write_eeom): Adjust (use target_index instead of index) (_bfd_vms_write_etir): Ditto. (start_etir_or_etbt_record): Test for SEC_DEBUGGING instead of section name. Adjust.
This commit is contained in:
parent
0f6a939d86
commit
1b3d1dbfad
|
@ -1,3 +1,13 @@
|
|||
2010-06-25 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* vms-alpha.c (_bfd_vms_write_egsd): Set target_index field of
|
||||
sections. Mark .vmsdebug section as SEC_DEBUGGING. Do not create
|
||||
dummy psect anymore. Adjust.
|
||||
(_bfd_vms_write_eeom): Adjust (use target_index instead of index)
|
||||
(_bfd_vms_write_etir): Ditto.
|
||||
(start_etir_or_etbt_record): Test for SEC_DEBUGGING instead of
|
||||
section name. Adjust.
|
||||
|
||||
2010-06-25 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* vms-alpha.c (alpha_vms_write_exec): Set linktime field.
|
||||
|
|
|
@ -2666,7 +2666,7 @@ _bfd_vms_write_eeom (bfd *abfd)
|
|||
return FALSE;
|
||||
}
|
||||
_bfd_vms_output_short (recwr, 0);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) (section->index));
|
||||
_bfd_vms_output_long (recwr, (unsigned long) section->target_index);
|
||||
_bfd_vms_output_long (recwr,
|
||||
(unsigned long) bfd_get_start_address (abfd));
|
||||
_bfd_vms_output_long (recwr, 0);
|
||||
|
@ -3279,18 +3279,13 @@ _bfd_vms_write_egsd (bfd *abfd)
|
|||
asection *section;
|
||||
asymbol *symbol;
|
||||
unsigned int symnum;
|
||||
int last_index = -1;
|
||||
char dummy_name[10];
|
||||
const char *sname;
|
||||
flagword new_flags, old_flags;
|
||||
int abs_section_index = 0;
|
||||
unsigned int target_index = 0;
|
||||
struct vms_rec_wr *recwr = &PRIV (recwr);
|
||||
|
||||
vms_debug2 ((2, "vms_write_gsd\n"));
|
||||
|
||||
/* Output sections. */
|
||||
section = abfd->sections;
|
||||
vms_debug2 ((3, "%d sections found\n", abfd->section_count));
|
||||
vms_debug2 ((2, "vms_write_egsd\n"));
|
||||
|
||||
/* Egsd is quadword aligned. */
|
||||
_bfd_vms_output_alignment (recwr, 8);
|
||||
|
@ -3298,15 +3293,28 @@ _bfd_vms_write_egsd (bfd *abfd)
|
|||
_bfd_vms_output_begin (recwr, EOBJ__C_EGSD);
|
||||
_bfd_vms_output_long (recwr, 0);
|
||||
|
||||
while (section != 0)
|
||||
/* Number sections. */
|
||||
for (section = abfd->sections; section != NULL; section = section->next)
|
||||
{
|
||||
if (section->flags & SEC_DEBUGGING)
|
||||
continue;
|
||||
if (!strcmp (section->name, ".vmsdebug"))
|
||||
{
|
||||
section->flags |= SEC_DEBUGGING;
|
||||
continue;
|
||||
}
|
||||
section->target_index = target_index++;
|
||||
}
|
||||
|
||||
for (section = abfd->sections; section != NULL; section = section->next)
|
||||
{
|
||||
vms_debug2 ((3, "Section #%d %s, %d bytes\n",
|
||||
section->index, section->name, (int)section->size));
|
||||
section->target_index, section->name, (int)section->size));
|
||||
|
||||
/* Don't write out the VMS debug info section since it is in the
|
||||
ETBT and EDBG sections in etir. */
|
||||
if (!strcmp (section->name, ".vmsdebug"))
|
||||
goto done;
|
||||
if (section->flags & SEC_DEBUGGING)
|
||||
continue;
|
||||
|
||||
/* 13 bytes egsd, max 31 chars name -> should be 44 bytes. */
|
||||
if (_bfd_vms_output_check (recwr, 64) < 0)
|
||||
|
@ -3316,20 +3324,6 @@ _bfd_vms_write_egsd (bfd *abfd)
|
|||
_bfd_vms_output_long (recwr, 0);
|
||||
}
|
||||
|
||||
/* Create dummy sections to keep consecutive indices. */
|
||||
while (section->index - last_index > 1)
|
||||
{
|
||||
vms_debug2 ((3, "index %d, last %d\n", section->index, last_index));
|
||||
_bfd_vms_output_begin_subrec (recwr, EGSD__C_PSC);
|
||||
_bfd_vms_output_short (recwr, 0);
|
||||
_bfd_vms_output_short (recwr, 0);
|
||||
_bfd_vms_output_long (recwr, 0);
|
||||
sprintf (dummy_name, ".DUMMY%02d", last_index);
|
||||
_bfd_vms_output_counted (recwr, dummy_name);
|
||||
_bfd_vms_output_end_subrec (recwr);
|
||||
last_index++;
|
||||
}
|
||||
|
||||
/* Don't know if this is necessary for the linker but for now it keeps
|
||||
vms_slurp_gsd happy. */
|
||||
sname = section->name;
|
||||
|
@ -3352,7 +3346,7 @@ _bfd_vms_write_egsd (bfd *abfd)
|
|||
else if ((*sname == 'l') && (strcmp (sname, "literals") == 0))
|
||||
{
|
||||
sname = EVAX_LITERALS_NAME;
|
||||
abs_section_index = section->index;
|
||||
abs_section_index = section->target_index;
|
||||
}
|
||||
else if ((*sname == 'c') && (strcmp (sname, "comm") == 0))
|
||||
sname = EVAX_COMMON_NAME;
|
||||
|
@ -3387,10 +3381,6 @@ _bfd_vms_write_egsd (bfd *abfd)
|
|||
_bfd_vms_output_long (recwr, (unsigned long) section->size);
|
||||
_bfd_vms_output_counted (recwr, sname);
|
||||
_bfd_vms_output_end_subrec (recwr);
|
||||
|
||||
last_index = section->index;
|
||||
done:
|
||||
section = section->next;
|
||||
}
|
||||
|
||||
/* Output symbols. */
|
||||
|
@ -3470,14 +3460,15 @@ done:
|
|||
{
|
||||
asymbol *sym;
|
||||
|
||||
sym = ((struct evax_private_udata_struct *)symbol->udata.p)->enbsym;
|
||||
sym =
|
||||
((struct evax_private_udata_struct *)symbol->udata.p)->enbsym;
|
||||
code_address = sym->value;
|
||||
ca_psindx = sym->section->index;
|
||||
ca_psindx = sym->section->target_index;
|
||||
}
|
||||
if (bfd_is_abs_section (symbol->section))
|
||||
psindx = abs_section_index;
|
||||
else
|
||||
psindx = symbol->section->index;
|
||||
psindx = symbol->section->target_index;
|
||||
|
||||
_bfd_vms_output_quad (recwr, symbol->value);
|
||||
_bfd_vms_output_quad (recwr, code_address);
|
||||
|
@ -3587,8 +3578,7 @@ start_etir_or_etbt_record (bfd *abfd, asection *section, bfd_vma offset)
|
|||
{
|
||||
struct vms_rec_wr *recwr = &PRIV (recwr);
|
||||
|
||||
if (section->name[0] == '.' && section->name[1] == 'v'
|
||||
&& !strcmp (section->name, ".vmsdebug"))
|
||||
if (section->flags & SEC_DEBUGGING)
|
||||
{
|
||||
_bfd_vms_output_begin (recwr, EOBJ__C_ETBT);
|
||||
|
||||
|
@ -3612,7 +3602,7 @@ start_etir_or_etbt_record (bfd *abfd, asection *section, bfd_vma offset)
|
|||
{
|
||||
/* Push start offset. */
|
||||
_bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_PQ);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) section->index);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) section->target_index);
|
||||
_bfd_vms_output_quad (recwr, offset);
|
||||
_bfd_vms_output_end_subrec (recwr);
|
||||
|
||||
|
@ -3717,7 +3707,7 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED)
|
|||
for (section = abfd->sections; section; section = section->next)
|
||||
{
|
||||
vms_debug2 ((4, "writing %d. section '%s' (%d bytes)\n",
|
||||
section->index, section->name, (int) (section->size)));
|
||||
section->target_index, section->name, (int) (section->size)));
|
||||
|
||||
if (!(section->flags & SEC_HAS_CONTENTS)
|
||||
|| bfd_is_com_section (section))
|
||||
|
@ -3852,7 +3842,8 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED)
|
|||
{
|
||||
etir_output_check (abfd, section, curr_addr, 32);
|
||||
_bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_PQ);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) sec->index);
|
||||
_bfd_vms_output_long (recwr,
|
||||
(unsigned long) sec->target_index);
|
||||
_bfd_vms_output_quad (recwr, rptr->addend + sym->value);
|
||||
_bfd_vms_output_end_subrec (recwr);
|
||||
/* ??? Table B-8 of the OpenVMS Linker Utilily Manual
|
||||
|
@ -3905,7 +3896,8 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED)
|
|||
{
|
||||
etir_output_check (abfd, section, curr_addr, 32);
|
||||
_bfd_vms_output_begin_subrec (recwr, ETIR__C_STA_PQ);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) sec->index);
|
||||
_bfd_vms_output_long (recwr,
|
||||
(unsigned long) sec->target_index);
|
||||
_bfd_vms_output_quad (recwr, rptr->addend + sym->value);
|
||||
_bfd_vms_output_end_subrec (recwr);
|
||||
_bfd_vms_output_begin_subrec (recwr, ETIR__C_STO_OFF);
|
||||
|
@ -3948,11 +3940,13 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED)
|
|||
_bfd_vms_output_begin_subrec (recwr, ETIR__C_STC_NOP_GBL);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) udata->lkindex);
|
||||
_bfd_vms_output_long
|
||||
(recwr, (unsigned long) udata->enbsym->section->index);
|
||||
(recwr,
|
||||
(unsigned long) udata->enbsym->section->target_index);
|
||||
_bfd_vms_output_quad (recwr, rptr->address);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) 0x47ff041f);
|
||||
_bfd_vms_output_long
|
||||
(recwr, (unsigned long) udata->enbsym->section->index);
|
||||
(recwr,
|
||||
(unsigned long) udata->enbsym->section->target_index);
|
||||
_bfd_vms_output_quad (recwr, rptr->addend);
|
||||
_bfd_vms_output_counted
|
||||
(recwr, _bfd_vms_length_hash_symbol
|
||||
|
@ -3973,11 +3967,12 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED)
|
|||
_bfd_vms_output_long
|
||||
(recwr, (unsigned long) udata->lkindex + 1);
|
||||
_bfd_vms_output_long
|
||||
(recwr, (unsigned long) udata->enbsym->section->index);
|
||||
(recwr,
|
||||
(unsigned long) udata->enbsym->section->target_index);
|
||||
_bfd_vms_output_quad (recwr, rptr->address);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) 0x237B0000);
|
||||
_bfd_vms_output_long
|
||||
(recwr, (unsigned long) udata->bsym->section->index);
|
||||
(recwr, (unsigned long) udata->bsym->section->target_index);
|
||||
_bfd_vms_output_quad (recwr, rptr->addend);
|
||||
_bfd_vms_output_counted
|
||||
(recwr, _bfd_vms_length_hash_symbol
|
||||
|
@ -3993,11 +3988,13 @@ _bfd_vms_write_etir (bfd * abfd, int objtype ATTRIBUTE_UNUSED)
|
|||
_bfd_vms_output_begin_subrec (recwr, ETIR__C_STC_BOH_GBL);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) udata->lkindex);
|
||||
_bfd_vms_output_long
|
||||
(recwr, (unsigned long) udata->enbsym->section->index);
|
||||
(recwr,
|
||||
(unsigned long) udata->enbsym->section->target_index);
|
||||
_bfd_vms_output_quad (recwr, rptr->address);
|
||||
_bfd_vms_output_long (recwr, (unsigned long) 0xD3400000);
|
||||
_bfd_vms_output_long
|
||||
(recwr, (unsigned long) udata->enbsym->section->index);
|
||||
(recwr,
|
||||
(unsigned long) udata->enbsym->section->target_index);
|
||||
_bfd_vms_output_quad (recwr, rptr->addend);
|
||||
_bfd_vms_output_counted
|
||||
(recwr, _bfd_vms_length_hash_symbol
|
||||
|
|
Loading…
Reference in New Issue