From owner-freebsd-bugs@FreeBSD.ORG Fri Jul 8 07:40:01 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E6F231065675 for ; Fri, 8 Jul 2011 07:40:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id B9CBF8FC26 for ; Fri, 8 Jul 2011 07:40:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p687e14n095748 for ; Fri, 8 Jul 2011 07:40:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p687e1GP095747; Fri, 8 Jul 2011 07:40:01 GMT (envelope-from gnats) Resent-Date: Fri, 8 Jul 2011 07:40:01 GMT Resent-Message-Id: <201107080740.p687e1GP095747@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Peter Jeremy Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D4C911065678 for ; Fri, 8 Jul 2011 07:32:29 +0000 (UTC) (envelope-from peterjeremy@acm.org) Received: from mail10.syd.optusnet.com.au (mail10.syd.optusnet.com.au [211.29.132.191]) by mx1.freebsd.org (Postfix) with ESMTP id 564CE8FC12 for ; Fri, 8 Jul 2011 07:32:28 +0000 (UTC) Received: from server.vk2pj.dyndns.org (c220-239-116-103.belrs4.nsw.optusnet.com.au [220.239.116.103]) by mail10.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id p687WPCB005324 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 8 Jul 2011 17:32:26 +1000 Received: from server.vk2pj.dyndns.org (localhost.vk2pj.dyndns.org [127.0.0.1]) by server.vk2pj.dyndns.org (8.14.4/8.14.4) with ESMTP id p687WN6u090827; Fri, 8 Jul 2011 17:32:23 +1000 (EST) (envelope-from peter@server.vk2pj.dyndns.org) Received: (from peter@localhost) by server.vk2pj.dyndns.org (8.14.4/8.14.4/Submit) id p687WNRw090826; Fri, 8 Jul 2011 17:32:23 +1000 (EST) (envelope-from peter) Message-Id: <201107080732.p687WNRw090826@server.vk2pj.dyndns.org> Date: Fri, 8 Jul 2011 17:32:23 +1000 (EST) From: Peter Jeremy To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: gnu/158719: [patch] Fix kgdb on sparc64 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Peter Jeremy List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Jul 2011 07:40:02 -0000 >Number: 158719 >Category: gnu >Synopsis: [patch] Fix kgdb on sparc64 >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Jul 08 07:40:01 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Peter Jeremy >Release: FreeBSD 8.2-STABLE amd64 >Organization: n/a >Environment: System: FreeBSD sb1500.vk2pj.dyndns.org 9.0-CURRENT FreeBSD 9.0-CURRENT #1: Wed\ Jun 22 17:53:58 EST 2011 root@sb1500.vk2pj.dyndns.org:/usr/obj/usr/src/sys/sb1\ 500 sparc64 Patch also tested on: FreeBSD server.vk2pj.dyndns.org 8.2-STABLE FreeBSD 8.2-STABLE #11: Fri Apr 22 11:55:58 EST 2011 root@server.vk2pj.dyndns.org:/var/obj/usr/src/sys/server amd64 >Description: kgdb does not work on sparc64. Following some investigation, the problem is that the sparc64 kgdb has two "core_stratum" target_ops structures active - the default "Local core dump file" defined in contrib/gdb/gdb/corelow.c and the FreeBSD-specific "kernel core dump file" defined in gnu/usr.bin/gdb/kgdb/trgt.c On at least i386 and amd64, the "Local core dump file" is inhibited by statically defining coreops_suppress_target as non-zero in gnu/usr.bin/gdb/libgdb/fbsd-threads.c (this file defines "FreeBSD multithreaded core dump file" target_ops which is itself inhibited by fbsdcoreops_suppress_target in gnu/usr.bin/gdb/kgdb/trgt.c). sparc64 does not include fbsd-threads.c and therefore the "Local core dump file" is not inhibited. As a result, contrib/gdb/gdb/target.c::find_core_target() finds multiple targets and returns NULL. Note that it's possible that similar problems exist on other architectures. >How-To-Repeat: Run "kgdb /boot/kernel/kernel /dev/mem" as root on sparc64. It will report "GDB can't read core files on this machine." >Fix: It's not possible to directly inhibit the "Local core dump file" by defining coreops_suppress_target in trgt.c because that results in a duplicate definition on (eg) amd64. Likewise a weak DATA symbol does not override a strong BSS symbol. The following patch therefore defines coreops_suppress_target in a file that is only active on sparc64 kgdb. Index: gnu/usr.bin/gdb/kgdb/trgt_sparc64.c =================================================================== RCS file: /usr/ncvs/src/gnu/usr.bin/gdb/kgdb/trgt_sparc64.c,v retrieving revision 1.8 diff -u -r1.8 trgt_sparc64.c --- gnu/usr.bin/gdb/kgdb/trgt_sparc64.c 1 May 2008 20:36:48 -0000 1.8 +++ gnu/usr.bin/gdb/kgdb/trgt_sparc64.c 8 Jul 2011 06:17:55 -0000 @@ -197,3 +197,9 @@ /* printf("%s: %lx =%s\n", __func__, pc, pname); */ return (NULL); } +/* +** Disable the default "Local core dump file" target. This is done in +** libgdb/fbsd-threads.c for most targets but that file is not used on +** sparc64 +*/ +int coreops_suppress_target = 1; >Release-Note: >Audit-Trail: >Unformatted: