* netbsd-core.c (CORE_WCOOKIE_OFFSET): New define.
authorMark Kettenis <kettenis@gnu.org>
Mon, 5 Apr 2004 14:43:36 +0000 (14:43 +0000)
committerMark Kettenis <kettenis@gnu.org>
Mon, 5 Apr 2004 14:43:36 +0000 (14:43 +0000)
(netbsd_core_file_p): Create a .wcookie section for OpenBSD/sparc.

bfd/ChangeLog
bfd/netbsd-core.c

index 6d2b7fc61bcfef09cc7b8dad8494768010987861..a6ba2a3d13dd3cff6fdb1cfb61bbe281e7fa5b95 100644 (file)
@@ -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
index 250c6f4f1d5cad70942eac41de4acfc337b5ec9b..fca801347da11a84f4179061ee3e8a3480cbe9a5 100644 (file)
    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;
     }