From 24d18d3088761bd75b7b2aec6d2861e7cd85a2dc Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Mon, 5 Apr 2004 14:43:36 +0000 Subject: [PATCH] * netbsd-core.c (CORE_WCOOKIE_OFFSET): New define. (netbsd_core_file_p): Create a .wcookie section for OpenBSD/sparc. --- bfd/ChangeLog | 5 +++++ bfd/netbsd-core.c | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6d2b7fc61bc..a6ba2a3d13d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2004-04-05 Mark Kettenis + + * 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 * elf32-cr16c.c (elf32_cr16c_relocate_section): Use diff --git a/bfd/netbsd-core.c b/bfd/netbsd-core.c index 250c6f4f1d5..fca801347da 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; } -- 2.30.2