2009-04-05 Kai Tietz <kai.tietz@onevision.com>
* coff-x86_64.c (bfd_pe_print_pdata): Define as _bfd_pep_print_x64_pdata. * libpei.h (_bfd_pep_print_x64_pdata): Add prototype. * peXXigen.c (_bfd_pep_print_x64_pdata): New.
This commit is contained in:
parent
bab7ee3b35
commit
c7c7219d3a
@ -1,3 +1,10 @@
|
||||
2009-04-05 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* coff-x86_64.c (bfd_pe_print_pdata): Define as
|
||||
_bfd_pep_print_x64_pdata.
|
||||
* libpei.h (_bfd_pep_print_x64_pdata): Add prototype.
|
||||
* peXXigen.c (_bfd_pep_print_x64_pdata): New.
|
||||
|
||||
2009-04-02 Sterling Augustine <sterling@jaw.hq.tensilica.com>
|
||||
|
||||
* elf32-xtensa.c (relax_property_section): Always set r_offset
|
||||
|
@ -711,9 +711,8 @@ coff_amd64_is_local_label_name (bfd *abfd, const char *name)
|
||||
|
||||
#endif /* TARGET_UNDERSCORE */
|
||||
|
||||
#ifndef bfd_pe_print_pdata
|
||||
#define bfd_pe_print_pdata NULL
|
||||
#endif
|
||||
#undef bfd_pe_print_pdata
|
||||
#define bfd_pe_print_pdata _bfd_pep_print_x64_pdata
|
||||
|
||||
#include "coffcode.h"
|
||||
|
||||
|
@ -393,4 +393,5 @@ bfd_boolean _bfd_pe_print_ce_compressed_pdata (bfd *, void *);
|
||||
bfd_boolean _bfd_pe64_print_ce_compressed_pdata (bfd *, void *);
|
||||
bfd_boolean _bfd_pex64_print_ce_compressed_pdata (bfd *, void *);
|
||||
bfd_boolean _bfd_pep_print_ce_compressed_pdata (bfd *, void *);
|
||||
bfd_boolean _bfd_pep_print_x64_pdata (bfd *, void *);
|
||||
|
||||
|
@ -1894,6 +1894,86 @@ _bfd_XX_print_ce_compressed_pdata (bfd * abfd, void * vfile)
|
||||
return TRUE;
|
||||
#undef PDATA_ROW_SIZE
|
||||
}
|
||||
|
||||
/* The PE+ x64 variant. */
|
||||
bfd_boolean
|
||||
_bfd_pep_print_x64_pdata (bfd *abfd, void *vfile)
|
||||
{
|
||||
# define PDATA_ROW_SIZE (3 * 4)
|
||||
FILE *file = (FILE *) vfile;
|
||||
bfd_byte *data = NULL;
|
||||
asection *section = bfd_get_section_by_name (abfd, ".pdata");
|
||||
bfd_size_type datasize = 0;
|
||||
bfd_size_type i;
|
||||
bfd_size_type start, stop;
|
||||
int onaline = PDATA_ROW_SIZE;
|
||||
struct sym_cache sym_cache = {0, 0};
|
||||
|
||||
if (section == NULL
|
||||
|| coff_section_data (abfd, section) == NULL
|
||||
|| pei_section_data (abfd, section) == NULL)
|
||||
return TRUE;
|
||||
|
||||
stop = pei_section_data (abfd, section)->virt_size;
|
||||
if ((stop % onaline) != 0)
|
||||
fprintf (file,
|
||||
_("warning: .pdata section size (%ld) is not a multiple of %d\n"),
|
||||
(long) stop, onaline);
|
||||
|
||||
fprintf (file,
|
||||
_("\nThe Function Table (interpreted .pdata section contents)\n"));
|
||||
|
||||
fprintf (file, _("vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n"));
|
||||
|
||||
datasize = section->size;
|
||||
if (datasize == 0)
|
||||
return TRUE;
|
||||
|
||||
if (!bfd_malloc_and_get_section (abfd, section, &data))
|
||||
{
|
||||
if (data != NULL)
|
||||
free (data);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
start = 0;
|
||||
|
||||
for (i = start; i < stop; i += onaline)
|
||||
{
|
||||
bfd_vma begin_addr;
|
||||
bfd_vma end_addr;
|
||||
bfd_vma unwind_data_addr;
|
||||
|
||||
if (i + PDATA_ROW_SIZE > stop)
|
||||
break;
|
||||
|
||||
begin_addr = bfd_get_32 (abfd, data + i);
|
||||
end_addr = bfd_get_32 (abfd, data + i + 4);
|
||||
unwind_data_addr = bfd_get_32 (abfd, data + i + 8);
|
||||
|
||||
if (begin_addr == 0 && end_addr == 0 && unwind_data_addr == 0)
|
||||
/* We are probably into the padding of the section now. */
|
||||
break;
|
||||
|
||||
fputc (' ', file);
|
||||
fprintf_vma (file, i + section->vma);
|
||||
fprintf (file, ":\t");
|
||||
fprintf_vma (file, begin_addr);
|
||||
fputc (' ', file);
|
||||
fprintf_vma (file, end_addr);
|
||||
fputc (' ', file);
|
||||
fprintf_vma (file, unwind_data_addr);
|
||||
|
||||
fprintf (file, "\n");
|
||||
}
|
||||
|
||||
free (data);
|
||||
|
||||
cleanup_syms (&sym_cache);
|
||||
|
||||
return TRUE;
|
||||
#undef PDATA_ROW_SIZE
|
||||
}
|
||||
|
||||
#define IMAGE_REL_BASED_HIGHADJ 4
|
||||
static const char * const tbl[] =
|
||||
|
Loading…
Reference in New Issue
Block a user