aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2004-04-05 14:43:36 +0000
committerMark Kettenis <kettenis@gnu.org>2004-04-05 14:43:36 +0000
commit24d18d3088761bd75b7b2aec6d2861e7cd85a2dc (patch)
tree8da5e21d3db69c535c24d0c30cce8fe5bbb3f056
parent3c7012f597b71cb39291e736f47e9d6ad4629238 (diff)
downloadgdb-24d18d3088761bd75b7b2aec6d2861e7cd85a2dc.zip
gdb-24d18d3088761bd75b7b2aec6d2861e7cd85a2dc.tar.gz
gdb-24d18d3088761bd75b7b2aec6d2861e7cd85a2dc.tar.bz2
* netbsd-core.c (CORE_WCOOKIE_OFFSET): New define.
(netbsd_core_file_p): Create a .wcookie section for OpenBSD/sparc.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/netbsd-core.c23
2 files changed, 28 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6d2b7fc..a6ba2a3 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2004-04-05 Mark Kettenis <kettenis@gnu.org>
+
+ * netbsd-core.c (CORE_WCOOKIE_OFFSET): New define.
+ (netbsd_core_file_p): Create a .wcookie section for OpenBSD/sparc.
+
2004-04-02 H.J. Lu <hongjiu.lu@intel.com>
* elf32-cr16c.c (elf32_cr16c_relocate_section): Use
diff --git a/bfd/netbsd-core.c b/bfd/netbsd-core.c
index 250c6f4..fca8013 100644
--- a/bfd/netbsd-core.c
+++ b/bfd/netbsd-core.c
@@ -34,6 +34,10 @@
NetBSD/sparc64 overlaps with M_MIPS1. */
#define M_SPARC64_OPENBSD M_MIPS1
+/* Offset of StackGhost cookie within `struct md_coredump' on
+ OpenBSD/sparc. */
+#define CORE_WCOOKIE_OFFSET 344
+
struct netbsd_core_struct
{
struct core core;
@@ -140,6 +144,25 @@ netbsd_core_file_p (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)
+ {
+ /* Truncate the .reg section. */
+ asect->_raw_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->_raw_size = 4;
+ asect->vma = 0;
+ asect->filepos = offset + CORE_WCOOKIE_OFFSET;
+ asect->alignment_power = 2;
+ }
+
offset += coreseg.c_size;
}