diff options
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/netbsd-core.c | 54 |
2 files changed, 44 insertions, 17 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index caf2ffb..d80f28a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2005-04-05 Mark Kettenis <kettenis@gnu.org> + + * netbsd-core.c (SPARC_WCOOKIE_OFFSET): Renamed from + CORE_WCOOKIE_OFFSET. + (SPARC64_WCOOKIE_OFFSET): New. + (netbsd_core_file_p): Provide .wcookie section for OpenBSD/sparc64. + 2005-04-05 Nick Clifton <nickc@redhat.com> * po/rw.po: New translation: Kinyarwanda diff --git a/bfd/netbsd-core.c b/bfd/netbsd-core.c index f021928..8f12c95 100644 --- a/bfd/netbsd-core.c +++ b/bfd/netbsd-core.c @@ -36,7 +36,11 @@ /* Offset of StackGhost cookie within `struct md_coredump' on OpenBSD/sparc. */ -#define CORE_WCOOKIE_OFFSET 344 +#define SPARC_WCOOKIE_OFFSET 344 + +/* Offset of StackGhost cookie within `struct md_coredump' on + OpenBSD/sparc64. */ +#define SPARC64_WCOOKIE_OFFSET 832 struct netbsd_core_struct { @@ -130,23 +134,39 @@ netbsd_core_file_p (bfd *abfd) asect->filepos = offset; asect->alignment_power = 2; - if (CORE_GETMID (core) == M_SPARC_NETBSD - && CORE_GETFLAG (coreseg) == CORE_CPU - && coreseg.c_size > CORE_WCOOKIE_OFFSET) + if (CORE_GETFLAG (coreseg) == CORE_CPU) { - /* Truncate the .reg section. */ - asect->size = CORE_WCOOKIE_OFFSET; - - /* And create the .wcookie section. */ - asect = bfd_make_section_anyway (abfd, ".wcookie"); - if (asect == NULL) - goto punt; - - asect->flags = SEC_ALLOC + SEC_HAS_CONTENTS; - asect->size = 4; - asect->vma = 0; - asect->filepos = offset + CORE_WCOOKIE_OFFSET; - asect->alignment_power = 2; + bfd_size_type wcookie_offset; + + switch (CORE_GETMID (core)) + { + case M_SPARC_NETBSD: + wcookie_offset = SPARC_WCOOKIE_OFFSET; + break; + case M_SPARC64_OPENBSD: + wcookie_offset = SPARC64_WCOOKIE_OFFSET; + break; + default: + wcookie_offset = 0; + break; + } + + if (wcookie_offset > 0 && coreseg.c_size > wcookie_offset) + { + /* Truncate the .reg section. */ + asect->size = wcookie_offset; + + /* And create the .wcookie section. */ + asect = bfd_make_section_anyway (abfd, ".wcookie"); + if (asect == NULL) + goto punt; + + asect->flags = SEC_ALLOC + SEC_HAS_CONTENTS; + asect->size = coreseg.c_size - wcookie_offset; + asect->vma = 0; + asect->filepos = offset + wcookie_offset; + asect->alignment_power = 2; + } } offset += coreseg.c_size; |