summaryrefslogtreecommitdiff
path: root/bfd/elf64-hppa.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2005-12-04 14:58:11 +0000
committerMark Kettenis <kettenis@gnu.org>2005-12-04 14:58:11 +0000
commit1f7f444dbcac4bd963811b8e9f81876a16a6838d (patch)
tree48ed7fd1bb1b70fff192432c1d60bbea98a11246 /bfd/elf64-hppa.c
parentab4ed7d5c2c2a352ef7e08bf7e0d12b266f6d3e7 (diff)
downloadbinutils-redhat-1f7f444dbcac4bd963811b8e9f81876a16a6838d.tar.gz
* elf64-hppa.c (elf64_hppa_section_from_phdr): Create .kernel
pseudo-section. Make sure .reg section comes after the proc section it's generated from.
Diffstat (limited to 'bfd/elf64-hppa.c')
-rw-r--r--bfd/elf64-hppa.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c
index 42a04a16ff..fbd64584d1 100644
--- a/bfd/elf64-hppa.c
+++ b/bfd/elf64-hppa.c
@@ -2652,6 +2652,22 @@ static bfd_boolean
elf64_hppa_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index,
const char *typename)
{
+ if (hdr->p_type == PT_HP_CORE_KERNEL)
+ {
+ asection *sect;
+
+ if (!_bfd_elf_make_section_from_phdr (abfd, hdr, index, typename))
+ return FALSE;
+
+ sect = bfd_make_section_anyway (abfd, ".kernel");
+ if (sect == NULL)
+ return FALSE;
+ sect->size = hdr->p_filesz;
+ sect->filepos = hdr->p_offset;
+ sect->flags = SEC_HAS_CONTENTS | SEC_READONLY;
+ return TRUE;
+ }
+
if (hdr->p_type == PT_HP_CORE_PROC)
{
int sig;
@@ -2663,10 +2679,12 @@ elf64_hppa_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index,
elf_tdata (abfd)->core_signal = sig;
- /* gdb uses the ".reg" section to read register contents. */
- if (!_bfd_elfcore_make_pseudosection (abfd, ".reg", hdr->p_filesz,
- hdr->p_offset))
+ if (!_bfd_elf_make_section_from_phdr (abfd, hdr, index, typename))
return FALSE;
+
+ /* GDB uses the ".reg" section to read register contents. */
+ return _bfd_elfcore_make_pseudosection (abfd, ".reg", hdr->p_filesz,
+ hdr->p_offset);
}
if (hdr->p_type == PT_HP_CORE_LOADABLE