diff options
author | Nick Clifton <nickc@redhat.com> | 2005-04-05 08:01:18 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2005-04-05 08:01:18 +0000 |
commit | 8c1017202f6a790df6b0096f77ab57331d28a804 (patch) | |
tree | 1527f56999aa5f72e83df30be708941adc247bbd /bfd/netbsd-core.c | |
parent | 429cc0ae05d571e7c66503af308948c5d6d4d77b (diff) | |
download | binutils-gdb-8c1017202f6a790df6b0096f77ab57331d28a804.tar.gz |
Provide .wcookie section for OpenBSD/sparc64.
Diffstat (limited to 'bfd/netbsd-core.c')
-rw-r--r-- | bfd/netbsd-core.c | 54 |
1 files changed, 37 insertions, 17 deletions
diff --git a/bfd/netbsd-core.c b/bfd/netbsd-core.c index f02192800b7..8f12c9558b4 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; |