From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10102 invoked by alias); 5 Jun 2006 15:16:09 -0000 Received: (qmail 10089 invoked by uid 22791); 5 Jun 2006 15:16:07 -0000 X-Spam-Check-By: sourceware.org Received: from intranet.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.6) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 05 Jun 2006 15:15:44 +0000 Received: (qmail 15246 invoked from network); 5 Jun 2006 15:15:42 -0000 Received: from unknown (HELO ?192.168.189.145?) (nathan@127.0.0.2) by mail.codesourcery.com with ESMTPA; 5 Jun 2006 15:15:42 -0000 Message-ID: <44844A58.6090200@codesourcery.com> Date: Mon, 05 Jun 2006 15:16:00 -0000 From: Nathan Sidwell User-Agent: Mozilla Thunderbird 1.0.8 (X11/20060502) MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: [m68k] Correct dwarf register numbering Content-Type: multipart/mixed; boundary="------------040407080905050301050307" Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-06/txt/msg00036.txt.bz2 This is a multi-part message in MIME format. --------------040407080905050301050307 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 523 The m68k port was using a one-to-one mapping between dwarf register numbers and gdb register numbers. That's incorrect as the floating point registers have dwarf numbers 16..23 but gdb register numbers 18..25. Furthermore, GCC indicates the return column is register 25, which maps onto the last fp register. This patch adds a mapping function. ok? nathan -- Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery nathan@codesourcery.com :: http://www.planetfall.pwp.blueyonder.co.uk --------------040407080905050301050307 Content-Type: text/x-patch; name="dwarf-reg.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="dwarf-reg.patch" Content-length: 2311 2006-06-05 Nathan Sidwell * gdb/m68k-tdep.c (m68k_dwarf_reg_to_regnum): New. (m68k_gdbarch_init): Set it for dwarf & dwarf2 reg number conversion. Use M68K_NUM_REGS for number of regs. Index: gdb/m68k-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/m68k-tdep.c,v retrieving revision 1.105.2.3 diff -c -3 -p -r1.105.2.3 m68k-tdep.c *** gdb/m68k-tdep.c 5 Jun 2006 14:51:35 -0000 1.105.2.3 --- gdb/m68k-tdep.c 5 Jun 2006 14:55:01 -0000 *************** m68k_push_dummy_call (struct gdbarch *gd *** 555,560 **** --- 557,584 ---- frame's CFA. */ return sp + 8; } + + /* Convert a dwarf or dwarf2 regnumber to a GDB regnum */ + + static int + m68k_dwarf_reg_to_regnum (int num) + { + if (num < 8) + /* d0..7 */ + return (num - 0) + M68K_D0_REGNUM; + else if (num < 16) + /* a0..7 */ + return (num - 8) + M68K_A0_REGNUM; + else if (num < 24) + /* fp0..7 */ + return (num - 16) + M68K_FP0_REGNUM; + else if (num == 25) + /* pc */ + return M68K_PC_REGNUM; + else + return NUM_REGS + NUM_PSEUDO_REGS; + } + struct m68k_frame_cache { *************** m68k_gdbarch_init (struct gdbarch_info i *** 1240,1249 **** set_gdbarch_decr_pc_after_break (gdbarch, 2); set_gdbarch_frame_args_skip (gdbarch, 8); set_gdbarch_register_type (gdbarch, m68k_register_type); set_gdbarch_register_name (gdbarch, m68k_register_name); ! set_gdbarch_num_regs (gdbarch, 29); set_gdbarch_register_bytes_ok (gdbarch, m68k_register_bytes_ok); set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM); set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM); --- 1264,1275 ---- set_gdbarch_decr_pc_after_break (gdbarch, 2); set_gdbarch_frame_args_skip (gdbarch, 8); + set_gdbarch_dwarf_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum); + set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum); set_gdbarch_register_type (gdbarch, m68k_register_type); set_gdbarch_register_name (gdbarch, m68k_register_name); ! set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS); set_gdbarch_register_bytes_ok (gdbarch, m68k_register_bytes_ok); set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM); set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM); --------------040407080905050301050307--