they will be handled somewhat correctly in the bfd code. */
if (in->n_sclass == C_SECTION)
{
+ char namebuf[SYMNMLEN + 1];
+ const char *name = NULL;
+
in->n_value = 0x0;
/* Create synthetic empty sections as needed. DJ */
{
asection *sec;
- for (sec = abfd->sections; sec; sec = sec->next)
- {
- if (strcmp (sec->name, in->n_name) == 0)
- {
- in->n_scnum = sec->target_index;
- break;
- }
- }
+ name = _bfd_coff_internal_syment_name (abfd, in, namebuf);
+ if (name == NULL)
+ /* FIXME: Return error. */
+ abort ();
+ sec = bfd_get_section_by_name (abfd, name);
+ if (sec != NULL)
+ in->n_scnum = sec->target_index;
}
if (in->n_scnum == 0)
{
int unused_section_number = 0;
asection *sec;
- char *name;
flagword flags;
for (sec = abfd->sections; sec; sec = sec->next)
if (unused_section_number <= sec->target_index)
unused_section_number = sec->target_index + 1;
- name = bfd_alloc (abfd, (bfd_size_type) strlen (in->n_name) + 10);
- if (name == NULL)
- return;
- strcpy (name, in->n_name);
+ if (name == namebuf)
+ {
+ name = bfd_alloc (abfd, strlen (namebuf) + 1);
+ if (name == NULL)
+ /* FIXME: Return error. */
+ abort ();
+ strcpy ((char *) name, namebuf);
+ }
flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_DATA | SEC_LOAD;
sec = bfd_make_section_anyway_with_flags (abfd, name, flags);
+ if (sec == NULL)
+ /* FIXME: Return error. */
+ abort ();
sec->vma = 0;
sec->lma = 0;
bfd_vma sa, fa, ib;
IMAGE_DATA_DIRECTORY idata2, idata5, tls;
- if (pe->force_minimum_alignment)
- {
- if (!extra->FileAlignment)
- extra->FileAlignment = PE_DEF_FILE_ALIGNMENT;
- if (!extra->SectionAlignment)
- extra->SectionAlignment = PE_DEF_SECTION_ALIGNMENT;
- }
-
- if (extra->Subsystem == IMAGE_SUBSYSTEM_UNKNOWN)
- extra->Subsystem = pe->target_subsystem;
-
sa = extra->SectionAlignment;
fa = extra->FileAlignment;
ib = extra->ImageBase;
sometimes). */
if ((scnhdr_int->s_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0)
{
- if (bfd_pe_executable_p (abfd))
+ if (bfd_pei_p (abfd))
{
ps = scnhdr_int->s_size;
ss = 0;
}
else
{
- if (bfd_pe_executable_p (abfd))
+ if (bfd_pei_p (abfd))
ps = scnhdr_int->s_paddr;
else
ps = 0;
fprintf (file,
_("Name \t\t\t\t"));
- fprintf_vma (file, edt.name);
+ bfd_fprintf_vma (abfd, file, edt.name);
fprintf (file,
" %s\n", data + edt.name - adj);
fprintf (file,
_("\tExport Address Table \t\t"));
- fprintf_vma (file, edt.eat_addr);
+ bfd_fprintf_vma (abfd, file, edt.eat_addr);
fprintf (file, "\n");
fprintf (file,
_("\tName Pointer Table \t\t"));
- fprintf_vma (file, edt.npt_addr);
+ bfd_fprintf_vma (abfd, file, edt.npt_addr);
fprintf (file, "\n");
fprintf (file,
_("\tOrdinal Table \t\t\t"));
- fprintf_vma (file, edt.ot_addr);
+ bfd_fprintf_vma (abfd, file, edt.ot_addr);
fprintf (file, "\n");
/* The next table to find is the Export Address Table. It's basically
prolog_end_addr &= ~(bfd_vma) 0x3;
fputc (' ', file);
- fprintf_vma (file, i + section->vma); fputc ('\t', file);
- fprintf_vma (file, begin_addr); fputc (' ', file);
- fprintf_vma (file, end_addr); fputc (' ', file);
- fprintf_vma (file, eh_handler);
+ bfd_fprintf_vma (abfd, file, i + section->vma); fputc ('\t', file);
+ bfd_fprintf_vma (abfd, file, begin_addr); fputc (' ', file);
+ bfd_fprintf_vma (abfd, file, end_addr); fputc (' ', file);
+ bfd_fprintf_vma (abfd, file, eh_handler);
#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
fputc (' ', file);
- fprintf_vma (file, eh_data); fputc (' ', file);
- fprintf_vma (file, prolog_end_addr);
+ bfd_fprintf_vma (abfd, file, eh_data); fputc (' ', file);
+ bfd_fprintf_vma (abfd, file, prolog_end_addr);
fprintf (file, " %x", em_data);
#endif
exception_flag = (int)((other_data & 0x80000000) >> 31);
fputc (' ', file);
- fprintf_vma (file, i + section->vma); fputc ('\t', file);
- fprintf_vma (file, begin_addr); fputc (' ', file);
- fprintf_vma (file, prolog_length); fputc (' ', file);
- fprintf_vma (file, function_length); fputc (' ', file);
+ bfd_fprintf_vma (abfd, file, i + section->vma); fputc ('\t', file);
+ bfd_fprintf_vma (abfd, file, begin_addr); fputc (' ', file);
+ bfd_fprintf_vma (abfd, file, prolog_length); fputc (' ', file);
+ bfd_fprintf_vma (abfd, file, function_length); fputc (' ', file);
fprintf (file, "%2d %2d ", flag32bit, exception_flag);
/* Get the exception handler's address and the data passed from the
#undef PDATA_ROW_SIZE
}
-#ifdef COFF_WITH_pex64
-/* The PE+ x64 variant. */
-bfd_boolean
-_bfd_pex64_print_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
-}
-#endif
\f
#define IMAGE_REL_BASED_HIGHADJ 4
static const char * const tbl[] =
fprintf (file, "SizeOfUninitializedData\t%08lx\n",
(unsigned long) i->SizeOfUninitializedData);
fprintf (file, "AddressOfEntryPoint\t");
- fprintf_vma (file, i->AddressOfEntryPoint);
+ bfd_fprintf_vma (abfd, file, i->AddressOfEntryPoint);
fprintf (file, "\nBaseOfCode\t\t");
- fprintf_vma (file, i->BaseOfCode);
+ bfd_fprintf_vma (abfd, file, i->BaseOfCode);
#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
/* PE32+ does not have BaseOfData member! */
fprintf (file, "\nBaseOfData\t\t");
- fprintf_vma (file, i->BaseOfData);
+ bfd_fprintf_vma (abfd, file, i->BaseOfData);
#endif
fprintf (file, "\nImageBase\t\t");
- fprintf_vma (file, i->ImageBase);
+ bfd_fprintf_vma (abfd, file, i->ImageBase);
fprintf (file, "\nSectionAlignment\t");
- fprintf_vma (file, i->SectionAlignment);
+ bfd_fprintf_vma (abfd, file, i->SectionAlignment);
fprintf (file, "\nFileAlignment\t\t");
- fprintf_vma (file, i->FileAlignment);
+ bfd_fprintf_vma (abfd, file, i->FileAlignment);
fprintf (file, "\nMajorOSystemVersion\t%d\n", i->MajorOperatingSystemVersion);
fprintf (file, "MinorOSystemVersion\t%d\n", i->MinorOperatingSystemVersion);
fprintf (file, "MajorImageVersion\t%d\n", i->MajorImageVersion);
case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI:
subsystem_name = "Wince CUI";
break;
+ // These are from UEFI Platform Initialization Specification 1.1.
case IMAGE_SUBSYSTEM_EFI_APPLICATION:
subsystem_name = "EFI application";
break;
case IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER:
subsystem_name = "EFI runtime driver";
break;
- // These are from revision 8.0 of the MS PE/COFF spec
- case IMAGE_SUBSYSTEM_EFI_ROM:
- subsystem_name = "EFI ROM";
+ case IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER:
+ subsystem_name = "SAL runtime driver";
break;
+ // This is from revision 8.0 of the MS PE/COFF spec
case IMAGE_SUBSYSTEM_XBOX:
subsystem_name = "XBOX";
break;
fprintf (file, "\t(%s)", subsystem_name);
fprintf (file, "\nDllCharacteristics\t%08x\n", i->DllCharacteristics);
fprintf (file, "SizeOfStackReserve\t");
- fprintf_vma (file, i->SizeOfStackReserve);
+ bfd_fprintf_vma (abfd, file, i->SizeOfStackReserve);
fprintf (file, "\nSizeOfStackCommit\t");
- fprintf_vma (file, i->SizeOfStackCommit);
+ bfd_fprintf_vma (abfd, file, i->SizeOfStackCommit);
fprintf (file, "\nSizeOfHeapReserve\t");
- fprintf_vma (file, i->SizeOfHeapReserve);
+ bfd_fprintf_vma (abfd, file, i->SizeOfHeapReserve);
fprintf (file, "\nSizeOfHeapCommit\t");
- fprintf_vma (file, i->SizeOfHeapCommit);
+ bfd_fprintf_vma (abfd, file, i->SizeOfHeapCommit);
fprintf (file, "\nLoaderFlags\t\t%08lx\n", (unsigned long) i->LoaderFlags);
fprintf (file, "NumberOfRvaAndSizes\t%08lx\n",
(unsigned long) i->NumberOfRvaAndSizes);
for (j = 0; j < IMAGE_NUMBEROF_DIRECTORY_ENTRIES; j++)
{
fprintf (file, "Entry %1x ", j);
- fprintf_vma (file, i->DataDirectory[j].VirtualAddress);
+ bfd_fprintf_vma (abfd, file, i->DataDirectory[j].VirtualAddress);
fprintf (file, " %08lx ", (unsigned long) i->DataDirectory[j].Size);
fprintf (file, "%s\n", dir_names[j]);
}
ipe = pe_data (ibfd);
ope = pe_data (obfd);
- ope->pe_opthdr = ipe->pe_opthdr;
+ /* pe_opthdr is copied in copy_object. */
ope->dll = ipe->dll;
/* Don't copy input subsystem if output is different from input. */