From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 715 invoked by alias); 10 Nov 2009 21:07:15 -0000 Received: (qmail 706 invoked by uid 22791); 10 Nov 2009 21:07:14 -0000 X-SWARE-Spam-Status: No, hits=-1.6 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 10 Nov 2009 21:07:06 +0000 Received: (qmail 21889 invoked from network); 10 Nov 2009 21:07:04 -0000 Received: from unknown (HELO digraph.polyomino.org.uk) (joseph@127.0.0.2) by mail.codesourcery.com with ESMTPA; 10 Nov 2009 21:07:04 -0000 Received: from jsm28 (helo=localhost) by digraph.polyomino.org.uk with local-esmtp (Exim 4.69) (envelope-from ) id 1N7xvb-0001xp-1g for gdb-patches@sourceware.org; Tue, 10 Nov 2009 21:07:03 +0000 Date: Tue, 10 Nov 2009 21:07:00 -0000 From: "Joseph S. Myers" To: gdb-patches@sourceware.org Subject: Fix solib-svr4.c:enable_break fallback for powerpc64-linux function descriptors Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-11/txt/msg00230.txt.bz2 The fallback code at the end of solib-svr4.c:enable_break, looking through lists of symbol names to find one at which to set a breakpoint, failed to call gdbarch_convert_from_func_ptr_addr on the resulting addresses, so causing breakpoints on 64-bit Power GNU/Linux to be set on the function descriptors in the .opd section instead of on the actual code, if for any reason the previous code to find the dynamic linker breakpoint function failed and so this fallback code was reached. This patch fixes this in the obvious way, adding the missing calls. Tested with cross to powerpc64-linux-gnu. OK to commit? 2009-11-10 Joseph Myers * solib-svr4.c (enable_break): Call gdbarch_convert_from_func_ptr_addr on results of looking up fallback symbol names. Index: gdb/solib-svr4.c =================================================================== RCS file: /cvs/src/src/gdb/solib-svr4.c,v retrieving revision 1.106 diff -u -p -r1.106 solib-svr4.c --- gdb/solib-svr4.c 19 Oct 2009 09:51:42 -0000 1.106 +++ gdb/solib-svr4.c 10 Nov 2009 21:04:42 -0000 @@ -1436,8 +1436,11 @@ enable_break (struct svr4_info *info) msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile); if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0)) { - create_solib_event_breakpoint (target_gdbarch, - SYMBOL_VALUE_ADDRESS (msymbol)); + sym_addr = SYMBOL_VALUE_ADDRESS (msymbol); + sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch, + sym_addr, + ¤t_target); + create_solib_event_breakpoint (target_gdbarch, sym_addr); return 1; } } @@ -1447,8 +1450,11 @@ enable_break (struct svr4_info *info) msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile); if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0)) { - create_solib_event_breakpoint (target_gdbarch, - SYMBOL_VALUE_ADDRESS (msymbol)); + sym_addr = SYMBOL_VALUE_ADDRESS (msymbol); + sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch, + sym_addr, + ¤t_target); + create_solib_event_breakpoint (target_gdbarch, sym_addr); return 1; } } -- Joseph S. Myers joseph@codesourcery.com