2003-05-19 Roland McGrath <roland@redhat.com>

* elf.c (bfd_elf_bfd_from_remote_memory): New function.
	* bfd-in.h: Declare it.
	* elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): New function.
	* elf-bfd.h (struct elf_backend_data): New function pointer member
	elf_backend_bfd_from_remote_memory.
	(_bfd_elf32_bfd_from_remote_memory, _bfd_elf64_bfd_from_remote_memory):
	Declare them.
	* elfxx-target.h (elf_backend_bfd_from_remote_memory): New macro.
	(elfNN_bed): Add that to the initializer.
2003-05-15  Roland McGrath  <roland@redhat.com>

	* elf.c (elfcore_grok_note): Grok NT_AUXV note, make ".auxv" section.
This commit is contained in:
Roland McGrath 2003-05-21 00:56:00 +00:00
parent eecca0f723
commit 3333a7c339
1 changed files with 38 additions and 0 deletions

View File

@ -6884,6 +6884,20 @@ elfcore_grok_note (abfd, note)
#else
return TRUE;
#endif
case NT_AUXV:
{
asection *sect = bfd_make_section (abfd, ".auxv");
if (sect == NULL)
return FALSE;
sect->_raw_size = note->descsz;
sect->filepos = note->descpos;
sect->flags = SEC_HAS_CONTENTS;
sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
return TRUE;
}
}
}
@ -7535,3 +7549,27 @@ _bfd_elf_section_offset (abfd, info, sec, offset)
return offset;
}
}
/* Create a new BFD as if by bfd_openr. Rather than opening a file,
reconstruct an ELF file by reading the segments out of remote memory
based on the ELF file header at EHDR_VMA and the ELF program headers it
points to. If not null, *LOADBASEP is filled in with the difference
between the VMAs from which the segments were read, and the VMAs the
file headers (and hence BFD's idea of each section's VMA) put them at.
The function TARGET_READ_MEMORY is called to copy LEN bytes from the
remote memory at target address VMA into the local buffer at MYADDR; it
should return zero on success or an `errno' code on failure. TEMPL must
be a BFD for an ELF target with the word size and byte order found in
the remote memory. */
bfd *
bfd_elf_bfd_from_remote_memory (templ, ehdr_vma, loadbasep, target_read_memory)
bfd *templ;
bfd_vma ehdr_vma;
bfd_vma *loadbasep;
int (*target_read_memory) PARAMS ((bfd_vma vma, char *myaddr, int len));
{
return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
(templ, ehdr_vma, loadbasep, target_read_memory);
}